精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

Proteus教程:超聲波測距與顯示

Harmony&嵌入式學習 ? 來源:Harmony&嵌入式學習 ? 作者:Harmony&嵌入式學 ? 2023-06-14 11:28 ? 次閱讀

視頻鏈接:https://www.bilibili.com/video/BV1ik4y1677Q

pYYBAGSJM9mAGbqDAAa0W4lmbLM237.pngpYYBAGSJM-CAGLbGAAJT1WPZ930267.pngpYYBAGSJM-aAenm_AAM3ons8s6k052.png

#include
#include 
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^2;
sbit LCD1602_RW=P2^1;
sbit LCD1602_RS=P2^0;
sbit Trig = P1^0;
sbit Echo = P1^1;
unsigned long S=0;
bit      flag =0;
unsigned int DIstance,time;

/*******************************************************************************
* 函 數 名         : Lcd1602_Delay1ms
* 函數功能		   : 延時函數,延時1ms
* 輸    入         : c
* 輸    出         : 無
* 說    名         : 該函數是在12MHZ晶振下,12分頻單片機的延時。
*******************************************************************************/

void Lcd1602_Delay1ms(uint c)   //誤差 0us
{
    uchar a,b;
	for (; c>0; 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;
}
void Conut(void)
{
	 StartModule();
	 while(!Echo);		//當RX為零時等待
	 TR0=1;			    //開啟計數
	 while(Echo);			//當RX為1計數并等待
	 TR0=0;				//關閉計數
	 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, '0');
	  DisplayOneChar(1, 1, '.');	//顯示點
	  DisplayOneChar(2, 1, '0');
	  DisplayOneChar(3, 1, '0');
	  DisplayOneChar(4, 1, 'M');	//顯示M
	 }
	 else
	 {
	  DisplayOneChar(0, 1, (char)(S/100+'0'));
	  DisplayOneChar(1, 1, '.');	//顯示點
	  DisplayOneChar(2, 1, (char)(S/10%10+'0'));
	  DisplayOneChar(3, 1, (char)(S%10+'0'));
	  DisplayOneChar(4, 1, 'M');	//顯示M
	 }
}
void zd0() interrupt 1 		 //T0中斷用來計數器溢出,超過測距范圍
{
    flag=1;							 //中斷溢出標志
}
void Sr04_Init()
{
	 TMOD=0x01;		   //設T0為方式1,GATE=1;
	 TH0=0;
	 TL0=0;          
	 ET0=1;             //允許T0中斷
	 EA=1;			   //開啟總中斷	
}

void main()
{
	Sr04_Init();
	LcdInit();
	DisplayListChar(0,0,"Welcome");
	while(1)
	{
		Conut();
	}
}

審核編輯:湯梓紅

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

    關注

    79

    文章

    1692

    瀏覽量

    106370
  • 中斷
    +關注

    關注

    5

    文章

    895

    瀏覽量

    41391
  • 超聲波測距
    +關注

    關注

    5

    文章

    246

    瀏覽量

    37860
收藏 人收藏

    評論

    相關推薦

    超聲波測距系統設計

    超聲波測距系統設計由于超聲波指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用于距離的測量,如測距儀和物位測量儀等都可以通過
    發表于 10-15 15:25

    超聲波測距儀研究

    根據聲波反射原理,應用單片機(AT89S52)技術和UCM40T超聲波傳感器設計了一種超聲波測距儀。硬件部分主要由控制模塊、超聲波發射模塊、
    發表于 03-04 15:38

    超聲波測距原理

    為此,文中嘗試以單片機AT89S52為核心,利用一對40 kHz壓電超聲傳感器設計一款體積較小、價格低廉、精度較高、具有溫度補償、實時LCD顯示和報警的超聲波測距儀。1
    發表于 04-25 11:32

    Proteus中的超聲波測距

    本帖最后由 huhaihang 于 2015-4-11 16:21 編輯 求高手幫忙,誰會在Proteus中仿真超聲波測距?請指教,謝謝!
    發表于 04-11 15:55

    超聲波測距

    Proteus中怎樣仿真超聲波測距,我在庫里找不到Cx20106這個元件,沒法仿真了。求高手指教!
    發表于 04-11 16:27

    基于STM32超聲波測距設計的合集

    ARM內核芯片STM32F103ZET6的32位嵌入式微處理器與帶有溫度補償的US-100超聲波測距模塊實現聲波測距。STM32的串口資源相當豐富,能提供5路串口,通過微處理器的串口實
    發表于 09-05 16:13

    超聲波測距原理

    藍橋杯單片機必備知識-----(9)超聲波測距超聲波測距原理:超聲波發射器向某一方向發射超聲波
    發表于 07-19 09:08

    超聲波測距原理

    1.超聲波測距原理超聲波是利用反射的原理測量距離的,被測距離一端為超聲波傳感器,另一端必須有能反射超聲波
    發表于 07-21 07:01

    超聲波測距的原理是什么

    1、測距原理超聲波測距的原理是利用超聲波在空氣中的傳播速度為已知,測量聲波在發射后遇到障礙物反射回來的時間,根據發射和接收的時間差計算出發射
    發表于 12-01 06:56

    超聲波測距原理及簡介

    超聲波測距原理,超聲波測距是什么?本文針對這些內容進行詳細地分析闡述。
    發表于 11-07 15:37 ?1.1w次閱讀

    超聲波測距描述+程序

    超聲波測距超聲波測距超聲波測距超聲波
    發表于 11-19 14:07 ?39次下載

    超聲波測距

    超聲波測距源文件,詳細介紹了基于51單片機的超聲波測距原理,該文件包含設計的源程序。
    發表于 05-20 10:12 ?182次下載

    超聲波測距液晶顯示源碼下載

    LCD模塊+超聲波測距顯示
    發表于 01-31 16:40 ?8次下載

    超聲波測距仿真相關文件資源下載

    proteus8.6版本以上即可打開,超聲波測距,LCD1602顯示距離
    發表于 05-06 09:21 ?21次下載

    超聲波測距資料(HC-SR04)_TB

    超聲波測距資料(HC-SR04)_TB 超聲波PIC單片機C程序超聲波測距51C程序超聲波
    發表于 03-14 15:13 ?195次下載