久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5094|回復: 1
打印 上一主題 下一主題
收起左側

51單片機+LCD1602做的計算器 共享代碼原理圖與實物圖

[復制鏈接]
跳轉到指定樓層
樓主
  最近課程設計做了個計算器 ,MCU用STC89C51 ,顯示部分用LCD1602,矩陣按鍵和獨立按鍵輸入.
  功能有 加減乘除 乘方運算,可輸入小數點, 可連續運算,結果超過蜂鳴器會警告,24C02可以掉電保存運算結果.
  分享給需要的人!!!!

1.基本的加減乘除運算,輸入輸出全部為整形數
2.可以得到浮點型結果,不能輸入浮點數
3.加入乘方運算
4.加入小數點輸入
5.加入連續運算

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


電路原理圖:


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

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

  9. extern bit Buzz_flag;                            //蜂鳴器開關標志
  10. /*========================================================================*/
  11. /*函數名稱:void main()
  12. /*函數功能:主函數
  13. /*輸入參數:無
  14. /*輸出參數:無
  15. /*========================================================================*/
  16. void main()
  17. {
  18.         EA=1;                                          //開啟總中斷
  19.         Timer0Init(2);                                 //定時器0初始化 定時2ms
  20.         InitLcd1602();                                 //LCD1602初始化
  21.         
  22.         while(1)
  23.         {        
  24.                 KeyDrive();                                  //矩陣鍵盤驅動
  25.                 KeyDrive2();                                 //獨立鍵盤驅動
  26.         }
  27. }
  28. /*========================================================================*/
  29. /*函數名稱:void KeyDown(uchar keycode)
  30. /*函數功能:執行按鍵動作
  31. /*輸入參數:keycode
  32. /*輸出參數:無
  33. /*========================================================================*/
  34. void KeyDown(uchar keycode)
  35. {
  36.         if((keycode <= 0x39)&&(keycode >= 0x30))           //數字鍵0~9
  37.         {
  38.                 BuzzerControl();
  39.                 NumAction(keycode - 0x30);
  40.         }
  41.         else if(keycode == 0x26)                           //"+"號
  42.         {
  43.                 BuzzerControl();
  44.                 OprAction(0);
  45.         }
  46.         else if(keycode == 0x25)                           //"-"號
  47.         {
  48.                 BuzzerControl();
  49.                 OprAction(1);
  50.         }
  51.         else if(keycode == 0x28)                           //"×"號
  52.         {
  53.                 BuzzerControl();
  54.                 OprAction(2);
  55.         }
  56.         else if(keycode == 0x27)                           //"÷"號
  57.         {
  58.                 BuzzerControl();
  59.                 OprAction(3);
  60.         }
  61.         else if(keycode == 0x0D)                           //"="號
  62.         {
  63.                 BuzzerControl();
  64.                 GetResult();
  65.         }
  66.         else if(keycode == 0x1B)                           //小數點 '.'
  67.         {
  68.                 BuzzerControl();
  69.                 DecimalAction();
  70.         }
  71.         else if(keycode == 0x01)                           //復位鍵
  72.         {
  73.                 BuzzerControl();
  74.                 Reset();
  75.         }
  76.         else if(keycode == 0x02)                           //乘方運算                  
  77.         {
  78.                 BuzzerControl();
  79.                 OprAction(4);        
  80.         }
  81.         else if(keycode == 0x03)                           //從24c02讀取運算結果
  82.         {
  83.                 BuzzerControl();
  84.                 Read_Result();                              
  85.         }
  86.         else if(keycode == 0x04)                           //開關蜂鳴器聲音
  87.         {
  88.                 Buzz_flag = ~Buzz_flag;
  89.         }
  90. }
  91. /*========================================================================*/
  92. /*函數名稱:void Timer0Init(uint ms)
  93. /*函數功能:定時器0初始化
  94. /*輸入參數:ms
  95. /*輸出參數:無
  96. /*========================================================================*/
  97. void Timer0Init(uint ms)
  98. {
  99.         ulong tmp;                                //16位長整型變量tmp
  100.         tmp = MAIN_OSC/12;                        //用晶振頻率除以12得到定時器計數頻率
  101.         tmp = (tmp*ms)/1000;                      //計算出需要多少個機器周期
  102.         tmp = 65536 - tmp;                        //定時器的初始值
  103.         tmp = tmp + 18;                           //補償中斷延時響應造成的誤差
  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. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

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

評分

參與人數 2黑幣 +55 收起 理由
kuiiel + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:102293 發表于 2017-12-24 11:01 | 只看該作者
好資料,學習學習,謝謝分享!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人性视频免费网站 | 影音先锋中文字幕在线观看 | 精品国产久 | 亚洲欧美综合精品久久成人 | 91久久精品 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 亚洲精久久 | 亚洲av毛片 | 男女免费视频网站 | 亚洲女人的天堂 | 亚洲一区二区在线视频 | 国产一区二区日韩 | 国产在线视频一区二区董小宛性色 | 一级毛片免费完整视频 | 欧美freesex黑人又粗又大 | 偷派自拍 | 精品久久久久久亚洲综合网 | 欧美精品tv | 亚洲在线成人 | 免费黄色大片 | 日韩一二三区 | 青青草av | av片免费观看 | 国产资源在线播放 | 欧美久久一级特黄毛片 | 可以免费看的毛片 | 污书屋| 日韩一区二区在线视频 | 精品免费| 久久亚洲国产精品 | 久久91视频 | 久久精品国产99国产精品亚洲 | 欧美日韩不卡合集视频 | 日本免费视频在线观看 | 夜夜夜夜夜夜曰天天天 | 色综合av | 五月婷婷丁香 | 一级黄色大片 | 国产91久久精品一区二区 | 国产男女视频 | 亚洲色图在线观看 |