📄 testkey.c
字号:
#include<reg51.h>
#include<math.h>
static const char tab[16]={0x01,0x02,0x03,0x0c, /*键盘码00,01,02,03,*/
0x04,0x05,0x06,0x0d, /*键盘码04,05,06,07,*/
0x07,0x08,0x09,0x0e, /*键盘码08,09,0a,0b,*/
0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
unsigned char scan(void);
void delay1ms();
void main()
{
unsigned char data a1 ,a2 ,m,k,falg_dian; //k as a flag of num end
unsigned int i;
/* a1=4;
a2=a1;
a1=2;
//a1=0xf7;
a1=0x40;
m=0x00;
P0=0x22;
P0=0x33;
P0=0x44;
P0=0x55;
*/
i=0;
k=1;
falg_dian=0;
while(k!=0)
{
// a1=scan();
if(tab[a1]==0x0b)
k=0;
else if(tab[a1]>=0&& tab[a1]<=9)
{
if(falg_dian==0)
i=i*10+tab[a1]*100;
else
i=i*10+tab[a1];
i=100;
P0= ( unsigned char )(i%10);
P0= ( unsigned char )(0x10+((i/10)%10));
P0= ( unsigned char )(0x20+((i/100)%10));
P0= ( unsigned char )(0x30+((i/1000)%10));
}
else if(tab[a1]==10 )
falg_dian=1;
}
while(1);
}
unsigned char scan(void) /*扫描键盘副程式*/
{
unsigned char data a1,i; /*A1=0XF7列扫描初值,I行*/
unsigned char data m;
unsigned char FLAG0; /*设按键回应旗号为0,键盘扫描计数指标为0*/
unsigned char data ptr;
a1=0xf0 ;
FLAG0=0;
ptr=0;
m=0xf0 ;
while(m==0xf0)
{
P1=0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
for(i=0;i<4;i++)
delay1ms();
a1=0xf0;
m=0xf0 ;
while(m==0xf0)
{
P1=0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
a1=0xf7;
for(i=0;i<4;i++) /*键盘4个扫描列*/
{
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
switch(m&0xf0) /*取行的高4位元,侦测那一行被按*/
{
case 0x70: ptr=i*4; /*第一行被按否?是则扫描指标=列X4*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xb0: ptr=i*4+1; /*第二行被按否?是则扫描指标=列X4+1*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xd0: ptr=i*4+2; /*第三行被按否?是则扫描指标=列X4+2*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xe0: ptr=i*4+3; /*第四行被按否?是则扫描指标=列X4+3*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
default: break; /*跳出此循环*/
}
if(FLAG0==1)break; /*不为1,则扫描列右移,扫描下一列*/
a1=a1>>1|0x80;
/*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
}
a1=0xf0;
while(m!=0xf0)
{
P1 =0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
if(FLAG0==1)
return ptr;
else return 0x40;
} /*返回主程式*/
void delay1ms()
{
IE=00;
TMOD=0x10;
TH1=0xfc;
TL1=0x23;
TR1=1;
while(!TF1);
TF1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -