標(biāo)題:
藍(lán)僑杯單片機(jī)超聲波模塊程序
[打印本頁]
作者:
1521578597
時間:
2021-5-27 17:24
標(biāo)題:
藍(lán)僑杯單片機(jī)超聲波模塊程序
#include <stc15f2k60s2.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit TX = P1^0; //發(fā)射引腳
sbit RX = P1^1; //接收引腳
uchar tab[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff,0x8e};
uchar code weixuan[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar dspbuf[] = {10,10,10,10,10,10,10,10};
uint distance,time = 0,intr=0;
uchar s_flag = 0,du=0,moshi;
void display();
void moshi0();
void moshi1();
void xian();
void Delay12us();
void send_wave();
void all_chushihua();
void all_chushihua()
{
P0 = 0xff;
P2 = (P2 & 0x1f) | 0x80;
P2 = 0x1f;
P0 = 0x00;
P2 = (P2 & 0x1f) | 0xa0;
P2 = 0x1f;
P0=0XFF;
P2=(P2&0X1F)|0XC0;
P2=P2&0X1F;
P0=0XFF;
P2=(P2&0X1F)|0XE0;
P2=P2&0X1F;
}
void main(void)
{
all_chushihua();
//AUXR = 0x80;
TMOD = 0x11; //配置定時器工作模式
TH0 = (65535-2000)/256;
TL0 = (65535-2000)/256;
TH1 = 0;
TL1 = 0;
TR0 = 1; //啟動定時器
EA = 1;
ET0 = 1; //打開定時器0中斷
while(1)
{
/** 200毫秒更新一次數(shù)據(jù) */
if(s_flag)
{
s_flag = 0;
/** 關(guān)閉定時器0中斷:計算超聲波發(fā)送到返回的時間 */
// ET0 = 0;
send_wave(); //發(fā)送方波信號
TR1 = 1; //啟動計時
while((RX == 1) && (TF1 == 0)); //等待收到脈沖,沒有計滿溢出
TR1 = 0; //關(guān)閉計時
//發(fā)生溢出
if(TF1 == 1)
{
TF1 = 0;
distance = 9999; //無返回
moshi=0;
}
else
{
/** 計算時間 */
time=TH1*256+TL1;
distance = (unsigned int)(time*0.017); //計算距離 340 00 /1000 000/2=0.017
if(distance<10) distance=10; //在這規(guī)范那個范圍內(nèi),
if(distance>50) distance=50;
moshi=1;
}
TH1 = 0;
TL1 = 0;
}
}
}
//定時器0中斷服務(wù)函數(shù)
void time0() interrupt 1 //默認(rèn)中斷優(yōu)先級 1
{
TH0 = (65535-2000)/256;
TL0 = (65535-2000)/256;
if(++intr == 100){
s_flag = 1;intr = 0;}
display();
}
void Delay12us()//@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 30;
while (--i);
}
void send_wave()//發(fā)送八段脈沖波(40Khz)
{
unsigned char i = 8;
while(i --)
{
TX = 1;
Delay12us();
TX = 0;
Delay12us();
}
}
void xianshi0()
{
switch(du)
{
case 0:P0=tab[11];break;
case 1:P0=tab[10];break;
case 2:P0=tab[10];break;
case 3:P0=tab[10];break;
case 4:P0=tab[10];break;
case 5:P0=tab[10];break;
case 6:P0=tab[10];break;
case 7:P0=tab[10];break;
}
}
void xianshi1()
{
switch(du)
{
case 0:P0=tab[10];break;
case 1:P0=tab[10];break;
case 2:P0=tab[10];break;
case 3:P0=tab[10];break;
case 4:P0=tab[10];break;
case 5:P0=tab[distance/100%10];break;
case 6:P0=tab[distance/10%10];break;
case 7:P0=tab[distance%10]; break;
}
}
void xian()
{
switch(moshi)
{
case 0:xianshi0();break;
case 1:xianshi1();break;
}
}
void display()
{
P0=weixuan[du];
P2=(P2&0X1F)|0XC0;
P2=P2&0X1F;
xian();
P2=(P2&0X1F)|0XE0;
P2=P2&0X1F;
if(++du>7) du=0;
}
復(fù)制代碼
超聲波_DYH.rar
(100.26 KB, 下載次數(shù): 11)
2021-5-27 17:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1