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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機超聲波1602顯示程序,調速出了問題,求大佬解決

[復制鏈接]
跳轉到指定樓層
樓主


這段程序是超聲波1602顯示+按鍵調速的,但一起執行下面的調速就沒有用。如果把超聲波顯示給取消,調速就有用了。小白看了半天沒調出來,希望有大佬可以幫下忙。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:781863 發表于 2020-7-2 23:45 | 只看該作者
求解決:在顯示距離同時可以按鍵調整小車速度
完整程序如下:
#include<reg52.h>
#include<1602.h>
#include<pwm.h>

sfr T2MOD=0XC9;


sbit Trig = P2^0;
sbit Echo = P2^1;


/*void UsartConfiguration();       
unsigned char i;                                 */

sbit IN1 = P3^7;                                                                                                                       
sbit IN2 = P3^6;
sbit IN3 = P3^5;
sbit IN4 = P3^4;
/************函數聲明**************/


void forword();
void back();
void right();
void left();
void stop();

unsigned char BiaoTi[]=" distance:   ";
unsigned char code ShuZiBiao[15] = {'0','1','2','3','4','5','6','7','8','9','.','C','M'};
unsigned char XianShi[7]    ={ 0,0,0,0,0,0,0};
//2、設定發送時間
void Delay10us()
{
    T2MOD = 0;                //---- --00  初始化模式寄存器  默認向上計數
        T2CON = 0;                //0000 0000  初始化控制寄存器 一個中斷源,16位自動重裝模式
        TL2 = (65536 - 10) / 256;                //設置定時初值
        TH2 = (65536 - 10) % 256;                //設置定時初值
        RCAP2L = (65536 - 10) / 256;                //設置定時重載值
        RCAP2H = (65536 - 10) % 256;                //設置定時重載值
        TR2 = 1;                //定時器2開始計時
    IE = 0xA0;                //打開全局中斷,定時器2中斷
        while(!TF2);
        TF2 = 0;

/* TMOD |= 0x01;
  TH0 = 0xFF;
  TL0 = 0xF6;
  TR0 = 1;
  while(!TF0);
  TF0 = 0;          */
}

void Rstart()  //啟動超聲波模塊,初始化
{
  Trig=0;
  Trig=1;
  Delay10us();
  Trig=0;
}
//3、獲取時間和距離
int gettime()//獲取時間
{
unsigned int time = 0;
time = TH2<<8 | TL2;  //TH0*256+TL0
return time;
}
int Getdis(unsigned int time)  //獲取距離
{
unsigned int distance;//整型的原因是方便后續LCD1602屏顯示
distance = (int)time * 0.085;
TH2=0;
TL2=0;//清空計時器·
return distance;
}
void star()
{
TH2 = 0;
TL2 = 0;
TR2 = 1;
}
void end()
{
TR2 = 0;
}
void GetOnce()  //獲取一次超聲波測距模塊的距離
{
Rstart();
while(!Echo);//當Echo為零時等待
star();
while(Echo);//當Echo為1計數并等待
end();
}
void delay()
{
int i;
int j;
for(i=0;i<50;i++)
  for(j = 0;j<1000;j++);
}

