|
本帖最后由 wulin 于 2018-11-3 11:44 編輯
給你改一下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duanxuan=P2^6;
sbit weixuan=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=table[num];
duanxuan=1;
duanxuan=0;
}
void yxdkeyscan() //按鍵掃描程序
{
static bit sign=0; //按鍵自鎖標(biāo)志
uchar temp=0,key; //臨時(shí)變量
P3=0xf0; //賦值P3 1111 0000
if(P3!=0xf0) //檢測(cè)有按鍵按下
{
delay(10);
if((P3!=0xf0)&&(sign==0))//按鍵自鎖
{
sign=1; //按鍵自鎖標(biāo)志置1
temp=P3; //保存P3值xxxx 0000,x為0或1
temp|=0x0f; //保存temp按位或0x0f值xxxx 1111
P3=temp; //賦值P3 xxxx 1111
temp=P3; //保存P3值xxxx xxxx
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;
}
display(key);
}
}
else sign=0; //按鍵抬起,解除自鎖
}
void main()
{
P0=0x00;
duanxuan=1;
duanxuan=0;
P0=0xc0;
weixuan=1;
weixuan=0;
while(1)
{
yxdkeyscan();
}
}
|
|