熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
來51學(xué)習(xí)1 發(fā)表于 2019-11-15 10:31 方波的脈寬啊 |
| 你是想根據(jù)方波的什么特征開控制PWM? |
|
我這個(gè)程序能實(shí)現(xiàn)這個(gè)功能嗎??? #include "define.h" #include "delay.h" #include "play.h" #include "motor.h" #include "mic.h" /********請(qǐng)先在define.h中調(diào)整晶振頻率與周期配置**************/ u8 mode = 0; //速度級(jí)別 void change_mode() { static u8 i=0,j=0; //計(jì)時(shí)變量約為8ms if(mic_flag==2) { i++; if(i>10&&mic_flag==2) { //開機(jī)確認(rèn) if(mode==0) { Play_music(PCM8sfkj,sizeof(PCM8sfkj)); j=50; mic_flag=0; while(j--) { delay_ms(100); if(mic_flag==2) { Play_music(PCM8zstz,sizeof(PCM8zstz)); mode=1; mic_flag=0; break; } } } else if(mode==1) { mode=2; } else if(mode==2) { Play_music(PCM8zstz,sizeof(PCM8zstz)); mode=1; } mic_flag=0; i=0; } } else if(mic_flag==3) { i++; if(i>15&&mic_flag==3) { mode=0; mic_flag=0; i=0; } } } void change_PWM() { if(mode==0) { PCA_PWM0 = 0x03; CCAP0H = CCAP0L = 0xff; } else if(mode==1) { PCA_PWM0 = 0x00; CCAP0H = CCAP0L = CCAP0L-1; } else if(mode==2) { PCA_PWM0 = 0x00; CCAP0H = CCAP0L = CCAP0L; } } void main() { Timer1Init(); IT0Init(); PWMInit(); Play_init(); delay_ms(1000); while(1) { change_mode(); change_PWM(); Digital_Display_One(CCAP0L/16); delay_ms(50); } } void delay_ms(uint ms) { unsigned char i, j; do { i = TIME_I; j = TIME_J; do { while (--j); } while (--i); }while(--ms); } #if Machine_Cycle==12UL void delay5us() //@12.000MHz { _nop_(); } #elif Machine_Cycle==2UL void delay5us() //@12.000MHz { unsigned char i; i = 12; while (--i); } void IT0Init(void) //100微秒@11.0592MHz { IT0=1; EX0=1; EA=1; } void Timer1Init(void) //50毫秒@11.0592MHz { AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式 TMOD &= 0x0F; //設(shè)置定時(shí)器模式 TMOD |= 0x10; //設(shè)置定時(shí)器模式 TL1 = 0x66; //設(shè)置定時(shí)初值 TH1 = 0xFC; //設(shè)置定時(shí)初值 TF1 = 0; //清除TF1標(biāo)志 TR1 = 1; //定時(shí)器1開始計(jì)時(shí) EA = 1; ET1 = 1; } u32 times=0; void T1INT() interrupt 3 { TL1 = 0x66; //設(shè)置定時(shí)初值 TH1 = 0xFC; //設(shè)置定時(shí)初值 times++; } u8 mic_flag=0; void EX0INT(void) interrupt 0 { static u32 last_time=0; u32 differ; differ=times-last_time; last_time=times; if(differ>1000) { mic_flag=1; } else if(mic_flag>0&&differ>100&&differ<500) { mic_flag++; } } void PWMInit() { CCON = 0; //清除PCA控制寄存器 CL = 0; //復(fù)位PCA定時(shí)器計(jì)數(shù)值 CH = 0; CMOD=0x0a; //工作模式:頻率=Sysclk/4/256=10800Hz 無中斷 CCAP0H = CCAP0L = 0xff; //PWM0設(shè)置占空比50% PCA_PWM0 = 0x03; CCAPM0 = 0x42; //PCA模塊0 工作在8比特方式 無中斷 CR = 1; //PCA定時(shí)器運(yùn)行 } |
Powered by 單片機(jī)教程網(wǎng)