藍橋杯第七屆省賽試題 「模擬風扇控制系統」

2021-10-03 15:48:53 字數 4292 閱讀 9308

功能簡述

「模擬風扇控制系統」能夠模擬電風扇工作,通過按鍵控制風扇的轉動速度和定時時間,數碼管實時顯示風扇的工作模式,動態倒計時顯示剩餘的定時時間,系統主要由數碼管顯示、微控制器最小系統、按鍵輸入和電機控制保護電路組成,系統框圖如圖 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...