📄 text1.c
字号:
#include <reg52.h>
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
int LED[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int temp1=0,temp2=0,rst;
int dat[6]={0},flag=0,flg=0;//dat[0]最低位个位 flag按键标志位 flg运算符标志
void delay(int m)//延时程序
{
while(--m);
}
void disp(int key_dat)//按键数据显示函数
{
int i;
if(flag)//标志判断 如果 flag=1 说明有按下
for(i=5;i>=1;i--)//数组中数据向后移一位
{
dat[i]=dat[i-1];
}
dat[0]=key_dat;//第一位赋值按键值
P3=0X01;//p3.0口有效
for(i=0;i<6;i++)
{
P2=LED[dat[i]];//将数据传送到p2口
delay(50);
P3=P3<<1;//p3口右移一位
}
flag=0;//标志判断 如果 flag=0 说明没有按下
}
void clr(void)//清零函数
{
int i;
for(i=0;i<6;i++)
dat[i]=0;
disp(dat[0]);
}
void temp(int f)//运算符号(处理第一个数及运算符)
{
if(flag)
temp1=dat[5]*100000+dat[4]*10000+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)//LED显示
{
char i;
dat[5]=n/100000;//十万位
dat[4]=n/10000%10;//万位
dat[3]=n/1000%10;//千位
dat[2]=n/100%10;//百位
dat[1]=n/10%10;//十位
dat[0]=n%10;//个位
delay(20);
P3=0X01;
for(i=0;i<6;i++)
{
P2=LED[dat[i]];
delay(20);
P3=P3<<1;
}
}
void result(void)//运算结果函数
{
if(flag)
temp2=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
switch(flg)
{
case 0: temp2=temp1;break;
case 1: rst=temp1+temp2;break;
case 2: rst=temp1-temp2;break;
case 3: rst=temp1*temp2;break;
case 4: rst=temp1/temp2;break;
}
flg=0;
flag=0;//标志判断 if flag=0 说明没有键按下
display(rst);
}
void keyscan(void)//键盘扫描函数
{
P1=0xef;//第一列
if(!p13){flag=1;while(!p13)clr();}//on键清零
if(!p12){flag=1;while(!p12)disp(1);}//1
if(!p11){flag=1;while(!p11)disp(4);}//4
if(!p10){flag=1;while(!p10)disp(7);}//7
P1=0xdf;//第二列
if(!p13){flag=1;while(!p13)disp(0);}//0
if(!p12){flag=1;while(!p12)disp(2);}//2
if(!p11){flag=1;while(!p11)disp(5);}//5
if(!p10){flag=1;while(!p10)disp(8);}//8
P1=0xbf;//第三列
if(!p13){flag=1;while(!p13)result();}//等号
if(!p12){flag=1;while(!p12)disp(3);}//3
if(!p11){flag=1;while(!p11)disp(6);}//6
if(!p10){flag=1;while(!p10)disp(9);}//9
P1=0x7f;//第四列
if(!p13){flag=1;while(!p13)temp(1);}//+
if(!p12){flag=1;while(!p12)temp(2);}//-
if(!p11){flag=1;while(!p11)temp(3);}//*
if(!p10){flag=1;while(!p10)temp(4);}///
disp(dat[0]);//如果没有按键 就还显示原来的数值
}
main()
{
while(1)
{
keyscan();//键盘扫描调用
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -