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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 649|回復: 5
打印 上一主題 下一主題
收起左側

51單片機自適應汽車巡航仿真

[復制鏈接]
跳轉到指定樓層
樓主
ID:1167562 發(fā)表于 2026-3-9 21:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
有沒有哪位師傅帶帶我做自適應巡航系統(tǒng)仿真?
做了好幾天了,現(xiàn)在在調節(jié)電機轉速,但是好難啊。正好多天都整不明白,仿真不出來
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:844772 發(fā)表于 2026-3-10 09:41 | 只看該作者
使用啥電機啊,難在哪呢?發(fā)個目前成果給見識一下唄。
回復

使用道具 舉報

板凳
ID:584814 發(fā)表于 2026-3-10 10:57 | 只看該作者
glinfei 發(fā)表于 2026-3-10 09:41
使用啥電機啊,難在哪呢?發(fā)個目前成果給見識一下唄。

就是免費教學百問必答從零做起的那種,啥電機得問你呀
回復

使用道具 舉報

地板
ID:1167562 發(fā)表于 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;
        //開始建,自增速
        if(onn==0)
                for(i=0;i<200;i++);
                if(onn==0)
                {
                        on=1;//開始標志
                        while(onn==1);
                }
        if(seet==0)
                for(i=0;i<200;i++);
                if(seet==0)
                {
                        set=1;//巡航開始標志
                        duty_zkb=high;//將當前占空比保留
                        while(seet==1);
                }
        if(addd==0)
                for(i=0;i<200;i++);
                if(addd==0)
                {
                        add=1;//加速鍵標志位
                        while(addd==1);
                }
        if(subb==0)
                for(i=0;i<200;i++);
                if(subb==0)
                {
                        sub=1;//減速標志位
                        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;
        }
}

//電機調速
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;
        }
}

使用的直流電機





回復

使用道具 舉報

5#
ID:1167562 發(fā)表于 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;// 開總中斷
}
void Time0_Init(void)
{
        TMOD=0X01;//定時器0工作模式1(16位定時器)
        TH0=(65536-1000)/256;// 1ms定時初值(12MHz晶振)
        TL0=(65536-1000)%256;
        ET0=1;   // 使能定時器0中斷
        TR0=1;// 啟動定時器0
}

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

        while(1)
        {               
               
                key_scan();
                Motor_Auto_add();// 電機調速邏輯
        }
}


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

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

//終端按鍵掃描執(zhí)行程序
void key_process(unsigned char key_num)
{
        switch(key_num)                //電機停轉
        {
                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;
        }
}

//電機調速
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;//清除標志位
                }
                if(sub==1)
                {
                        if(duty_zkb>0)
                                duty_zkb--;
                        sub=0;
                }
        }

       
        //未啟動,占空比清零
        if(on==0)
        {
                high=0;
               
                duty_zkb=0;
                j=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==0);
                }
                else if(gass==0)
                {
                        key_process(2);
                        while(gass==0);
                }
}

//定時器中斷生成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)在自動加速可以實現(xiàn),巡航狀態(tài)下加減速也可以實現(xiàn)。但是巡航時無法保持持當前速度,油門與剎車按鈕無法使電機停轉。

回復

使用道具 舉報

6#
ID:844772 發(fā)表于 2026-3-11 10:19 | 只看該作者
剎車不接到中斷口上,怎么可能生效?那還不如寫到鍵盤程序里,取消中斷呢。
沒看到保持速度的傳感器,不太懂這個部分的原理。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

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