51单片机入门
Posted 杠不过十六进制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机入门相关的知识,希望对你有一定的参考价值。
数码管显示,定时器中断;键盘检测:
1.数码管:分共阳极和共阴极数码管。我的实验板是共阴极,多位数码管的公共端叫做“位选线”,连接在一起的段线叫做“段选线”。位选是独立控制的,而段选是连接在一起的。段选数据由P0口发送,位选由P2口的2.3.4控制。(消影用P0=0x00)
2.中断:为使单片机具有对外部或内部随机事件发生的时间实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部时间的能力。51单片机内部共有5个中断源,外部中断0、1;定时器中断0、1;串行口中断。
1)中断级别:INT0>T0>INT1>T1>TI/RI;
2)设置两个与中断有关的寄存器:中断允许寄存器IE和中断优先级寄存器IP。
3)定时器/计数器控制寄存器TCON;定时器/计数器工作方式寄存器TMOD。
4)中断服务程序的写法:
void 函数名()interrupt 中断号 using 工作组
{
中断服务程序内容
}
5)实例:
#include<reg52.h>
unsigned char num=0;
void main()
{
//initial timer
TMOD=0x01;
TH0=(65535-49539)/256;
TL0=(65535-49539)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(num==20)
{
num=0;
P2=~P2;
}
}
}
//*********interrupt server
void time() interrupt 1
{
TH0=(65535-49539)/256;
TL0=(65535-49539)%256;
num++;
}
3.独立键盘的检测:扫描法(去抖:延时10ms)
4.矩阵键盘的检测:行列扫描
实例:
#include<reg52.h>
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay10ms();
void keydown();
uchar KeyValue;
uchar code table[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
LSA=0;
LSB=0;
LSC=0;
while(1)
{
keydown();
P0=table[KeyValue];
}
}
//**************keydown()
void keydown()
{
P1=0x0f;
if(P1!=0x0f)
{
delay10ms();
if(P1!=0x0f)
{
//test colume
P1=0x0f;
switch(P1)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//test row
P1=0xf0;
switch(P1)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while(!P1);
}
}
}
//**************delay10ms()
void delay10ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=110;j>0;j--);
}
以上是关于51单片机入门的主要内容,如果未能解决你的问题,请参考以下文章
入门单片机选择51还是stm32?入门单片机有哪些好的教学视频?