久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
HC-SR04超聲波測距模塊接線圖和程序
[打印本頁]
作者:
chysh
時間:
2017-6-14 13:14
標題:
HC-SR04超聲波測距模塊接線圖和程序
接線圖:
原理圖.PNG
(50.91 KB, 下載次數: 125)
下載附件
2017-6-14 13:13 上傳
單片機程序:
#include <AT89X52.h> //調用51單片機的頭文件
#include <intrins.h>
#include <math.h>
//---------------------------------------
//1602液晶相關I/O設置
sbit E=P2^3; //1602液晶的E腳接在P2.3口上
sbit RW=P2^4; //1602液晶的RW腳接在P2.4口上
sbit RS=P2^5; //1602液晶的RS腳接在P2.5口上
//---------------------------------------
//---------------------------------------
//HC-SR04相關I/O設置
sbit TIRG=P3^4; //定義IO口,具體可以去查看原理圖
sbit ECHO=P3^2; //定義IO口,具體可以去查看原理圖
//---------------------------------------
bit flag =0;
unsigned char k;
//---------------------------------------
//名稱:1602液晶用延時函數
//---------------------------------------
void Delay1602(unsigned int t)
{
unsigned int k; //定義一個16位寄存器用來做延時用
for(k=0;k<t;k++); //延時
}
//---------------------------------------
//名稱:1602液晶忙檢測函數
//---------------------------------------
void LCD1602_busy(void)
{
P0_7=1; //將P0.7置1,為讀狀態做準備
RS=0; //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
RW=1; //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
E=1; //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
while(P0_7==1); //由P0.7讀入1,表示1602液晶忙,需要等待
E=0; //讀完以后,恢復E的電平
}
//---------------------------------------
//名稱:1600寫命令函數
//---------------------------------------
void LCD1602_Write_com(unsigned char combuf)
{
RS=0; //選擇指令寄存器
RW=0; //選擇寫狀態
P0=combuf; //將命令字通過P0口送至DB
E=1; //E高電平將命令字寫入1602液晶
E=0; //寫完以后,恢復E的電平
}
//---------------------------------------
//名稱:1602寫命令函數(帶忙檢測)
//---------------------------------------
void LCD1602_Write_com_busy(unsigned char combuf)
{
LCD1602_busy(); //調用忙檢測函數
LCD1602_Write_com(combuf); //調用忙檢測函數
}
//---------------------------------------
//名稱:1602寫數據函數(帶忙檢測)
------------------------
void LCD1602_Write_data_busy(unsigned char databuf)
{
LCD1602_busy(); //調用忙檢測函數
RS=1; //選擇數據寄存器
RW=0; //選擇寫狀態
P0=databuf; //將命令字通過P0口送至DB
E=1; //E高電平將命令字寫入1602液晶
E=0; //寫完以后,恢復E的電平
}
//---------------------------------------
//名稱:1602液晶顯示地址寫函數
//---------------------------------------
void LCD1602_Write_address(unsigned char x,unsigned char y)
{
x&=0x0f; //列地址限制在0-15間
y&=0x01; //行地址限制在0-1間
if(y==0) //如果是第一行
LCD1602_Write_com_busy(x|0x80); //將列地址寫入
else //如果是第二行
LCD1602_Write_com_busy((x+0x40)|0x80); //將列地址寫入
}
//---------------------------------------
//名稱:1602液晶初始化函數
//---------------------------------------
void LCD1602_init(void)
{
Delay1602(1500); //調用延時函數
LCD1602_Write_com(0x38); //8位數據總線,兩行顯示模式,5*7點陣顯示
Delay1602(500); //調用延時函數
LCD1602_Write_com(0x38); //8位數據總線,兩行顯示模式,5*7點陣顯示
Delay1602(500); //調用延時函數
LCD1602_Write_com(0x38); //8位數據總線,兩行顯示模式,5*7點陣顯示
LCD1602_Write_com_busy(0x38); //8位數據總線,兩行顯示模式,5*7點陣顯示
LCD1602_Write_com_busy(0x08); //顯示功能關,無光標
LCD1602_Write_com_busy(0x01); //清屏
LCD1602_Write_com_busy(0x06); //寫入新的數據后,光標右移,顯示屏不移動
LCD1602_Write_com_busy(0x0C); //顯示功能開,無光標
}
//---------------------------------------
//名稱:1602液晶指定地址顯示函數
//---------------------------------------
void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf)
{
LCD1602_Write_address(x,y); //先將地址信息寫入
LCD1602_Write_data_busy(buf); //再寫入要顯示的數據
}
//---------------------------------------
//名稱:定時器0中斷服務程序
//---------------------------------------
void Timer0(void) interrupt 1
{
//***此處用戶自行添加定時器T0中斷處理程序***
flag=0;
//******************************************
}
//---------------------------------------
//名稱: 主函數
-----------------------
void main(void) //主函數,單片機開機后就是從這個函數開始運行
{
long S;
unsigned int i;
unsigned int Timeout;
LCD1602_init(); //調用1602液晶初始化函數
//***定時器Timer0初始化***
TMOD&=0xF0; //將TMOD的低4位定時器0控制部分清零
TMOD|=0x01; //設置定時器0為方式1
TMOD=0x01;
TL0=0; //設置定時器0初值低8位
TH0=0; //設置定時器0初值高8位
TR0=0; //停止定時器0
ET0=1; //Timer0中斷允許
//**********************
//***開全局中斷設置****
//定時器Timer0設置了中斷允許,此處要開全局中斷
EA=1; //開全局中斷
//*********************
while(1)
{
TIRG=1; //發一個脈沖觸發信號
i=4; //維持約17US,符合不低于10US的要求
while(i>0) //維持約17US,符合不低于10US的要求
i--; //維持約17US,符合不低于10US的要求
TIRG=0; //撤銷觸發信號
TR0=0; //關閉定時器
TL0=0; //設置定時器0初值低8位為0
TH0=0; //設置定時器0初值高8位為0
k=0; //清除溢出標志
flag=0;
Timeout=0;
while((ECHO==0)&&((Timeout++)<50000)); //等待回響高電平
TR0=1; //回響高電平來后啟動定時器
Timeout=0;
while((ECHO==1)&&((Timeout++)<50000)); //等待回響高電平結束后
TR0=0; //關閉定時器
S=((TH0*256+TL0)*0.5425)/58;
if(flag==1||S>400) //超出測量范圍顯示“-”
{
LCD1602_Disp(0, 0, '-'); //顯示百位-
LCD1602_Disp(1, 0, '-'); //顯示十位-
LCD1602_Disp(2, 0, '-'); //顯示個位-
LCD1602_Disp(3, 0, 'C'); //顯示C
LCD1602_Disp(4, 0, 'M'); //顯示M
}
else
{
LCD1602_Disp(0, 0, S%1000/100+'0'); //顯示百位
LCD1602_Disp(1, 0, S%1000%100/10+'0'); //顯示十位
LCD1602_Disp(2, 0, S%1000%100%10+'0'); //顯示個位
LCD1602_Disp(3, 0, 'C'); //顯示C
LCD1602_Disp(4, 0, 'M'); //顯示M
}
i=18000; //維持約77400US,符合不低于60MS的要求
while(i>0) //維持約77400US,符合不低于60MS的要求
i--; //維持約77400US,符合不低于60MS的要求
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人精品毛片国产亚洲av十九禁
|
欧美国产亚洲一区二区
|
欧美a∨
|
亚洲国产精品成人无久久精品
|
国产乱人伦精品一区二区
|
亚洲色片网站
|
亚洲综合大片69999
|
成人欧美一区二区三区视频xxx
|
怡红院成人在线视频
|
羞羞羞视频
|
成人精品免费视频
|
四虎成人精品永久免费av九九
|
曰韩一二三区
|
欧美精品v
|
欧美成人免费
|
精品亚洲一区二区三区四区五区高
|
91在线电影
|
国产乱码精品一区二区三区中文
|
精品欧美一区二区三区久久久
|
亚洲成人av在线播放
|
亚洲一区二区视频在线播放
|
精品日韩一区
|
欧美中文字幕一区二区三区亚洲
|
四虎永久在线精品免费一区二
|
毛片网在线观看
|
国产成人精品久久二区二区91
|
久草热8精品视频在线观看 午夜伦4480yy私人影院
|
99在线免费观看视频
|
亚洲成a人片
|
香蕉大人久久国产成人av
|
爱爱爱av
|
一区福利视频
|
久久精品一区二区三区四区
|
激情婷婷成人
|
欧美乱码精品一区二区三区
|
国产午夜精品一区二区三区四区
|
波多野吉衣在线播放
|
狠狠狠干
|
亚洲97
|
午夜精品一区二区三区在线观看
|
www免费视频
|