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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數(shù)碼管與按鍵 Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:780752 發(fā)表于 2020-6-28 18:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

  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ù)   */  
  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. uchar keyscan()
  25. {
  26. uchar skey;                     /*   按鍵值標記變量    */
  27.    
  28. P1 = 0xfe;
  29. while((P1 & 0xf0) != 0xf0)     /*      有按鍵按下     */
  30. {
  31.   delay(3);              /*      去抖動延時     */
  32.   while((P1 & 0xf0) != 0xf0) /*      仍有鍵按下     */
  33.   {
  34.    switch(P1)    /*    識別按鍵并賦值   */
  35.    {
  36.     case 0xee: skey = '7'; break;
  37.     case 0xde: skey = '8'; break;
  38.     case 0xbe: skey = '9'; break;
  39.     case 0x7e: skey = '/'; break;
  40.      
  41.     default:   skey = '#';
  42.    }
  43.    while((P1 & 0xf0) != 0xf0) /*   等待按鍵松開   */
  44.     ;
  45.   }
  46. }

  47. P1 = 0xfd;
  48. while((P1 & 0xf0) != 0xf0)
  49. {
  50.   delay(3);
  51.   while((P1 & 0xf0) != 0xf0)
  52.   {
  53.    switch(P1)
  54.    {
  55.     case 0xed: skey = '4'; break;
  56.     case 0xdd: skey = '5'; break;
  57.     case 0xbd: skey = '6'; break;
  58.     case 0x7d: skey = '*'; break;
  59.      
  60.     default:   skey = '#';
  61.    }
  62.    while((P1 & 0xf0) != 0xf0)
  63.     ;
  64.   }
  65. }

  66. P1 = 0xfb;
  67. while((P1 & 0xf0) != 0xf0)
  68. {
  69.   delay(3);
  70.   
  71.   while((P1 & 0xf0) != 0xf0)
  72.   {
  73.    switch(P1)
  74.    {
  75.     case 0xeb: skey = '1'; break;
  76.     case 0xdb: skey = '2'; break;
  77.     case 0xbb: skey = '3'; break;
  78.     case 0x7b: skey = '-'; break;
  79.      
  80.     default: skey = '#';
  81.    }
  82.    while((P1 & 0xf0) != 0xf0)
  83.     ;
  84.   }
  85. }

  86. P1 = 0xf7;
  87. while((P1 & 0xf0) != 0xf0)
  88. {
  89.   delay(3);
  90.   while((P1 & 0xf0) != 0xf0)
  91.   {
  92.    switch(P1)
  93.    {
  94.     case 0xe7: skey = '

  95. ; break;
  96.     case 0xd7: skey = '0'; break;
  97.     case 0xb7: skey = '='; break;
  98.     case 0x77: skey = '+'; break;
  99.      
  100.     default:   skey = '#';
  101.    }
  102.    while((P1 & 0xf0) != 0xf0)
  103.     ;
  104.   }
  105. }
  106. return skey;
  107. }
  108. void main()
  109. {
  110. uint value1, value2, value;     /*    數(shù)值1,數(shù)值2,結(jié)果    */
  111. uchar ckey, cut1 = 0, cut2 = 0;    /*    ckey鍵盤輸入字符    */
  112. uchar operator;                 /*         運算符         */
  113. uchar i, bool = 0;
  114. init:           /*    goto語句定位標簽    */
  115. buf(0);                            /*         初始化         */
  116. disp();
  117. value = 0;
  118. cut1 = cut2 = 0;
  119. bool = 0;
  120. for(i = 0;i < 9;i++)
  121. {
  122.   operand1[i] = '\0';
  123.   operand2[i] = '\0';
  124. }                                  /*         初始化         */
  125. while(1)
  126. {
  127.   ckey = keyscan();             /*         讀取鍵盤        */
  128.   if(ckey != '#')
  129.   { /*  isdigit函數(shù),字符是阿拉伯數(shù)字返回非0值,否則返回0  */
  130.    if(isdigit(ckey))         
  131.    {
  132.     switch(bool)
  133.     {
  134.      case 0:
  135.        operand1[cut1] = ckey;
  136.        operand1[cut1+1] = '\0';
  137.        value1 = atoi(operand1);  
  138.        cut1++;
  139.        buf(value1);
  140.        disp();
  141.        break;
  142.      case 1:
  143.        operand2[cut2] = ckey;
  144.        operand2[cut2+1] = '\0';
  145.        value2 = atoi(operand2);
  146.        cut2++;
  147.        buf(value2);
  148.        disp();
  149.        break;
  150.       
  151.      default: break;
  152.     }
  153.    }
  154.    else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')
  155.    {
  156.     bool = 1;
  157.     operator = ckey;
  158.     buf(0);
  159.     dbuf[7] = 10;
  160.     disp();
  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. )          /* 如果有清零鍵按下跳轉(zhuǎn)到開始 */
  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 '/' : value = va1/va2; break;
  196.   
  197.   default :  break;
  198. }
  199. return value;
  200. }
  201. void buf(uint val)
  202. {
  203. uchar i;
  204. if(val == 0)
  205. {
  206.   dbuf[7] = 0;
  207.   i = 6;
  208. }

  209. else
  210.   for(i = 7; val > 0; i--)
  211.   {
  212.    dbuf[i] = val % 10;
  213.    val /= 10;
  214.   }

  215. for( ; i > 0; i--)
  216.   dbuf[i] = 10;
  217. }
  218. void disp(void)
  219. {
  220. uchar bsel, n;

  221. bsel=0x01;
  222.     for(n=0;n<8;n++)
  223.     {
  224.   P2=bsel;
  225.   P0=table[dbuf[n]];
  226.   bsel=_crol_(bsel,1);
  227.   delay(3);
  228.   P0=0xff;
  229.     }
  230. }
復(fù)制代碼

附件.zip

56.46 KB, 下載次數(shù): 2, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级亚洲| 亚洲精品视频在线看 | 欧美一级二级三级 | 一区二区在线不卡 | 女同久久 | 中文字幕视频在线免费 | 国产精品一区二 | 免费黄色大片 | 精品国产乱码久久久久久牛牛 | 日韩第一页 | 亚洲综合无码一区二区 | 国产一区二区黑人欧美xxxx | 亚洲国产欧美日韩 | 欧美日韩精品久久久免费观看 | 国产激情一区二区三区 | 欧美日韩在线一区二区 | 天堂一区二区三区四区 | 99热成人在线 | 欧洲一级毛片 | www国产亚洲精品久久网站 | 亚洲视频国产视频 | 精品欧美乱码久久久久久1区2区 | 国产网站在线 | 欧美一级高潮片免费的 | 欧美日韩专区 | 久久久久久亚洲 | 亚洲一区二区精品视频 | 国产精品久久久久久久7777 | 日韩免费高清视频 | 精品亚洲一区二区三区四区五区 | 国产激情一区二区三区 | 在线一区| 亚洲一区二区三区免费观看 | a在线观看| 亚洲精品一区在线观看 | 中文字幕第三页 | 天天色图| 欧美成人a| 久久国产一区 | 日本a网站 | 亚州精品天堂中文字幕 |