找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5127|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)+LCD1602做的計(jì)算器 共享代碼原理圖與實(shí)物圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:150346 發(fā)表于 2017-12-23 17:30 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  最近課程設(shè)計(jì)做了個(gè)計(jì)算器 ,MCU用STC89C51 ,顯示部分用LCD1602,矩陣按鍵和獨(dú)立按鍵輸入.
  功能有 加減乘除 乘方運(yùn)算,可輸入小數(shù)點(diǎn), 可連續(xù)運(yùn)算,結(jié)果超過蜂鳴器會(huì)警告,24C02可以掉電保存運(yùn)算結(jié)果.
  分享給需要的人!!!!

1.基本的加減乘除運(yùn)算,輸入輸出全部為整形數(shù)
2.可以得到浮點(diǎn)型結(jié)果,不能輸入浮點(diǎn)數(shù)
3.加入乘方運(yùn)算
4.加入小數(shù)點(diǎn)輸入
5.加入連續(xù)運(yùn)算

源程序見附件,下面是制作出來的實(shí)物圖:


電路原理圖:


單片機(jī)源程序如下:
  1. /*=================================================*/
  2. /*項(xiàng)目名稱: 51單片機(jī)計(jì)算器
  3. /*代碼作者: F H X
  4. /*修改時(shí)間: 2017/12/20
  5. /*=================================================*/
  6. #include "Config.h"

  7. uchar T0RH = 0;                                  //定時(shí)器0重載值
  8. uchar T0RL = 0;

  9. extern bit Buzz_flag;                            //蜂鳴器開關(guān)標(biāo)志
  10. /*========================================================================*/
  11. /*函數(shù)名稱:void main()
  12. /*函數(shù)功能:主函數(shù)
  13. /*輸入?yún)?shù):無
  14. /*輸出參數(shù):無
  15. /*========================================================================*/
  16. void main()
  17. {
  18.         EA=1;                                          //開啟總中斷
  19.         Timer0Init(2);                                 //定時(shí)器0初始化 定時(shí)2ms
  20.         InitLcd1602();                                 //LCD1602初始化
  21.         
  22.         while(1)
  23.         {        
  24.                 KeyDrive();                                  //矩陣鍵盤驅(qū)動(dòng)
  25.                 KeyDrive2();                                 //獨(dú)立鍵盤驅(qū)動(dòng)
  26.         }
  27. }
  28. /*========================================================================*/
  29. /*函數(shù)名稱:void KeyDown(uchar keycode)
  30. /*函數(shù)功能:執(zhí)行按鍵動(dòng)作
  31. /*輸入?yún)?shù):keycode
  32. /*輸出參數(shù):無
  33. /*========================================================================*/
  34. void KeyDown(uchar keycode)
  35. {
  36.         if((keycode <= 0x39)&&(keycode >= 0x30))           //數(shù)字鍵0~9
  37.         {
  38.                 BuzzerControl();
  39.                 NumAction(keycode - 0x30);
  40.         }
  41.         else if(keycode == 0x26)                           //"+"號(hào)
  42.         {
  43.                 BuzzerControl();
  44.                 OprAction(0);
  45.         }
  46.         else if(keycode == 0x25)                           //"-"號(hào)
  47.         {
  48.                 BuzzerControl();
  49.                 OprAction(1);
  50.         }
  51.         else if(keycode == 0x28)                           //"×"號(hào)
  52.         {
  53.                 BuzzerControl();
  54.                 OprAction(2);
  55.         }
  56.         else if(keycode == 0x27)                           //"÷"號(hào)
  57.         {
  58.                 BuzzerControl();
  59.                 OprAction(3);
  60.         }
  61.         else if(keycode == 0x0D)                           //"="號(hào)
  62.         {
  63.                 BuzzerControl();
  64.                 GetResult();
  65.         }
  66.         else if(keycode == 0x1B)                           //小數(shù)點(diǎn) '.'
  67.         {
  68.                 BuzzerControl();
  69.                 DecimalAction();
  70.         }
  71.         else if(keycode == 0x01)                           //復(fù)位鍵
  72.         {
  73.                 BuzzerControl();
  74.                 Reset();
  75.         }
  76.         else if(keycode == 0x02)                           //乘方運(yùn)算                  
  77.         {
  78.                 BuzzerControl();
  79.                 OprAction(4);        
  80.         }
  81.         else if(keycode == 0x03)                           //從24c02讀取運(yùn)算結(jié)果
  82.         {
  83.                 BuzzerControl();
  84.                 Read_Result();                              
  85.         }
  86.         else if(keycode == 0x04)                           //開關(guān)蜂鳴器聲音
  87.         {
  88.                 Buzz_flag = ~Buzz_flag;
  89.         }
  90. }
  91. /*========================================================================*/
  92. /*函數(shù)名稱:void Timer0Init(uint ms)
  93. /*函數(shù)功能:定時(shí)器0初始化
  94. /*輸入?yún)?shù):ms
  95. /*輸出參數(shù):無
  96. /*========================================================================*/
  97. void Timer0Init(uint ms)
  98. {
  99.         ulong tmp;                                //16位長(zhǎng)整型變量tmp
  100.         tmp = MAIN_OSC/12;                        //用晶振頻率除以12得到定時(shí)器計(jì)數(shù)頻率
  101.         tmp = (tmp*ms)/1000;                      //計(jì)算出需要多少個(gè)機(jī)器周期
  102.         tmp = 65536 - tmp;                        //定時(shí)器的初始值
  103.         tmp = tmp + 18;                           //補(bǔ)償中斷延時(shí)響應(yīng)造成的誤差
  104.         T0RH = (uchar)(tmp>>8);                   //將tmp高8位右移8位 賦值給T0RH
  105.         T0RL = (uchar)tmp;                        //將tmp低8位賦值給T0RL
  106.         TMOD &= 0xF0;                             //TMOD高4位不變 低四位清零
  107.         TMOD |= 0x01;                             //TMOD低四位變成0001
  108.         TH0 = T0RH;                               //裝載初值
  109.         TL0 = T0RL;
  110. ……………………

  111. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
課程設(shè)計(jì)(計(jì)算器) - 最終版.rar (119.56 KB, 下載次數(shù): 32)

評(píng)分

參與人數(shù) 2黑幣 +55 收起 理由
kuiiel + 5 很給力!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:102293 發(fā)表于 2017-12-24 11:01 | 只看該作者
好資料,學(xué)習(xí)學(xué)習(xí),謝謝分享!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表