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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1850|回復: 1
打印 上一主題 下一主題
收起左側

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. }
復制代碼


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

使用道具 舉報

沙發
ID:602844 發表于 2019-8-22 20:43 | 只看該作者
拿來學習,挺有用的。感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本成人福利视频 | 国产观看 | 欧美久久久久久久久 | 日韩欧美国产精品一区二区三区 | 亚洲三级在线观看 | 成人在线播放网站 | 国内精品久久久久久 | 精品久久久久一区二区国产 | 高清国产一区二区 | 成人av在线播放 | 久久久夜色精品亚洲 | 色站综合| 中文字幕亚洲一区二区三区 | 大学生a级毛片免费视频 | 亚洲精品性视频 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 亚洲最大福利网 | 久久精品国产一区 | 91视频大全 | 国产一区 | gogo肉体亚洲高清在线视 | 欧美日韩一区在线播放 | 伊人最新网址 | 日本福利视频 | 范冰冰一级做a爰片久久毛片 | 日韩久久久久久 | 亚洲精品888| 久久精品无码一区二区三区 | 精品国产乱码久久久久久久久 | 国产精品久久久久久久7电影 | 国产一区久久久 | 综合五月| 久久综合一区 | 精品国产乱码久久久久久88av | 男女羞羞的网站 | 国产精品久久久久久久久免费软件 | 精品麻豆剧传媒av国产九九九 | 欧美一区二区免费 | 亚洲 成人 在线 | 黄色一级大片在线免费看产 | 中文字幕日韩欧美一区二区三区 |