wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機計算器程序狀態圖與Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include "led_seg.h"
  2. #include "key.h"
  3. #include "mymath.h"

  4. typedef enum
  5. {
  6.         OPERATOR_EMPTY,
  7.         OPERATOR_PLUS,
  8.         OPERATOR_MINUS,
  9.         OPERATOR_MULTIPLY,
  10.         OPERATOR_DIVIDE,
  11.         OPERATOR_EQUAL
  12. } OPERATOR;


  13. typedef enum
  14. {
  15.         STATE_INIT,
  16.         STATE_INPUT_FIRST_NUM,
  17.         STATE_INPUT_SECOND_NUM,
  18.         STATE_CALC_SIGN,
  19.         STATE_EQUAL
  20. } STATE;

  21. u8 timer = 0;
  22. double show_number = 0;

  23. // 用來標記小數點是否按下
  24. bit is_dot_press = 0;
  25. // 用來記錄小數點按下后鍵盤按下的數的數量
  26. u8 after_dot_press_number = 0;


  27. // (float) 等價于 (double) 6位有效數字
  28. void Timer0Init(void);
  29. void Timer0Interrupt(void);
  30. void update_show_number(u8);
  31. void update_calc_sign(OPERATOR);

  32. double first_number = 0;
  33. double second_number = 0;



  34. OPERATOR myoperator = OPERATOR_EMPTY;
  35. STATE state = STATE_INIT;
  36. void main()
  37. {
  38.         Timer0Init();
  39.         while(1)
  40.         {
  41.                
  42.                 keyscan();
  43.                
  44.                 if(NO_KEY_PRESS != key_state)
  45.                 {
  46.                         switch(key_state)
  47.                         {
  48.                                 // 1
  49.                                 case 0:
  50.                                         update_show_number(1);
  51.                                         break;
  52.                                 // 2
  53.                                 case 1:
  54.                                         update_show_number(2);
  55.                                         break;
  56.                                 // 3
  57.                                 case 2:
  58.                                         update_show_number(3);
  59.                                         break;
  60.                                 // +
  61.                                 case 3:
  62.                                         update_calc_sign(OPERATOR_PLUS);
  63.                                         break;
  64.                                 // 4
  65.                                 case 4:
  66.                                         update_show_number(4);
  67.                                         break;
  68.                                 // 5
  69.                                 case 5:
  70.                                         update_show_number(5);
  71.                                         break;
  72.                                 // 6
  73.                                 case 6:
  74.                                         update_show_number(6);
  75.                                         break;
  76.                                 // -
  77.                                 case 7:
  78.                                         update_calc_sign(OPERATOR_MINUS);
  79.                                         break;
  80.                                 // 7
  81.                                 case 8:
  82.                                         update_show_number(7);
  83.                                         break;
  84.                                 // 8
  85.                                 case 9:
  86.                                         update_show_number(8);
  87.                                         break;
  88.                                 // 9
  89.                                 case 10:
  90.                                         update_show_number(9);
  91.                                         break;
  92.                                 // ×
  93.                                 case 11:
  94.                                         update_calc_sign(OPERATOR_MULTIPLY);
  95.                                         break;
  96.                                 // .
  97.                                 case 12:
  98.                                         is_dot_press = 1;
  99.                                         break;
  100.                                 // 0
  101.                                 case 13:
  102.                                         update_show_number(0);
  103.                                         break;
  104.                                 // =
  105.                                 case 14:
  106.                                                 switch(state)
  107.                                                 {
  108.                                                         case STATE_INIT:
  109.                                                         case STATE_EQUAL:
  110.                                                         case STATE_INPUT_FIRST_NUM:
  111.                                                                 first_number = show_number;
  112.                                                                 state = STATE_EQUAL;
  113.                                                                 myoperator = OPERATOR_EMPTY;                                
  114.                                                                 break;
  115.                                                         case STATE_INPUT_SECOND_NUM:
  116.                                                                 second_number = show_number;
  117.                                                                 switch(myoperator)
  118.                                                                 {
  119.                                                                         case OPERATOR_PLUS:
  120.                                                                                 show_number = first_number + second_number;
  121.                                                                                 break;
  122.                                                                         case OPERATOR_MINUS:
  123.                                                                                 show_number = first_number - second_number;
  124.                                                                                 break;
  125.                                                                         case OPERATOR_MULTIPLY:
  126.                                                                                 show_number = first_number * second_number;
  127.                                                                                 break;
  128.                                                                         case OPERATOR_DIVIDE:
  129.                                                                                 
  130.                                                                                 if(0.000000 != second_number)
  131.                                                                                 {
  132.                                                                                         show_number = first_number / second_number;
  133.                                                                                 }
  134.                                                                                 else
  135.                                                                                 {
  136.                                                                                         // warning
  137.                                                                                         show_number = 0;

  138.                                                                                 }
  139.                                                                                        
  140.                                                                                 break;
  141.                                                                         default:
  142.                                                                                 break;
  143.                                                                 }
  144.                                                                 is_dot_press = 0;
  145.                                                                 after_dot_press_number = 0;
  146.                                                                 first_number = 0;
  147.                                                                 second_number = 0;
  148.                                                                 state = STATE_EQUAL;
  149.                                                                 myoperator = OPERATOR_EMPTY;
  150.                                                                 break;
  151.                                                         case STATE_CALC_SIGN:
  152.                                                                 break;
  153.                                                         default:
  154.                                                                 break;
  155.                                                 }
  156.                                         break;
  157.                                 // ÷
  158.                                 case 15:
  159.                                         update_calc_sign(OPERATOR_DIVIDE);
  160.                                         break;
  161.                                 //意外情況的處理
  162.                                 default:
  163.                                         break;
  164.                         }
  165.                         key_state = NO_KEY_PRESS;
  166.                 }
  167.         }
  168. }


  169. void Timer0Init(void)                //100微秒@12.000MHz
  170. {
  171.         TMOD &= 0xF0;                //設置定時器模式
  172.         TMOD |= 0x02;                //設置定時器模式
  173.         TL0 = 0x9C;                //設置定時初值
  174.         TH0 = 0x9C;                //設置定時重載值
  175.         TF0 = 0;                //清除TF0標志
  176.         TR0 = 1;                //定時器0開始計時
  177.         ET0 = 1;
  178.         EA = 1;
  179. }

  180. void Timer0Interrupt(void) interrupt 1
  181. {
  182.         timer++;
  183.         if(10 == timer)
  184.         {
  185.                 LedShowByNum(show_number);
  186.                 timer = 0;
  187.         }
  188.         keyrescan();
  189. }


  190. void update_show_number(u8 number)
  191. {

  192.         switch(state)
  193.         {
  194.                 case STATE_INIT:
  195.                 case STATE_EQUAL:
  196.                         show_number = 0;
  197.                         first_number = 0;
  198.                         second_number = 0;
  199.                         myoperator = OPERATOR_EMPTY;
  200.                         state = STATE_INPUT_FIRST_NUM;
  201.                         break;
  202.                 case STATE_INPUT_FIRST_NUM:
  203.                         break;
  204.                 case STATE_INPUT_SECOND_NUM:
  205.                         break;
  206.                 case STATE_CALC_SIGN:
  207.                         second_number = show_number = 0;
  208.                         state = STATE_INPUT_SECOND_NUM;
  209.                         break;
  210.                 default:
  211.                         break;
  212.         }
  213.         if(is_dot_press)
  214.         {
  215.                 after_dot_press_number++;
  216.                 show_number += number / ((double)mypow(10,after_dot_press_number));
  217.         }
  218.         else
  219.         {
  220.                 show_number *= 10;
  221.                 show_number += number;
  222.         }
  223.         switch(state)
  224.         {
  225.                 case STATE_INPUT_FIRST_NUM:
  226.                         first_number = show_number;
  227.                         break;
  228.                 case STATE_INPUT_SECOND_NUM:
  229.                         second_number = show_number;
  230.                         break;
  231.                 default:
  232.                         break;
  233.         }
  234.         
  235. }

  236. void update_calc_sign(OPERATOR opr)
  237. {
  238.         switch(state)
  239.         {
  240.                 case STATE_INIT:
  241.                         first_number = 0;
  242.                         myoperator = opr;
  243.                         state = STATE_CALC_SIGN;
  244.                         break;
  245.                 case STATE_EQUAL:
  246.                 case STATE_INPUT_FIRST_NUM:
  247.                         first_number = show_number;
  248.                         state = STATE_CALC_SIGN;
  249.                         myoperator = opr;
  250.                         break;
  251.                 case STATE_INPUT_SECOND_NUM:
  252.                         second_number = show_number;
  253.                         is_dot_press = 0;
  254.                         after_dot_press_number = 0;
  255.                         switch(myoperator)
  256.                         {
  257.                                 case OPERATOR_PLUS:
  258.                                         show_number = first_number + second_number;
  259.                                         break;
  260.                                 case OPERATOR_MINUS:
  261.                                         show_number = first_number - second_number;
  262.                                         break;
  263.                                 case OPERATOR_MULTIPLY:
  264.                                         show_number = first_number * second_number;
  265.                                         break;
  266.                                 case OPERATOR_DIVIDE:
  267.                                         if(0.000000 != second_number)
  268.                                         {
  269.                                                 show_number = first_number / second_number;
  270.                                         }
  271.                                         else
  272.                                         {
  273.                                                 is_dot_press = 0;
  274.                                                 after_dot_press_number = 0;
  275.                                                 // warning
  276.                                                 show_number = 0;
  277.                                                 first_number = 0;
  278.                                                 second_number = 0;
  279.                                                 myoperator = OPERATOR_EMPTY;
  280.                                                 state = STATE_INIT;
  281.                                                 return;
  282.                                         }
  283.                                                 
  284.                                         break;
  285.                                 default:
  286.                                         break;
  287.                         }
  288.                         first_number = show_number;
  289.                         state = STATE_CALC_SIGN;
  290.                         myoperator = opr;
  291.                         break;
  292.                 case STATE_CALC_SIGN:
  293.                         break;
  294.         }
  295. }
