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

標題: 10以內的計算器 單片機程序 [打印本頁]

作者: kakami    時間: 2019-8-19 15:55
標題: 10以內的計算器 單片機程序
問題是按鍵時第一次和第二次按下時正常,按下第三個時一下子出3~4個相同的數求


單片機源程序如下:
  1. #include<reg51.h>

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. unsigned char code xianshi[16]={'*','0','#','=','7','8','9','/','4','5','6','-','1','2','3','+'};
  5. unsigned char code shu[16]={0,0,0,0,7,8,9,0,4,5,6,0,1,2,3,0};
  6. unsigned char code table[]={'0','1','2','3','4','5','6','7','8','9'};

  7. #define      anjian P1
  8. #define      LCD_D  P2
  9. sbit         LCD_RS=P3^0;
  10. sbit         LCD_RW=P3^1;
  11. sbit         LCD_E=P3^2;

  12. u8 jianwei,i=0,jieguo;
  13. u8 zancun[4];

  14. void delay(u16 i)                                    
  15. {
  16.         while(i--);        
  17. }


  18. void delayms(u16 c)   //延時函數ms         誤差 0us
  19. {
  20.     u8 a,b;
  21.         for (; c>0; c--)
  22.         {
  23.                  for (b=199;b>0;b--)
  24.                  {
  25.                           for(a=1;a>0;a--);
  26.                  }      
  27.         }            
  28. }

  29. void dat(u8 d)             //寫入數據
  30. {
  31.   LCD_E=0;                            //關閉使能端
  32.   LCD_RW=0;                    //進入  寫
  33.   LCD_RS=1;                           //選擇 數據

  34.   LCD_D=d;                           //輸入數據
  35.   delayms(1);                   //等待數據穩定

  36.   LCD_E=1;                           //打開使能端
  37.   delayms(5);                   //延時1ms
  38.   LCD_E=0;                           //關閉使能端

  39. }

  40. void junzhenanjian()
  41. {
  42.     u8 a;
  43.         anjian=0x0f;
  44.         if(anjian!=0x0f)
  45.         {        
  46.            delay(1000);             //消抖                                                                  
  47.            if(anjian!=0x0f)
  48.            {
  49.              anjian=0x0f;
  50.              switch(anjian)
  51.                {
  52.                 case(0x07): jianwei=0;break;
  53.                 case(0x0b): jianwei=1;break;
  54.                 case(0x0d): jianwei=2;break;
  55.                 case(0x0e): jianwei=3;break;
  56.                 }
  57.               anjian=0xf0;
  58.               switch(anjian)
  59.                 {
  60.                  case(0x70): jianwei=jianwei;   break;
  61.                  case(0xb0): jianwei=jianwei+4; break;
  62.                  case(0xd0): jianwei=jianwei+8; break;
  63.                  case(0xe0): jianwei=jianwei+12;break;
  64.                 }        
  65.                 while((a<50)&&(anjian!=0xf0))
  66.                 {
  67.               delay(1000);
  68.                        a++;
  69.                 }
  70.                         dat(xianshi[jianwei]);
  71.                         zancun[i]=jianwei;
  72.                         i++;
  73.                   }
  74.     }
  75. }



  76. void com(u8 c)             //寫入命令
  77. {
  78.   LCD_E=0;                            //關閉使能端
  79.   LCD_RW=0;                    //進入 寫
  80.   LCD_RS=0;                           //選擇 命令

  81.   LCD_D=c;                           //輸入命令
  82.   delayms(1);                   //等待數據穩定

  83.   LCD_E=1;                           //打開使能端
  84.   delayms(5);                   //延時1ms
  85.   LCD_E=0;                           //關閉使能端

  86. }



  87. void qingping()                 //清屏
  88. {
  89.   
  90.   com(0x06);                        //光標右移  
  91.   com(0x0c);                        //顯示光標
  92.   com(0x38);                        //8線 1行  5×10
  93.   com(0x01);                        //清屏
  94.   com(0x80);                        //設置起點
  95. }

  96. void main()
  97. {
  98.     u8 shi,ge;
  99.     qingping();
  100.         while(1)
  101.         {
  102.          junzhenanjian();
  103.          if(i==4)
  104.          {
  105.             switch(zancun[1])
  106.                 {
  107.                 case(0):jieguo=(shu[zancun[0]]*shu[zancun[2]]);break;
  108.                 case(7):jieguo=(shu[zancun[0]]/shu[zancun[2]]);break;
  109.                 case(11):jieguo=(shu[zancun[0]]-shu[zancun[2]]);break;
  110.                 case(15):jieguo=(shu[zancun[0]]+shu[zancun[2]]);break;
  111.                 }
  112.                 if(jieguo>=10)
  113.                 {
  114.                    shi=jieguo/10;
  115.                    ge=jieguo-shi*10;
  116.                    dat(table[shi]);
  117.                    dat(table[ge]);
  118.                 }
  119.                 else
  120.                 dat(table[jieguo]);
  121.                 i=0;
  122.          }  
  123.         }
  124. }
復制代碼



作者: xysds    時間: 2019-8-22 20:43
拿來學習,挺有用的。感謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 九九亚洲 | 中文字幕一区二区三区精彩视频 | 亚洲高清av| 91久久久久久久久久久久久 | 97视频在线免费 | 国产一区二区三区亚洲 | 一区日韩| 亚洲在线免费 | 巨大荫蒂视频欧美另类大 | 日韩欧美视频免费在线观看 | 四虎最新 | 伊人网综合 | 亚洲精品二三区 | 91精品国产91久久综合桃花 | www视频在线观看 | 欧美成年网站 | 青青久在线视频 | 韩日精品在线观看 | 亚洲福利视频网 | 亚洲视频区 | 国产精品久久久久久久久久免费 | 中文字幕亚洲一区二区三区 | 91在线视频免费观看 | 狠狠躁夜夜躁人人爽天天高潮 | 在线免费观看黄色网址 | 日本在线视频中文字幕 | 成人精品视频在线观看 | 奇米av | 国产精品一区在线观看 | 网站黄色在线免费观看 | 欧美一区二区久久 | 日本精品视频 | 天天干天天想 | 91偷拍精品一区二区三区 | 黄色大片视频 | 成人在线影视 | 亚洲国产精品一区二区久久 | 国产免费拔擦拔擦8x高清 | 久草色视频 | 亚洲一区二区三区视频 | 亚洲黄色片免费观看 |