本系統選用AT89C52單片機為主控機。通過擴展必要的外圍接口電路,實現對計算器的設計,具體能實現如下功能:
(1)由于設計的計算器要進行四則運算,為了得到較好的顯示效果,經綜合分析后,最后采用數碼管結果。
(2)采用鍵盤輸入方式,鍵盤包括數字鍵(0~9)、符號鍵(+、-、×、÷)、清除鍵(on\c)和等號鍵(=),故只需要16 個按鍵即可,設計中采用集成的計算鍵盤。
(3)在執行過程中,開機顯示零,等待鍵入數值計算器在內部執行數值轉換和存儲,并等待再次鍵入數值,當再鍵入數值后將顯示鍵入的數值,按等號就會在LED上輸出運算結果。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (164.62 KB, 下載次數: 34)
下載附件
2023-1-27 23:47 上傳
簡易計算器.jpg (326.75 KB, 下載次數: 35)
下載附件
仿真硬件圖
2023-1-27 22:18 上傳
簡易計算機代碼.jpg (135.94 KB, 下載次數: 33)
下載附件
部分代碼
2023-1-27 22:18 上傳
單片機源程序如下:
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit GW=P1^1;
- sbit SW=P1^0;
- uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0xff,0x6f};
- void delay(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=120;j>0;j--);
- }
- void display(uchar num)
- {
- uchar Gnum,Snum;
- Gnum=num%10;
- Snum=num/10;
- GW=0;
- SW=1;
- P0=table[Gnum];
- delay(2);
- GW=1;
- SW=1;
- GW=1;
- SW=0;
- P0=table[Snum];
- delay(2);
- GW=1;
- SW=1;
- }
- uchar keyscan()
- {
- uchar temp,keyzhi=0xff;
- P2=0xfe; //第一行鍵值
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P2;
- switch(temp)
- {
- case 0xee:keyzhi=7;while(P2==0xee);break;
- case 0xde:keyzhi=8;while(P2==0xde);break;
- case 0xbe:keyzhi=9;while(P2==0xbe);break;
- case 0x7e:keyzhi='/';while(P2==0x7e);break;
- }
- }
- }
- P2=0xfd; //第二行鍵值
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P2;
- switch(temp)
- {
- case 0xed:keyzhi=4;while(P2==0xed);break;
- case 0xdd:keyzhi=5;while(P2==0xdd);break;
- case 0xbd:keyzhi=6;while(P2==0xbd);break;
- case 0x7d:keyzhi='*';while(P2==0x7d);break;
- }
- }
- }
- P2=0xfb; //第三行鍵值
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P2;
- switch(temp)
- {
- case 0xeb:keyzhi=1;while(P2==0xeb);break;
- case 0xdb:keyzhi=2;while(P2==0xdb);break;
- case 0xbb:keyzhi=3;while(P2==0xbb);break;
- case 0x7b:keyzhi='-';while(P2==0x7b);break;
- }
- }
- }
- P2=0xf7; //第四行鍵值
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P2;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P2;
- switch(temp)
- {
- case 0xe7:keyzhi='q';while(P2==0xe7);break;
- case 0xd7:keyzhi=0;while(P2==0xd7);break;
- case 0xb7:keyzhi='=';while(P2==0xb7);break;
- case 0x77:keyzhi='+';while(P2==0x77);break;
- }
- }
- }
- return keyzhi;
- }
復制代碼 Keil代碼與Proteus8.13仿真下載:
簡易計算器Proteus仿真代碼.7z
(71.5 KB, 下載次數: 54)
2023-1-27 23:46 上傳
點擊文件名下載附件
代碼與原理圖 下載積分: 黑幣 -5
|