亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 51單片機(jī)自適應(yīng)汽車巡航仿真 [打印本頁(yè)]

作者: wsgy    時(shí)間: 2026-3-9 21:28
標(biāo)題: 51單片機(jī)自適應(yīng)汽車巡航仿真
有沒(méi)有哪位師傅帶帶我做自適應(yīng)巡航系統(tǒng)仿真?
做了好幾天了,現(xiàn)在在調(diào)節(jié)電機(jī)轉(zhuǎn)速,但是好難啊。正好多天都整不明白,仿真不出來(lái)

作者: glinfei    時(shí)間: 2026-3-10 09:41
使用啥電機(jī)啊,難在哪呢?發(fā)個(gè)目前成果給見(jiàn)識(shí)一下唄。
作者: man1234567    時(shí)間: 2026-3-10 10:57
glinfei 發(fā)表于 2026-3-10 09:41
使用啥電機(jī)啊,難在哪呢?發(fā)個(gè)目前成果給見(jiàn)識(shí)一下唄。

就是免費(fèi)教學(xué)百問(wèn)必答從零做起的那種,啥電機(jī)得問(wèn)你呀
作者: wsgy    時(shí)間: 2026-3-10 13:37

#include <reg52.h>
sbit onn=P1^0;
sbit seet=P1^1;
sbit addd=P1^2;
sbit subb=P1^3;
sbit gass=P1^4;
sbit breakk=P1^5;
sbit IN1=P1^6;
sbit IN2=P1^7;
sbit ENA=P2^0;

//占空比,最大占空比
unsigned char ZKB,high=0,on=0,set=0,add=0,sub=0,sc=0,duty_zkb=0,ZKBB=0,cnt=0;


void Motor_Auto_add();
void Time0_Init(void);
void key_process(unsigned char key_num);
void key_scan();

void Time0_Init(void)
{
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=ET0=1;
        TR0=1;
}

void main()
{        IN1=1;
        IN2=0;
       
        Time0_Init();
        //key_process(unsigned char key_num);
        while(1)
        {               
                Motor_Auto_add();
                key_scan();
               
        }
}


//按鍵掃描
void key_scan()
{
        int i=0;
        //開(kāi)始建,自增速
        if(onn==0)
                for(i=0;i<200;i++);
                if(onn==0)
                {
                        on=1;//開(kāi)始標(biāo)志
                        while(onn==1);
                }
        if(seet==0)
                for(i=0;i<200;i++);
                if(seet==0)
                {
                        set=1;//巡航開(kāi)始標(biāo)志
                        duty_zkb=high;//將當(dāng)前占空比保留
                        while(seet==1);
                }
        if(addd==0)
                for(i=0;i<200;i++);
                if(addd==0)
                {
                        add=1;//加速鍵標(biāo)志位
                        while(addd==1);
                }
        if(subb==0)
                for(i=0;i<200;i++);
                if(subb==0)
                {
                        sub=1;//減速標(biāo)志位
                        while(subb==1);
                }
}

//終端按鍵掃描執(zhí)行程序
void key_process(unsigned char key_num)
{
        switch(key_num)
        {
                case 1:
                        high=0;
                        set=0;
                        break;
                case 2:
                        high=0;
                        set=0;
                        break;
                default:
                        break;
        }
}

//電機(jī)調(diào)速
void Motor_Auto_add()
{
        if(on==1)
        {
                high++;
                high%=100;
        }
        //else
        //{
        //ZKB=0;
        //}
       
        if(set==1)
        {
                high=duty_zkb;
        }
        else if(set==0)
        {high=0;}
       
        if(set==1&&add==1)
        {
                high=high+1;
                if(high==100)
                add=0;
        }
        if(set==1&&sub==1)
        {
                high=high-1;
                if(high<0)
                sub=0;
        }
}



//中斷優(yōu)先
void int0_srv() interrupt 0
{int i=0;
        for(i=0;i<200;i++);
                if(breakk==0)
                {
                        key_process(1);
                        while(breakk==1);
                }
                else if(gass==0)
                {
                        key_process(2);
                        while(gass==1);
                }
}

void time0_srv() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        cnt++;
        cnt%=100;
        if(cnt<high)
        {
                ENA=1;
        }
        else
        {
                ENA=0;
        }
}

使用的直流電機(jī)






作者: wsgy    時(shí)間: 2026-3-10 15:21

#include <reg52.h>
sbit onn=P1^0;
sbit seet=P1^1;
sbit addd=P1^2;
sbit subb=P1^3;
sbit gass=P1^4;
sbit breakk=P1^5;
sbit IN1=P1^6;
sbit IN2=P1^7;
sbit ENA=P2^0;

