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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

  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. uchar keyscan()
  25. {
  26. uchar skey;                     /*   按鍵值標(biāo)記變量    */
  27.    
  28. P1 = 0xfe;
  29. while((P1 & 0xf0) != 0xf0)     /*      有按鍵按下     */
  30. {
  31.   delay(3);              /*      去抖動(dòng)延時(shí)     */
  32.   while((P1 & 0xf0) != 0xf0) /*      仍有鍵按下     */
  33.   {
  34.    switch(P1)    /*    識(shí)別按鍵并賦值   */
  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;                 /*         運(yùn)算符         */
  113. uchar i, bool = 0;
  114. init:           /*    goto語句定位標(biāo)簽    */
  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ù),字符是阿拉伯?dāng)?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ù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲欧美在线视频 | 国产福利在线 | 亚洲国产精品一区二区三区 | 午夜影院黄 | a级黄色片视频 | 伊人精品一区二区三区 | 成年人网站在线观看视频 | 亚洲 欧美 日韩在线 | 天天av天天好逼 | 一区二区三区在线 | 国产激情精品一区二区三区 | 日本高清aⅴ毛片免费 | 毛片.com| 久久精品 | 日本成人三级电影 | 美女在线观看国产 | 欧美a在线| 亚洲三区在线 | 特黄特色大片免费视频观看 | 国产欧美一级 | 国产高清久久久 | 北条麻妃一区二区三区在线观看 | 国产精品久久久久久婷婷天堂 | 色婷婷av99xx| 激情婷婷成人 | 国产精品爱久久久久久久 | 97超碰在线免费 | 麻豆hd| 99reav| av在线一区二区三区 | 午夜国产羞羞视频免费网站 | 久久精品一 | 嫩草影院网址 | 欧美a在线 | 欧美在线观看一区二区 | 亚洲欧洲精品一区 | 99精品久久99久久久久 | 九九综合九九 | 丁香综合 | 日本大香伊一区二区三区 | 国产精品成人一区二区 |