本设计使用DS18B20温度传感器来进行检测温度,设置的数据为float形式,阈值使用的为int整型,使用独立按键来进行温度阈值的加减,当系统检测到的温度高于阈值温度的时候,风扇会打开进行模拟降温,当检测到的温度低于阈值的时候,加热器会自动打开,加模拟升温!仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include "config.h"
- #include "key.h"
- #include "ds18b20.h"
- #include "lcd1602.h"
- #include "stdio.h"
- sbit fengsan = P3^7;
- sbit jiare = P1^0;
- uint t = 20;
- void Display(void)
- {
- uchar Buffer[20];
- sprintf(Buffer,"%d",t);
- lcd1602_show_string(7,1,Buffer);
- }
- /*******************************************************************************
- * 函 数 名 : key_press
- * 函数功能 : 检测独立按键是否按下,按下则返回对应键值
- * 输 入 : mode=0:单次扫描按键
- mode=1:连续扫描按键
- * 输 出 :
- KEY1_PRESS:K1按下温度阈值加1
- KEY2_PRESS:K2按下温度阈值减1
- *******************************************************************************/
- void key_press()
- {
- uchar key = 0;
- key = key_scan(0);
- if (key==KEY1_PRESS)
- {
- if(t<100)
- t++;
- }
- else if (key==KEY2_PRESS)
- {
- if (t>0)
- t--;
- }
- }
- void baojing()
- {
- if(t<Temp)
- {
- jiare = 1;
- }
- else
- {
- jiare = 0;
- }
- if (t>Temp)
- {
- fengsan = 0;
- }
- else
- {
- fengsan = 1;
- }
- }
-
- //主函数
- void main(void)
- {
- uchar Buffer[20];
- lcd1602_init();
- lcd1602_show_string(0,0,"TEMP : C");
- lcd1602_show_string(0,1,"TEMPH: C");
- while(1)
- {
- ReadTemperature();
- sprintf(Buffer,"%.1f",Temp);
- lcd1602_show_string(7,0,Buffer);
- Display();
- key_press();
- baojing();
- delay_ms(100);
- }
- }
复制代码
Keil代码与Proteus仿真下载:
仿真程序.7z
(51.67 KB, 下载次数: 79)
|