復制代碼
全部資料51hei下載地址(仿真+程序):
09-實現一個簡便的計算器.7z (116.72 KB, 下載次數: 47)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1048675 發表于 2023-4-9 16:29 | 只看該作者
第一次輸入數不能帶小數,否則運算符后的第二次輸入數出錯。比如7.1+2=9.2 。但是顯示為7.1+0.02=7.12 。不知什么原因?樓主能不能查一下,更正后我再來下載一下。
回復

使用道具 舉報

板凳
ID:1048675 發表于 2023-4-13 15:57 | 只看該作者
已解決了第一次輸入不能是小數的問題。但是出現了第二個問題,就是不能及時顯示小數點及小數點后面的零,只有小數點后面是除零外的數才能及時顯示。一直沒有找到原因,樓主幫一下,謝謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
视频免费1区二区三区| 91精彩视频| 亚洲欧洲日韩综合| 手机成人在线| 欧美国产日本在线| 欧美日韩成人一区| 国产午夜亚洲精品理论片色戒 | 国产精品成人网| 国产日本精品| 国产欧美自拍一区| 人人草在线视频| 免费在线观看麻豆视频 | 亚洲精品日韩在线观看| 性色av香蕉一区二区| 精品国产亚洲在线| 欧美日韩国产色| 久久综合色婷婷| 日本欧美久久久久免费播放网| 精品中文一区| 亚洲一区二区av| 国产蜜臀av在线播放| 免费观看黄色网| 国产麻豆精品高清在线播放| 999av视频| 国产一级特黄a高潮片| 欧美xxxxx精品| www.涩涩涩| 欧美黄网在线观看| 欧美色欧美亚洲另类二区| 国产成人在线电影| 99视频精品免费观看| 精品香蕉视频| 成人台湾亚洲精品一区二区| 悠悠资源网亚洲青| 黄色成人在线观看| 日韩毛片在线一区二区毛片| 免费女人黄页| 你懂的免费视频| 精品国产高清a毛片无毒不卡| 成人午夜免费在线观看| 中文字幕欧美色图| 香蕉影院在线观看| 免费在线观看日韩| 999精品在线视频| 一区二区三区四区免费| www.四虎在线| 亚洲一区二区三区三州| 久久99999| 99视频在线免费| 情侣黄网站免费看| 116极品美女午夜一级| 警花观音坐莲激情销魂小说| 午夜免费电影一区在线观看| 免费在线观看一区二区| 国产一区二区三区av在线| 91在线色戒在线| 91精品久久久久久综合乱菊| 国产精品免费久久久久久| 午夜精品一区二区三区在线| 久久久在线视频| 久久久久久尹人网香蕉| 欧美激情在线视频二区| 欧美激情videos| 欧美激情国产日韩精品一区18| 久久久91精品国产| 久久99亚洲精品| 久久久久女教师免费一区| 欧美激情久久久久| 欧美精品18videosex性欧美| 久久久亚洲影院你懂的| 57pao成人国产永久免费| 久久久久这里只有精品| 97久久久久久| 国产精品免费福利| 亚洲aⅴ日韩av电影在线观看| 国产色视频一区| 97久久人人超碰caoprom欧美| 97av影视网在线观看| 国内成+人亚洲| 日韩av电影免费在线观看| 日韩欧美亚洲日产国| 欧美 日韩 国产 在线观看| 91制片厂免费观看| 蜜臀av无码一区二区三区| 99精品免费在线观看| 污污网站免费观看| 亚洲国产精品狼友在线观看| 国内精品久久99人妻无码| 午夜黄色福利视频| 三级黄色在线视频| 99热这里精品| 天堂精品高清1区2区3区| 国产娇喘精品一区二区三区图片| 免费黄色网址网站| 激情婷婷丁香| 国产福利电影在线| 9999热视频在线观看| 玖玖精品在线| 久草成人资源| 午夜一区不卡| 风流少妇一区二区| 亚洲人午夜精品天堂一二香蕉| 狠狠干狠狠久久| 精品国产乱码久久久久久久| 日韩在线观看免费高清完整版| 91精品国产九九九久久久亚洲| 国产一区二区在线免费视频| 欧美亚州在线观看| 日本wwww视频| 国产ts丝袜人妖系列视频 | 日韩欧美亚洲天堂| 黄页网站在线看| www.99re7| 99久久亚洲精品日本无码| 色精品一区二区三区| jizzjizzjizz美国| 国产小视频在线播放| 天堂av中文在线观看| 国产精品jk白丝蜜臀av小说| 欧美精品日韩| 岛国一区二区三区| 亚洲mv在线观看| 精品99一区二区| 色与欲影视天天看综合网| 91免费国产网站| 91免费国产精品| 2一3sex性hd| 无码人妻久久一区二区三区不卡| 影音先锋中文字幕影院| 午夜3点看的视频| www.youjizz.com在线| 国产毛片精品| 日韩av高清在线观看| 国产精品久久久久久久久免费桃花 | 中文有码一区| 青青草成人在线观看| 国产精品美女www爽爽爽| 欧美精品在线观看一区二区| 亚洲日韩中文字幕| 91老司机精品视频| 欧美 丝袜 自拍 制服 另类| 公肉吊粗大爽色翁浪妇视频| 一级片aaaa| 夜夜未满十八勿进的爽爽影视| 九色视频在线播放| 中文久久电影小说| 麻豆成人免费电影| 欧美色播在线播放| 九九精品在线视频| 欧美高清视频一区| 国产精品一级无码| 中文字幕av无码一区二区三区| 一个人看的日本www的免费视频| 成人在线高清视频| 激情视频极品美女日韩| 精品在线观看免费| 欧洲一区在线电影| 2021国产精品视频| 国产 欧美 日韩 一区| 国产黄色录像视频| 亚洲人成色777777精品音频| 最近最新中文字幕在线| 国产高清精品二区| 麻豆国产欧美一区二区三区| 欧美色欧美亚洲高清在线视频| 欧美贵妇videos办公室| 一区二区精品国产| 三区四区在线观看| 特级xxxxx欧美| 免费的黄网站在线观看| 日韩理论电影| 中文av一区二区| 中文字幕日韩有码| 亚洲乱码一区二区三区| 精品人妻一区二区三区四区| 一区二区三区免费视频播放器 | 丝袜美腿亚洲一区| 日本久久精品电影| 国产精品久久久久久超碰 | www.91视频com| 国精一区二区三区| 国产综合色产| 亚洲国产综合人成综合网站| 国内免费久久久久久久久久久| 日韩精品在线观看av| 日韩乱码一区二区| 97视频免费| 久久电影在线| 国产色一区二区| 精品国产一区二区三区久久久狼| 一区二区不卡在线| 日韩精品一区二区在线播放| 羞羞免费视频| 成人精品动漫一区二区三区| 久久网站热最新地址| 自拍亚洲一区欧美另类| 老司机激情视频| 国产精品久久久久久久久久精爆| 日本调教视频在线观看| 婷婷成人影院| 亚洲乱码中文字幕综合| 午夜精品一区二区三区在线| 午夜dv内射一区二区| 精品人妻伦一区二区三区久久| 成人综合影院| 亚洲日本视频| 欧美一区二区三区四区久久| 久久国产一区二区| www.99re7| 免费看美女隐私的视频| 国产99亚洲| 亚洲va欧美va国产va天堂影院| 欧美日韩国产中文精品字幕自在自线| 国产精品九九久久久久久久| 这里只有精品在线观看视频| 国产精品伦一区二区三区视频 | 可以看av的网址| 久久夜色电影| 亚洲高清一区二区三区| 国产在线精品自拍| 久久久免费看片| 国产专区中文字幕| 日本黄色精品| 欧美亚洲国产怡红院影院| 久久一区二区三区av| 精品处破女学生| 色就是色亚洲色图| 一区二区国产精品| 亚洲国产精品女人久久久| 日韩最新中文字幕| 国产精品久久久久久在线| 麻豆视频在线观看免费| 久久精品国产久精国产| 国产亚洲欧洲高清一区| 日韩一级免费在线观看| 性生活一级大片| 天堂√中文在线| 99久久999| 亚洲欧美视频在线观看视频| 国产日韩精品在线播放| 人人干在线观看| 中文在线天堂库| 亚洲日本久久| 日韩精品中文字幕在线| 欧美一级视频在线播放| 亚洲一二三四2021不卡| 国产精品视频一区二区三区| 亚洲色图视频免费播放| 亚洲综合精品伊人久久| 亚洲国产精品午夜在线观看| 极品白浆推特女神在线观看| 日本伊人精品一区二区三区观看方式| 伊人伊成久久人综合网小说 | 国产剧情在线一区| 加勒比色综合久久久久久久久| 亚洲成人激情自拍| 日本最新一区二区三区视频观看| 亚洲综合免费视频| 久久夜夜操妹子| 亚洲免费在线视频| 欧洲成人一区二区| 国产黄色片免费观看| 欧美成人免费全部网站| 性做久久久久久免费观看| 日韩av一区二区三区在线| 国产视频第一页| 欧美一区=区三区| 精品久久久久久久久久ntr影视| 日韩福利一区二区三区| 亚洲成人一二三区| 在线日韩成人| 91精品国产免费| 91插插插插插插插插| 日本色七七影院| 国内激情久久| 欧美成人精品影院| 天天操夜夜操av| 免费污视频在线观看| 18成人在线观看| 一区二区三区四区免费视频| 亚洲另类图片另类电影| 少妇精品久久久一区二区三区| 精品国产乱码久久久久久老虎| 天天干天天草天天| 四虎国产成人永久精品免费| 首页欧美精品中文字幕| 欧美一级免费视频| 国产一级18片视频| jvid一区二区三区| 欧美日韩一区高清| 亚洲va在线va天堂va偷拍| 成人动漫h在线观看| 久久国产精品99久久人人澡| 国产精品91视频| 中文字幕你懂的| 极品国产人妖chinesets亚洲人妖| 精品成人佐山爱一区二区| 国产一卡二卡三卡四卡| 国产精品免费观看| 国产精品国产三级国产普通话99| 欧美日韩精品不卡| 欧美人与牲动交xxxx| 黑丝一区二区| 日本一区二区在线播放| 日韩国产亚洲欧美| 高清一区二区三区| 国产一区二区三区丝袜| 国产探花视频在线播放| 亚洲丝袜一区| 精品福利在线视频| 日本久久精品一区二区| 久草网在线视频| 久久久久国产精品免费免费搜索| 亚洲午夜精品一区二区| 欧洲毛片视频| 国产精品一区久久久久| 久久99精品久久久久久久青青日本| 一区二区三区视频在线免费观看 | 日韩一区二区免费视频| wwwxxxx在线观看| 在线观看二区| 青青草原综合久久大伊人精品优势 | 亚洲卡通欧美制服中文| 蜜桃传媒一区二区三区| 97影院手机在线观看| 国产色综合久久| 国产不卡一区二区视频| 日本成年免费网站| 国产精品无人区| 九一国产精品视频| 伊人发布在线| 亚洲精品综合在线| 久久99999| av电影免费在线观看| 色综合咪咪久久| 91丨porny丨对白| 亚洲永久av| 亚洲精品理论电影| 精品无码人妻一区二区三区 | 亚洲综合免费观看高清完整版在线| 国产97色在线 | 日韩| 国产女主播在线写真| 偷拍与自拍一区| 91亚洲一线产区二线产区| 久久青青色综合| 欧美一区二区三区免费| 99热6这里只有精品| 国产精品亚洲综合久久小说| 亚洲一区欧美激情| 久久亚洲综合网| 在线成人私人影院| 中文字幕一区在线观看| 日本在线一二三区| 伊人在我在线看导航| 欧美一区二区三区视频| 欧美做爰啪啪xxxⅹ性| 国产一区二区在线视频你懂的| 色综合久久悠悠| 亚洲精品18p| 日韩精品一级中文字幕精品视频免费观看 | 国产精品丝袜黑色高跟鞋| 国产精品xvideos88| 91在线在线观看| 公交车上扒开嫩j挺进去| 久久精品一区二区三区av| 一区二区三区免费播放| √天堂8资源中文在线| 亚洲欧美国产精品va在线观看| 69亚洲精品久久久蜜桃小说| 91欧美在线| 国产九色精品| 成人伦理视频网站| 欧美日韩国产色视频| 狂野欧美性猛交| 亚洲精品国产setv| 成人精品在线观看| eeuss影院www在线观看免费| 亚洲色图欧洲色图| 波多野结衣办公室33分钟| 日韩区欧美区| 国产精品wwww| 黄色小视频免费| 亚洲精品成人a在线观看| 亚洲国产欧美视频| 91精品丝袜国产高跟在线| 国产成人精品综合久久久| 免费看污网站| 亚洲在线视频一区| 国产在线观看免费视频软件| 激情综合网站| 久草精品电影| 国产小视频在线| 日韩电视剧在线观看免费网站| 亚洲一区中文字幕永久在线| 免费在线成人网| 男女曰b免费视频| 福利一区二区| 国产精品女视频| 国外av网站| 日韩一区二区影院|