欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機倒車雷達控制系統程序設計
[打印本頁]
作者:
Revolution_2024
時間:
2024-6-18 15:23
標題:
51單片機倒車雷達控制系統程序設計
基于51單片機來實現一個倒車雷達系統,可通過按鍵來調整雷達預警的閾值。也可以調節報警范圍,代碼也比較簡單,可靠性強,可轉換為實物,也可用于設計,仿真Proteus如圖。
51hei圖片_20240618113857.png
(82.82 KB, 下載次數: 16)
下載附件
仿真效果圖
2024-6-18 15:22 上傳
#include<reg51.h>
#include<intrins.h>
sbit LED0=P2^0;
sbit LED1=P2^1;
sbit speak=P1^7;
sbit key_up=P1^0;
sbit key_dn=P1^1;
sbit TRIG=P3^7;
sbit ECHO=P3^2;
sbit LCD_E=P2^5;
sbit LCD_RW=P2^6;
sbit LCD_RS=P2^7;
unsigned int Set=40;//距離值,單位cm
unsigned int Now;
unsigned int count_T0=0,count_1ms,miao=0;
unsigned int High_Time;
unsigned char flag;
unsigned char code word1[]="Set= cm";//0--15
unsigned char code word2[]="Now= cm";//0--15
unsigned char code word3[]="0123456789";
void lcd_write_com(unsigned char com);
void lcd_write_data(unsigned char dat);
void lcdInit();
void display_LCD(unsigned char hang,unsigned char lie,unsigned dat);
void Timer0_Init();
void delayms(unsigned char t);
void scan_key();
unsigned int WAVE();
void display_string();
void Timer_delay(unsigned int BS);
void Speak();
void main()
{
unsigned char bai,shi,ge;
lcdInit();
display_string();//顯示開始的字母
while(1)
{
scan_key();
if((Set/100%10)!=0)
{
display_LCD(0,6,word3[Set/100%10]);
delayms(1);
}
display_LCD(0,7,word3[Set/10%10]);
delayms(1);
display_LCD(0,8,word3[Set%10]);
delayms(1);
High_Time=WAVE();//超聲波
//Now=(int)(High_Time*1.72)/100;
Now=(int)(High_Time*0.0175);
Speak();
bai=Now/100%10;
shi=Now/10%10;
ge=Now%10;
if(bai!=0)
{
display_LCD(1,6,word3[bai]);
delayms(1);
}
display_LCD(1,7,word3[shi]);
delayms(1);
display_LCD(1,8,word3[ge]);
delayms(1);
}
}
/*——————————蜂鳴器發聲————————*/
void Speak()
{
if(Now<Set)
{
speak=0;
Timer_delay(1);
}
else if(Now<(Set+0))
{
speak=0;
Timer_delay(5);
}
else
{
speak=1;
}
}
//*————————————定時器T1延時————————————*/
void Timer_delay(unsigned int BS)//T1延時0.5ms
{
unsigned int k;
for(k=0;k<BS;k++)
{
TH1=(65536-100)/256;
TL1=(65536-100)%256;
while(TF1==0);
TF1=0;
}
}
//*——————顯示開始的字母————————————*/
void display_string()
{
unsigned m,n;
for(m=0;m<16;m++)
{
display_LCD(0,m,word1[m]);
delayms(1);
}
for(n=0;n<16;n++)
{
display_LCD(1,n,word2[n]);
delayms(1);
}
}
/*——————————————超聲波計算時間————————————*/
unsigned int WAVE()
{
unsigned int result;
unsigned char p;
TRIG=0;
_nop_();//1微秒
TRIG=1;
for(p=0;p<10;p++);//大于10us
TRIG=0;
while(ECHO==0);//等高電平來
Timer0_Init();//開始計時記高電平時間即超聲波發射--返回時間
while(ECHO)
{
if((TH0>0x8c)|| (TH0==0x8c&&TL0>0xa0))break;
}
TR0=0;
//18us=18000ms=4650H ;100us--18ms有效 超過36ms無效 36ms=8cA0
if((TH0<0x46)|| (TH0==0x46&&TL0<=0x50))
{
result=(TH0<<8)+TL0;
return result;
}
else return 0;
}
/*——————————————LCD初始化————————————*/
void lcdInit()
{
lcd_write_com(0x38);//字符為5*7點陣
lcd_write_com(0x0c); //顯示開 光標關 閃爍關
lcd_write_com(0x06);//寫入數據后光標右移一位 顯示屏不動
lcd_write_com(0x01);//清屏
lcd_write_com(0x80);//設置數據指針起點
}
/**———————————LCD寫命令——————————————*/
void lcd_write_com(unsigned char com)
{
LCD_E=0;
LCD_RS=0;//命令
LCD_RW=0;//寫入
P0=com;
delayms(1);
LCD_E=1;//寫入時序
delayms(1);
LCD_E=0;
}
/*————————LCD寫數據————————————————————*/
void lcd_write_data(unsigned char dat)
{
LCD_E=0;
LCD_RW=0;//寫入
LCD_RS=1;//數據
P0=dat;
delayms(1);
LCD_E=1;
delayms(1);
LCD_E=0;
}
//*———————————液晶屏顯示—————————————————*/
void display_LCD(unsigned char hang,unsigned char lie,unsigned value)
{
if(hang==0)
{
lcd_write_com(0x80+lie);
}
if(hang==1)
{
lcd_write_com(0xc0+lie);
}
lcd_write_data(value);
}
/*————————定時器初始化————————*///T1延時,T0中斷
void Timer0_Init()
{
//count_T0=0;
//miao=0;
TMOD=0x11;
TH0=0;
TL0=0;
//ET0=1;
TR0=1;TR1=1;
//EA=1;
}
void Timer0() interrupt 1
{
TH0=0;
TL0=0;
}
//*———————————按鍵掃描—————————————————*/
void scan_key()
{
P1=0xff;
if(P1!=0xff)delayms(10);
//key_up=0;
if(P1!=0xff)
{
switch(P1&0xff)
{
case 0xfe :Set=Set+1;LED0=0;break;//key_up p1.0
case 0xfd :Set=Set-1;break;//key_dn p1.1
}
while(P1!=0xff);
}
}
//*——————————————————————————————————————————*/
void delayms(unsigned char t)
{
unsigned i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1