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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1933|回復: 2
收起左側

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

[復制鏈接]
ID:781863 發表于 2020-7-2 22:15 | 顯示全部樓層 |閱讀模式
IMG_0237(20200702-220305).PNG

這段程序是超聲波1602顯示+按鍵調速的,但一起執行下面的調速就沒有用。如果把超聲波顯示給取消,調速就有用了。小白看了半天沒調出來,希望有大佬可以幫下忙。
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品mv | 亚洲黄色在线免费观看 | 亚洲在线高清 | 欧美一区二区三区在线 | 精品视频在线免费观看 | 国产精品99久久久久 | 亚洲精品永久免费 | 在线观看www | 国产精品久久久久久福利一牛影视 | 天天操网 | 精品国产一级 | 综合视频在线 | 天天干成人网 | 日韩毛片在线视频 | 久久日韩精品一区二区三区 | 亚洲精品视频免费观看 | av毛片在线免费观看 | 日韩在线视频观看 | 欧美日韩国产一区二区三区 | 国产91久久精品一区二区 | 草久久| 伊人免费在线 | 亚洲一区在线日韩在线深爱 | 天天操天天玩 | 日韩在线免费视频 | 亚洲3p| 日本在线网站 | 久久久久久久久久毛片 | 国产精品久久久久久高潮 | 超碰天天 | 51ⅴ精品国产91久久久久久 | 国产欧美精品一区二区三区 | 在线观看h视频 | 999久久久久久久 | 亚洲欧美综合 | 成人三级视频 | 中文字幕在线免费观看 | 91精品国产91久久综合桃花 | 91视频免费视频 | 成av在线 | 欧美日韩国产一区二区三区 |