课程设计:矩阵键盘扫描显示(c51反转法)
//矩阵键盘扫描程序
//采用翻转识别法(相对代码少一些)
#include
#define uchar unsigned char
#define uint unsigned int
uchar key=0;
//共阳数码管编码如下(0-15)
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//函数声明
void display(uchar Duan_value);
void delay(uchar t);
void key_scan();
void main()
{
while(1)
{
display(key);//显示按键值
key_scan();//按键扫描
}
}
//延时函数
void delay(uchar t)
{
uchar x,y;
for(x=t;t>0;t--)
for(y=111;y>0;y--);
}
//数码管扫描函数
void display(uchar value)
{
P2=table[value];
}
//按键扫描函数
void key_scan()
{
uchar m0,m1;
uchar temp;
P1=0xf0;//这样设置是为了能使低四位将高四位拉低,释放时自动拉高高四位
temp=P1;
if(temp!=0xf0)
{
delay(10);//延时,去除抖动
if(temp!=0xf0)
{
m0=temp;//获得按键的列号
P1=0x0f;
temp=P1;
if(temp!=0x0f)
{
m1=temp;//获得按键的行号号
temp=m0|m1;//获得最终的号
}
switch(temp)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;
case 0xed:key=4;break;
case 0xdd:key=5;break;
case 0xbd:key=6;break;
case 0x7d:key=7;break;
case 0xeb:key=8;break;
case 0xdb:key=9;break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
}
do{
temp=P1;//消除按起抖动
temp&=0X0f;
}while(temp!=0x0f);
}
}
}
课程设计矩阵键盘扫描显示c51反转 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)