欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
帶中文注釋的單片機溫控風扇程序
[打印本頁]
作者:
114742221
時間:
2023-9-17 15:05
標題:
帶中文注釋的單片機溫控風扇程序
溫控風扇程序
帶中文注釋
#include <REGX52.H>
#include "LCD1602.h"
#include "DS18B20.h"
#include "Delay.h"
#include "AT24C02.h"
#include "Key.h"
#include "Timer0.h"
#include "Buzzer.h"
//電機引腳定義
sbit Motor = P1^0;
//指示燈引腳定義
sbit LED_H = P2^2;
sbit LED_L = P2^3;
sbit LED_Fan=P2^4;
float T,Tabs; //Tabs是溫度的絕對值
char TLow,THigh; //溫度上限和下限
unsigned char Counter,Compare,KeyNum,Mode,Fan;
//Counter:定時器計數
//Compare:PWM(Pulse Width Modulation)即脈沖寬度調制
//KeyNum:接收獨立按鍵鍵值
//Mode:按鍵調控THigh,TLow模式選擇
//Fan:控制風扇是否隨溫度變化轉動
void main()
{
DS18B20_ConvertT(); //防止剛上電時溫度未轉換出現默認值
Delay(750); //轉換所需要的時間
THigh=AT24C02_ReadByte(0); //從ROM中讀取上一次設置的溫度閥值
TLow=AT24C02_ReadByte(1);
if(THigh>125 || TLow<-55 || THigh<=TLow)//如果讀取出的數據不合法,添加默認值
{
THigh=20;
TLow=15;
}
LCD_Init(); //初始化LCD1602
LCD_ShowString(1,1,"T:");
LCD_ShowString(2,1,"TH:");
LCD_ShowString(2,9,"TL:");
LCD_ShowChar(1,10,0xDF); //顯示特殊字符℃
LCD_ShowChar(1,11,'C');
LCD_ShowSignedNum(2,4,THigh,3);
LCD_ShowSignedNum(2,12,TLow,3);
LED_L=1;LED_H=0; //默認光標在THigh,指示燈亮
Timer0_Init(); //定時器初始化
while(1)
{
KeyNum=Key(); //讀取鍵值
/*溫度讀取及顯示*/
DS18B20_ConvertT();
T=DS18B20_ReadT();
if(T<0) //對溫度正負的處理
{
LCD_ShowChar(1,3,'-');
Tabs=-T;
}
else
{
LCD_ShowChar(1,3,'+');
Tabs=T;
}
LCD_ShowNum(1,4,Tabs,3); //顯示整數部分
LCD_ShowChar(1,7,'.'); //顯示小數點
LCD_ShowNum(1,8,(unsigned long)(Tabs*100)%100,2); //顯示小數點后兩位
//最多可顯示四位,因為DS18B20測溫度的精度為2^(-4)
/*閾值判斷及顯示*/
if(KeyNum) //判斷是否有按鍵按下
{
if(KeyNum==1) //按鍵1控制Mode
{
if(Mode==0){Mode=1;} //切換光標到TLow
else{Mode=0;}
LED_L=~LED_L;
LED_H=~LED_H;
}
if(KeyNum==2) //按鍵2控制閥值的增加
{
if(Mode==0)
{
THigh++;
if(THigh>125){THigh=125;} //DS18B20測溫度的范圍為:-55~125攝氏度
}
else
{
TLow++;
if(THigh<=TLow){TLow--;} //確保閥值的合法性
}
}
if(KeyNum==3) //按鍵2控制閥值的增加
{
if(Mode==0)
{
THigh--;
if(THigh<=TLow){THigh++;}
}
else
{
TLow--;
if(TLow<-55){TLow=-55;}
}
}
if(KeyNum==4) //按鍵4控制風扇是否隨溫度變化轉動
{
if(Fan==0){Fan=1;Compare=0;}
else{Fan=0;}
LED_Fan=~LED_Fan;
}
Buzzer_Time(20); //按鍵提示音,默認響20ms,500Hz,無源蜂鳴器
LCD_ShowSignedNum(2,4,THigh,3); //更新閥值
LCD_ShowSignedNum(2,12,TLow,3);
AT24C02_WriteByte(0,THigh); //寫入閥值到ROM中
Delay(5);
AT24C02_WriteByte(1,TLow);
Delay(5);
}
if(T>THigh) //閥值與當前溫度比較
{
LCD_ShowString(1,13,"OV:H");
if(Fan==0){Compare=60;} //溫度過高則電機占空比為30%
}
else if(T<TLow)
{
LCD_ShowString(1,13,"OV:L");
if(Fan==0){Compare=0;} //溫度過低則電機占空比為0
}
else
{
LCD_ShowString(1,13," ");
if(Fan==0){Compare=40;} //溫度正常則電機占空比為20%
}
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int Counter;
TL0 = 0xA4; // 100us
TH0 = 0xFF;
Counter++;
if(Counter>=200) //每20ms,掃描一次按鍵
{
Counter = 0;
Key_Loop();
}
if(Counter<Compare) //Compare:PWM(Pulse Width Modulation)即脈沖寬度調制
{
Motor=1;
}
else
{
Motor=0;
}
}
復制代碼
原理圖: 無
仿真: 無
代碼:
智能溫控風扇.zip
(84.29 KB, 下載次數: 49)
2023-9-17 15:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
nlming
時間:
2023-9-20 21:21
你好,引用了那么多頭文件,壓縮包里程序全嗎?
作者:
新昌小徐
時間:
2023-9-25 22:07
nlming 發表于 2023-9-20 21:21
你好,引用了那么多頭文件,壓縮包里程序全嗎?
都全的,把程序寫到多個文件中,這個我得學習。
作者:
cwb2038
時間:
2023-9-26 07:55
謝謝分享!有原理圖就更好了!
作者:
Q__Q
時間:
2023-9-26 10:19
非常贊 又可以好好學習了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1