這個計算器的結果是在電腦串口上面顯示的
串口計算器所有資料51hei提供下載:
串口練習.zip
(22.33 KB, 下載次數: 37)
2017-7-21 15:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- // # include <stdlib. h>
- #include<math.h>
- sbit dula=P2^6; //段選信號的鎖存器控制
- sbit wela=P2^7; //位選信號的鎖存器控制 ,0x77,0x7c,0x39,0x5e,0x79,0x71
- bit flag0=0; //"="號按鍵標志
- bit flag1=0; //"+"號按鍵標志
- bit flag2=0; //"-"號按鍵標志
- bit flag3=0; //"*"號按鍵標志
- bit flag4=0; //"^"號按鍵標志
- bit flag5=0; //清楚標志
- #define uint unsigned int
- #define uchar unsigned char
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned int j,t,sum,s1=0,s2=0,a1,a2,a3;
- uint m;
- void delay(unsigned int i)
- {
- unsigned int m,n;
- for(m=i;m>0;m--)
- for(n=90;n>0;n--);
- }
- void display(uint s)
- {
- P0=0xfe;
- wela=1;
- wela=0;
- P0=table[s/100];
- dula=1;
- dula=0;
- delay(6);
-
- P0=0xfd;
- wela=1;
- wela=0;
- P0=table[s%100/10];
- dula=1;
- dula=0;
- delay(6);
-
-
- P0=0xfb;
- wela=1;
- wela=0;
- P0=table[s%10];
- dula=1;
- dula=0;
- delay(6);
- }
-
- void InitUART(void)
- {
- TMOD = 0x20;
- SCON = 0x50;
- TH1 = 0xFD;
- TL1 = TH1;
- PCON = 0x00;
- EA = 1;
- ES = 1;
- TR1 = 1;
- }
- void SendOneByte(unsigned char c)
- {
- SBUF = c;
- while(!TI);
- TI = 0;
- }
-
- void main(void)
- {
- InitUART();
- while(1)
- {
- display(sum);
-
-
- }
- }
- void UARTInterrupt(void) interrupt 4
- {
-
- if(RI)
- {
- RI = 0;
- m= SBUF;
-
- SendOneByte(m);
- if((m-0x30)>=0 && (m-0x30)<=9)
- {
- s1=s1*10+(m-0x30);
- // display(m);
- }
- switch(m)
- {
- case 0x2B:{ s2=s1;s1=0;flag1=1;}break; //加法
- case 0x2a:{s2=s1; s1=0;flag3=1;}break; //乘法
- case 0x2d: {s2=s1; s1=0;flag2=1;}break; //減法
- case 0x5e: {s2=s1; s1=0;flag4=1;}break; //冪運算
- case 0x3d: flag0=1; break; //"="號按鍵
- case 0xFF: flag5=1; break; //"/"號按鍵
- default: break;
- }
- if(flag0==1)
- { if(flag1==1)
- {
- sum=0;
- sum=s1+s2;
- }
- else if(flag3==1)
- {
- sum=s1*s2;
- }
- else if(flag2==1)
- {
- sum=s2-s1;
- }
- else if(flag4==1)
- {
- sum=pow(s1,s2);
- }
- display(sum);
- a1=sum/10;
- a2=sum%10;
-
- SendOneByte(a1+0x30);
- SendOneByte(a2+0x30);
-
-
-
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
|