欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 10以內(nèi)的計算器 單片機(jī)程序 [打印本頁]

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


單片機(jī)源程序如下:
  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)   //延時函數(shù)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)             //寫入數(shù)據(jù)
  30. {
  31.   LCD_E=0;                            //關(guān)閉使能端
  32.   LCD_RW=0;                    //進(jìn)入  寫
  33.   LCD_RS=1;                           //選擇 數(shù)據(jù)

  34.   LCD_D=d;                           //輸入數(shù)據(jù)
  35.   delayms(1);                   //等待數(shù)據(jù)穩(wěn)定

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

  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;                            //關(guān)閉使能端
  79.   LCD_RW=0;                    //進(jìn)入 寫
  80.   LCD_RS=0;                           //選擇 命令

  81.   LCD_D=c;                           //輸入命令
  82.   delayms(1);                   //等待數(shù)據(jù)穩(wěn)定

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

  86. }



  87. void qingping()                 //清屏
  88. {
  89.   
  90.   com(0x06);                        //光標(biāo)右移  
  91.   com(0x0c);                        //顯示光標(biāo)
  92.   com(0x38);                        //8線 1行  5×10
  93.   com(0x01);                        //清屏
  94.   com(0x80);                        //設(shè)置起點
  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. }
復(fù)制代碼



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




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1