找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1105|回复: 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 单片机教程网

快速回复 返回顶部 返回列表