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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個單片機程序錯誤如何修改?128行K1num顯示錯誤

[復制鏈接]
跳轉到指定樓層
樓主
ID:712826 發表于 2020-4-25 22:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit CS=P1^0;
  6. sbit CLK=P1^2;
  7. sbit DO=P1^1;
  8. sbit Wat=P1^3;
  9. sbit k1=P3^5;
  10. sbit k2=P3^6;
  11. sbit k3=P3^7;
  12. sbit lcd_rw=P2^2;
  13. sbit lcd_rs=P2^0;
  14. sbit lcd_e=P2^1;
  15. uchar adat;                         //讀出1302的數據
  16. uint k1n;
  17. uchar shiduH=70,shiduL=20;                  //濕度的上下限
  18. void delay(uint time)
  19. {
  20.         uint i,j;
  21.         for(i=0;i<time;i++)
  22.                 for(j=0;j<100;j++);
  23. }
  24. uchar adc0832()
  25. {
  26.         uchar i,temp,temp1,num;
  27.         CLK=0; DO=1;CS=0; CLK=1;
  28.         CLK=0; DO=1;      CLK=1;
  29.         CLK=0; DO=0;      CLK=1;
  30.         CLK=0; DO=1;
  31.         for(i=0;i<8;i++)
  32.         {
  33.                 CLK=1;
  34.                 CLK=0;
  35.                 temp<<=1;
  36.                 if(DO)temp++;
  37.         }
  38.            for(i=0;i<8;i++)
  39.         {
  40.                 temp1>>=1;
  41.                 if(DO)temp1+=0x80;
  42.                 CLK=1;
  43.                 CLK=0;                                                         
  44.         }
  45.         CLK=1;DO=1;
  46.         CS=1;
  47.         if(temp==temp1) num=100-temp*99/255;        //                adat=100-adat*99/255;
  48.         return num;
  49. }
  50. void Read_Busy()           //忙檢測函數,判斷bit7是0,允許執行;1禁止
  51. {
  52.     unsigned char sta;      //
  53.     P0 = 0xff;
  54.     lcd_rs= 0;
  55.     lcd_rw = 1;
  56.     do
  57.     {
  58.         lcd_e= 1;
  59.         sta = P0;
  60.         lcd_e = 0;    //使能,用完就拉低,釋放總線
  61.     }
  62.         while(sta & 0x80);
  63. }

  64. void Lcd1602_Write_Cmd(uchar cmd)     //寫命令
  65. {
  66.     Read_Busy();
  67.     lcd_rs = 0;
  68.     lcd_rw = 0;
  69.     P0= cmd;
  70.     lcd_e = 1;
  71.     lcd_e = 0;   
  72. }

  73. void Lcd1602_Write_Data(uchar dat)   //寫數據
  74. {
  75.       Read_Busy();
  76.       lcd_rs = 1;
  77.       lcd_rw = 0;
  78.       P0 = dat;
  79.       lcd_e = 1;
  80.       lcd_e = 0;
  81. }
  82. void init_lcd()
  83. {
  84.         uchar code D[]="RH:  ";
  85.         uchar code T[]="RL:  ";                   //顯示濕度下限
  86.         uchar code S[]="ShiDu:  ";
  87.         uchar i;
  88.     Lcd1602_Write_Cmd(0x38);    //打開,5*8,8位數據
  89.     Lcd1602_Write_Cmd(0x0c);
  90.     Lcd1602_Write_Cmd(0x06);
  91.     Lcd1602_Write_Cmd(0x01);    //清屏  
  92.         Lcd1602_Write_Cmd(0x80);
  93.         for(i=0;i<5;i++)
  94.                 {
  95.                         Lcd1602_Write_Data(D[ i]);
  96.                         delay(5);
  97.                 }
  98.         Lcd1602_Write_Cmd(0x87);
  99.         for(i=0;i<8;i++)
  100.                 {
  101.                         Lcd1602_Write_Data(S);
  102.                         delay(5);
  103.                 }
  104.         Lcd1602_Write_Cmd(0x80+0x40);
  105.         for(i=0;i<5;i++)
  106.                 {
  107.                         Lcd1602_Write_Data(T);
  108.                         delay(5);
  109.                 }
  110. }
  111. void key0()
  112. {
  113.         if(k1==0)
  114.         {
  115.                 delay(5);
  116.                 if(k1==0)
  117.                 {
  118.                         while(!k1);
  119.                         TR0=0;
  120.                         Wat=1;
  121.                         Lcd1602_Write_Cmd(0x0f);
  122.                         k1n++;
  123.                         if(k1n==4)
  124.                         {
  125.                                 TR0=1;
  126.                                 k1num=0;
  127.                                 Lcd1602_Write_Cmd(0x0c);
  128.                                 Lcd1602_Write_Cmd(0x80+0x4a) ;
  129.                                 Lcd1602_Write_Data(0x10);
  130.                                 Lcd1602_Write_Data(0x10);
  131.                                 Lcd1602_Write_Data(0x10);
  132.                         }
  133.                 }
  134.         }
  135. }
  136. void key1()
  137. {
  138.         if(k1n==1)
  139.         {
  140.                 Lcd1602_Write_Cmd(0x84);
  141.                 if(k2==0)
  142.                 {
  143.                         delay(5);
  144.                         if(k2==0)
  145.                         {
  146.                                 while(!k2);
  147.                                 shiduH++;
  148.                                 if(shiduH>99)shiduH=99;
  149.                                 Lcd1602_Write_Cmd(0x83);
  150.                                 Lcd1602_Write_Data(0x30+shiduH/10);
  151.                                 Lcd1602_Write_Data(0x30+shiduH%10);
  152.                         }
  153.                 }
  154.                 if(k3==0)
  155.                 {
  156.                         delay(5);
  157.                         if(k3==0)
  158.                         {
  159.                                 while(!k3);
  160.                                 shiduH--;
  161.                                 if(shiduH<=shiduL)shiduH=shiduL+1;
  162.                                 Lcd1602_Write_Cmd(0x83);
  163.                                 Lcd1602_Write_Data(0x30+shiduH/10);
  164.                                 Lcd1602_Write_Data(0x30+shiduH%10);
  165.                         }
  166.                 }
  167.                 Lcd1602_Write_Cmd(0x84);
  168.         }
  169.         if(k1n==2)
  170.         {
  171.                 Lcd1602_Write_Cmd(0x80+0x44);
  172.                 if(k2==0)
  173.                 {
  174.                         delay(5);
  175.                         if(k2==0)
  176.                         {
  177.                                 while(!k2);
  178.                                 shiduL++;
  179.                                 if(shiduL>shiduH)shiduL=shiduH-1;
  180.                                 Lcd1602_Write_Cmd(0x80+0x43);
  181.                                 Lcd1602_Write_Data(0x30+shiduL/10);
  182.                                 Lcd1602_Write_Data(0x30+shiduL%10);
  183.                         }
  184.                 }
  185.                 if(k3==0)
  186.                 {
  187.                         delay(5);
  188.                         if(k3==0)
  189.                         {
  190.                                 while(!k3);
  191.                                 shiduL--;
  192.                                 if(shiduL<=1)shiduL=1;
  193.                                 Lcd1602_Write_Cmd(0x80+0x43);
  194.                                 Lcd1602_Write_Data(0x30+shiduL/10);
  195.                                 Lcd1602_Write_Data(0x30+shiduL%10);
  196.                         }
  197.                 }
  198.            Lcd1602_Write_Cmd(0x80+0x44);
  199.         }
  200.         if(k1n==3)
  201.         {               
  202.                         Lcd1602_Write_Cmd(0x80+0x4a) ;
  203.                         Lcd1602_Write_Data(0x3e);
  204.                         Lcd1602_Write_Data(0x3e);
  205.                         Lcd1602_Write_Data(0x3e);
  206.                         Lcd1602_Write_Cmd(0x0c) ;
  207.                         if(k2==0)
  208.                         {        
  209.                                 delay(5);
  210.                                 if(k2==0)
  211.                                 {
  212.                                         while(!k2);
  213.                                         Wat=0;
  214.                                 }        
  215.                         }
  216.                         if(k3==0)
  217.                         {
  218.                                 delay(5);
  219.                                 if(k3==0)
  220.                                 {
  221.                                         while(!k3);
  222.                                         Wat=1;
  223.                                 }
  224.                         }
  225.         }

  226. }
  227. void water()
  228. {
  229.         if(adat<shiduL)        TR0=1;
  230.         if(adat>shiduH)
  231.         {
  232.                 TR0=0;
  233.                 Wat=1;
  234.         }
  235. }
  236. void disp0()
  237. {
  238.         adat=adc0832();
  239.         Lcd1602_Write_Cmd(0x83);
  240.         Lcd1602_Write_Data(0x30+shiduH/10);
  241.         Lcd1602_Write_Data(0x30+shiduH%10);

  242.         Lcd1602_Write_Cmd(0x8D);
  243.         Lcd1602_Write_Data(0x30+adat/10);
  244.         Lcd1602_Write_Data(0x30+adat%10);

  245.         Lcd1602_Write_Cmd(0x80+0x43);
  246.         Lcd1602_Write_Data(0x30+shiduL/10);
  247.         Lcd1602_Write_Data(0x30+shiduL%10);
  248. }
  249. void main()
  250. {
  251.         TMOD=0x01;
  252.         TH0=(65536-50000)/256;        //初值50ms               
  253.         TL0=(65536-50000)%256;
  254.         EA=1;                   //開總中斷
  255.         ET0=1;                 //開定時器0中斷
  256. //        TR0=1;                 //啟動定時器0
  257.         k1n=0;
  258.           init_lcd();
  259.         while(1)
  260.         {
  261.                 key0();
  262.                 if(k1n==0)
  263.                 {
  264.                         adat=adc0832();
  265.                         water();
  266.                         disp0();               
  267.                 }
  268.                 if(k1n!=0)
  269.                 {
  270.                         key1();
  271.                 }
  272.         }
  273. }
  274. void t0()interrupt 1
  275. {
  276.         uchar count;
  277.         TH0=(65536-50000)/256;
  278.         TL0=(65536-50000)%256;
  279.         count++;
  280.         if(count>0&&count<=60)
  281.         {
  282.                 Wat=0;
  283.         }
  284.         if(count>60&&count<=120)
  285.         {
  286.                 if(count==120)count=0;
  287.                 Wat=1;
  288.         }

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

使用道具 舉報

沙發
ID:213173 發表于 2020-4-26 06:05 | 只看該作者
k1num這個變量沒有定義,根據上下文判斷應該是樓主筆誤把k1n寫成k1num。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久久不卞 | 美女在线观看av | www.国产精| 一区二区久久 | 中文成人在线 | 色婷婷国产精品综合在线观看 | 涩涩操| 欧美性影院| av网站在线播放 | 欧美日韩福利 | 免费观看一级特黄欧美大片 | 免费观看一级视频 | 久久国产精品精品国产色婷婷 | 99精品热视频| 国产精品久久久久久久久免费樱桃 | 色婷婷精品国产一区二区三区 | 97色在线观看免费视频 | 欧美一区二区大片 | 色就是色欧美 | 婷婷免费在线 | 欧美在线播放一区 | 国产欧美综合在线 | 欧美日韩一区二区在线观看 | 日日人人 | 日韩在线电影 | 日韩成人在线视频 | 黄色网址免费在线观看 | 国产精品高潮呻吟久久 | 福利片在线看 | 精品国产伦一区二区三区观看方式 | 国产精品福利在线观看 | 给我免费的视频在线观看 | 成人欧美一区二区三区黑人孕妇 | 在线视频 欧美日韩 | ww亚洲ww亚在线观看 | 日韩精品一区二区三区视频播放 | 欧美视频 亚洲视频 | 亚洲三区视频 | 亚洲成年影院 | 一区久久| 色婷婷av一区二区三区软件 |