使用單片機(jī)的定時器來模擬PWM_第1頁
使用單片機(jī)的定時器來模擬PWM_第2頁
使用單片機(jī)的定時器來模擬PWM_第3頁
使用單片機(jī)的定時器來模擬PWM_第4頁
使用單片機(jī)的定時器來模擬PWM_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、【老三】那份執(zhí)著(812602920) 2014/4/14 19:35:49這個沒必要吧設(shè)置定時器初值期間,關(guān)閉定時器這個沒必要吧【老三】那份執(zhí)著(812602920) 2014/4/14 19:40:18沒人?【老大】小灰灰(1124315978) 2014/4/14 19:50:36問題解決了沒啊【老三】那份執(zhí)著(812602920) 2014/4/14 19:51:10找到程序了【老三】那份執(zhí)著(812602920) 2014/4/14 19:51:16在看不是好懂/*/* 程序

2、名:PWM直流電機(jī)調(diào)速 */* 晶振:11.00592 MHz CPU型號:AT89C51 */* 直流電機(jī)的PWM波控制,可以直接的調(diào)速從0到20級的調(diào)速 */ /*/ #include<reg51.h>#define TH0_TL0 (65536-1000)/設(shè)定中斷的間隔時長unsigned char count0 = 50;/低電平的占空比unsigned char count1 = 0

3、;/高電平的占空比bit Flag = 1;/電機(jī)正反轉(zhuǎn)標(biāo)志位,1正轉(zhuǎn),0反轉(zhuǎn)sbit Key_add=P2  0; /電機(jī)減速sbit Key_dec=P2  1; /電機(jī)加速sbit Key_turn=P2  2; /電機(jī)換向sbit PWM1=P26;/PWM 通道 1,反轉(zhuǎn)脈沖sbit PWM2=P27;/PWM 通道 2,正轉(zhuǎn)脈沖unsigned char 

4、Time_delay;/*函數(shù)聲明*/void Delay(unsigned char x);void Motor_speed_high(void);void Motor_speed_low(void);void Motor_turn(void);void Timer0_init(void);/*延時處理*/void Delay(unsigned char x)Time_delay = x;while(Time_delay != 0);/等待中斷,可減少P

5、WM輸出時間間隔/*按鍵處理加pwm占空比,電機(jī)加速*/void Motor_speed_high(void)/if(Key_add=0)  Delay(10);  if(Key_add=0)      count0 += 5;      if(count0 >= 100)        count0&

6、#160;= 100;         while(!Key_add);/等待鍵松開/*按鍵處理減pwm占空比,電機(jī)減速*/void Motor_speed_low(void)if(Key_dec=0)  Delay(10);  if(Key_dec=0)      count0 -= 5;      if(

7、count0 <= 0)        count0 = 0;         while(!Key_dec ); /*電機(jī)正反向控制*/void Motor_turn(void)if(Key_turn = 0)  Delay(10);  if(Key_turn = 0)&

8、#160;     Flag = Flag;    while(!Key_turn);/*定時器0初始化*/void Timer0_init(void)TMOD=0x01; /定時器0工作于方式1TH0=TH0_TL0/256;TL0=TH0_TL0%256;TR0=1;ET0=1;EA=1;/*主函數(shù)*/void main(void)Timer0_init();while(1)  Motor_turn();  Mo

9、tor_speed_high();  Motor_speed_low();/*定時0中斷處理*/void Timer0_int(void) interrupt 1 using 1TR0 = 0;/設(shè)置定時器初值期間,關(guān)閉定時器TL0 = TH0_TL0 % 256;TH0 = TH0_TL0 / 256 /定時器裝初值TR0 = 1;if(Time_delay != 0)/延時

10、函數(shù)用  Time_delay-; if(Flag = 1)/電機(jī)正轉(zhuǎn)  PWM1 = 0;     if(+count1 < count0)      PWM2 = 1;      else     PWM2 = 0;&#

11、160;   if(count1 >= 100)        count1=0;      else /電機(jī)反轉(zhuǎn)      PWM2 = 0;       if(+count1 < count0) 

12、0;      PWM1 = 1;        else     PWM1 = 0;        if(count1 >= 100)          coun

13、t1=0;      這個程序是我轉(zhuǎn)來的下載在硬件上是能通過的。但不知道你是否能看懂,開始我對有些部分是沒有看懂。在網(wǎng)友“藝術(shù)紙箱”的幫助下我算是徹底明白了。在這我直說我沒有看懂然后有看懂的部分吧(這句話感覺說的有點毛???)。注意這些部分:/*延時處理*/void Delay(unsigned char x)Time_delay = x;while(Time_delay != 0);/等待中斷,可減少PWM輸出時間間隔Delay(10);if(Time_delay&

14、#160;!= 0)/延時函數(shù)用  Time_delay-; 全是復(fù)制的 /*使用51單片機(jī)的定時器來模擬PWM PWM的占空比可以通過設(shè)定value的值來改變。*/#include<reg52.h>#define uint unsigned int #define uchar unsigned charuint value;sbit PWM0=P27;void main()uint n;uchar i;TMOD=0x02; /選擇定時器0 工作方式2 TH0=0x06; /寫入預(yù)置初值6到定時器0,使250微秒溢出一次(11.0592MHz) TL0=0x06; /寫入預(yù)置值 TR0=1; /啟動定時器ET0=1;EA=1;while(1)if(value=0) /每過一段時間,就自動加一個檔次的亮度 for(i=0;i<20;i+) for(n=0;n<2500;n+); value+; /占空比控制變量scale加1 if(value=20) for(i=0;i<20;i+) for(n=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論