标题: 单片机模拟空调温度控制器,按键设定温度和控制风力,流水灯模拟风力 [打印本页]

作者: yuechen428    时间: 2020-9-12 08:25
标题: 单片机模拟空调温度控制器,按键设定温度和控制风力,流水灯模拟风力
空调温度控制器,LCD1206显示,按键设定温度和控制风力,流水灯模拟风力,红色LED指示灯代表加热电机工作,蓝色LED指示灯代表制冷电机工作。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

温度高于设定温度,降温指示灯亮


温度低于设定温度,加热指示灯亮



单片机源程序如下:
  1. /*用于QX—mini5学习板*/

  2. #include <reg52.h>
  3. #include "LCD1602.h"
  4. #include "DS18B20.h"
  5. //#include "uart.h"

  6. sbit jdq = P0^0;        //用蜂鸣器代替继电器

  7. sbit key1=P3^5;                //设定温度加
  8. sbit key2=P3^4;                //设定温度减
  9. sbit key3=P3^3;                //设定风力加
  10. sbit key4=P3^2;                //设定风力减

  11. uint   num=260;                //设定温度初始值
  12. uchar  num1=0;                //设定风力初始值

  13. uchar code table[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//风级
  14. //
  15. //void uart_init(void)
  16. //{
  17. //        TMOD=0x20;                   //用定时器设置串口波特率
  18. //        TH1=0xfd;
  19. //        TL1=0xfd;
  20. //        TR1=1;
  21. //        REN=1;          //串口初始化
  22. //        SM0=0;
  23. //        SM1=1;
  24. //        EA=1;           //开启总中断
  25. //        ES=1;                        //开启串口中断
  26. //}

  27. void keyscan()                //设定温度按键扫描函数
  28. {
  29.         if(key1==0)
  30.         {
  31.             delay(10);
  32.             if(key1==0)
  33.             {
  34.                    while(!key1);
  35.                num++;                      
  36.             }
  37.     }
  38.         if(key2==0)
  39.         {
  40.             delay(10);
  41.             if(key2==0)
  42.             {  
  43.                    while(!key2);
  44.                    num--;                  
  45.             }
  46.     }
  47. }  

  48. void keyscan1()             //设定风级按键扫描函数
  49. {
  50.         if(key3==0)
  51.         {
  52.             delay(10);
  53.             if(key3==0)
  54.             {
  55.                    while(!key3);
  56.                num1++;
  57.                    P1=table[num1];
  58.                    if(num1==9)
  59.                    {
  60.                      num1=0;
  61.                      P1=0xff;
  62.                    }                      
  63.             }
  64.     }
  65.         if(key4==0)
  66.         {
  67.             delay(10);
  68.             if(key4==0)
  69.             {  
  70.                    while(!key4);
  71.                    num1--;
  72.                    P1=table[num1];
  73.                    if(num1==255)
  74.                    num=0;                  
  75.             }
  76.     }
  77. }

  78. void main(void)                           //主函数
  79. {
  80.         uint temp;                                  
  81.     LCD_init( );                          //LCD初始化
  82. //        uart_init();               
  83.         string(0x80,"TE:");
  84.         string(0x80+0x40,"SE:");
  85.         string(0x80+0x0a,"WP:");
  86.        
  87.     while(1)
  88.     {
  89.                    tmpchange();                  //开始转换温度
  90.                
  91.                 temp = tmp();                  //读取到温度赋给temp

  92.                
  93.                 keyscan();                          //设置温度
  94.                 keyscan1();                          //设置风级
  95.                 if(temp/10 > num/10)  //读取温度大于设定温度
  96.                 {
  97.                         jdq = 0;                  //蜂鸣器报警(继电器吸合)
  98.                 }
  99.                 if(temp/10 < num/10)  //读取温度小于设定温度
  100.                 {
  101.                         jdq = 1;                  //蜂鸣器关闭(继电器断开)
  102.                 }
  103.                
  104.                 write_command(0x80+0x03);          //第一行第四位开始显示
  105.                 write_data(0x30+temp/100);
  106.                 write_data(0x30+temp/10%10);
  107.                 write_data('.');
  108.                 write_data(0x30+temp%10);
  109.                 write_data(' ');
  110.                 write_data('C');

  111.                 write_command(0x80+0x43);         //第二行第四位开始显示
  112.                 write_data(0x30+num/100);
  113.                 write_data(0x30+num/10%10);
  114.                 write_data('.');
  115.                 write_data(0x30+num%10);
  116.                 write_data(' ');
  117.                 write_data('C');               
  118.                
  119.                 write_command(0x80+0x0d);         //第一行第13位开始显示
  120.                 write_data(0x30+num1%10);
  121. //                SBUF = temp;                          
  122.     }
  123. }
复制代码

所有资料51hei提供下载:
空调温度控制器.zip (166.8 KB, 下载次数: 117)


作者: 1231566    时间: 2020-10-5 11:41
加热指示灯咋一直闪呀

作者: 夏一    时间: 2020-10-13 01:21
里面啥都没有
作者: 51hei团团    时间: 2020-10-13 01:26
夏一 发表于 2020-10-13 01:21
里面啥都没有

是的,就是一个仿真图加上网页上的程序
作者: yuechen428    时间: 2020-11-13 15:07
51hei团团 发表于 2020-10-13 01:26
是的,就是一个仿真图加上网页上的程序

模块化的程序  网页的是主函数的程序
作者: yuechen428    时间: 2020-11-13 15:08
夏一 发表于 2020-10-13 01:21
里面啥都没有

模块化编程 网页上的是主函数程序
作者: pgdw    时间: 2021-1-6 18:05
良心资源,很有参考学习价值,感谢楼主的无私分享。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1