|
proteus仿真:
keil代码:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={//共阳数码管段码"0~f-."
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
uchar KeyValue=16; //键值变量
bit sign=0; //位变量
uint count=0; //计数变量
void keyscan() //按键扫描程序
{
P1=0xf0; //赋值P3 1111 0000
if(P1!=0xf0) //检测有按键按下
{
if((++count>=250)&&(sign==0))//消抖计数100~1000,按键自锁
{
sign=1; //按键自锁标志置1
switch(P1)
{
case(0Xe0):KeyValue = 0;break;
case(0Xd0):KeyValue = 1;break;
case(0Xb0):KeyValue = 2;break;
case(0X70):KeyValue = 3;break;
}
P1=0x0f; //赋值P3 0000 1111
switch(P1)
{
case(0X0e):KeyValue+= 0;break;
case(0X0d):KeyValue+= 4;break;
case(0X0b):KeyValue+= 8;break;
case(0X07):KeyValue+=12;break;
}
}
}
else //键抬起
{
sign=0; //按键自锁标志清0
count=0; //消抖计数清0
}
}
void main() //主函数
{
while(1)
{
keyscan(); //按键扫描程序
P3=table[KeyValue]; //数码管显示键值0~F
}
}
|
|