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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

proteus8仿真簡易單片機(jī)計(jì)算器

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:412447 發(fā)表于 2018-10-19 20:09 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
51單片機(jī)的簡易計(jì)算器仿真設(shè)計(jì),有proteus仿真和程序,可以在附件中下載

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(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. #define PI=3.1415926
  8. uchar operand1[9], operand2[9];  
  9. uchar operator;                  
  10. void delay(uint);
  11. uchar keyscan();
  12. void disp(void);
  13. void buf(uint value);
  14. uint compute(uint va1,uint va2,uchar optor);

  15. uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,
  16.                 0x6d,0x7d,0x07,0x7f,0x6f,0x00};   
  17. uchar dbuf[8] = {10,10,10,10,10,10,10,10};         
  18.      
  19. void delay(uint z)
  20. {
  21.    uint x,y;
  22.    for(x=z;x>0;x--)
  23.    for(y=33;y>0;y--);
  24. }
  25. /*鍵盤掃描*/
  26. uchar keyscan()
  27. {
  28.     uchar skey;                  
  29.     P1 = 0xfe;
  30.     while((P1 & 0xf0) != 0xf0)      
  31.     {
  32.         delay(10);                  
  33.         while((P1 & 0xf0) != 0xf0)  
  34.         {
  35.             switch(P1)               
  36.             {
  37.                 case 0xee: skey = '7'; break;
  38.                 case 0xde: skey = '8'; break;
  39.                 case 0xbe: skey = '9'; break;
  40.                 case 0x7e: skey = 'f'; break;
  41.                 default:   skey = '#';
  42.             }
  43.             while((P1 & 0xf0) != 0xf0);
  44.         }
  45.     }
  46.     P1 = 0xfd;   
  47.     while((P1 & 0xf0) != 0xf0)
  48.     {
  49.         delay(10);
  50.         while((P1 & 0xf0) != 0xf0)
  51.         {
  52.             switch(P1)
  53.             {
  54.                 case 0xed: skey = '4'; break;
  55.                 case 0xdd: skey = '5'; break;
  56.                 case 0xbd: skey = '6'; break;
  57.                 case 0x7d: skey = '*'; break;
  58.                 default:   skey = '#';
  59.             }
  60.             while((P1 & 0xf0) != 0xf0);
  61.         }
  62.     }
  63.     P1 = 0xfb;
  64.     while((P1 & 0xf0) != 0xf0)
  65.     {
  66.         delay(10);
  67.         while((P1 & 0xf0) != 0xf0)
  68.         {
  69.             switch(P1)
  70.             {
  71.                 case 0xeb: skey = '1'; break;
  72.                 case 0xdb: skey = '2'; break;
  73.                 case 0xbb: skey = '3'; break;
  74.                 case 0x7b: skey = '-'; break;
  75.                 default: skey = '#';
  76.             }
  77.             while((P1 & 0xf0) != 0xf0);
  78.         }
  79.     }
  80.     P1 = 0xf7;
  81.     while((P1 & 0xf0) != 0xf0)
  82.     {
  83.         delay(10);
  84.         while((P1 & 0xf0) != 0xf0)
  85.         {
  86.             switch(P1)
  87.             {
  88.                 case 0xe7: skey =

  89. ; break;
  90.                 case 0xd7: skey = '0'; break;
  91.                 case 0xb7: skey = '='; break;
  92.                 case 0x77: skey = '+'; break;
  93.                 default:   skey = '#';
  94.             }
  95.             while((P1 & 0xf0) != 0xf0);
  96.         }
  97.     }
  98.     return skey;
  99. }
  100. void main()
  101. {   
  102. uint value1, value2, value;        
  103.     uchar ckey, cut1 = 0, cut2 = 0;   
  104.     uchar operator;                        
  105.     uchar i, bool;
  106. init:                                 
  107.     buf(0);                           
  108.     disp();
  109.     value = 0;
  110.     cut1 = cut2 = 0;
  111.     bool = 0;
  112.     for(i = 0;i < 9;i++)
  113.     {
  114.         operand1[i] = '\0';
  115.         operand2[i] = '\0';
  116.     }                               /*初始化*/
  117.     while(1)
  118.     {
  119.         ckey = keyscan();        
  120.         if(ckey != '#')
  121.         {
  122.             if(isdigit(ckey))         
  123.             {
  124.                 switch(bool)   
  125.                 {
  126.                     case 0:
  127.                             operand1[cut1] = ckey;
  128.                             operand1[cut1+1] = '\0';
  129.                             value1 = atoi(operand1);  
  130.                             cut1++;
  131.                             buf(value1);
  132.                             disp();
  133.                             break;
  134.                     case 1:
  135.                             operand2[cut2] = ckey;
  136.                             operand2[cut2+1] = '\0';
  137.                             value2 = atoi(operand2);
  138.                             cut2++;
  139.                             buf(value2);
  140.                             disp();
  141.                             break;
  142.                     default: break;
  143.                 }
  144.             }
  145.             else if(ckey=='+'||ckey=='-'||ckey=='*')
  146.             {
  147.                 bool = 1;   
  148.                 operator = ckey;
  149.                 buf(0);
  150.                 dbuf[7] = 10;           
  151.                 disp();
  152.             }
  153.                                                 else if(ckey=='f')
  154.                                                 {
  155.                                                           operator = ckey;
  156.                 value2=value1;
  157.                                                           buf(0);
  158.                 dbuf[7] = 10;           
  159.                 disp();
  160.                                                          
  161.                                                 }        
  162.             else if(ckey == '=')
  163.             {
  164.                 value = compute(value1,value2,operator);
  165.                 buf(value);
  166.                 disp();
  167.                 while(1)         
  168.                 {
  169.                     ckey = keyscan();
  170.                     if(ckey == '


  171. )   
  172.                         goto init;
  173.                     else
  174.                         {
  175.                             buf(value);
  176.                             disp();
  177.                         }
  178.                 }
  179.             }
  180.             else if(ckey ==

  181. )
  182.             {    goto init;}
  183.         }
  184.         disp();
  185.     }
  186. }
  187. uint compute(uint va1,uint va2,uchar optor)
  188. {
  189.     uint value;
  190.     switch(optor)
  191.     {
  192.         case '+'   : value = va1+va2;    break;
  193.         case '-'   : value = va1-va2;    break;
  194.         case '*'   : value = va1*va2;    break;
  195.                           case 'f'   :
  196.                                                  for(va1=va1-1;va1>0;--va1)        
  197.                                             {  
  198.                                                                                         va2*=va1;
  199.                                               value=va2;
  200.                                                                           }
  201.                                                                                 break;
  202.         default :  break;
  203.     }
  204.     return value;
  205. }
  206. void buf(uint val)
  207. {
  208.     uchar i;
  209.     if(val == 0)
  210.     {
  211.         dbuf[7] = 0;
  212.         i = 6;
  213.     }
  214.     else
  215.         for(i = 7; val > 0; i--)
  216.         {
  217.             dbuf[i] = val % 10;
  218.             val /= 10;
  219.         }
  220.     for( ; i > 0; i--)
  221.         dbuf[i] = 10;
  222. }
  223. void disp(void)
  224. {
  225.     uchar bsel, n;   
  226.     bsel=0xee;
  227.     for(n=0;n<8;n++)
  228.     {
  229.         P2=bsel;
  230.         P0=table[dbuf[n]];
  231.         bsel=_crol_(bsel,1);
  232.         delay(10);
  233.         P0=0x00;
  234.     }
  235. }
