一、系統(tǒng)方案 模擬的電風扇的工作狀態(tài)有3種:自然風、常風及睡眠風。使用三個按鍵S1-S3設(shè)置自然風、常風及睡眠風。
再使用兩個按鍵S4和S5,S4用于定時電風扇定時時間長短的設(shè)置,每按一次S4鍵,定時時間增加10秒,最長60秒,超過60秒回到0秒重新開始。按下S5鍵表示定時倒計時開始。
按下相應(yīng)的風類鍵,使用處理器ATmega128定時/計數(shù)器的PWM功能生成不同占空比的1KHz的PWM信號來驅(qū)動直流電動機MOTOR-DC(模擬電風扇電機)!白匀伙L”:生成占空比為30%的PWM信號,“睡眠風”: 生成占空比為20%的PWM信號,“常風”:生成占空比為70%的PWM信號.
使用8LED數(shù)碼管或液晶顯示屏顯示電風扇的工作狀態(tài)、動態(tài)顯示使用電風扇的定時功能時的剩余定時時間。使用8LED數(shù)碼管和液晶顯示屏LM041L時,“自然風”顯示“1”、“常風”顯示“2”及“睡眠風”顯示“3”,使用12864液晶顯示屏LGM12641BS1R LM3228時使用中文顯示。
1.png (5.04 KB, 下載次數(shù): 30)
下載附件
2023-8-26 15:22 上傳
二、硬件設(shè)計 原理圖如下:
2.png (69.16 KB, 下載次數(shù): 35)
下載附件
2023-8-26 15:22 上傳
三、單片機軟件設(shè)計 1、首先是系統(tǒng)初始化 - DDRA = 0xFF;
- PORTA= 0xFF;
- DDRC = 0xFF;
- PORTC= 0xFF;
- DDRF = 0x00;
- PORTF= 0xFF;
- DDRE &= 0xFC;
- PORTE = 0x03;
- //init_devices();
- timer0_pwm(); // 初始化PWM
- timer1_init(); // 初始化定時器
- LCD_init();
- // LCD12864_init(); // 初始化LCD
- OCR0 = 0X46; // OCR0/0XFF=OCR0/256,占空比可調(diào)
- // TCCR0=0X0A; // PWM關(guān)閉
- 2、液晶顯示程序
- void LCD_write_com(unsigned char com)
- {
- RS_CLR;
- RW_CLR;
- EN_SET;
- Data_IO = com;
- delay_nms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 顯示屏數(shù)據(jù)寫入函數(shù)
- //***********************************************************************
- void LCD_write_data(unsigned char data)
- {
- RS_SET;
- RW_CLR;
- EN_SET;
- Data_IO = data;
- delay_nms(5);
- EN_CLR;
- }
- 3、按鍵程序
- if((PINF&0x01)==0x00) // 自然風按下
- {
- Mode = 1;
- OCR0 = 0X46; // 占空比 30%
- }
- if((PINF&0x02)==0x00) // 常風按下
- {
- Mode = 3;
- OCR0 = 0X26; // 占空比 20%
- }
- if((PINF&0x04)==0x00) // 睡眠風按下
- {
- Mode = 2;
- OCR0 = 0XA6; // 占空比 70%
- }
- if((PINF&0x08)==0x00) // 設(shè)置當前時間
- {
- delay(10);
- if((PINF&0x08)==0x00) // 設(shè)置當前時間
- {
- Timer = Timer+10;
- while(!(PINF&0x08)); // 按鍵釋放
- if(Timer > 60)
- {
- Timer = 0;
- }
- }
- }
- 4、核心算法程序
- #pragma interrupt_handler timer1:15/*定時器溢出中斷向量標號*/
- void timer1(void)
- {
- static u16 Tmr = 0;
- TCNT1H=(65536-1000)/256;
- TCNT1L=(65536-1000)%256; // 定時4ms
- if(++Tmr >= 250)
- {
- Tmr = 0;
- if(Start == 1) // 啟動標志位啟動
- {
- if(--Timer > 60)
- {
- Timer = 0;
- Start = 0;
- }
- }
- }
- }
復(fù)制代碼
四、proteus仿真設(shè)計 Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺的基礎(chǔ)上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設(shè)計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設(shè)定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設(shè)計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設(shè)計的最優(yōu)方案。最后根據(jù)測試沒問題的仿真圖紙,焊接實物,調(diào)試,最終完成本設(shè)計的作品。
3.png (79.53 KB, 下載次數(shù): 33)
下載附件
2023-8-26 15:22 上傳
|