色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

自動避障小車仿真

Harmony&嵌入式學習 ? 來源:Harmony&嵌入式學習 ? 作者:Harmony&嵌入式學 ? 2023-07-17 09:28 ? 次閱讀

課題的技術要求:本次課題最終要求小車能在無人操作的條件下實現自動避障,避障基于超聲波測距的原理實現的,當超聲波檢測到小車與障礙物的距離大于設定值時,小車按照原先設定的速度正常行駛;當超聲波檢測到小車和障礙物的距離小于設定值時,單片機控制蜂鳴器發聲同時控制小車停止。因為本次設計的小車時兩輪驅動的小車,也沒有安裝舵機,所以小車的轉彎通過控制兩個車輪間的轉速差實現。
課題研究的主要內容:本次設計以超聲波避障為研究對象,以自動避障為核心控制功能。要研究內容包括:以STC89C52為控制核心的智能系統的平臺搭建、各個模塊的選型、多傳感器的組合應用、PWM控制電機驅動的相應動作、外置儲存器的選型、測距系統的選擇與搭建、報警與顯示系統的選擇與搭建等。

wKgaomSzwd-AeUulAABMh2oW4eg474.png

系統總體流程圖

wKgaomSzwfSAQQB9AAAsS8T4vYo292.png

STC89C52單片機接通電源后開始運行,首先對LCD1602的寄存器發送數據進行初始化,完成最基本的屏幕顯示配置,然后在界面上顯示主界面的框架,接下來在While循環中不斷采集超聲波發送的數據,進行轉換后變為整數字節型顯示在LCD1602屏幕上,若采集的數值大于設定值即報警。

鍵盤程序流程圖

wKgZomSzwh2AJ08bAAA0k8-XoV8106.png

在鍵盤處理函數中,分別判斷按下的為哪個按鍵,若按下設定值增加按鍵,則設定值的數值增加10;若按下設定值減少按鍵,設定值的數字減少10,并在變動后均存入外部儲存器。

wKgaomSzwiqABh9dAAGZunv_pXw635.png
#include "reg51.h"
#include 
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^6;
sbit LCD1602_RS=P2^5;
sbit Trig = P1^1;
sbit Echo = P1^0;
sbit BEEP = P2^4;
sbit MotorA_1 = P2^0;
sbit MotorA_2 = P2^1;
sbit MotorB_1 = P2^2;
sbit MotorB_2 = P2^3;
sbit I2C_SDA =      P1^2;  		
sbit I2C_SCL =      P1^3; 
unsigned char Set_dis = 80;
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
static unsigned char DisNum = 0; //顯示用指針				  
unsigned int  time=0;
unsigned long S=0;
bit      flag =0;
unsigned char disbuff[4]	   ={ 0,0,0,0,};
unsigned int DIstance;



void D_10()
{
	uchar a, b;
	for(b=1; b>0; b--)
	{
		for(a=2; a>0; a--);
	}
}

void IIC_S()
{
	I2C_SDA = 1;
	D_10();
	I2C_SCL = 1;
	D_10();
	I2C_SDA = 0;
	D_10();
	I2C_SCL = 0;			
	D_10();		
}

void IIC_ST()
{
	I2C_SDA = 0;
	D_10();
	I2C_SCL = 1;
	D_10();
	I2C_SDA = 1;
	D_10();		
}

uchar WD_SB(uchar dat, uchar ack)
{
	uchar a = 0,b = 0;
			
	for(a=0; a> 7;
		dat = dat  200)
		{
			I2C_SCL = 0;
			D_10();
			return 0;
		}
	}

	I2C_SCL = 0;
	D_10();
 	return 1;		
}

uchar WD_RB() 
{
	uchar a = 0,dat = 0;
	I2C_SDA = 1;
	D_10();
	for(a=0; a0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }      
	}
    	
}

/*******************************************************************************
* 函 數 名         : LcdWriteCom
* 函數功能		   : 向LCD寫入一個字節的命令
* 輸    入         : com
* 輸    出         : 無
*******************************************************************************/
void LcdWriteCom(uchar com)	  //寫入命令
{
	LCD1602_E = 0;     //使能
	LCD1602_RS = 0;	   //選擇發送命令
	LCD1602_RW = 0;	   //選擇寫入
	
	LCD1602_DATAPINS = com;     //放入命令
	Lcd1602_Delay1ms(1);		//等待數據穩定

	LCD1602_E = 1;	          //寫入時序
	Lcd1602_Delay1ms(5);	  //保持時間
	LCD1602_E = 0;
}
/*******************************************************************************
* 函 數 名         : LcdWriteData
* 函數功能		   : 向LCD寫入一個字節的數據
* 輸    入         : dat
* 輸    出         : 無
*******************************************************************************/		   	   
void LcdWriteData(uchar dat)			//寫入數據
{
	LCD1602_E = 0;	//使能清零
	LCD1602_RS = 1;	//選擇輸入數據
	LCD1602_RW = 0;	//選擇寫入

	LCD1602_DATAPINS = dat; //寫入數據
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;   //寫入時序
	Lcd1602_Delay1ms(5);   //保持時間
	LCD1602_E = 0;
}


