誰有汽車防撞報警系統(tǒng)的源程序啊 ,急用,,,,,,
提問者:eo8lt8742014-02-25 00:00
最佳答案
//超聲波模塊顯示程序
#include //包括一個52標準內(nèi)核的頭文件
#include //包含_nop_()函數(shù)定義的頭文件
#include
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit Tx = P3^6; //產(chǎn)生脈沖引腳
sbit Rx = P3^2; //回波引腳
sbit RS=P2^2; //寄存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^3; //讀寫選擇位,將RW位定義為P2.1引腳
sbit E=P2^4; //使能信號位,將E位定義為P2.2引腳
sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit beep=P3^7;
uchar JULI=10,julii;
uint distance[4]; //測距接收緩沖區(qū)
unsigned char code digit[ ]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字
uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定義寄存器
bit succeed_flag,set_flag; //測量成功標志
//********函數(shù)聲明
void conversion(uint temp_data);
void delay_20us();
void pai_xu();
/*****************************************************
函數(shù)功能:延時1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i0;v--)
{
beep=0;
delay(13);
beep=1;
delay(12);
}
}
void delay_time(uchar date )
{
uchar vv;
for (vv=date;vv>0;vv--);
}
void sound (uchar f_max,uchar f_min, uchar call_value)
{
uchar i,j;
for(i=f_max-f_min;i>0;i--)
{
for(j=call_value;j>0;j--)
{
beep=0;
delay_time(f_min+i);
beep=1;
delay_time(f_min+i);
}
}
}
void key_cpp()
{
static unsigned int dat;
if(key1==0||key2==0||key3==0)dat++;
if(dat==200)
{
dat=0;
if(key3==0){set_flag^=1; didi(2);}
if(set_flag)
{
if(key1==0){JULI++;if(JULI>100)JULI=100;didi(1);}
if(key2==0){JULI--;if(JULI<=0)JULI=0;didi(1);}
}
}
}
//***************************************************************
//外部中斷0,用做判斷回波電平
INTO_() interrupt 0 // 外部中斷是0號
{
outcomeH =TH1; //取出定時器的值
outcomeL =TL1; //取出定時器的值
succeed_flag=1; //至成功測量的標志
EX0=0; //關閉外部中斷
}
//****************************************************************
//定時器0中斷,用做顯示
void timer0() interrupt 1 // 定時器0中斷是1號
{
TH0=0xfC; //寫入定時器0初始值
TL0=0x18;
key_cpp();
//didi(1);
}
//顯示數(shù)據(jù)轉(zhuǎn)換程序
void conversion(uint temp_data)
{
uchar ge_data,shi_data,bai_data ;
bai_data=temp_data/100 ;
temp_data=temp_data%100; //取余運算
shi_data=temp_data/10 ;
temp_data=temp_data%10; //取余運算
ge_data=temp_data;
EA=0;
bai = bai_data;
shi = shi_data;
ge = ge_data ;
EA=1;
}
//******************************************************************
void delay_20us()
{ uchar bt ;
for(bt=0;bt<60;bt++);
}
void pai_xu()
{ uint t;
if (distance[0]>distance[1])
{t=distance[0];distance[0]=distance[1];distance[1]=t;}
if(distance[0]>distance[2])
{t=distance[2];distance[2]=distance[0];distance[0]=t;}
if(distance[1]>distance[2])
{t=distance[1];distance[1]=distance[2];distance[2]=t;}
}
//*****************************************************
void main(void) // 主程序
{
uint distance_data,a,b;
uchar CONT_1;
uchar k; //定義變量i指向字符串數(shù)組元素
LCD_init(); //調(diào)用LCD初始化函數(shù)
delay(10); //延時10ms,給硬件一點反應時間
LCD_send_command(0x01); // 從第1行第3列開始顯示
k = 0; //指向字符數(shù)組的第1個元素
i=0;
flag=0;
Tx=0; //首先拉低脈沖輸入引腳
TMOD=0x11; //定時器0,定時器1,16位工作方式
IT0=0; //由高電平變低電平,觸發(fā)外部中斷
ET0=1; //打開定時器0中斷
EX0=0; //關閉外部中斷
EA=1; //打開總中斷0
TH0=0XFC;
TL0=0X18;
TR0=1; //啟動定時器0
didi(2);
LCD_disp_string(0 ,0,"Actual /:");
LCD_disp_string(0 ,1,"SetGap /:");
while(1) //程序循環(huán)
{
conversion(JULI);
LCD_send_command(0xC9);
LCD_send_data(digit[shi]); //將萬位數(shù)字的字符常量寫入LCD
LCD_send_data(digit[ge]); //將千位數(shù)字的字符常量寫入LCD
LCD_send_data('.'); //將萬位數(shù)字的字符常量寫入LCD
LCD_send_data(digit[0]); //將百位數(shù)字的字符常量寫入LCD
LCD_send_data(' '); //將百位數(shù)字的字符常量寫入LCD
LCD_send_data('C'); //將萬位數(shù)字的字符常量寫入LCD
LCD_send_data('M'); //將萬位數(shù)字的字符常量寫入LCD
EA=0;
Tx=1;
delay_20us();
Tx=0; //產(chǎn)生一個20us的脈沖,在Tx引腳
while(Rx==0); //等待Rx回波引腳變高電平
succeed_flag=0; //清測量成功標志
EX0=1; //打開外部中斷
TH1=0; //定時器1清零
TL1=0; //定時器1清零
TF1=0; //
TR1=1; //啟動定時器1
EA=1;
while(TH1 < 30);//等待測量的結(jié)果,周期65.535毫秒(可用中斷實現(xiàn))
TR1=0; //關閉定時器1
EX0=0; //關閉外部中斷
if(succeed_flag==1)
{
distance_data=outcomeH; //測量結(jié)果的高8位
distance_data<<=8; //放入16位的高8位
distance_data=distance_data|outcomeL;//與低8位合并成為16位結(jié)果數(shù)據(jù)
distance_data*=12; //因為定時器默認為12分頻
distance_data/=58; //微秒的單位除以58等于厘米
} //為什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0; //沒有回波則清零
}
distance[i]=distance_data; //將測量結(jié)果的數(shù)據(jù)放入緩沖區(qū)
i++;
if(i==3)
{
distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
pai_xu();
distance_data=distance[1];
a=distance_data;
if(b==a) CONT_1=0;
if(b!=a) CONT_1++;
if(CONT_1>=3)
{ CONT_1=0;
b=a;
conversion(b);
julii=b/10;
if(!set_flag) if(julii
回答者:kus29133c2016-02-25 00:00
相關問題
-
跟裝倒車雷達一個原理,前面有個顯示屏,顯示后面5米之內(nèi)的距離,后面保險杠上裝4個小探頭。謝謝
提問者:essie嘟嘟2013-11-12
-
向左轉(zhuǎn)|向右轉(zhuǎn)
提問者:2015-04-18
-
汽車倒車防撞報警系統(tǒng)設計的仿真電路圖和程序避這個肯定我了解情我肯定知道
提問者:ivyrui06302015-04-20
-
聲納傳感器 以及接受聲納傳感器返還信息的控制單元。
功能大概描述下:因為聲納傳感器距障礙物的距離遠近它發(fā)送的信號是不同的。當控制單元收到聲納傳感器要返還的信號時,會根據(jù)信號做出判斷 如 1米遠就發(fā)出一種頻率的提示音,半
提問者:sseeeihm232013-12-16
-
基于單片機的汽車倒車防撞報警系統(tǒng) 這個還可以考慮更多的好比
提問者:w3359634312015-04-20
-
怎么設計短語"汽車倒車防撞報警器的設計"的程序?你這句話到底是什么意思?想幫你都看不懂你的題目。沒有硬件電路你怎么叫人幫你看軟件啊!建議你還是別設計了。
提問者:gxnnchf2013-12-27