久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1808|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

按鍵模擬智能小車調(diào)速單片機程序,前輩指導(dǎo)說是陷入死循環(huán),修改后還是不行,求指導(dǎo)

[復(fù)制鏈接]
回帖獎勵 40 黑幣 回復(fù)本帖可獲得 10 黑幣獎勵! 每人限 2 次
跳轉(zhuǎn)到指定樓層
樓主
ID:64888 發(fā)表于 2022-10-24 23:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<stc12c5a60s2.h>
#define uchar unsigned char
#define uint unsigned int
sbit go=P1^7;//前進
sbit back=P3^7;//后退
sbit turn_left=P1^6;//左轉(zhuǎn)
sbit turn_right=P3^6;//右轉(zhuǎn)
sbit turn_whistle=P1^5;//鳴笛
sbit turn_light=P3^5;//亮燈
sbit whistle=P3^3;//喇叭接口
sbit light=P3^2;//LED接口
sbit quciken=P1^4;//加速
sbit moderate=P3^4;//減速
void delayms();
void keyscan();
uint light_a=0,pwm_n=0,speed=5;
//延時函數(shù)
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
//按鍵函數(shù)
void keyscan()
{
        //按鍵控制前進
        if(go==0)
        {
                delayms(10);
                if(go==0)
                {
                    P0=0x96;
                    //while(!go);之前在論壇上前輩指導(dǎo)是按鍵陷入死循環(huán),我想這個按鍵是長按的,把松開按鍵的這段屏蔽掉,問題還是沒有解決。
                }
        }
        else
        {
                P0=0x00;
        }
        //按鍵控制后退
        if(back==0)
        {
                delayms(10);
                if(back==0)
                {
                        P0=0x69;
                        //while(!back);該按鍵同樣是一直按的,也把這段屏蔽掉試了。
                }
        }
        else
        {
                P0=0x00;
        }

        //按鍵控制左轉(zhuǎn)
        if(turn_left==0)
        {
                delayms(10);
                if(turn_left==0)
                {
                        P0=0xa5;
                        //while(!turn_left);此處也屏蔽做了修改。
                }
        }
        else
        {
                P0=0x00;
        }
        //按鍵控制右轉(zhuǎn)
        if(turn_right==0)
        {
                delayms(10);
                if(turn_right==0)
                {
                        P0=0x5a;
                        //while(!turn_right);此處也屏蔽做了修改。
                }
        }
        else
        {
                P0=0x00;        
        }
        //按鍵控制鳴笛
        if(turn_whistle==0)
        {
                delayms(10);
                if(turn_whistle==0)
                {
      whistle=0;
                        //while(!turn_whistle);此處也屏蔽做了修改。
                }
        }
        else
        {
          whistle=1;        
        }
        //按鍵控制亮燈
        if(turn_light==0)
        {
                delayms(10);
                if(turn_light==0)
                {
      light_a++;
                        if(light_a==1)
            {
                    light=0;
            }
            if(light_a>=2)
            {
                    light_a=0;
                    light=1;
            }
                        while(!turn_light);
                }
        }
        //按鍵控制減速
        if(quciken==0)
        {
                delayms(10);
                if(quciken==0)
                {
      speed++;
                        if(speed>=10)
            {
                    speed=10;
            }
                while(!quciken);//這個減速按鍵是點動的,所以這句留下來了。
                }
        }
        //按鍵控制加速
        if(moderate==0)
        {
                delayms(10);
                if(moderate==0)
                {
      speed--;
                        if(speed<=1)
            {
                    speed=0;
            }
                        while(!moderate);//這個加速按鍵是點動的,所以這句留下來了。
                }
        }
}
//主函數(shù)
void main()
{
       TMOD=0x01;//定時器0為工作方式1
       TH0=(65536-917)/256;//5ms定時初值設(shè)置
       TL0=(65536-917)%256;
        EA=1;//開總中斷
        ET0=1;//開定時器0中斷
        TR0=1;//啟動定時器0中斷
        while(1)//就這一塊搞迷糊了,這樣寫對嗎?按鍵掃描函數(shù)清除掉按鍵的松手檢測,還是沒能跳出死循環(huán)嗎?請各位前輩指導(dǎo)該怎么改?
        {
                keyscan();
        }
}
void tim0()interrupt 1
{
        TR0=0;
        TH0=(65536-917)/256;//5ms定時初值設(shè)置
        TL0=(65536-917)%256;
        TR0=1;        
        pwm_n++;
        if(pwm_n>=10)
        {
              pwm_n=0;
        }
         if(pwm_n>=speed)
        {
              P2=0x00;
        }
        if(pwm_n<speed)
        {
              P2=0xf0;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:64888 發(fā)表于 2022-10-24 23:02 | 只看該作者
請各位前輩指導(dǎo),耽誤大家?guī)追昼姡兄x!!!!!!
回復(fù)

使用道具 舉報

板凳
ID:844772 發(fā)表于 2022-10-25 08:58 | 只看該作者
具體什么問題,是不是電機不轉(zhuǎn)啊?你給的PWM太小了,最大時間是5*10ms,都來不及轉(zhuǎn),先把speed放大10倍,至于死循環(huán)那句,加上是沒錯的,想優(yōu)化程序也不能簡單刪除。
回復(fù)

使用道具 舉報

地板
ID:123289 發(fā)表于 2022-10-26 10:22 | 只看該作者
你先畫出程序流程圖。
回復(fù)

使用道具 舉報

5#
ID:1049071 發(fā)表于 2022-10-26 20:42 | 只看該作者
keyscan 函數(shù)里面不要用while,按鍵有可能是有抖動的。可以考慮用 while 加上限時間退出的方案。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久1区 | 看av片网站| 日日综合| 亚洲区一区二区 | 欧美一级欧美三级在线观看 | 精品国产一区二区国模嫣然 | 伊人网综合在线观看 | 国产高清在线精品一区二区三区 | 亚洲综合在线视频 | 中午字幕在线观看 | 日本久久综合网 | 在线观看免费国产 | 亚洲一区二区中文字幕 | 色天堂视频 | 欧美黑人国产人伦爽爽爽 | 国产偷录视频叫床高潮对白 | 男人的天堂中文字幕 | 中文字幕日韩三级 | 特级生活片 | 一区二区日韩 | 成人精品毛片国产亚洲av十九禁 | 精品久久久久久久久久久久久久 | 香蕉久久久 | avav在线看| 国产1区2区3区 | 亚洲第一av | 国产无套一区二区三区久久 | 在线观看一区 | 国产片网站| 高清av在线 | 一级黄色录像毛片 | 九九综合 | 一级欧美视频 | 欧美精品免费观看二区 | www.亚洲精品| 成人一区在线观看 | 精品亚洲视频在线 | 久草中文在线观看 | 免费久久视频 | 农村黄性色生活片 | 国产精品美女久久久久久免费 |