/*******************************************************************************
* 函 數 名       : LcdInit()
* 函數功能		 : 初始化LCD屏
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/		   
void LcdInit()						  //LCD初始化子程序
{
 	LcdWriteCom(0x38);  //開顯示
	LcdWriteCom(0x0c);  //開顯示不顯示光標
	LcdWriteCom(0x06);  //寫一個指針加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //設置數據指針起點
}




//按指定位置顯示一個字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
 Y &= 0x1;
 X &= 0xF; //限制X不能大于15,Y不能大于1
 if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
 X |= 0x80; // 算出指令碼
 LcdWriteCom(X); //這里不檢測忙信號,發送地址碼
 LcdWriteData(DData);
}
//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
 unsigned char ListLength;

  ListLength = 0;
 Y &= 0x1;
 X &= 0xF; //限制X不能大于15,Y不能大于1
 while (DData[ListLength]>=0x20) //若到達字串尾則退出
  {
   if (X <= 0xF) //X坐標應小于0xF
    {
     DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
     ListLength++;
     X++;
    }
  }
}

void  StartModule() 		         //啟動模塊
{
	  Trig=1;			                     //啟動一次模塊
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_();
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_();
	  Trig=0;
}

/*******************************************************************************
* 函 數 名         : main
* 函數功能		   : 主函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Conut(void)
	{
	 time=TH0*256+TL0;
	 TH0=0;
	 TL0=0;
	
	 S=(time*1.7)/100;     //算出來是CM
	 DIstance = S;
	 if((S?>=700)||flag==1) //超出測量范圍顯示“-”
	 {	 
	  flag=0;
	 
	  DisplayOneChar(0, 1, ASCII[11]);
	  DisplayOneChar(1, 1, ASCII[10]);	//顯示點
	  DisplayOneChar(2, 1, ASCII[11]);
	  DisplayOneChar(3, 1, ASCII[11]);
	  DisplayOneChar(4, 1, ASCII[12]);	//顯示M
	 }
	 else
	 {
	  disbuff[0]=S%1000/100;
	  disbuff[1]=S%1000%100/10;
	  disbuff[2]=S%1000%10 %10;
	  DisplayOneChar(0, 1, ASCII[disbuff[0]]);
	  DisplayOneChar(1, 1, ASCII[10]);	//顯示點
	  DisplayOneChar(2, 1, ASCII[disbuff[1]]);
	  DisplayOneChar(3, 1, ASCII[disbuff[2]]);
	  DisplayOneChar(4, 1, ASCII[12]);	//顯示M
	 }
}


void zd0() interrupt 1 		 //T0中斷用來計數器溢出,超過測距范圍
{
    flag=1;							 //中斷溢出標志
}

void main()
{
	 TMOD=0x01;		   //設T0為方式1,GATE=1;
	 TH0=0;
	 TL0=0;          
	 ET0=1;             //允許T0中斷
	 EX0=1;       //外部中斷0開()  EX1 為外部中斷1 (P3^3)
	 IT0=1;        //低電平觸發   IT1為中斷1
	 EX1=1;       //外部中斷0開()  EX1 為外部中斷1 (P3^3)
	 IT1=1;        //低電平觸發   IT1為中斷1
	 EA=1;			   //開啟總中斷	
	 Set_dis = CC_RD(0x01);
	LcdInit();
	DisplayListChar(4,0,"Car system");
	while(1)
	{
		StartModule();
	  while(!Echo);		//當RX為零時等待
	  TR0=1;			    //開啟計數
	  while(Echo);			//當RX為1計數并等待
	  TR0=0;				//關閉計數
    Conut();			//計算
		DisplayOneChar(8,1,(char)(Set_dis/100)+'0');
		DisplayOneChar(9,1,(char)(Set_dis/10%10)+'0');
		DisplayOneChar(10,1,(char)(Set_dis%10)+'0');
		if(DIstance>Set_dis)
		{
			BEEP = 0;
			RUN_RIGHT();
		}else
		{
			BEEP = 1;
			RUN_UP();
		}

	}
}


void Key1_INT( )  interrupt 0  // 這里0對應下表
{
    Set_dis = Set_dis+10; 
		CC_WR(0x01,Set_dis);
}


void Key2_INT( )  interrupt 2  // 這里0對應下表
{
	   Set_dis =Set_dis-10;
			CC_WR(0x01,Set_dis);
}

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634633
  • 仿真
    +關注

    關注

    50

    文章

    4070

    瀏覽量

    133552
  • 蜂鳴器
    +關注

    關注

    12

    文章

    891

    瀏覽量

    45917
  • 避障小車
    +關注

    關注

    1

    文章

    24

    瀏覽量

    19028
收藏 人收藏

    評論

    相關推薦

    智能小車問題

    誰有小車的程序與仿真圖,請發我郵箱,804902426@qq.com,謝謝了。
    發表于 04-30 08:07

    尋人小車

    想做一個自動尋人小車,人身上裝有特定的信號源,小車捕捉信號源跟著人走,行走途中可以自動
    發表于 10-11 16:28

    紅外小車設計論文

    紅外小車設計論文紅外小車設計論文紅外
    發表于 11-13 15:57 ?0次下載

    尋跡一體小車

    尋跡一體小車尋跡一體小車尋跡
    發表于 11-13 15:53 ?0次下載

    自動紅外電動小車C51程序

    自動紅外電動小車C51程序自動紅外電動
    發表于 11-18 17:08 ?31次下載

    arduino版的自動小車程序

    自動小車 arduino版的自動
    發表于 11-24 15:24 ?0次下載

    論文1

    小車模糊控制算法的設計與仿真。本文詳細闡述了智能小車
    發表于 05-10 15:12 ?36次下載

    循跡小車(尋跡程序+程序)

    循跡小車(尋跡程序+程序),感興趣的小伙伴們可以瞧一瞧。
    發表于 11-23 15:45 ?457次下載

    自動充電小車5110電壓檢測版

    自動充電小車5110電壓檢測版
    發表于 04-28 08:57 ?0次下載

    紅外小車原理介紹及制作

    紅外小車原理介紹及制作
    發表于 07-18 09:39 ?53次下載

    怎樣制作小車

    本項目是在 PVCBOT-A型 基礎平臺車——BEAM小車的基礎上,加裝了傳感器以及控制電路,組成了一臺具體有功能的
    的頭像 發表于 09-18 09:35 ?1.9w次閱讀

    使用Arduino設計的智能小車自動的接線說明

    本文檔的主要內容詳細介紹的是使用Arduino設計的智能小車自動的接線說明。
    發表于 11-22 08:00 ?18次下載
    使用Arduino設計的智能<b class='flag-5'>小車</b><b class='flag-5'>自動</b><b class='flag-5'>避</b><b class='flag-5'>障</b>的接線說明

    基于單片機的自動小車設計課設

    基于單片機的自動小車設計課設(單片機編程器)-該文檔為基于單片機的自動
    發表于 07-22 13:32 ?24次下載
    基于單片機的<b class='flag-5'>自動</b><b class='flag-5'>避</b><b class='flag-5'>障</b><b class='flag-5'>小車</b>設計課設

    基于單片機的小車自動循跡的設計(proteus仿真+源碼+原理圖+軟件設計流程+硬件清單+視頻講解)

    基于單片機的小車自動循跡的設計(proteus仿真+源碼+原理圖+軟件設計流程+硬件清單+視頻講解)
    發表于 11-11 15:51 ?92次下載
    基于單片機的<b class='flag-5'>避</b><b class='flag-5'>障</b><b class='flag-5'>小車</b>及<b class='flag-5'>自動</b>循跡的設計(proteus<b class='flag-5'>仿真</b>+源碼+原理圖+軟件設計流程+硬件清單+視頻講解)

    AGV小車使用雷達

    AGV(自動導引車)小車使用雷達是為了確保其在運行過程中的安全性和穩定性。雷達,如激光雷
    的頭像 發表于 05-20 10:48 ?617次閱讀
    主站蜘蛛池模板: 扒开老师大腿猛进AAA片| 久久中文字幕无码A片不卡| 入禽太深免费视频10| 中国特级黄色大片| 国产自拍视频在线一区| 偷拍自偷拍亚洲精品| 东热rq大乱交| 日本妞欧洲| 扒开女人下面使劲桶视频| 暖暖 免费 高清 日本视频大全| 在线不卡中文字幕| 久久久久国产| 一攻多受高h大总攻| 精品无码久久久久久久动漫| 亚洲日韩欧美国产专区| 国产永不无码精品AV永久| 香蕉久久日日躁夜夜嗓| 国产精品免费小视频| 国产精品搬运| 少妇无码吹潮久久精品AV网站 | 亚洲 欧美 日本 国产 高清 | 久久精品国产午夜伦班片| 亚洲人成电影网站色2017| 丰满人妻熟女色情A片| 亚洲AV永久无码精品老司机蜜桃| 成 人 色综合| 午夜DJ国产精华日本无码| CHINA篮球体育飞机2022网站| 免费精品美女久久久久久久久久 | 超碰97 总站 中文字幕| 强奸日本美女小游戏| 成人在线不卡视频| 色网址在线观看| 国产精品无码AV天天爽色欲 | 国产免费午夜高清| 免费精品国偷自产在线在线| 99久久亚洲精品日本无码| 热の中文 AV天堂| 高清国产一区| 小sao货ji巴cao死你视频| 国产亚洲综合视频|