功能說明
1、采用三個超聲波測距,速度快,精度高,精度1毫米。
2、按鍵設置設置報警距離,上限和下限。
3、LCD1602液晶顯示。
4、結構簡潔,穩固,高效。 本系統采用USB電源供電,提供電源線,可以插到電腦、手機充電器、充電寶上供電,十分方便。 按鍵說明 系統三個按鍵,從左往右風別是,設置切換、加、減。
電路原理圖如下:
Snipaste_2019-03-24_15-40-05.png (70.6 KB, 下載次數: 70)
下載附件
2019-3-24 15:41 上傳
Snipaste_2019-03-24_15-40-35.png (19.04 KB, 下載次數: 82)
下載附件
2019-3-24 15:41 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (430.03 KB, 下載次數: 60)
下載附件
2019-3-25 02:12 上傳
單片機源程序如下:
- #include<reg52.h>
- #include <intrins.h>
- #include "LCD1602.h"
- sbit RX = P3^6;
- sbit TX = P3^7;
- sbit LED = P2^1;
- sbit SPEAK = P2^0;
- sbit KEY1 = P1^3;
- sbit KEY2 = P1^4;
- sbit KEY3 = P1^5;
- unsigned int time=0;
- unsigned int timer=0;
- unsigned int S=0;
- unsigned int SET_H=100,SET_L=10;
- bit flag =0;
- unsigned char Table[3]={0};
- unsigned char KEY_flag=0;
- //延時函數
- void Delay_ms(int jj)
- {
- int ii;
- while(jj--)
- for(ii=0;ii<116;ii++);
- }
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
-
- S=(time*1.87)/100; //算出來是CM
- if((S>=700)||flag==1) //超出測量范圍顯示“-”
- {
- flag=0;
- }
- else
- {
- Table[0]= S/100+0X30;
- Table[1]= S%100/10+0X30;
- Table[2]= S%10+0X30;
- LCD1602_Disp_ZF(0x88,Table,3);
- }
- }
- void main(void)
- {
- LCD1602_init();//液晶初始化
- //////////////////////0123456789ABCDEF
- LCD1602_Disp_ZF(0x80," Now S: CM ",16);
- //0123456789ABCDEF
- LCD1602_Disp_ZF(0x80+0X40,"Set H: L: ",16);
- TMOD=0x11; //設T0為方式1,GATE=1;
- TH0=0;
- TL0=0;
- TH1=0xf8; //2MS定時
- TL1=0x30;
- ET0=1; //允許T0中斷
- ET1=1; //允許T1中斷
- TR1=1; //開啟定時器
- EA=1; //開啟總中斷
- while(1)
- {
- while(!RX); //當RX為零時等待
- TR0=1; //開啟計數
- while(RX); //當RX為1計數并等待
- TR0=0; //關閉計數
- Conut();
- /////////////////////////////////////
- if(!KEY1)
- {
- Delay_ms(10);
- if(!KEY1)
- {
- KEY_flag++;
- }
- }
- if(!KEY2)
- {
- Delay_ms(10);
- if(!KEY2)
- {
- if(KEY_flag%2==0)SET_H++;
- if(KEY_flag%2==1)SET_L++;
- }
- }
- if(!KEY3)
- {
- Delay_ms(10);
- if(!KEY3)
- {
- if(KEY_flag%2==0)SET_H--;
- if(KEY_flag%2==1)SET_L--;
- }
- }
- Table[0]= SET_H/100+0X30;
- Table[1]= SET_H%100/10+0X30;
- Table[2]= SET_H%10+0X30;
- LCD1602_Disp_ZF(0x86+0x40,Table,3);
- Table[0]= SET_L/100+0X30;
- Table[1]= SET_L%100/10+0X30;
- Table[2]= SET_L%10+0X30;
- LCD1602_Disp_ZF(0x8C+0x40,Table,3);
- }
- }
- /********************************************************/
- void zd0() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍
- {
- flag=1; //中斷溢出標志
- }
- /********************************************************/
- void zd3() interrupt 3
- {
- TH1=0xf8;
- TL1=0x30;
- timer++;
- if(timer>=400)
- {
- timer=0;
- TX=1; //800MS 啟動一次模塊
- _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_();
- _nop_(); _nop_();_nop_();
- _nop_(); _nop_(); _nop_();
- TX=0;
- }
- }
復制代碼
所有資料51hei提供下載:
http://www.zg4o1577.cn/bbs/dpj-135196-1.html
|