|
計算器,最大數(shù)65536,加減乘除用,a,b,c,d表示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include <REGX51.H>
- unsigned char a[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
- unsigned char b[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 } ;
- unsigned char d[]={~0x21,~0x12,~0x22,~0x42,~0x14,~0x24,~0x44,~0x18,~0x28,~0x48};
- unsigned char e[]={~0x01,~0x02,~0x04,~0x08,~0x81};
- unsigned char c[8];
- unsigned int i,j,k,l,n,nm,ny;
- unsigned int y1,y2,y3,y4,y5,y6,y7,y8;
- unsigned int x,x1,x2;
- unsigned int q;
- void delay(unsigned int x)
- {
- x--;
- }
- void shuguan(unsigned int m)
- {
- P0=0xff;
- switch(j)
- {
- case 0 :P2=b[j];if(m>=10000000)P0=a[m/10000000%10];else P0=0xff;break;
- case 1:P2=b[j];if(m>=1000000)P0=a[m/1000000%10];else P0=0xff;break;
- case 2:P2=b[j];if(m>=100000)P0=a[m/100000%10];else P0=0xff;break;
- case 3:P2=b[j];if(m>=10000)P0=a[m/10000%10];else P0=0xff;break;
- case 4:P2=b[j];if(m>=1000)P0=a[m/1000%10];else P0=0xff;break;
- case 5:P2=b[j];if(m>=100)P0=a[m/100%10];else P0=0xff;break;
- case 6:P2=b[j];if(m>=10)P0=a[m/10%10];else P0=0xff;break;
- case 7:P2=b[j];if(x2==0)P0=a[m%10];if(x2==1)P0=0x88;if(x2==2)P0=0x83;if(x2==3)P0=0xc6;if(x2==4)P0=0xa1;break;
- }
- j++;if(j==8)j=0;
- delay(300);
- }
- void anj()
- {
- for(i=0;i<4;i++)
- {
- P1=e[i];
- if(P1!=e[i])
- {
- y2=i ;
- for(nm=0;nm<10;nm++)
- {
- if(P1==d[nm])
- {
- ny=nm;
- y1=1;
- }
- }
- if(P1==e[4]) //~0x81,不可以,???
- {
- y3=1;
- }
- if(P1==~0x41)
- {
- y4=1 ;
- }
- if(P1==(0xff-0x82))
- {
- y5=1;
- }
- if(P1==(0xff-0x84))
- {
- y6=1;
- }
- if(P1==(0xff-0x88))
- {
- y7=1;
- }
- if(P1==(0xff-0x11))
- {
- y8=1;
- }
- }
- if(i==y2)
- {
- if(P1==e[i]&&y1==1)
- {
- x=x*10+ny;
- x2=0;
- y1=0;
- }
- if(P1==e[i]&&y3==1)
- {
- if(q==0)x1=x;
- if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
- q=1;
- x2=1;
- x=0;
- y3=0;
- }
- if(P1==e[i]&&y6==1)
- {
- if(q==0)x1=x;
- if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
- q=3;
- x2=3;
- x=0;
- y6=0;
- }
- if(P1==e[i]&&y7==1)
- {
- if(q==0)x1=x;
- if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
- q=4;
- x2=4;
- x=0;
- y7=0;
- }
- if(P1==e[i]&&y5==1)
- {
- if(q==0)x1=x;
- if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
- q=2;
- x2=2;
- x=0;
- y5=0;
- }
- if(P1==e[i]&&y4==1)
- {
- if(q==0)x1=x;
- if(q==1)x1=x1+x;if(q==2)x1=x1-x;if(q==3)x1=x1*x;if(q==4)x1=x1/x;
- q=0;
- if(q==0)x=x1;
- x2=0;
- y4=0;
- }
- if(P1==e[i]&&y8==1)
- {
- x=0;
- x1=0;
- x2=0;
- y8=0;
- }
- }
- }
- }
- void main()
- {
- x=0;
- while(1)
- {
- shuguan(x);
- anj();
- }
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
計算器 (2).zip
(86.82 KB, 下載次數(shù): 119)
2022-4-23 20:14 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|