📄 4位计算器.c
字号:
//P3接4*4键盘 P0接共阴极数码管 p2.0 p2.1 p2.2 p2.3位选
#include <reg51.h>
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p10=P1^0;
int led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00,0xb9,0xbf,0xb6,0xad,0x8e,0x81};
// 0 1 2 3 4 5 6 7 8 9 空 显 + - * / f
//规律数码管:led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00,0xb9,0xbf,0xb6,oxad,ox8e};
//我的数码管:led[]={0xa0,0xb7,0xc2,0x83,0x95,0x89,0x88,0xb3,0x80,0x81,0xff,0x00,0x97,0xdf,0xcb,0xd6,0xd8};
int i=0,i1,i2,i3,i4;
int one,two,three,u; //定义三个数 其中three是one和two运算的结果
delay(v)//延时子程序
{ int a,b;
while(v--)
{ for(a=1;a<=30;a++)
for(b=1;b<=30;b++);} }
display(k) //显示子程序//
{ int i11=i1,i22=i2,i33=i3,i44=i4;
one=1000*i4+100*i3+10*i2+i1;
if(i44==0||i44>9) {i44=10;if(i33==0||i33>9) {i33=10;if(i22==0||i22>9) i22=10;}}
while(k--)
{ P0=led[i11];
p20=0; p21=0;p22=0;p23=1;
delay(1);
P0=led[i22];
p20=0;p21=0;p22=1;p23=0;
delay(1);
P0=led[i33];
p20=0;p21=1;p22=0;p23=0;
delay(1);
P0=led[i44];
p20=1;p21=0;p22=0;p23=0;
delay(1); } }
leds() //P1口LED程序
{ int led=1,time=8;
while(time--)
{ while(led<254)
{ P1=~led;
led=led<<1;
delay(20);}
led=1; }
time=8;
while(time--)
{ led=254;
while(led>1)
{ P1=~led;
led=led>>1;
delay(20);}
led=254; }
time=8;
while(time--)
{P1=0;
delay(20);
P1=0xff;
delay(20);} }
keych() //检测是否有键按下子程序//
{ if(P3==0xf0) return(0);
else while(P3&0xf0!=0xf0) display(2);
return(1);}
keyscan() // 检测是哪个键按下子程序//
{ int m,n,k[4]={0xfe,0xfd,0xfb,0xf7};
for(m=0;m<4;m++)
{ P3=k[m];
n=P3+(m*m+5)*m/6;//此处要注意m为整型
switch(n)
{ case 0x7e:i=0+m*4;break;
case 0xbe:i=1+m*4;break;
case 0xde:i=2+m*4;break;
case 0xee:i=3+m*4;break;}
} }
sum()//运算子程序
{ switch(u)
{ case 0:three=one+two;break;//plus
case 1:three=two-one;if(three<0) {three=-three;p10=0;}break;//minus
case 2:three=one*two;break;//times
case 3:three=two/one;break;}//div
i1=three%10;
i2=three%100/10;
i3=three%1000/100;
i4=three/1000;
}
main()//主程序入口
{ int t1,t2,tr=1;//tr是为了按下+-*/后再按数字是能消掉前面的数字
while(1)
{ P3=0xf0;
t2=t1;
t1=keych();
if(t2==0&&t1>0)
{ if(tr<0) {i1=i2=i3=i4=0;tr=1;}
keyscan();
if(i<10) {i4=i3;i3=i2;i2=i1;i1=i;}
switch(i)
{ case 10:leds();break;
case 11:i=i1;tr=-tr;sum();break;
case 12:u=0;delay(5);tr=-tr;two=one;break;//plus
case 13:u=1;delay(5);tr=-tr;two=one;break;//minus
case 14:u=2;delay(5);tr=-tr;two=one;break;//times
case 15:u=3;delay(5);tr=-tr;two=one;break;//div//
} }
display(2); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -