📄 ceshi.c
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void dlms(void);
uchar kbscan(void);
void delay1ms( uint x)
{
uchar j;
while(x--)
{
for(j=0;j<125;j++)
{;}
}
}
void dlms(void)
{
uchar i;
for(i=200;i>0;i--)
{ }
}
uchar kbscan(void)
{
uchar sccode,recode;
P0=0xf0; //p0.0---p0.3发全0,p0.4--p0.7输入
if((P0&0xf0)!=0xf0) //如果p0口高四位不全为1,有键按下
{ dlms(); //延时去抖动
if((P0&0xf0)!=0xf0) //重读输入值
{ sccode=0xfe; //最底位置0
while((sccode&0x10)!=0) //不到最后一行循环
{ P0=sccode; //p0口输出扫描码
if((P0&0xf0)!=0xf0) //如果p0.4--p0.7不全为1,该行有键按下
{ recode=P0&0xf0;
sccode=sccode&0x0f; //保留p0口高四位输入值,低四位变为全1,作为列值
return(sccode+recode);
}
else
sccode=(sccode<<1)|0x01; //如该行无键按下,查下一行,行扫描值左移一位
}
}
}
return(0);
}
main()
{
uchar code tab[15]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 };
uchar i;
uchar key;
uchar l;
while(1)
{ P3=0x00;
key=kbscan();
if(key!=0)
l=key;
dlms();
// delay1ms(1);
for(i=0;i<15;i++)
{
if(l==0xee)
P1=0x3f;
else if(l==0xde)
P1=0x06;
else if(l==0xbe)
P1=0x5b;
else if(l==0x7e)
P1=0x4f;
else if(l==0xed)
P1=0x66;
else if(l==0xdd)
P1=0x6d;
else if(l==0xbd)
P1=0x7d;
else if(l==0x7d)
P1=0x07;
else if(l==0xeb)
P1=0x7f;
else if(l==0xdb)
P1=0x6f;
else
P1=0xff;
//P1=tab[i];
//P1=0x3f;
delay1ms(1);
P3+=1;
//delay1ms(1);
}
}
}
//0xee 0xde 0xbe 0x7e
//0xed 0xdd 0xbd 0x7d
//0xeb 0xdb 0xbb 0x7b
//0xe7 0xd7 0xb7 0x77
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -