找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3628|回复: 6
收起左侧

单片机模拟空调温度控制器,按键设定温度和控制风力,流水灯模拟风力

  [复制链接]
ID:507257 发表于 2020-9-12 08:25 | 显示全部楼层 |阅读模式
空调温度控制器,LCD1206显示,按键设定温度和控制风力,流水灯模拟风力,红色LED指示灯代表加热电机工作,蓝色LED指示灯代表制冷电机工作。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei图片20200912081952.png
温度高于设定温度,降温指示灯亮

51hei图片20200912081938.png
温度低于设定温度,加热指示灯亮

模块化编程

模块化编程


单片机源程序如下:
  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, 下载次数: 113)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:825816 发表于 2020-10-5 11:41 | 显示全部楼层
加热指示灯咋一直闪呀
回复

使用道具 举报

ID:432653 发表于 2020-10-13 01:21 | 显示全部楼层
里面啥都没有
回复

使用道具 举报

ID:328014 发表于 2020-10-13 01:26 | 显示全部楼层

是的,就是一个仿真图加上网页上的程序
回复

使用道具 举报

ID:507257 发表于 2020-11-13 15:07 | 显示全部楼层
51hei团团 发表于 2020-10-13 01:26
是的,就是一个仿真图加上网页上的程序

模块化的程序  网页的是主函数的程序
回复

使用道具 举报

ID:507257 发表于 2020-11-13 15:08 | 显示全部楼层

模块化编程 网页上的是主函数程序

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:250631 发表于 2021-1-6 18:05 | 显示全部楼层
良心资源,很有参考学习价值,感谢楼主的无私分享。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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