復(fù)制代碼


Keil代碼與Proteus8.8仿真下載: 簡易計(jì)算器.rar (145.63 KB, 下載次數(shù): 127)


0.png (7.47 KB, 下載次數(shù): 217)

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

使用道具 舉報

沙發(fā)
ID:647395 發(fā)表于 2019-11-22 17:43 | 只看該作者
太強(qiáng)了
回復(fù)

使用道具 舉報

板凳
ID:186895 發(fā)表于 2020-2-17 14:35 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

地板
ID:767625 發(fā)表于 2020-6-4 09:55 | 只看該作者
感謝大老分享
回復(fù)

使用道具 舉報

5#
ID:779375 發(fā)表于 2020-6-15 10:49 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

6#
ID:449849 發(fā)表于 2022-3-16 17:31 | 只看該作者
除法怎么用不了
回復(fù)

使用道具 舉報

7#
ID:1017001 發(fā)表于 2022-6-8 17:25 | 只看該作者
圖片,那個程序不知道怎么發(fā)上來

1.png (72.3 KB, 下載次數(shù): 147)

1.png
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 香蕉久久a毛片 | 亚洲成av| www性色| 国产精品免费一区二区三区四区 | 亚洲电影一区二区三区 | 超碰人人做 | 久久久久久亚洲欧洲 | 欧美在线一区二区三区四区 | 成人午夜在线观看 | 日韩久草 | 亚洲国产中文字幕 | 超碰一区二区 | 人人看人人草 | 一区二区三区不卡视频 | 蜜桃传媒一区二区 | 亚洲自拍一区在线观看 | 综合久久综合久久 | av黄色在线 | 伊人精品一区二区三区 | 精品国产欧美在线 | 日韩精品成人av | 日本午夜一区二区三区 | a级在线免费视频 | 日韩午夜 | 午夜资源 | av黄色在线| 国产美女在线观看 | 国产真实精品久久二三区 | 亚洲v日韩v综合v精品v | 9999久久| 欧美成人一区二区三区 | 亚洲精品亚洲人成人网 | 男人天堂网址 | 国产精品久久久久久久久久久新郎 | a黄视频| 91精品国产自产在线老师啪 | 成年人黄色免费视频 | 日日夜夜精品视频 | 99re在线观看 | 午夜爽爽爽男女免费观看 | 午夜视频精品 |