功能簡述
「模擬風扇控制系統」能夠模擬電風扇工作,通過按鍵控制風扇的轉動速度和定時時間,數碼管實時顯示風扇的工作模式,動態倒計時顯示剩餘的定時時間,系統主要由數碼管顯示、微控制器最小系統、按鍵輸入和電機控制保護電路組成,系統框圖如圖 1 所示:
單匯流排驅動程式、ct107d 微控制器考試平台電路原理圖以及本題所涉及到的晶元資料手冊,可參考計算機上的電子文件。程式流程圖及相關工程檔案請以考生號命名,並儲存在計算機上的考生資料夾中(資料夾名為考生准考證號,資料夾儲存在監考員指定位置)。
設計任務及要求
1. 工作模式
裝置具有「睡眠風」、「自然風」和「常風」三種工作模式可以通過按鍵切換,通過
微控制器 p34 引腳輸出脈寬調變訊號控制電機執行狀態,訊號頻率為 1khz。
1.1 「睡眠風」模式下,對應 pwm 占空比為 20%;
1.2 「自然風」模式下,對應 pwm 占空比為 30%;
1.3 「常風」模式下,對應 pwm 占空比為 70%;
2. 數碼管顯示
數碼管實時顯示裝置當前工作模式和剩餘工作時間(倒計時),如圖 2 所示。
「睡眠風」狀態下,對應數碼管顯示數值為 1,自然風模式下,顯示數值為 2,常
風模式下,顯示數值為 3。
3. 按鍵控制
使用 s4、s5、s6、s7 四個按鍵完成按鍵控制功能。
2.1 按鍵 s4 定義為工作模式切換按鍵,每次按下 s4,裝置迴圈切換三種工作模式。工作過程如下:
2.2 按鍵 s5 定義為「定時按鍵」每次按下 s5,定時時間增加 1 分鐘,裝置的剩餘
工作時間重置為當前定時時間,重新開始倒計時,工作過程如下:
裝置剩餘工作時間為 0 時,停止 pwm 訊號輸出。
2.3 按鍵 s6 定義為「停止」按鍵,按下 s6 按鍵,立即清零剩餘工作時間,pwm
訊號停止輸出,直到通過 s5 重新設定定時時間。
2.4 按鍵 s7 定義為「室溫」按鍵,按下 s7,通過數碼管顯示當前室溫,數碼管顯
示格式如圖 3 所示,再次按下 s7,返回圖 2 所示的工作模式和剩餘工作時間顯示介面,如此往復。
室溫測量、顯示功能不應影響裝置正在執行的 pwm 訊號輸出、停止、模式切
換和計時等功能。
4. led 指示燈
「睡眠風」模式下,l1 點亮,「自然風」模式下 l2 點亮,「常風」模式下 l3 點亮;
按下停止按鍵或倒計時結束時,led 全部熄滅。
5. 電路原理圖設計
電機過熱檢測及驅動電路設計:
假定裝置使用的是 12v 直流電機,過熱檢測感測器輸出為小電壓訊號 vs,設計過熱檢測及電機驅動電路,當檢測到 vs 訊號幅度大於 10mv 時,電機停止轉動,簡述電路的工作原理與設計思路,並繪製出電路原理圖。
主函式
#include"stc15f2k60s2.h"
#include"onewire.h"
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code smg_duan=
;uchar code smg_wei=
;sbit pwm=p3^4;
uchar mode_display[8]
;//工作模式顯示
uchar temp_display[8]
;uchar mode=1;
//風速模式
uchar temperature;
uchar work_time;
uchar temp_flag;
uchar s5_count;
bit out_flag;
bit led_flag=1;
bit count;
//計時模式下
void timer0init()
; uchar key_init()
;void main()
if(s5_count==1)
work_time=60;
if(s5_count==2)
work_time=
120;
break
; case 6
: led_flag=0;
work_time=0;
out_flag=0;
break
; case 7
: led_flag=1;
temp_flag++;if
(temp_flag==2)
temp_flag=0;
break;}
if(work_time>0)
if(count)}if
(led_flag)}if
(led_flag==0)
}}#define key_input p3
#define key_state0 0
#define key_state1 1
#define key_state2 2
uchar key_init()
else
key_state=key_state0;
break
; case key_state2:
if(key_press==
0x0f
) key_state=key_state0;
break;}
return key_return;
}void timer0init
(void)
//100微秒@11.0592mhz
void timer0
() interrupt 1
else
i++;if
(i==8)
i=0;
}if(work_count==
10000)if
(out_flag)}if
(mode==2)
}if(mode==3)}}}
ds18b20模組
#include "onewire.h"
//單匯流排延時函式
void delay_onewire
(unsigned int t)
void delay
(unsigned char ms)
;void delay500us()
;void delay100us()
;void delay60us()
;void delay15us()
;//ds18b20晶元初始化
bit init_ds18b20
(void)
//通過單匯流排向ds18b20寫乙個位元組
void write_ds18b20
(unsigned char dat)
delay_onewire(5
);}//從ds18b20讀取乙個位元組
unsigned char read_ds18b20
(void)
delay100us()
;}return dat;
}void ds18b20()
int temp_get()
void delay500us()
while
(--i);}
void delay100us()
while
(--i);}
void delay60us()
while
(--i);}
void delay15us()
void delay
(unsigned char ms)
以上就是**全部內容,歡迎交流,共同學習~ 藍橋杯第七屆省賽 風扇模擬系統
冉冰的成長日記001 include include onewire.h unsigned char led 定義數碼管 unsigned char ledbuff 數碼管緩衝區 sbit s7 p3 0 sbit s6 p3 1 sbit s5 p3 2 sbit s4 p3 3 unsigned...
藍橋杯 第七屆省賽 模擬風扇控制系統
實驗平台 ct107d 實驗晶元 stc15f2k60s2 實驗現象 完成題目要求 如下 include stc15f2k60s2.h sbit dq p1 4 單匯流排介面 單匯流排延時函式 void delay onewire unsigned int t stc89c52rc 通過單匯流排向d...
藍橋杯 第七屆省賽試題 抽籤
抽籤 x星球要派出乙個5人組成的觀察團前往w星。其中 a國最多可以派出4人。b國最多可以派出2人。c國最多可以派出2人。那麼最終派往w星的觀察團會有多少種國別的不同組合呢?下面的程式解決了這個問題。陣列a 中既是每個國家可以派出的最多的名額。程式執行結果為 defff cefff cdfff cde...