新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C51单片机键盘检测原理以及实现

C51单片机键盘检测原理以及实现

作者:时间:2012-08-04来源:网络收藏

首先,在做软件之前确定硬件。明确键盘类型:
弹性按键:按下时闭合,松手后自动断开。如电脑键盘

自锁式按键:按下时闭合,且自动锁住。一边用于开关

在I/O口检测触电电压时应该考虑按键抖动问题,一般按键抖动为5~10ms左右,具体与其机械特性有关,所以要加检测抖动环节,可以用软件或者去抖动芯片硬件处理,当然通常用延时方法处理。
注意正确连接引脚。

下面是一个简单的4按键独立键盘程序,在51hei开发板的数码管上操作。
完整的源代码下载 http://www.51hei.com/f/jpdd.rar
数值为0~59变化,开始显示00
按key1数值加1,按key2数值减1,按key3数值归0,按key4数值每秒加1。

#include reg52.h>
#define uchar unsigned char
#define unit unsigned int
sbit key1=P3^2;
sbit key1=P3^4;
sbit key1=P3^6;
sbit key1=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06.0x5b,0x4f,
0x66,0x6d,0x7d,0x07
0x7f,0x6f,0x77,0x7c
0x39,0x5e,0x79,0x71};
void delayms(unit);
uchar numt0,unm;
void display(uchar numdis) //定义一个显示的函数,分个位十位,用来显示
{
uchar shi,ge; //然后用轮流显示发,利用人眼图像残留分别显示
shi=numdis/10; //上面的numdis表示num这个显示的数
ge=numdis%10; //numdis由下面主函数num赋值

dula=1;
P0=table[shi];
dula=0;

P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);

dula=1;
P0=table[ge];
dula=0;

P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
}
void delayms(unit xms) //自定义延迟环节
{
unit i,j;
for(i=xms,i>0,i--);
for(j=110,j>0,j--);
}
void init() //初始化函数,保证程序正常运行
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-458720%256;
EA=1;
ET=0;
}


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