找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1607|回复: 2
收起左侧

单片机程序仿真不行,k1摆臂开关好用,k2--k6液晶不显示

[复制链接]
ID:916585 发表于 2021-5-9 01:43 | 显示全部楼层 |阅读模式
5黑币
本帖最后由 9丫鬟 于 2021-5-9 21:00 编辑

程序仿真后,k1摆臂开关好用,k2--k6液晶不显示,而且相关联的继电器电路和加热制冷也不行
捕获.JPG

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>

  4. #define uchar  unsigned char
  5. #define uint   unsigned int
  6. #define ulong   unsigned long

  7. #include "1602.h"
  8. #include "ad.h"        
  9. #include<DS18B20.h>

  10. uchar code zifu0[]=" Star ";   //开机显示Intelligent beverage machine
  11. uchar code zifu1[]=" TT00 TM00 TB00  ";                                        //显示各个温度
  12. unsigned char s,i,j,keynum;
  13. int ans1,ans2,ans3,ans;         //读取的温度寄存器
  14. uchar heatflag=1;

  15. //负载        
  16. sbit out=P0^3;
  17. //蜂鸣器
  18. sbit    beer=P3^7;
  19. //键盘
  20. sbit    k1=P2^5;
  21. sbit    k2=P2^6;
  22. sbit    k3=P2^7;
  23. sbit    k4=P3^6;

  24. sbit    k5=P3^5;
  25. sbit    k6=P0^7;
  26. sbit    heat=P2^3;
  27. sbit    cry=P2^4;
  28. sbit    hout=P0^2;
  29. sbit   cout=P0^0;
  30. sbit    nout=P0^1;
  31. void delay_ms1(int x)//延时1ms
  32. {
  33.   unsigned char i,j;
  34.   for(i=x;i>0;i--)
  35.   for(j=110;j>0;j--);
  36. }

  37. void delay(void)//延时5ms
  38. {
  39.   unsigned char i,j;
  40.   for(i=10;i>0;i--)
  41.   for(j=248;j>0;j--);
  42. }

  43. void delay1(void)//延时10ms
  44. {
  45.   unsigned char i,j,k;
  46.   for(k=10;k>0;k--)
  47.   for(i=20;i>0;i--)
  48.   for(j=248;j>0;j--);

  49. }

  50. uchar key_num()
  51. {
  52.         if(k2 == 0)
  53.         {
  54.                 delay_ms1(1);
  55.                 if(k2 == 0)
  56.                 {
  57.                         keynum=2;
  58.                 }
  59.                 while(!k2);
  60.         }
  61.         if(k3 == 0)
  62.         {
  63.                 delay_ms1(1);
  64.                 if(k3 == 0)
  65.                 {
  66.                         keynum=3;
  67.                 }
  68.                 while(!k3);
  69.         }
  70.           if(k4 == 0)
  71.         {
  72.                 delay_ms1(1);
  73.                 if(k4 == 0)
  74.                 {
  75.                         keynum=4;
  76.                 }
  77.                 while(!k4);
  78.         }
  79.         if(k5 == 0)
  80.         {
  81.                 delay_ms1(1);
  82.                 if(k5 = 0)
  83.                 {
  84.                         keynum=5;
  85.                 }
  86.                 while(!k5);
  87.         }
  88.            if(k6 == 0)
  89.         {
  90.                 delay_ms1(1);
  91.                 if(k6 == 0)
  92.                 {
  93.                         keynum=6;
  94.                 }
  95.                 while(!k6);
  96.         }  return keynum;
  97.         }

  98. //显示参数------------------------------`
  99. void display()
  100. {
  101.         
  102.    
  103.          DS18B20_start_change1();         //开始读温度
  104.          ans1=DS18B20_read_date1();
  105.          delay1();
  106.          DS18B20_start_change2();         //开始读温度
  107.          ans2=DS18B20_read_date2();
  108.          delay1();
  109.          DS18B20_start_change3();         //开始读温度
  110.          ans3=DS18B20_read_date3();
  111.          delay1();
  112.          //ans=(ans1+ans2+ans3)/3;
  113.         
  114.    lcd1602_adr(0x43);
  115.    lcd1602_writenumber(0x30+ans1%100/10);         
  116.    lcd1602_writenumber(0x30+ans1%10/1);         
  117.         
  118.          lcd1602_adr(0x48);
  119.    lcd1602_writenumber(0x30+ans2%100/10);         
  120.    lcd1602_writenumber(0x30+ans2%10/1);         

  121.          lcd1602_adr(0x4d);
  122.    lcd1602_writenumber(0x30+ans3%100/10);         
  123.    lcd1602_writenumber(0x30+ans3%10/1);         

  124.         }
  125. void displayfun(int s)
  126. {
  127.         switch(s)
  128.         {
  129.          case(1):  
  130.                  LCD1602_string(1,1," Onekey heating  ");//温度低于75可以一键加热
  131.                  if(ans1<75){
  132.                         heat=0;
  133.                 }else{
  134.                         heat=1;
  135.                         LCD1602_string(1,1," Heating  over  ");           
  136.                 }
  137.                 break;
  138.          case(2):
  139.                  LCD1602_string(1,1," Onekey cooling  ");
  140.                 if(ans2>5){
  141.                         cry=0;
  142.                 }else{
  143.                         cry=1;
  144.                         LCD1602_string(1,1," Cooling  over  ");
  145.                         }
  146.                         break;
  147.                                                   
  148.                 case(3):  
  149.                  LCD1602_string(1,1," HOT water out ");//         出水
  150.                 break;
  151.                 case(4):
  152.                  LCD1602_string(1,1," COLD water out ");//         出水
  153.                 break;
  154.                 case(5):  
  155.                  LCD1602_string(1,1," NORMAL water out ");//         出水
  156.                 break;
  157.                 default:break;
  158.         }
  159. }
  160. //主函数
  161. void main()
  162. {
  163.         unsigned char NUM;               
  164.   lcd1602_init();     //初始化显示屏
  165.   LCD1602_string(1,1,zifu0);         
  166.   LCD1602_string(2,1,zifu1);         //初始化界面
  167.   while(1)
  168.   {               
  169.      display();        
  170.      if(ans1>110)
  171.                                 {
  172.                                         beer=0;
  173.                                         LCD1602_string(1,1,"  Temp is high   ");
  174.                                         }
  175.                         
  176.                         if(k1 == 0)
  177.                 {
  178.                            delay_ms1(1);
  179.                            if(k1 == 0)
  180.                         {
  181.                         /*        if(ans1<70)
  182.                                 {
  183.                                         beer=0;
  184.                                         LCD1602_string(1,1,"  Temp is cool   ");           //温度过低<70,不进行工作
  185.                                 }else{        */
  186.                                       LCD1602_string(1,1," Working ");
  187.                                  //MotorRight();
  188.                         }
  189.                 }
  190.                
  191.         }
  192.                 NUM=key_num();                                //读按键的位置码
  193.                 switch(NUM)                                        //判断按键值
  194.                 {               
  195.                         case (2):cry=1;displayfun(1);        break;                  //K1是开机键
  196.                         case (3):heat=1;displayfun(2); break;      
  197.                         case (4):hout=1;displayfun(3);        break;
  198.                         case (5):displayfun(4);        break;
  199.                         case (6):cout=1;displayfun(5);        break;
  200.                         case (7):nout=1;displayfun(6);        break;
  201.                         default: break;               
  202.                 }        
  203.         }  



复制代码


仿真程序.zip

143.3 KB, 下载次数: 3

全部源程序

回复

使用道具 举报

ID:57657 发表于 2021-5-9 11:03 | 显示全部楼层
你的代码不完整,需要提供 1602.h、ad.h、DS18B20.h 等所有文件,无法判断问题出在哪里。
回复

使用道具 举报

ID:916585 发表于 2021-5-9 21:01 | 显示全部楼层
npn 发表于 2021-5-9 11:03
你的代码不完整,需要提供 1602.h、ad.h、DS18B20.h 等所有文件,无法判断问题出在哪里。

您好,我已把源程序补上,麻烦您指导一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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