欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機超聲波測距液晶顯示加串口
[打印本頁]
作者:
我思故我在i
時間:
2019-7-6 16:26
標題:
單片機超聲波測距液晶顯示加串口
當初剛學51的代碼,莫見笑
單片機源程序如下:
/******2018年11.30超聲波測距液晶顯示加串口******/
#include<reg51.h> //包含51頭文件
#include<lcd.c> //包含液晶1602顯示
sbit trig=P0^1; //控制端口定義
sbit echo=P0^0; //接收端口定義
unsigned char str[]={"wuxuesiceju!"}; //液晶屏顯示數(shù)組刷廣告
unsigned char juli[]={"0000cm!"}; //液晶屏顯示測量距離值數(shù)組
unsigned int time; //定義一個整型(全局)變量time
unsigned long s; //定義一個長整型(全局)變量s
unsigned char flag=0; //定義一個字符型(全局)變量flag(計數(shù)器數(shù)到溢出標記)
/******軟件延時函數(shù)延時20微秒(晶振11.0592MHz)******/
void Delay20us() //@11.0592MHz
{
unsigned char i;
// _nop_();
i = 6;
while (--i);
}
/******軟件延時函數(shù)延時1000毫秒(晶振11.0592MHz)******/
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
// _nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/******超聲波模塊啟動函數(shù)(由時序圖得)******/
void start()
{ trig=1; //控制端高電平持續(xù)超過10us以上啟動模塊
Delay20us(); //延時20us
trig=0; //控制端拉低
}
/******超聲波測距距離計算1602顯示函數(shù)******/
void count()
{ time=TH0*256+TL0; //計數(shù)器中的16進制數(shù)據(jù)轉(zhuǎn)化為10進制數(shù)(高位低位拼成一個整數(shù))
s=time*1.7/100; //超聲模塊測量距離計算公式(發(fā)出超聲波計數(shù)器開始計數(shù),
//當接收到反射回來的時停止,這個就是一個來回的時間,
//除以2再乘上聲速340m/s)
if((s>400)||(s<3)||(flag==1) ) //假如測量距離超過4m或者小于3cm或者計數(shù)器溢出1602顯示錯誤提示
wstr(0xc0,"chaole!");
else //否則將測量距離顯示到1602上
{
juli[3] = s%10+48; //取出十位在轉(zhuǎn)為數(shù)字在液晶屏顯示
juli[2] = s/10%10+48; //取出百位在轉(zhuǎn)為數(shù)字在液晶屏顯示
juli[1] = s/100%10+48; //取出千位在轉(zhuǎn)為數(shù)字在液晶屏顯示
juli[0] = s/1000+48; //取出萬位在轉(zhuǎn)為數(shù)字在液晶屏顯示
wstr(0xc0," ");//清空液晶屏
wstr(0xc0,juli); //指定液晶屏顯示位置
}
TH0=0X00; // 定時器初值為0
TL0=0X00; // 定時器初值為0
flag=0; // 溢出標記置0
}
/******串口初始化函數(shù)******/
uart () //9600bps@11.0592MHz 【兩者波特率要一致】
{
TMOD=TMOD|0x20; //設置T1為定時器,工作在方式2
TH1=0XFD; //定時器T1初值253 波特率為96000b/s
TL1=0XFD; //定時器T1初值253 波特率為96000b/s
SCON=0X50; //設置串口工作方式1
PCON=0X00; //波特率不加倍
ET1=0; //定時器1的中斷允許開關
ES=1; //開啟串口中斷
TR1=1; //啟動定時器
}
/******中斷服務子程序函數(shù)******/
t0int() interrupt 1 //中斷t0中斷服務子程序,中斷類型號為1
{
flag=1; //溢出標記賦值1
}
/******主程序******/
main()
{
unsigned char i; //定義一個字符型(局部)變量
Init(); //液晶屏1602初始化
wstr(0x80,str); //指定地址液晶屏顯示數(shù)組
TMOD=0x01; //定時器0工作在方式1
TH0=0x00; //定時器0初值為0
TL0=0x00; //定時器0初值為0
EA=1; //開總中斷
ET0=1; //定時器0允許中斷
uart(); //串口初始化
while(1)
{
start(); //超聲波模塊初始化
while(echo==0) ; //判斷收端口是否為低電平(不是低電平什么也不干)
TR0=1; //啟動定時器
while(echo==1) ; //判斷收端口是否為高電平(不是高電平什么也不干)
TR0=0; //關閉定時器
count(); //超聲波測距距離計算1602顯示函數(shù)初始化
Delay1000ms() ; //延時1000ms
for(i=0;i<7;i++) //將測量數(shù)據(jù)發(fā)送到電腦串口軟件
TL1=0XFD; //定時器T1初值253 波特率為96000b/s 【兩者波特率要一致】
{
SBUF=juli[i]; //測量數(shù)據(jù)寫到SBUF,發(fā)送到電腦串口軟件
while(TI==0) ; //等待發(fā)送結(jié)束(沒發(fā)送完成什么也不干)
TI=0; //中斷標志清零
}
}
}
復制代碼
所有資料51hei提供下載:
2018年11.30超聲波測距液晶顯示加串口.zip
(34.19 KB, 下載次數(shù): 24)
2019-7-6 16:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
TJW。
時間:
2019-12-7 14:18
串口為什么顯示00
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1