分享一個基于51單片機的倒車系統(tǒng)仿真,帶減小距離和增加距離調(diào)節(jié)以及報警功能.還有一個功能鍵
用HC-SR04超聲波模塊組成的LCD1602顯示的超聲波測距板仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
TIM圖片20180608235235.png (173.63 KB, 下載次數(shù): 181)
下載附件
仿真圖
2018-6-8 23:52 上傳
0.png (16.78 KB, 下載次數(shù): 127)
下載附件
2018-6-9 05:03 上傳
0.png (11.78 KB, 下載次數(shù): 144)
下載附件
2018-6-9 05:03 上傳
電路原理圖如下:
0.png (47.72 KB, 下載次數(shù): 141)
下載附件
2018-6-9 05:02 上傳
HC-SR04超聲波倒車雷達的單片機源程序如下:
- #include <REGX52.H>
- #include <stdio.h>
- #include "LCD.H"
- #include "18B20.H"
- #include "delay.h"
- sbit k1=P3^5;
- sbit k2=P3^6;
- sbit csb=P2^5;
- sbit csbint=P3^2;
- sbit bg=P2^6;
- sbit fmq=P3^3;
- unsigned char aa[]={' ',' ','D','i','s','t','a','n','c','e',':'}; //Distance
- unsigned char bb[11]={' ',' ',' ',' ','.',' ',' ',' ',' ',' ',};
- unsigned char cc[]={'A','.','A','A','m'};
- unsigned char zf,a1,a2,a3,xs,e,n,m,z; //zf 溫度正負標志位;a1,a2,a3,按鍵設(shè)定程序中定值的米、分米、厘米臨時存儲變量
- //xs,e 用于按鍵程序中設(shè)定位閃動顯示的變量;flag,未用,n,是背光控制標志位變量;m,z;
- unsigned int dz,k,s,j,bgz,k;
- int temp;
- float temperature,csbc,wdz;
- bit wh;
- main()
- {
- TH0=0;
- TL0=0;
- TMOD=0X11; //T1,T0為16位定時器
- EA=0;
- bg=0;
- n=0;
- m=0;
- z=0;
- init();
- Init_DS18B20();
- dz=80;
- bb[6]=0xdf;
- bb[7]=0x43;
- e=4;
- cc[0]=dz/100+'0';
- cc[2]=dz/10%10+'0';
- cc[3]=dz%10+'0';
- LCD_Write_String(0,0,aa);
- LCD_Write_String(11,1,cc);
- while(1)
- {
- temp=ReadTemperature();
- fmq=1;
- DelayMs(100);
- if(temp<0)
- {
- temp=-(temp-1);
- zf=1;
- bb[0]='-';
- }
- else
- {
- zf=0;
- bb[0]=' ';
- }
- csb=0; //啟動一次模塊
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- csb=1;
- ET0=1; //啟動計數(shù)器T0,用以計時
- TR0=1;
- EA=1;
- j=80; //延時
- while(j--)
- {
- }
- csbint=1;
- j=0;
- while(csbint) //判斷接收回路是否收到超聲波的回波
- {
- j++;
- if(j>=2500) //如果達到一定時間沒有收到回波,則將csbint置零,退出接收回波處理程序
- csbint=0;
- }
- TR0=0;
- s=TH0*256+TL0; //讀取時間數(shù)據(jù)
- TH0=0;
- TL0=0;
- wdz=0.00000607*temp; //溫度補償計算
- if(zf==0)
- {
- csbc=0.03315+wdz;
- }
- else csbc=0.03315-wdz;
- csbc=csbc/2;
- s=s*csbc-8;
- if(s<5) //測量值小于下限
- {
- cc[0]='-';
- cc[2]='-';
- cc[3]='-';
- }
- else if(s>500) //測量值大于上限
- {
- cc[0]='C';
- cc[2]='C';
- cc[3]='C';
- }
- else
- {
- cc[0]=s/100+'0';
- cc[2]=s/10%10+'0';
- cc[3]=s%10+'0';
- }
- if(s<dz)
- {
- bgz=s*5;
- for (k=0;k<bgz;k++)
- {
- DelayUs2x(150);
- fmq=!fmq; //BEEP取反
- }
- }
- bb[1]=temp/1000+0x30;
- bb[2]=temp/100%10+0x30;//顯示十位
- bb[3]=temp%100/10+0x30;//顯示個位
- bb[5]=temp%10+0x30; //小數(shù)
- if(zf==0)
- {
- if(temp<1000)
- {
- bb[1]=' ';
- if(temp<100)
- {
- bb[2]=' ';
- }
- }
- }
- else
- {
- if(temp<1000)
- {
- bb[1]='-';
- bb[0]=' ';
- if(temp<100)
- {
- bb[0]=' ';
- bb[1]=' ';
- bb[2]='-';
- }
- }
- }
- LCD_Write_String(0,1,bb);
- LCD_Write_String(11,0,cc);
- while(!k2) //液晶背面開關(guān)
- {
- n=1;
- }
- if(n==1)
- {
- bg=~bg; //bg=0;時開背光燈
- n=0;
- }
- if(!k1) //按鍵處理程序
- {
- TR1=0;
- TR0=0;
- cc[0]='A';
- cc[1]='.';
- cc[2]='A';
- cc[3]='A';
- cc[4]='m';
- LCD_Write_String(11,1,cc);
- k=500;
- while(k)
- {
- k--;
- DelayMs(2);
- }
- cc[0]=dz/100+'0';
- cc[2]=dz/10%10+'0';
- cc[3]=dz%10+'0';
- LCD_Write_String(11,1,cc);
- a1=dz/100;
- a2=dz/10%10;
- a3=dz%10;
- n=1;
- while(n)
- {
- if(!k2)
- {
- while(!k2);
- e=1;
- xs=3;
- a1+=1;
- if(a1>5)
- a1=0;
- cc[0]=a1+'0';
- }
- if (e==1)
- {
- xs++;
- cc[0]=a1+'0';
- if(xs>6)
- {
- xs=0;
- e=0;
- }
- }
- else
- {
- cc[0]=' ';
- xs++;
- if(xs>3)
- {
- xs=0;
- e=1;
- }
- }
- LCD_Write_String(11,1,cc);
- if(!k1)
- {
- while(!k1);
- cc[0]=a1+'0';
- m=1;
- while(m)
- {
- if(!k2)
- {
- while(!k2);
- e=1;
- xs=3;
- a2+=1;
- if(a2>9)
- a2=0;
- cc[2]=a2+'0';
- LCD_Write_String(11,1,cc);
- }
- if (e==1)
- {
- xs++;
- cc[2]=a2+'0';
- if(xs>6)
- {
- xs=0;
- e=0;
- }
- }
- else
- {
- cc[2]=' ';
- xs++;
- if(xs>3)
- {
- xs=0;
- e=1;
- }
- }
- LCD_Write_String(11,1,cc);
-
- if(!k1)
- {
- while(!k1);
- cc[2]=a2+'0';
- z=1;
- while(z)
- {
- if(!k2)
- {
- while(!k2);
- e=1;
- xs=3;
- a3+=1;
- if(a3>9)
- a3=0;
- cc[3]=a3+'0';
- LCD_Write_String(11,1,cc);
- }
- if (e==1)
- {
- xs++;
- cc[3]=a3+'0';
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (44.93 KB, 下載次數(shù): 170)
下載附件
2018-6-9 05:04 上傳
Keil代碼與Proteus7.8仿真(dsn文件 只能用7.8版本打開)下載:
超聲波倒車雷達.zip
(122.01 KB, 下載次數(shù): 1026)
2018-6-8 23:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|