欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
動手制作超聲波測距板,為避障小車作準備
[打印本頁]
作者:
dzdiy
時間:
2015-4-11 19:08
標題:
動手制作超聲波測距板,為避障小車作準備
本帖最后由 dzdiy 于 2015-4-11 20:33 編輯
就是這個超聲波測距,我有元件,只是不齊全,所以就買了一個測距模塊,制作了一個超聲波測距板。一切都用洞洞板焊,自己搭建電路,那樣學得到更多東西,用套件的話,學到的只是編程,硬件原理就會有空缺。自己自學單片機也有一段時間了,看來還是要檢測一下自己的能力才行,想來想去,覺得小車很不錯,如果我可以一獨立制作出自己的小車,哪是一件不錯的事,所以從今天起,我開始制作和編寫自己的小車,還是一步一步來哈。超聲波測距只是第一步。下載超聲波測距程序包
超聲波測距源程序:
超聲波測距模塊程序包.zip
(28.17 KB, 下載次數: 31)
2015-4-11 18:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit trig=P1^5;//超聲波測距模塊//
sbit echo=P3^2;
bit flag1;//觸發信號標志位//
sbit EN=P2^5; //1602相關端口定義//
sbit RS=P1^0;
sbit RW=P1^1;
sbit STA7=P0^7;
uchar count;
long int distance;//距離變量//
//………………………………延時函數…………………………//
void delayt(uint x)
{
uchar j;
while(x-- > 0)
{
for(j = 0;j < 125;j++)
{
;
}
}
}
//……………………LCD1602相關函數…………………………//
void panmang()//1602判忙//
{
P0=0xff;
do
{
RS=0;
RW=1;
EN=0;
EN=1;
}
while(STA7==1);
EN=0;
}
void w_data(uchar dat)//1602寫數據//
{
panmang();
EN=0;
P0=dat;
RS=1;
RW=0;
EN=1;
EN=0;
}
void w_cmd(uchar cmd)//1602寫指令//
{
panmang();
EN=0;
P0=cmd;
RS=0;
RW=0;
EN=1;
EN=0;
}
void init_1602()//1602初始化//
{
w_cmd(0x38);//設置16x2顯示,5x7點陣,8位數據接口//
w_cmd(0x0c);//設置開顯示,光標不顯示,光標不閃爍//
w_cmd(0x06);//設置當讀或寫一個字符后地址指針加1,且光標加1,整屏不移動//
w_cmd(0x01);//清屏//
w_cmd(0x80+0x40);
w_data('D');
w_data('i');
w_data('s');
w_data('t');
w_data('a');
w_data('n');
w_data('c');
w_data('e');
w_data(':');
w_cmd(0x80+0x4c);
w_data('.');
w_cmd(0x80+0x4e);//單位是厘米//
w_data('c');
w_data('m');
}
//……………………………………………定時器1初始化,用于計算響應信號時間……………………………………………//
void init_t0()
{
TMOD = 0x01;
TL0 = 0x66;
TH0 = 0xfc; //1ms
ET0 = 1;
EA = 1;
}
//………………………………………觸發信號………………………………………//
void trigger()
{
trig=1;
delayt(1);
trig=0;
}
//……………………………………………………初始化相應端口及變量…………………………………………………………//
void init_measuring()
{
trig=0;
echo=0;
count=0;
}
//…………………………………………………………測距相關函數……………………………………………………………………//
void measuring()
{
uchar l;
uint h,y;
TR0 = 1;
while(echo)
{
;
}
TR0 = 0;
l = TL0;
h = TH0;
y = (h << 8) + l;
y = y - 0xfc66;//us部分
distance = y + 1000 * count;//計算總時間,單位是微秒
TL0 = 0x66;
TH0 = 0xfc;
delayt(30);
distance = 3453* distance / 20000;//原始為:(0.34毫米/us)*時間/2//
}
//……………………………………………顯示函數………………………………………………………//
void display(uint x)
{
uchar qian,bai,shi,ge;
qian=x/1000;
bai=(x/100)%10;
shi=(x/10)%10;
ge=x%10;
w_cmd(0x80+0x49);//單位是厘米//
w_data(qian+0x30);
w_data(bai+0x30);
w_data(shi+0x30);
w_cmd(0x80+0x4d);
w_data(ge+0x30);
}
//……………………………………………………主函數……………………………………………………//
void main()
{
init_1602();
init_t0();
init_measuring();
while(1)
{
trigger();
while(echo==0) //等待回聲
{
;
}
measuring();
display(distance);
init_measuring();
delayt(600);//每次測量間隔60ms//
}
}
//……………………………………………中斷服務函數…………………………………………………//
void T_0()interrupt 1
{
TF0 = 0;
TL0 = 0x66;
TH0 = 0xfc;
count++;
if(count==18)
{
TR0 =0;
TL0 = 0x66;
TH0 = 0xfc;
count = 0;
}
}
復制代碼
作者:
6ningning
時間:
2015-4-12 14:33
不錯。
作者:
Orz123
時間:
2017-3-22 21:38
電路和焊接能發下嗎,小白傷不起
作者:
13756176595
時間:
2017-7-28 20:08
Orz123 發表于 2017-3-22 21:38
電路和焊接能發下嗎,小白傷不起
同上
作者:
Kinarmy
時間:
2018-5-16 22:27
可以發張接線的圖片么?新手不是很懂
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1