📄 4x4.c
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar ledbit=0 ;//记录按键次数
uchar data leddata[8] ;//数组用于记录输入的数
uchar idata regment[8]={0,0,0,0,0,0,0,0}; //缓冲区数组
uchar code keytable[16]={0xEE,0xED,0xEB,0xE7, //0,1,2,3
0xDE,0xDD,0xDB,0xD7, //4,5,6,7
0xBE,0xBD,0xBB,0xB7, //8,9,.,H
0x7E,0x7D,0x7B,0x77}; //-,C,A,E (按键码表)
/*uchar code keytable[16]={0x7D,0xD7,0xBE,0xBD, //C,7,8,9
0x7B,0xDE,0xDD,0xDB, //A,4,5,6
0x77,0xED,0xEB,0xE7, //E,1,2,3
0x7E,0xEE,0xBB,0xB7}; //-,0,.,H (按键码表) */
/*uchar code ledtable[16]={0xed,0x81,0xf4,0xb5, //0,1,2,3
0x99,0x3d,0x7d,0x85, //4,5,6,7
0xfd,0xbd,0x02,0xd9, //8,9,.,h
0x10,0x6c,0xdd,0x7c}; //-,c,a,e (数码管显示码表)*/
uchar code ledtable[16]={0xbd,0x7d,0xb5,0xd9, //9,6,3,h
0xfd,0x3d,0xf4,0x02, //8,5,2,.
0x85,0x99,0x81,0xed, //7,4,1,0
0x6c,0xdd,0x7c,0x10}; //c,a,e,- (数码管显示码表)
//廷时函数
void delay()
{
uchar i;
for(i=0;i<=220;i++){;}
}
void main()
{
uchar input1,input2,dis_buf,i,j,k;
while(1)
{
P1=0x0f ;//扫描P1口的低位
if(P1!=0x0f)
{
input1=P1;
P1=0xf0 ;//扫描P1口的高位
input2=P1;
dis_buf=input1+input2;//得到组合后的键码
for(i=0;i<16;i++)
{
if(dis_buf==keytable[i])//查表找到对应的按键值
{
if(ledbit==8) ledbit=0;//输入超过8位则位数回零
leddata[ledbit]=ledtable[i];//通过按键值找到数码管显示码,并将显示码保存在数组中
ledbit++ ;
if(dis_buf==0x7E)
{sum();
for(j=0;j<8;j++)
{
regment[i]=ledtable[i];
}
for(j=0;k<8;j++)
{
ledtable[i]=0x00;
}
P2=0x00;
}
break ;
}
}
P1=0xf0 ;
while(P1!=0xf0) ;//等待按键松开
}
//显示部份
for(i=0;i<ledbit;i++)
{
P2=_cror_(0x7f,i);//从P2.7开始循环左移
P0=leddata[ledbit-i-1];
delay();
}
P0=0x00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -