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

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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)做簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)(附原理圖,程序,ppt和word)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
作者:喵九
時(shí)間:2018.6
這份文件是‘單片機(jī)原理’簡(jiǎn)易計(jì)算器的課程設(shè)計(jì),可實(shí)現(xiàn)加減乘除四種運(yùn)算。
文件包含:
1:protues原理電路圖(可分別適用于protues8.0之前跟之后的各個(gè)版本)。
2:計(jì)算器的C程序語(yǔ)言。
3:可直接被單片機(jī)運(yùn)行的hex計(jì)算器程序。
4:計(jì)算器word文檔。
5:計(jì)算器ppt。


一 設(shè)計(jì)目的
   本設(shè)計(jì)是基于51系列單片機(jī)來(lái)進(jìn)行的簡(jiǎn)單數(shù)字計(jì)算器設(shè)計(jì),可以完成計(jì)算器的鍵盤(pán)輸入,進(jìn)行加、減、乘、除六位整數(shù)數(shù)范圍內(nèi)的基本四則運(yùn)算,并在LED上顯示相應(yīng)的結(jié)果。軟件方面使用C語(yǔ)言編程,并用PROTUES仿真。
二 總體設(shè)計(jì)及功能介紹
   根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS-51系列單片機(jī)為主控機(jī),實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。具體設(shè)計(jì)及功能如下:
   由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,采用LED 顯示數(shù)據(jù)和結(jié)果;
另外鍵盤(pán)包括數(shù)字鍵(0~9)、符號(hào)鍵(+、-、×、÷)、清除鍵和等號(hào)鍵,故只需要16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤(pán);
   執(zhí)行過(guò)程:開(kāi)機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過(guò)LED顯示出來(lái),當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LED上輸出運(yùn)算結(jié)果
三 原理圖


