📄 main.c
字号:
#include <reg51.h>
#include <absacc.h>
//code ledyang[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
// 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0~9,A~F
unsigned char code seg_7[]={//定义数码管字型数据
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //0123456789
0x77,0x7C,0x39,0x5E,0x79,0x71, //AbCdEF
0x40, //-
0x00 //空白
};
unsigned char code choose[]={0xfe,0xfd,0xfb,0xf7}; //位选
unsigned char data counter[]={0,0,0,0};
unsigned char data buffer[]={0,0,0,0};
unsigned char k, c=0;
unsigned int num=0,KT=0;
void delay(unsigned char m)
{
unsigned char i,j;
for(i=0;i<m;i++)
for(j=0;j<120;j++);
}
void getch()
{
unsigned char X,Y,Z,cc;
P2=0xff;
P2=0x0f; //行置1
if(P2!=0x0f) //可能有键按下
{
delay(20);
if(P2!=0x0f) //确实有键按下
{
X=P2; //保存P2的值
P2=0xf0; //列置1
Y=P2;
Z=X|Y; //取键盘值
c++; //标志位
//if(c==17) c=0;
if(c==17) c=0;
switch(Z)
{
case 0x7e: k=0;break;
case 0x7d: k=1;break;
case 0x7b: k=2;break;
case 0x77: k=3;break;
case 0xbe: k=4;break;
case 0xbd: k=5;break;
case 0xbb: k=6;break;
case 0xb7: k=7;break;
case 0xde: k=8;break;
case 0xdd: k=9;break;
case 0xdb: KT=10;break;
case 0xd7: KT=11;break;
case 0xee: KT=12;break;
case 0xed: KT=13;break;
case 0xeb: KT=14;break;
case 0xe7: KT=15;break;
}
for(cc=c;cc-1>0;cc--)
counter[cc-1]=counter[cc-2];
counter[0]=k;
while(P2!=0xf0);//检测案件是否弹起
}
}
}
void display_number()
{
unsigned char i;
for(i=0;i<4;i++)
{
P0=seg_7[counter[i]];
P1=choose[i];
delay(1);
P1=0xff;
}
}
void display()
{
unsigned int i;
num=counter[0]*1000+counter[1]*100+counter[2]*10+counter[3];
buffer[0]=num/1000; buffer[1]=num%1000/100;
buffer[2]=num%100/10; buffer[3]=num%10;
for(i=0;i<4;i++)
{
num--;
P0=seg_7[buffer[i]];
P1=choose[i];
delay(1);
P1=0xff;
}
}
void main(void)
{
while(1)
{
unsigned char c=0;
P2=0xff;
getch();
display_number();
if(KT>=10&&KT<=15)
goto loop;
}
loop:
while(1)
{
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -