久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
超聲波倒車語音報警
[打印本頁]
作者:
muxiaolin
時間:
2018-4-25 17:32
標題:
超聲波倒車語音報警
11.png
(65.88 KB, 下載次數: 21)
下載附件
2021-9-29 09:54 上傳
#include "STC12C5A.H"
#include "lcd1602.h"
#include "delay.h"
#include "string.h"
#include "typedef.h"
#include "key.h"
#include "mp3_uart.h"
#include "24c02.h"
sbit BUZZER = P2^0; //蜂鳴器
sbit RLED = P1^0; //紅燈
sbit GLED = P1^1; //綠燈
sbit TX1=P1^2;
sbit RX1=P1^3;
unsigned char OverFlag=0;
unsigned int Distance=0;
unsigned int AlarmDistance=20;
unsigned char AutoFlag=0;
uint Speed=0;
uint AlarmSpeed=80;
unsigned char Page=0;
unsigned int Pulse=0; //測速脈沖數
sbit INA=P3^4;
extern unsigned char PlayFlag;
void Timer0_Init(void); //1毫秒@11.0592MHz
void Timer1_Init(void); //定時器1初始化
void GetDistance(void); //超聲波測距
void DistanceCheck(void); //測距函數
void UART_Init(void); //串口初始化
void PageInit(void);
void DataLoad(void);
void PageDisplay(void);
void PlayCheck(void)
{
static unsigned char con=0;
static unsigned char T50MS=0;
static unsigned char TINT=0;
if(KeyVal=='S')
{
KeyVal=0;
AutoFlag=(AutoFlag==1)?0:1;
}
if(AutoFlag)
GLED=0;
else
GLED=1;
if(AutoFlag)
con++;
if(con>=80)
{
con=0;
MP3_UART_Send_Cmd(0x41,15); //速度
if(Speed==0)
{
MP3_UART_Send_Cmd(0x41,1); //速度
}
else
{
MP3_UART_Send_Cmd(0x41,Speed/10+1); //速度
MP3_UART_Send_Cmd(0x41,Speed%10+1); //速度
}
/*--------------------------------------------------------*/
MP3_UART_Send_Cmd(0x41,14); //距離
MP3_UART_Send_Cmd(0x41,Distance/100+1);
MP3_UART_Send_Cmd(0x41,12); //點
MP3_UART_Send_Cmd(0x41,Distance%100/10+1);
MP3_UART_Send_Cmd(0x41,Distance%10+1);
MP3_UART_Send_Cmd(0x41,13);
/*----------------------------------------------------------*/
}
/*----------------------------小于50每10里面播報一次------------------------------------------------*/
if((TINT==0)&&(Distance%10==0)&&(Distance<51)&&(Distance>0))
{
MP3_UART_Send_Cmd(0x41,14); //距離
MP3_UART_Send_Cmd(0x41,Distance/100+1);
MP3_UART_Send_Cmd(0x41,12); //點
MP3_UART_Send_Cmd(0x41,Distance%100/10+1);
MP3_UART_Send_Cmd(0x41,Distance%10+1);
MP3_UART_Send_Cmd(0x41,13);
TINT=1;
}
if(TINT>0)
{
TINT++;
if(TINT>=30)
TINT=0;
}
/*------------------------距離太近請停車播報---------------------------------------*/
if((Distance<=10)&&(T50MS==0)&&(Distance>0))
{
MP3_UART_Send_Cmd(0x41,16);
T50MS=1;
}
if(T50MS>0)
{
T50MS++;
if(T50MS>=20)
T50MS=0;
}
if((Distance<AlarmDistance)&&(Distance>0))
{
BUZZER=0;
RLED=0;
}
else
{
BUZZER=1;
RLED=1;
}
}
void main(void)
{
Delay_1ms(500);
LCD_Init(); //LCD顯示初始化
PageInit(); //頁面顯示初始化
Timer0_Init(); //計數器0初始化
Timer1_Init(); //定時器1初始化
DataLoad(); //報警數據讀出
UART_Init(); //串口初始化
MP3_UART_SetVic(23);
Delay_1ms(200);
MP3_UART_SetVic(23);
while(1)
{
PageDisplay(); //頁面顯示
PlayCheck();
GetDistance();
Delay_1ms(50); //延時50毫秒
}
}
void UART_Server() interrupt 4 //串口接收中斷
{
unsigned char ch=0;
EA=0;
if(RI)
{
ch = SBUF;
if(ch=='S'||ch=='T'||ch=='P')
PlayFlag=0;
RI = 0;
}
EA=1;
}
void Timer0_ISR(void) interrupt 1 //1毫秒@11.0592MHz
{
static unsigned char sta=0;
static unsigned int T1MS=0;
static unsigned char KS=0;
TL0 = 0xCD; //設置定時初值
TH0 = 0xD4; //設置定時初值
T1MS++;
if(T1MS>=1000)
{
T1MS=0;
Speed=Pulse/2;
Pulse=0;
}
/*--------------------------------------------*/
KS++;
if(KS>=20)
{
KS=0;
KEY_Scan();
}
/*---------------------------------------------*/
switch(sta)
{
/*------------------------------------------*/
case 0:
{
if(INA==0)
sta=1;
else
sta=0;
}break;
/*------------------------------------------*/
case 1:
{
if(INA==0)
{
sta=2;
Pulse++;
}
else
sta=0;
}break;
/*------------------------------------------*/
case 2:
{
if(INA==0)
sta=2;
else
sta=0;
}break;
default:sta=0;break;
}
/*----------------------------------------------*/
}
void Timer0_Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0xCD; //設置定時初值
TH0 = 0xD4; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
ET0=1;
EA=1;
}
void UART_Init(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x04; //獨立波特率發生器時鐘為Fosc,即1T
BRT = 0xDC; //設定獨立波特率發生器重裝值
AUXR |= 0x01; //串口1選擇獨立波特率發生器為波特率發生器
AUXR |= 0x10; //啟動獨立波特率發生器
ES = 1;
EA=1;
}
void Timer1_Init(void)
{
TMOD = (TMOD&0x0f)| 0x10;
TL1 = 0x00; //設定定時初值
TH1 = 0x00; //設定定時器重裝值
ET1 = 1; //禁止定時器0中斷
TR1 = 0; //啟動定時器0
EA=1;
}
void DistanceCheck(void)
{
unsigned int retry=0;
unsigned int time=0;
float S=0;
TR1 = 0;
OverFlag=0;
TX1 = 1;
delay_1us(3);
TX1 = 0;
while(!RX1);
TH1=0;
TL1=0;
TR1 = 1;
retry=0;
while((RX1==1)&&(OverFlag==0)&&(retry<50000))
{
retry++;
delay_1us(1);
}
TR1 = 0;
/*--------------計算---------------------*/
time=TH1*256+TL1;
TH1=0;
TL1=0;
if(OverFlag==0) //沒有溢出
{
S=(time*1.7)/100; //算出來是CM
if(S>300)
{
S=0;
}
}
else
{
S=0;
}
Distance=S;
}
void GetDistance(void)
{
static unsigned char con=0;
con++;
if(con>20)
{
con=0;
DistanceCheck();
}
}
void DataLoad(void)
{
U16_Read(&AlarmSpeed,0);
Delay_1ms(50);
U16_Read(&AlarmDistance,10);
}
void PageInit(void)
{
LCD_Clr();
switch(Page)
{
/*---------------------------------------------*/
case 0: //速度和距離同時顯示
{
LCD_DispStr( 0,"Speed: cm/s");
LCD_DispStr(16,"Dis: cm");
}break;
/*---------------------------------------------*/
case 1: //顯示距離 和設置距離
{
LCD_DispStr( 0,"Dis: cm");
LCD_DispStr(16,"Set: cm");
}break;
/*---------------------------------------------*/
case 2: //顯示速度 和設置速度
{
LCD_DispStr( 0,"Speed: cm/s");
LCD_DispStr(16,"Alarm: cm/s");
}break;
/*---------------------------------------------*/
default:break;
}
}
void PageDisplay(void)
{
/*---------------頁面切換----------------*/
if(KeyVal=='E')
{
KeyVal=0;
Page++;
if(Page>2)
Page=0;
PageInit();
}
switch(Page)
{
/*---------------------------------------------*/
case 0://速度和距離同時顯示
{
LCD_DispU16( 6,Speed);
if(Distance>0)
LCD_DispU16(22,Distance);
else
LCD_DispStr(22,"-----");
}break;
/*---------------------------------------------*/
case 1: //顯示距離 和設置距離
{
if(Distance>0)
LCD_DispU16( 6,Distance);
else
LCD_DispStr(6,"-----");
LCD_DispU16(22,AlarmDistance);
if(KeyVal=='+')
{
KeyVal=0;
AlarmDistance++;
U16_Save(&AlarmDistance,10);
}
if(KeyVal=='-')
{
KeyVal=0;
if(AlarmDistance>2)
AlarmDistance--;
U16_Save(&AlarmDistance,10);
}
}break;
/*---------------------------------------------*/
case 2: //顯示速度 和設置速度
{
LCD_DispU16( 6,Speed);
LCD_DispU16(22,AlarmSpeed);
if(KeyVal=='+')
{
KeyVal=0;
AlarmSpeed++;
U16_Save(&AlarmSpeed,0);
}
if(KeyVal=='-')
{
KeyVal=0;
if(AlarmSpeed>2)
AlarmSpeed--;
U16_Save(&AlarmSpeed,0);
}
}break;
/*---------------------------------------------*/
default:
{
Page=0;
PageInit();
}break;
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美极品视频在线观看
|
国产精品一区二区三区久久久
|
国产视频第一页
|
国产精品影视在线观看
|
99这里只有精品视频
|
国产高清免费
|
九九热国产精品视频
|
在线观看视频一区二区三区
|
国产精品视频一
|
玖玖精品
|
亚洲精品一区二三区不卡
|
亚洲国产一区二区三区
|
九九视频在线观看视频6
|
黄色一级大片在线免费看产
|
91成人在线
|
国产精品成人一区
|
综合色站导航
|
国产精品美女久久久久aⅴ国产馆
|
久久精品国产亚洲一区二区
|
九九久久精品
|
91亚洲精品久久久电影
|
男女视频在线免费观看
|
最近日韩中文字幕
|
欧美中文字幕一区二区三区亚洲
|
欧美精品一区二区三区在线播放
|
中文字幕免费视频
|
亚洲国产精品自拍
|
成人h免费观看视频
|
精品久久影院
|
av中文在线
|
国产精品成人一区二区三区吃奶
|
国产高清精品在线
|
欧美一级久久久猛烈a大片 日韩av免费在线观看
|
国产伦精品一区二区三区照片91
|
欧美精品欧美精品系列
|
国产美女在线精品免费
|
亚洲欧美中文日韩在线v日本
|
国产激情精品视频
|
日韩乱码一二三
|
日韩在线不卡视频
|
国产精品视频免费播放
|