📄 keyboard.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define port P1
uchar code encode[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};//0~9
uchar keyvalue,ledbuff4[4];
uchar cnter4;
bit keyflag;
void delay500(uchar n)
{
uchar i;
for( ; --n ; )
for( i=80 ; i!=0 ; --i );
}
void keyscan()
{
uchar a,b,c;
keyflag = 0;
port = 0xff;
port = 0x0f;
if( port==0x0f ) return;
delay500( 20 );
if( port==0x0f ) return ;
keyflag = 1;
a = port;
port = 0xf0;
_nop_();
b = port;
c = a^b;
switch( c )
{
case 0x77: keyvalue=0; break; //对按键附值//
case 0x7b: keyvalue=1; break;
case 0x7d: keyvalue=2; break;
case 0x7e: keyvalue=3; break;
case 0xb7: keyvalue=4; break;
case 0xbb: keyvalue=5; break;
case 0xbd: keyvalue=6; break;
case 0xbe: keyvalue=7; break;
case 0xd7: keyvalue=8; break;
case 0xdb: keyvalue=9; break;
case 0xdd: keyvalue=10;break;
case 0xde: keyvalue=11;break;
case 0xe7: keyvalue=12;break;
case 0xeb: keyvalue=13;break;
case 0xed: keyvalue=14;break;
case 0xee: keyvalue=15;break;
}
}
void display4()
{
uchar t=cnter4;
P2 = 0xff;
_nop_() , _nop_() , _nop_();
t = t%4;
if( t==0 )
P2 = encode[ledbuff4[0]] , P0 = 0xf7;
else if( t==1 )
P2 = encode[ledbuff4[1]] , P0 = 0xfb;
else if( t==2 )
P2 = encode[ledbuff4[2]] , P0 = 0xfd;
else if( t==3 )
P2 = encode[ledbuff4[3]] , P0 = 0xfe;
else
P2 = 0xfe , P0 = 0xf0;
}
void initbuff4()
{
ledbuff4[3] = 10 , ledbuff4[2] = 10;
ledbuff4[0] = keyvalue%10;
if( keyvalue>=10 )
ledbuff4[1] = 1;
else
ledbuff4[1] = 0x0a;
}
int main()
{
SP = 0x60 , EA = 0;
cnter4 = 0;
TH0 = (65536-400)/256;
TL0 = (65536-400)%256;
TMOD = 0x01 , TCON = 0x10;
IE = 0x82;
while( 1 )
{
keyscan();
initbuff4();
delay500(200);
}
}
void t0isr()using 2 interrupt 1
{
TR0 = 1;
TH0 = (65536-2500)/256;
TL0 = (65536-2500)%256;
cnter4 = (cnter4+1)&0x03;//0~128
display4();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -