本設計使用DS18B20溫度傳感器來進行檢測溫度,設置的數(shù)據(jù)為float形式,閾值使用的為int整型,使用獨立按鍵來進行溫度閾值的加減,當系統(tǒng)檢測到的溫度高于閾值溫度的時候,風扇會打開進行模擬降溫,當檢測到的溫度低于閾值的時候,加熱器會自動打開,加模擬升溫!仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖_20221123202919.png (42.27 KB, 下載次數(shù): 40)
下載附件
2022-11-23 20:29 上傳
單片機源程序如下:
- #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);
- }
- /*******************************************************************************
- * 函 數(shù) 名 : key_press
- * 函數(shù)功能 : 檢測獨立按鍵是否按下,按下則返回對應鍵值
- * 輸 入 : mode=0:單次掃描按鍵
- mode=1:連續(xù)掃描按鍵
- * 輸 出 :
- 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;
- }
- }
-
- //主函數(shù)
- 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, 下載次數(shù): 79)
2022-11-27 16:16 上傳
點擊文件名下載附件
仿真 下載積分: 黑幣 -5
|