//占空比,最大占空比
unsigned char ZKB,on=0,set=0,add=0,sub=0,duty_zkb=0,cnt=0;
unsigned char high=0;
unsigned int j=0;

void Motor_Auto_add();
void Time0_Init(void);
void key_process(unsigned char key_num);
void key_scan();
void Int0_Init(void);
       
void Int0_Init(void)
{
        IT0=1;//下降沿觸發(fā)
        EX0=1;// 使能外部中斷0
        EA=1;// 開(kāi)總中斷
}
void Time0_Init(void)
{
        TMOD=0X01;//定時(shí)器0工作模式1(16位定時(shí)器)
        TH0=(65536-1000)/256;// 1ms定時(shí)初值(12MHz晶振)
        TL0=(65536-1000)%256;
        ET0=1;   // 使能定時(shí)器0中斷
        TR0=1;// 啟動(dòng)定時(shí)器0
}

void main()
{        IN1=1;// 電機(jī)正轉(zhuǎn)方向
        IN2=0;
        ENA=0;
        Int0_Init();//初始化外部中斷0
        Time0_Init();//初始化定時(shí)器0

        while(1)
        {               
               
                key_scan();
                Motor_Auto_add();// 電機(jī)調(diào)速邏輯
        }
}


//按鍵掃描
void key_scan()
{
unsigned int i=0;
        //開(kāi)始建,自增速
        if(onn==0)
        {
                for(i=0;i<200;i++);
                if(onn==0)
                {
                        on=!on;//開(kāi)始標(biāo)志
                        while(onn==0);
                }
        }
        if(seet==0)
        {
                for(i=0;i<200;i++);
                if(seet==0)
                {
                        set=!set;//巡航開(kāi)始標(biāo)志
                        if(set)
                        {duty_zkb=high;//將當(dāng)前占空比保留
                        }

                        while(seet==0);
                }
        }
        if(addd==0)
        {
                for(i=0;i<200;i++);
                if(addd==0)
                {
                        add=1;//加速鍵標(biāo)志位
                        while(addd==0);
                }
        }
        if(subb==0)
        {for(i=0;i<200;i++);
                if(subb==0)
                {
                        sub=1;//減速標(biāo)志位
                        while(subb==0);
                }
        }
}

//終端按鍵掃描執(zhí)行程序
void key_process(unsigned char key_num)
{
        switch(key_num)                //電機(jī)停轉(zhuǎn)
        {
                case 1:
                        high=0;
                        duty_zkb=0;
                        set=0;
                        on=0;
                        break;
                case 2:
                        high=0;
                        duty_zkb=0;
                        set=0;
                        on=0;
                        break;
                default:
                        break;
        }
}

//電機(jī)調(diào)速
void Motor_Auto_add()
{
        if(on==1 && !set)
        {
                j++;
                if(j>=50)//每50ms增加1%占空比
                {
                                j=0;
                                if(high<100)
                                high++;
                }
        }
       
       
        if(on==1 && set==1)
        {
                high=duty_zkb;
                //巡航加速
                if(add==1)
                {
                        if(duty_zkb<100)
                                duty_zkb++;
                        add=0;//清除標(biāo)志位
                }
                if(sub==1)
                {
                        if(duty_zkb>0)
                                duty_zkb--;
                        sub=0;
                }
        }

       
        //未啟動(dòng),占空比清零
        if(on==0)
        {
                high=0;
               
                duty_zkb=0;
                j=0;
               
        }
}



//中斷優(yōu)先(剎車/油門(mén))
void int0_srv() interrupt 0
{int i=0;
        for(i=0;i<200;i++);
                if(breakk==0)
                {
                        key_process(1);
                        while(breakk==0);
                }
                else if(gass==0)
                {
                        key_process(2);
                        while(gass==0);
                }
}

//定時(shí)器中斷生成PWM
void time0_srv() interrupt 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        cnt++;
        cnt%=100;
        if(cnt<high)
        {
                ENA=1;
        }
        else
        {
                ENA=0;
        }
}

現(xiàn)在自動(dòng)加速可以實(shí)現(xiàn),巡航狀態(tài)下加減速也可以實(shí)現(xiàn)。但是巡航時(shí)無(wú)法保持持當(dāng)前速度,油門(mén)與剎車按鈕無(wú)法使電機(jī)停轉(zhuǎn)。


作者: glinfei    時(shí)間: 2026-3-11 10:19
剎車不接到中斷口上,怎么可能生效?那還不如寫(xiě)到鍵盤(pán)程序里,取消中斷呢。
沒(méi)看到保持速度的傳感器,不太懂這個(gè)部分的原理。




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1