📄 key_show.c
字号:
/*键盘计算器显示程序
说明:P1口键盘输入 行列扫描
p2数码管 数据口 p3.0~3 数码管片选 p3.0最低位
设计 陈仲库
创达科技 2007年11月29日
技术支持 kuzi00@163.com qq:86828048
*/
#include <reg52.h>
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
char LED[17]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x80};
int tmp1=0,tmp2=0,rst;
char dat[4]={0},flag=0,flg=0;//dat[0]最低位 个位 flag标志位
void display(int n);
void delay(int m)//延时程序
{
while(--m);
}
void disp(char key_dat)
{
char i;
if(flag)//标志判断 if flag=1 说明有按下
for(i=3;i>=1;i--)
{
dat[i]=dat[i-1];
}
dat[0]=key_dat;
P3=0X01;
for(i=0;i<4;i++)
{
P2=~LED[dat[i]];delay(50);
P3=P3<<1;
}
flag=0;//标志判断 if flag=0 说明mei有按下
}
void clr(void)
{
char i;
for(i=0;i<4;i++)dat[i]=0;
disp(dat[0]);
}
void tmp(char f)
{
if(flag)tmp1=dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
flg=f;//1 add ;2 sub ;3mul ;4 div
flag=0;
clr();
}
void display(int n)
{
char i;
dat[3]=n/1000;
dat[2]=(n/100)%10;
dat[1]=(n/10)%10;
dat[0]=n%10;delay(20);
P3=0X01;
for(i=0;i<4;i++)
{
P2=~LED[dat[i]];delay(20);
P3=P3<<1;
}
}
void result(void)
{
if(flag)tmp2=dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
switch(flg)
{
case 0: tmp2=tmp1;break;
case 1: rst=tmp1+tmp2;break;
case 2: rst=tmp1-tmp2;break;
case 3: rst=tmp1*tmp2;break;
case 4: rst=tmp1/tmp2;break;
}
flg=0;
flag=0;//标志判断 if flag=0 说明mei有按下
display(rst);
}
void keyscan(void)
{
P1=0xef;
if(!p13){flag=1;while(!p13)clr();}
if(!p12){flag=1;while(!p12)disp(1);}
if(!p11){flag=1;while(!p11)disp(4);}
if(!p10){flag=1;while(!p10)disp(7);}
P1=0xdf;
if(!p13){flag=1;while(!p13)disp(0);}
if(!p12){flag=1;while(!p12)disp(2);}
if(!p11){flag=1;while(!p11)disp(5);}
if(!p10){flag=1;while(!p10)disp(8);}
P1=0xbf;
if(!p13){flag=1;while(!p13)result();}
if(!p12){flag=1;while(!p12)disp(3);}
if(!p11){flag=1;while(!p11)disp(6);}
if(!p10){flag=1;while(!p10)disp(9);}
P1=0x7f;
if(!p13){flag=1;while(!p13)tmp(1);}
if(!p12){flag=1;while(!p12)tmp(2);}
if(!p11){flag=1;while(!p11)tmp(3);}
if(!p10){flag=1;while(!p10)tmp(4);}
disp(dat[0]);//如果没有按键 就还现实 原来的数值
}
main()
{
while(1)
{
keyscan();//键盘扫描调用
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -