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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89單片機簡單版超級計算器程序

  [復制鏈接]
跳轉到指定樓層
樓主
自己寫了個簡單版的超級計算器程序,只能實現最多五位整數的加減乘除,而且不可以用于負數的運算,僅僅用于參考。
制作出來的實物圖如下:


單片機源程序如下:
  1. #include<reg52.h>
  2. #include "matrixkey.h"
  3. #include "tm1638.h"
  4. /*制作一個簡易計算器。 要求: a. 實現兩個數字的 100 以內加減乘除,結果只保留整數即可;
  5. b. 先輸入一個數字,下運算符按鍵時,數碼管清零,然后輸入下一個 數字,按下等于號按鍵后,顯示運算結果。
  6. 并且,中間若出現輸入錯 誤,可以利用刪除按鍵,進行一位一位地刪除更改。*/
  7. #define u8 unsigned char
  8. #define u16 unsigned int
  9. u8 code distab[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
  10. u8 DYGSS[8];//第一個數
  11. u8 DEGSS[8];//第二個數
  12. u16 dygs;//第一個數
  13. u16 degs;//第二個數
  14. u16 result;//結果
  15. u8 state;  //state分為1 2 3
  16. u8 jisuan;//jisuan分為 1 2 3 4 加減乘除
  17. u8 weishu1=0;//第一個數的位數
  18. u8 weishu2=0;//第二個數的位數
  19. u8 hym;//hym為按鍵件嗎
  20. void Init_Tab();
  21. void Input_dygs();//輸入第一個數
  22. void Input_degs();//輸入第二個數DYGS
  23. void Tuige(u8 len,u8 *P);
  24. void Endline();//顯示結果
  25. void Display(u8 len,u8 *P);//顯示中途
  26. u16 Calculate();//計算
  27. void CLRTAB();
  28. void Init_Tab();
  29. void main()
  30. {
  31. //        u8 i;//萬能變量
  32.         init_TM1638();
  33.         while(1)
  34.         {
  35.                 Init_Tab();
  36.                 Input_dygs();
  37.                 Input_degs();
  38.                 Endline();
  39.         }
  40. }

  41. void Input_dygs()//輸入第一個數
  42. {
  43.         while(state==1)
  44.         {
  45.                         hym=Keyscan();
  46.                         if(hym!=88)
  47.                         {
  48.                                 if(hym<=9)
  49.                                 {
  50.                                         weishu1++;
  51.                                         DYGSS[weishu1]=DYGSS[weishu1-1];
  52.                                         DYGSS[weishu1-1]=hym;
  53.                                 }
  54.                                 if(hym==10)
  55.                                 {
  56.                                         weishu1--;
  57.                                                 CLRTAB();
  58.                                 }
  59.                                 switch(hym)
  60.                                 {
  61.                                         case 12:jisuan=1;state=2;break;
  62.                                         case 13:jisuan=2;state=2;break;
  63.                                         case 14:jisuan=3;state=2;break;
  64.                                         case 15:jisuan=4;state=2;break;
  65.                                         default:break;
  66.                                 }
  67.                         }
  68.                         Display(weishu1,DYGSS);
  69.         }
  70.         CLRTAB();
  71. }

  72. void Input_degs()//輸入第二個數DYGS
  73. {
  74.         while(state==2)
  75.         {
  76.                         hym=Keyscan();
  77.                         if(hym!=88)
  78.                         {
  79.                                 if(hym<=9)
  80.                                 {
  81.                                         weishu2++;
  82.                                         DEGSS[weishu2]=DEGSS[weishu2-1];
  83.                                         DEGSS[weishu2-1]=hym;
  84.                                 }
  85.                                 if(hym==10)
  86.                                 {
  87.                                         weishu2--;
  88.                                                 CLRTAB();
  89.                                 }
  90.                                 if(hym==11)
  91.                                 {
  92.                                         state=3;
  93.                                         result=Calculate();
  94.                                 }
  95.                         }
  96.                         Display(weishu2,DEGSS);
  97.         }
  98.         CLRTAB();
  99. }

  100. void Tuige(u8 len,u8 *P)
  101. {
  102.         len--;
  103.         P[len]=0;
  104. }
  105. void Endline()//顯示結果
  106. {
  107.         while(state==3)
  108.         {
  109.                 hym=Keyscan();
  110.                 if(hym==10)
  111.                 {
  112.                         state=1;
  113.                 }
  114.                 Write_DATA(3*2,distab[result/10000]);
  115.                 Write_DATA(4*2,distab[result%10000/1000]);
  116.                 Write_DATA(5*2,distab[result%1000/100]);
  117.                 Write_DATA(6*2,distab[result%100/10]);
  118.                 Write_DATA(7*2,distab[result%10]);
  119.         }
  120.         CLRTAB();
  121. }

  122. void Display(u8 len,u8 *P)//顯示中途
  123. {
  124.         u8 i;
  125.         for(i=0;i<len;i++)
  126.         {
  127.                 Write_DATA((7-i)*2,distab[P[len-1-i]]);
  128.         }
  129. }

  130. u16 Calculate()//計算
  131. {
  132.         u8 i;
  133.         u16 hymm;
  134.         for(i=0;i<weishu1;i++)
  135.         {
  136.                 dygs+=DYGSS[i];
  137.                 dygs*=10;
  138.         }
  139.         for(i=0;i<weishu2;i++)
  140.         {
  141.                 degs+=DEGSS[i];
  142.                 degs*=10;
  143.         }
  144.         dygs/=10;
  145.         degs/=10;
  146.         switch(jisuan)
  147.         {
  148.                 case 1:hymm=dygs+degs;break;
  149.                 case 2:hymm=dygs-degs;break;
  150.                 case 3:hymm=dygs*degs;break;
  151.                 case 4:hymm=dygs/degs;break;
  152.         }
  153.         return hymm;
  154. }

  155. void CLRTAB()
  156. {
  157.         u8 ii;
  158.         for(ii=0;ii<8;ii++)
  159. ……………………

  160. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有程序51hei提供下載:
簡單版計算器.zip (44.35 KB, 下載次數: 29)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕视频在线观看 | av一二三区 | 超碰日本 | 欧美日韩电影一区二区 | 亚洲一区二区在线视频 | 天天综合久久 | 天堂亚洲 | 欧美精品日韩精品国产精品 | 久久精品国产99国产精品 | 99久久精品免费看国产小宝寻花 | 日韩在线免费视频 | 欧美精品首页 | 国产乱码高清区二区三区在线 | wwwxxx日本在线观看 | 亚洲一区国产 | 亚洲成人三级 | 日日久 | 久久成人免费视频 | 国产探花在线精品一区二区 | 久久久久国产视频 | 国产欧美一区二区三区日本久久久 | 欧美在线观看一区 | 91社区在线观看高清 | av激情在线 | 亚洲激情网站 | 国产精品久久9 | 欧美性极品xxxx做受 | 国产成人高清 | 91精品国产91久久久久青草 | 国产欧美一区二区三区久久手机版 | 国产美女一区二区 | 久久高清| 国产精品一区二区av | 欧美色图综合网 | 久久久精品一区 | 农村真人裸体丰满少妇毛片 | 亚洲午夜在线 | 成人免费小视频 | 日本精品视频一区二区 | 96久久久久久 | 99资源站|