四 單片機(jī)程序部分
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <ctype.h>                        /*   isdigit()函數(shù)   */
  4. #include <stdlib.h>                        /*    atoi()函數(shù)     */

  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. uchar operand1[9], operand2[9];  /*   操作數(shù)   */
  8. uchar operator;                                         /*   操作符   */

  9. void delay(uint);
  10. uchar keyscan();
  11. void disp(void);
  12. void buf(uint value);
  13. uint compute(uint va1,uint va2,uchar optor);

  14. uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,
  15.                                 0x92,0x82,0xf8,0x80,0x90,0xff};     /*   字符碼表   */

  16. uchar dbuf[8] = {10,10,10,10,10,10,10,10};                    /*   顯示緩存   */

  17. /*   延時(shí)函數(shù)   */
  18. void delay(uint z)
  19. {
  20. uint x,y;
  21. for(x=z;x>0;x--)
  22.         for(y=110;y>0;y--);
  23. }

  24. /*******************************************
  25.               鍵盤(pán)掃描程序
  26.        將按鍵轉(zhuǎn)化為字符并作為輸出
  27. ,'#'分別表示清零鍵和沒(méi)有鍵按下
  28. *******************************************/
  29. uchar keyscan()
  30. {
  31.         uchar skey;                     /*   按鍵值標(biāo)記變量    */

  32. /***********************
  33.      掃描鍵盤(pán)第1行
  34. ************************/
  35.         P1 = 0xfe;
  36.         while((P1 & 0xf0) != 0xf0)            /*      有按鍵按下     */
  37.         {
  38.                 delay(3);                            /*      去抖動(dòng)延時(shí)     */

  39.                 while((P1 & 0xf0) != 0xf0)        /*      仍有鍵按下     */
  40.                 {
  41.                         switch(P1)                                /*    識(shí)別按鍵并賦值   */
  42.                         {
  43.                                 case 0xee: skey = '7'; break;
  44.                                 case 0xde: skey = '8'; break;
  45.                                 case 0xbe: skey = '9'; break;
  46.                                 case 0x7e: skey = '/'; break;

  47.                                 default:   skey = '#';
  48.                         }

  49.                         while((P1 & 0xf0) != 0xf0) /*   等待按鍵松開(kāi)   */
  50.                                 ;
  51.                 }
  52.         }

  53. /***********************
  54.      掃描鍵盤(pán)第2行
  55. ************************/
  56.         P1 = 0xfd;
  57.         while((P1 & 0xf0) != 0xf0)
  58.         {
  59.                 delay(3);

  60.                 while((P1 & 0xf0) != 0xf0)
  61.                 {
  62.                         switch(P1)
  63.                         {
  64.                                 case 0xed: skey = '4'; break;
  65.                                 case 0xdd: skey = '5'; break;
  66.                                 case 0xbd: skey = '6'; break;
  67.                                 case 0x7d: skey = '*'; break;

  68.                                 default:   skey = '#';
  69.                         }

  70.                         while((P1 & 0xf0) != 0xf0)
  71.                                 ;
  72.                 }
  73.         }


  74. /***********************
  75.      掃描鍵盤(pán)第3行
  76. ************************/
  77.         P1 = 0xfb;
  78.         while((P1 & 0xf0) != 0xf0)
  79.         {
  80.                 delay(3);

  81.                 while((P1 & 0xf0) != 0xf0)
  82.                 {
  83.                         switch(P1)
  84.                         {
  85.                                 case 0xeb: skey = '1'; break;
  86.                                 case 0xdb: skey = '2'; break;
  87.                                 case 0xbb: skey = '3'; break;
  88.                                 case 0x7b: skey = '-'; break;

  89.                                 default: skey = '#';
  90.                         }

  91.                         while((P1 & 0xf0) != 0xf0)
  92.                                 ;
  93.                 }
  94.         }


  95. /***********************
  96.      掃描鍵盤(pán)第4行
  97. ************************/
  98.         P1 = 0xf7;
  99.         while((P1 & 0xf0) != 0xf0)
  100.         {
  101.                 delay(3);

  102.                 while((P1 & 0xf0) != 0xf0)
  103.                 {
  104.                         switch(P1)
  105.                         {
  106.                                 case 0xe7: skey = '[b]


  107. ; break;
  108.                                 case 0xd7: skey = '0'; break;
  109.                                 case 0xb7: skey = '='; break;
  110.                                 case 0x77: skey = '+'; break;

  111.                                 default:   skey = '#';
  112.                         }

  113.                         while((P1 & 0xf0) != 0xf0)
  114.                                 ;
  115.                 }
  116.         }

  117.         return skey;
  118. }

  119. void main()
  120. {
  121.         uint value1, value2, value;                   /*    數(shù)值1,數(shù)值2,結(jié)果    */
  122.         uchar ckey, cut1 = 0, cut2 = 0;    /*    ckey鍵盤(pán)輸入字符    */
  123.         uchar operator;                               /*         運(yùn)算符         */
  124.         uchar i, bool = 0;

  125. init:                                                                   /*    goto語(yǔ)句定位標(biāo)簽    */

  126.         buf(0);                            /*         初始化         */
  127.         disp();
  128.         value = 0;
  129.         cut1 = cut2 = 0;
  130.         bool = 0;
  131.         for(i = 0;i < 9;i++)
  132.         {
  133.                 operand1[i] = '\0';
  134.                 operand2[i] = '\0';
  135.         }                                  /*         初始化         */

  136.         while(1)
  137.         {
  138.                 ckey = keyscan();             /*         讀取鍵盤(pán)        */
  139.                 if(ckey != '#')
  140.                 { /*  isdigit函數(shù),字符是阿拉伯?dāng)?shù)字返回非0值,否則返回0  */
  141.                         if(isdigit(ckey))
  142.                         {
  143.                                 switch(bool)
  144.                                 {
  145.                                         case 0:
  146.                                                         operand1[cut1] = ckey;
  147.                                                         operand1[cut1+1] = '\0';
  148.                                                         value1 = atoi(operand1);  /*  atoi函數(shù),將字符串轉(zhuǎn)化為,int整數(shù)  */
  149.                                                         cut1++;
  150.                                                         buf(value1);
  151.                                                         disp();
  152.                                                         break;
  153.                                         case 1:
  154.                                                         operand2[cut2] = ckey;
  155.                                                         operand2[cut2+1] = '\0';
  156.                                                         value2 = atoi(operand2);
  157.                                                         cut2++;
  158.                                                         buf(value2);
  159.                                                         disp();
  160.                                                         break;

  161.                                         default: break;
  162.                                 }
  163.                         }
  164.                         else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')
  165.                         {
  166.                                 bool = 1;
  167.                                 operator = ckey;
  168.                                 buf(0);
  169.                                 dbuf[7] = 10;
  170.                                 disp();
  171.                         }
  172.                         else if(ckey == '=')
  173.                         {
  174.                                 value = compute(value1,value2,operator);
  175.                                 buf(value);
  176.                                 disp();
  177.                                 while(1)                     /*   計(jì)算結(jié)束等待清零鍵按下   */
  178.                                 {
  179.                                         ckey = keyscan();
  180.                                         if(ckey == '


  181. )          /* 如果有清零鍵按下跳轉(zhuǎn)到開(kāi)始 */
  182.                                                 goto init;
  183.                                         else
  184.                                                 {
  185.                                                         buf(value);
  186.                                                         disp();
  187.                                                 }
  188.                                 }
  189.                         }
  190.                         else if(ckey == '[b]



  191. )
  192.                         {        goto init;}
  193.                 }
  194.                 disp();
  195.         }

  196. }

  197. /******************************************
  198.                  運(yùn)算函數(shù)

  199. 輸入:操作數(shù)和操作符
  200. 輸出:計(jì)算結(jié)果
  201. *******************************************/
  202. uint compute(uint va1,uint va2,uchar optor)
  203. {
  204.         uint value;

  205.         switch(optor)
  206.         {
  207.                 case '+' : value = va1+va2;        break;
  208.                 case '-' : value = va1-va2;        break;
  209.                 case '*' : value = va1*va2;        break;
  210.                 case '/' : value = va1/va2;        break;

  211.                 default :  break;
  212.         }
  213.         return value;
  214. }

  215. /*******************************************
  216.               更新顯示緩存

  217. 輸入:無(wú)符號(hào)整數(shù)
  218. 輸出:將輸入送入顯示緩存
  219. *******************************************/
  220. void buf(uint val)
  221. {
  222.         uchar i;
  223.         if(val == 0)
  224.         {
  225.                 dbuf[7] = 0;
  226. ……………………

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

全部資料51hei下載地址:

單片機(jī)簡(jiǎn)易計(jì)算器.zip (367.32 KB, 下載次數(shù): 577)


評(píng)分

參與人數(shù) 2黑幣 +55 收起 理由
2morthatik + 5 絕世好帖!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:395736 發(fā)表于 2018-9-9 20:43 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:451098 發(fā)表于 2018-12-23 12:24 | 只看該作者
能直接用嗎?多謝大佬!很棒哦!
回復(fù)

使用道具 舉報(bào)

地板
ID:433994 發(fā)表于 2018-12-23 14:23 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

5#
ID:453979 發(fā)表于 2018-12-25 00:22 來(lái)自手機(jī) | 只看該作者
淋襟 發(fā)表于 2018-12-23 14:23
謝謝樓主

請(qǐng)問(wèn)附件里面word的內(nèi)容是什么?設(shè)計(jì)報(bào)告嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:493153 發(fā)表于 2019-3-18 13:46 | 只看該作者
大佬是真的厲害  感謝感謝
回復(fù)

使用道具 舉報(bào)

7#
ID:495400 發(fā)表于 2019-3-21 14:56 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:513430 發(fā)表于 2019-4-16 10:59 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

9#
ID:553694 發(fā)表于 2019-6-3 14:08 | 只看該作者

謝謝樓主
回復(fù)

使用道具 舉報(bào)

10#
ID:553778 發(fā)表于 2019-6-3 16:10 | 只看該作者
感謝兄弟,助我一臂之力,在學(xué)習(xí)的道路上不斷前幾次!
回復(fù)

使用道具 舉報(bào)

11#
ID:549324 發(fā)表于 2019-6-3 17:24 | 只看該作者
太厲害了,謝謝。
回復(fù)

使用道具 舉報(bào)

12#
ID:553752 發(fā)表于 2019-6-9 10:09 | 只看該作者
謝謝樓主,很有幫助
回復(fù)

使用道具 舉報(bào)

13#
ID:557550 發(fā)表于 2019-6-9 10:17 | 只看該作者
感謝樓主很有幫助
回復(fù)

使用道具 舉報(bào)

14#
ID:553752 發(fā)表于 2019-6-9 10:50 | 只看該作者
新手求教啊
回復(fù)

使用道具 舉報(bào)

15#
ID:718142 發(fā)表于 2020-3-29 14:50 來(lái)自手機(jī) | 只看該作者
感謝,很有幫助
回復(fù)

使用道具 舉報(bào)

16#
ID:749932 發(fā)表于 2020-5-12 14:25 | 只看該作者
太棒啦,怎么下載啊
回復(fù)

使用道具 舉報(bào)

17#
ID:749957 發(fā)表于 2020-5-12 14:40 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

18#
ID:524205 發(fā)表于 2020-5-13 12:56 | 只看該作者
感謝十分感謝
回復(fù)

使用道具 舉報(bào)

19#
ID:767302 發(fā)表于 2020-6-2 10:58 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

20#
ID:772218 發(fā)表于 2020-6-7 21:35 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

21#
ID:782162 發(fā)表于 2020-6-29 22:41 | 只看該作者
為啥LCD那不顯示

回復(fù)

使用道具 舉報(bào)

22#
ID:801484 發(fā)表于 2020-7-11 16:04 | 只看該作者
可是我在開(kāi)發(fā)板上顯示不出來(lái)55555是哪里有問(wèn)題嗎?
回復(fù)

使用道具 舉報(bào)

23#
ID:602099 發(fā)表于 2020-7-11 19:39 | 只看該作者
支持,加油加油感謝樓主分享
回復(fù)

使用道具 舉報(bào)

24#
ID:758579 發(fā)表于 2020-7-15 16:59 | 只看該作者
樓主 那個(gè)isis 圖里的藍(lán)色線(xiàn)是什么東西  是干什么用的 啥意思 謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 逼逼网 | 一区二区三区视频在线 | 国产精品色 | 亚洲欧美国产精品久久 | 久久久免费少妇高潮毛片 | 亚洲视频免费观看 | 免费一级欧美在线观看视频 | 国产激情免费视频 | 色妞av| 国产一区二区三区四区五区加勒比 | 成人在线观看免费 | 午夜av成人| 欧美成人二区 | 日韩欧美在线免费观看视频 | 亚洲一区视频在线 | 国产精品视频久久久 | 免费观看一级特黄欧美大片 | 一级片网址| 欧美精品国产一区二区 | 欧美精品一区二区三区四区五区 | 天天人人精品 | 91精品91久久久 | 日韩高清在线观看 | 精品久久国产 | 久久久久久成人 | 欧美精品一区在线 | 欧产日产国产精品视频 | 日韩在线观看 | 亚洲免费精品 | 九色在线视频 | 欧美精品综合在线 | av免费观看网站 | 天天av天天好逼 | 亚洲三区在线 | 欧美久久电影 | 黄色综合| 日本成人福利视频 | 99在线免费观看视频 | 久久精品免费看 | 久草免费在线视频 | 一区二区三区四区不卡 |