欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

求程序,根據輸入的方波,來輸出pwm,來控制電機轉速,89c51應該是stc12c5芯片

查看數: 3419 | 評論數: 3 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-11-14 19:28

正文摘要:

回復

ID:636039 發表于 2019-11-23 12:21
來51學習1 發表于 2019-11-15 10:31
你是想根據方波的什么特征開控制PWM?

方波的脈寬啊
ID:617449 發表于 2019-11-15 10:31
你是想根據方波的什么特征開控制PWM?
ID:636039 發表于 2019-11-14 20:44
我這個程序能實現這個功能嗎???
#include "define.h"
#include "delay.h"
#include "play.h"
#include "motor.h"
#include "mic.h"


/********請先在define.h中調整晶振頻率與周期配置**************/


u8 mode = 0; //速度級別
void change_mode()
{
        static u8 i=0,j=0;     //計時變量約為8ms
         if(mic_flag==2)
                {
                         i++;
                        if(i>10&&mic_flag==2)
                        {
        //開機確認
                                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;                //定時器時鐘12T模式
        TMOD &= 0x0F;                //設置定時器模式
        TMOD |= 0x10;                //設置定時器模式
        TL1 = 0x66;                //設置定時初值
        TH1 = 0xFC;                //設置定時初值
        TF1 = 0;                //清除TF1標志
        TR1 = 1;                //定時器1開始計時
        EA = 1;
        ET1 = 1;
}     
u32 times=0;
void T1INT() interrupt 3
{
        TL1 = 0x66;                //設置定時初值
        TH1 = 0xFC;                //設置定時初值
        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;                         //復位PCA定時器計數值
        CH = 0;
        CMOD=0x0a;                                                                                        //工作模式:頻率=Sysclk/4/256=10800Hz 無中斷
       
        CCAP0H = CCAP0L = 0xff;         //PWM0設置占空比50%
        PCA_PWM0 = 0x03;
        CCAPM0 = 0x42;                  //PCA模塊0 工作在8比特方式 無中斷
        CR = 1;                         //PCA定時器運行
}

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表