一、系統(tǒng)方案
	模擬的電風(fēng)扇的工作狀態(tài)有3種:自然風(fēng)、常風(fēng)及睡眠風(fēng)。使用三個(gè)按鍵S1-S3設(shè)置自然風(fēng)、常風(fēng)及睡眠風(fēng)。
	再使用兩個(gè)按鍵S4和S5,S4用于定時(shí)電風(fēng)扇定時(shí)時(shí)間長(zhǎng)短的設(shè)置,每按一次S4鍵,定時(shí)時(shí)間增加10秒,最長(zhǎng)60秒,超過(guò)60秒回到0秒重新開始。按下S5鍵表示定時(shí)倒計(jì)時(shí)開始。
	按下相應(yīng)的風(fēng)類鍵,使用處理器ATmega128定時(shí)/計(jì)數(shù)器的PWM功能生成不同占空比的1KHz的PWM信號(hào)來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)MOTOR-DC(模擬電風(fēng)扇電機(jī))?!白匀伙L(fēng)”:生成占空比為30%的PWM信號(hào),“睡眠風(fēng)”: 生成占空比為20%的PWM信號(hào),“常風(fēng)”:生成占空比為70%的PWM信號(hào).
	使用8LED數(shù)碼管或液晶顯示屏顯示電風(fēng)扇的工作狀態(tài)、動(dòng)態(tài)顯示使用電風(fēng)扇的定時(shí)功能時(shí)的剩余定時(shí)時(shí)間。使用8LED數(shù)碼管和液晶顯示屏LM041L時(shí),“自然風(fēng)”顯示“1”、“常風(fēng)”顯示“2”及“睡眠風(fēng)”顯示“3”,使用12864液晶顯示屏LGM12641BS1RLM3228時(shí)使用中文顯示。

	二、硬件設(shè)計(jì)
	原理圖如下:

	
	三、單片機(jī)軟件設(shè)計(jì)
	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();  // 初始化定時(shí)器
	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)    // 自然風(fēng)按下
	 {
	   Mode = 1;
	  OCR0 = 0X46;      // 占空比 30%
	 }
	 if((PINF&0x02)==0x00)    // 常風(fēng)按下
	 {
	   Mode = 3;
	  OCR0 = 0X26;      // 占空比 20%
	 }
	 if((PINF&0x04)==0x00)    // 睡眠風(fēng)按下
	 {
	   Mode = 2;
	  OCR0 = 0XA6;      // 占空比 70%
	 }
	 
	 
	   if((PINF&0x08)==0x00)    // 設(shè)置當(dāng)前時(shí)間
	 {
	   delay(10); 
	 if((PINF&0x08)==0x00)  // 設(shè)置當(dāng)前時(shí)間
	   {
	  Timer = Timer+10;
	  while(!(PINF&0x08));  // 按鍵釋放
	 if(Timer > 60)
	 {
	  Timer = 0;
	 }
	 }
	 }
	4、核心算法程序
	 #pragma interrupt_handler timer1:15/*定時(shí)器溢出中斷向量標(biāo)號(hào)*/
	void timer1(void)
	{
	 static u16 Tmr = 0;
	 TCNT1H=(65536-1000)/256;
	 TCNT1L=(65536-1000)%256; // 定時(shí)4ms
	
	
	 if(++Tmr >= 250)
	 {
	   Tmr = 0;
	if(Start == 1) // 啟動(dòng)標(biāo)志位啟動(dòng)
	{
	 if(--Timer > 60)
	 {
	    Timer = 0;
	  Start = 0;
	 }
	}
	 }
	
	}
	四、proteus仿真設(shè)計(jì)
	Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒(méi)有硬件平臺(tái)的基礎(chǔ)上通過(guò)自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過(guò)軟件仿真來(lái)驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒(méi)有問(wèn)題,如果有問(wèn)題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問(wèn)題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開發(fā)者帶來(lái)一定困惑,Proteus仿真軟件就很好的解決這個(gè)問(wèn)題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒(méi)問(wèn)題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
	

- 
                                處理器
                                +關(guān)注
關(guān)注
68文章
20115瀏覽量
244609 - 
                                數(shù)碼管
                                +關(guān)注
關(guān)注
32文章
1889瀏覽量
93576 - 
                                智能風(fēng)扇
                                +關(guān)注
關(guān)注
1文章
49瀏覽量
18701 - 
                                AVR128
                                +關(guān)注
關(guān)注
0文章
6瀏覽量
5370 
發(fā)布評(píng)論請(qǐng)先 登錄
AVR128實(shí)驗(yàn)板下載不了程序的原因
求AVR128的數(shù)碼相框的設(shè)計(jì)?。。?!急?。?!
avr c程序
怎么用AVR128單片機(jī)(C語(yǔ)言)控制可編程數(shù)字電位器AD5122,求...
咨詢一下icc avr編譯中的問(wèn)題
史上最全的AVR128例程
ucosii在AVR128芯片移植中出現(xiàn)了什么問(wèn)題?怎樣去解決?
基于AVR+PROTEUS仿真_單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)例100例
單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例--基于AVR+PROTEUS仿
一種智能頻率計(jì)設(shè)計(jì)與制作(AVR)proteus仿真+程序資料
    
          
        
        
AVR128智能風(fēng)扇設(shè)計(jì)-proteus-程序
                
 
    
           
            
            
                
            
評(píng)論