資源簡介
超聲波測距并LCD1602上顯示距離,蜂鳴器發出的聲音頻率判斷距離大小。
代碼片段和文件信息
#include????
#include?
typedef?unsigned?int?u16; ??//對數據類型進行聲明定義
#define?uint?unsigned?int
#define?uchar?unsigned?char
sbit?rs=P2^6;????????????//1602的數據/指令選擇控制線?
sbit?rw=P2^5;???????????//1602的讀寫控制線?
sbit?en=P2^7;??????????//1602的使能控制線?
sbit?trig=P1^0;??????//超聲波測距模塊Trig
sbit?echo=P1^1;?????//超聲波測距模塊Echo
sbit?beep=P1^5; //?蜂鳴器連接端
uchar?flag=1;?????????//觸發信號標志位//
uchar?count;???????????//中斷累加變量
long?int?distance;????//測量所得距離
unsigned?char?code?table[?]={“0123456789“};?//定義字符數組顯示數字
/*------------------------------------------------
??????????????????延時函數
------------------------------------------------*/
void?delay(uint?n)???????????????????????????
{?
????uint?xy;??
????for(x=n;x>0;x--)?
????for(y=110;y>0;y--);?
}?
/*---延時函數---*/
void?delay1(u16?i)
{
while(i--);
}
???
/*------------------------------------------------
??????????????????延時函數
------------------------------------------------*/
void?delayt(uint?x)
{
????uchar?j;
????while(x--?>?0)
????{
??????????????for(j?=?0;j?125;j++)
????????{
??????????;
????????}
????}
}
/*------------------------------------------------
????????????????1602寫命令函數?
------------------------------------------------*/
void?lcd_wcom(uchar?com)????????????
{?
????rs=0;????????????????//選擇指令寄存器?
????rw=0;???????????????//選擇寫?
????P0=com;????????????//把命令字送入P0?
????delay(5);?????????//延時一小會兒,讓1602準備接收數據?
????en=1;????????????//使能線電平變化,命令送入1602的8位數據口這點非常重要?
????en=0;?
}
/*------------------------------------------------
???????????????1602寫數據函數????
------------------------------------------------*/
void?lcd_wdat(uchar?dat)????????
{?
????rs=1;?????????????//選擇數據寄存器?
????rw=0;????????????//選擇寫?
????P0=dat;?????????//把要顯示的數據送入P0?
????delay(5);??????//延時一小會兒,讓1602準備接收數據也就是檢測忙信號,這點非常重要。
????en=1;?????????//使能線電平變化,數據送入1602的8位數據口?
????en=0;?
??}?
/*------------------------------------------------
????????????????1602初始化函數??????
------------------------------------------------*/
void?lcd_init()??????????????
{?
????lcd_wcom(0x38);???????//8位數據,雙列,5*7字形??,用到功能設定指令?????
????lcd_wcom(0x0c);??????//開啟顯示屏,關光標,光標不閃爍,用到顯示開關控制指令?
????lcd_wcom(0x06);?????//顯示地址遞增,即寫一個數據后,顯示位置右移一位,用到了寫入模式設置指令
????lcd_wcom(0x01);????//清屏,用到了清屏指令
}
/*------------------------------------------------
??????????????1602顯示固定字符函數??????
------------------------------------------------*/
void?lcd_xianshi()??????????????
{?
????lcd_wcom(0x40+0x40);
????????lcd_wdat(‘D‘);
????????lcd_wdat(‘i‘);
????????lcd_wdat(‘s‘);
????????lcd_wdat(‘t‘);
????????lcd_wdat(‘a‘);
????????lcd_wdat(‘n‘);
????????lcd_wdat(‘c‘);
????????lcd_wdat(‘e‘);
????????lcd_wdat(‘:‘);
????????lcd_wcom(0x40+0x4c);
????????lcd_wdat(‘.‘);
????????lcd_wcom(0x40+0x4e);//單位是厘米// ?0x40表示第一排顯示0x80表示第二排顯示
????????lcd_wdat(‘c‘);
????????lcd_wdat(‘m‘);
}
/*------------------------------------------------
定時器0初始化,用于計算響應信號時間
------------------------------------
評論
共有 條評論