欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機的超聲波測距設計程序+Proteus仿真圖
[打印本頁]
作者:
hei0
時間:
2018-7-3 17:57
標題:
基于51單片機的超聲波測距設計程序+Proteus仿真圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(96.68 KB, 下載次數: 57)
下載附件
2022-3-23 22:08 上傳
單片機源程序如下:
#include<reg52.h>
#include<intrins.h> //聲明void _nop_(void);
#defineuint unsigned int
#defineuchar unsigned char
#defineNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit PL=P1^0;
//------LCD引腳-----
sbit LCD_RS=P2^6; //將P2.6引腳定義為LCD寄存器選擇
sbitLCD_RW=P2^5; //將P2.5引腳定義為LCD讀寫信號線
sbitLCD_EN=P2^7; //將P2.7引腳定義為LCD使能端
//------超聲波引腳-------
sbitTx=P3^3; //觸發控制信號輸入
sbit Rx=P3^2; //回響信號輸出
ucharcode table[]={"Distance Test:"}; //LCD第一行顯示
uchartemp_dis[]= {"000.0 cm"}; //LCD第二行
longint t,distance;
ucharcache[4]={0,0,0,0};
//--------延時-------
voiddelay(uint ms)
{
uint t;
while(ms--)
for(t=0;t<120;t++);
}
//-------讀LCD狀態-------
ucharread_lcd_state()
{
uchar state;
LCD_RS=0; //LCD選擇指令寄存器
LCD_RW=1; //LCD進行讀操作
LCD_EN=1; //LCD使能端為高電平
_nop_(); // 產生一條NOP指令
state=P0;
LCD_EN=0; //LCD使能端為低電平
_nop_();
returnstate; //返回函數
}
//-------忙等待------
voidlcd_busy_wait()
{
while((read_lcd_state() &0x80)==0x80);
NOP();
}
//----------LCD寫指令----------
voidlcd_write_com(uchar com)
{
lcd_busy_wait();
LCD_RS=0; //RS為0時,寫指令,RS為1時,寫數據
LCD_RW=0; //LCD進行寫操作
P0=com; //把命令字送入P0
NOP(); //延時一個機器周期1us
LCD_EN=1;
NOP();
LCD_EN=0;
}
//----------LCD寫數據----------
voidlcd_write_data(uchar dat)
{
lcd_busy_wait();
LCD_RS=1;
LCD_RW=0;
P0=dat; //把要顯示的數據送入P0
NOP();
LCD_EN=1;
NOP();
LCD_EN=0;
}
//-------LCD初始化-------
voidlcd_init()
{
LCD_EN=0;
lcd_write_com(0x38); //LCD顯示模式設置
lcd_write_com(0x0c); //LCD顯示開/關及光標設置
lcd_write_com(0x06); //當寫一個字符后地址指針加1,且光標加1
lcd_write_com(0x01); //顯示清屏
}
//---------設置液晶顯示位置-----------
voidset_lcd_pos(uchar p)
{
lcd_write_com(p|0x80);
}
//---------液晶顯示程序----------
voidlcd_print(uchar p,uchar *s,uint low)
{
uint num;
set_lcd_pos(p);
for(num=0;num<low;num++)
{
lcd_write_data(s[num]);
delay(1);
}
}
voidHC05_Init()
{
Tx=1; //觸發脈沖
NOP();NOP();NOP();NOP();
Tx=0;
distance=0.1725*t; //距離計算
}
voiddistance_convert(long int dat)
{
cache[0]=dat/1000;
cache[1]=dat/100%10;
cache[2]=dat/10%10;
cache[3]=dat%10;
temp_dis[0]=cache[0]+'0';
temp_dis[1]=cache[1]+'0';
temp_dis[2]=cache[2]+'0';
temp_dis[4]=cache[3]+'0';
}
//------------主程序-----------
voidmain()
{
PL=1;
delay(20);
PL=1;
delay(1000);
PL=0;
lcd_init();
delay(5);
TMOD=0x19;
EA=1; //開總中斷
TR0=1; //啟動定時器
EX0=1; //開外部中斷
IT0=1; //設置為下降沿中斷方式
while(1)
{
HC05_Init();
distance_convert(distance);
lcd_print(0x01,table,14);
lcd_print(0x44,temp_dis,8);
}
}
//外部中斷0
voidint0() interrupt 0
{
t=(TH0*256+TL0); //計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
TH0=0;
TL0=0;
}
復制代碼
51hei.png
(13.39 KB, 下載次數: 58)
下載附件
2022-3-23 22:08 上傳
Keil代碼與Proteus仿真下載:
基于單片機超聲波測距系統 語音提示 程序hex 原理圖.zip
(60.45 KB, 下載次數: 163)
2018-7-3 17:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
qazedctgb
時間:
2022-3-23 15:30
作者你好圖呢
作者:
dududula
時間:
2022-4-3 15:19
你好,請教一下,這個可以通過修改程序,連接兩個超聲波傳感器測兩個距離,然后用垂直距離比上兩個水平距離之差,從而求出坡度嗎? 坡度也在1602上顯示出來
作者:
dududula
時間:
2022-4-3 16:09
請問36行的返回函數是沒有的嗎?為什么編譯程序一直出錯呢?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1