void main()
{
   unsigned int time = 0;
   unsigned int i,j;
   unsigned int dis;

    timer0_init();
    delayxms(5);
/* UsartConfiguration();          //串口初始化           */

while(1)
{

  GetOnce();
  time = gettime();
  dis = Getdis(time);//單位毫米,后面會用厘米顯示
  XianShi[0]=dis/1000;//厘米的百位
  XianShi[1]=(dis/100)%10;//厘米的十位
  XianShi[2]=(dis/10)%10;//厘米的個位
  XianShi[3]=10;//顯示小數點
  XianShi[4]=dis%10;//厘米的小數點后一位
  XianShi[5]=11;//顯示‘C’
  XianShi[6]=12;//顯示'M'
  Lcd1602_init();   //初始化函數
  Lcd1602_WriteCom(0x80);  //0x80是第一行的第一個字符的地址
    for (i=0;i<11;i++)
    {
     Lcd1602_WriteData(BiaoTi[i]);
    }
     Lcd1602_WriteCom(0x80+0x40);   //0xc0是第二行的第一個字符的地址
    for (j=0;j<7;j++)
    {
     Lcd1602_WriteData(ShuZiBiao[XianShi[j]]);
    }
                   
  Motor_add_left();
  Motor_dec_left();
  Motor_add_right();
  Motor_dec_right();

  forword();

  /* if(dis < 150)
        {
        back();
        delay();
        right();
  
        }                                                                            
    else
    {forword();}                            */
              //           避障



  /* i = SBUF;
   RI = 0;
   if(i == 'q')
   {
   forword();
   }
   if(i == 'h')
   {
   back();
   }
    if(i == 'z')
   {
   left();
   }
   if(i == 'y')
   {
   right();
   }
   if(i == 't')
   {
   stop();
   }  */
    }                 


}
void forword()  //前進函數
{

    //第一路電機 正轉
    IN1 = 0;
    IN2 = 1;

    //第二路電機 正轉
    IN3 = 0;
    IN4 = 1;
}

void back() //后退
{


    //第一路電機  反轉
    IN1 = 1;
    IN2 = 0;

    //第二路電機  反轉
    IN3 = 1;
    IN4 = 0;
}

void right()  //右轉
{


    // 第一路正轉
    IN1 = 0;
    IN2 = 1;
    // 第二路反轉
    IN3 = 0;
    IN4 = 0;

}

void left() //左拐函數
{
    IN1 = 1;
    IN2 = 0;
    IN3 = 0;
    IN4 = 1;

}

void stop()
{
    IN1 = 0;
    IN2 = 0;
    IN3 = 0;
    IN4 = 0;
}
  /***********定時器0初始化***********/

void timer0_init()

{

TMOD=0x01; //定時器0工作于方式1

TH0=(65536-10)/256;

TL0=(65536-10)%256;

EA = 1;

ET0=1;

TR0=1;




}


/**************定時0中斷處理******************/

void timer0_int() interrupt 1

{
TH0=(65536-10)/256;
TL0=(65536-10)%256;
  
TIME++;
m1 = countA;
m2 = countB;

if(TIME < m1) //count為占空比
{
  ENA = 1; //輸出高電平
}

else
{
  ENA = 0;       
  }

if(TIME < m2)
{
  ENB = 1;
}
else
{
ENB = 0;
}

if(TIME>=100)
{
TIME=0;
}


}
回復

使用道具 舉報

板凳
ID:739545 發表于 2020-7-3 09:13 | 只看該作者
哪就是超聲波顯示進入死循環了,可以聯調的話加入聯調機制,查看一下哪一步走不下去了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品免费看国产四区 | 国产亚洲欧美另类一区二区三区 | 久久久久久久久久久久一区二区 | 中文字幕一区二区三区四区五区 | 国产乱码久久久久久 | 第一福利社区1024 | 中文字幕 亚洲一区 | 国产日韩一区二区 | 中国一级特黄真人毛片免费观看 | 国产精品亚洲欧美日韩一区在线 | 成人妇女免费播放久久久 | 俺去俺来也www色官网cms | 国产精品综合视频 | 精品亚洲91 | 成人午夜免费视频 | 黄色一级免费 | 99久久久久久久 | 亚洲视频一区在线观看 | 亚洲精品国产第一综合99久久 | 亚洲a网 | 一区二区三区在线免费观看 | 国产欧美日韩一区二区三区在线观看 | 一级黄色录像片子 | h视频在线观看免费 | 久草精品视频 | 久久国产一区二区 | 国产一区二区自拍 | 91精品国产欧美一区二区 | 国产福利小视频 | 免费观看黄网站 | 成人一区二区三区在线观看 | 一区二区三区国产 | 精品久久精品 | 麻豆精品国产91久久久久久 | 国产传媒在线观看 | 日韩欧美视频在线 | 99精品久久久久久中文字幕 | 久久精品一区二 | 欧美一区二区三区久久精品 | 国产激情亚洲 | av网站免费 |