|
原件清單
序號(hào) | 編號(hào) | 型號(hào)、規(guī)格 | 描述 | 數(shù)量 | 備注 | 1 | R1 | 10k | 1/4W電阻 | 1 | 復(fù)位電阻 | 2 | R2 | 4.7k | 1/4W電阻 | 1 | | 3 | W1 | 10k | 精密可調(diào)調(diào)電阻 | 1 | | 4 | BY | BEEP | 蜂鳴器 | 1 | | 5 | BG1 | 9012 | PNP | 1 | | 6 | C1 | 470uF/16V | 電解電容 | 1 | | 7 | C2 | 104 | 瓷片電容 | 1 | | 8 | C3 | 10uF | 電解電容 | 1 | | 7 | C4 | 22pF | 瓷片電容 | 1 | | 10 | C5 | 22pF | 瓷片電容 | 1 | | 11 | IC1 | AT89S51 AT89S52 | 單片機(jī) | 1 | AT89C51
AT89C52
STC89C52RC
| 12 | IC座 | DIP40 | 40集成電路座 | 1 | | 13 | Y1 | 12MHz | 晶振 | 1 | | 14 | USB | USB | USB接口 | 1 | | 15 | HC-SR04 | HC-SR04 | 超聲波測距模塊 | 4 | 測量范圍2-450厘米 | 16 | D1 | 1N4007 | 整流二極管 | 1 | | 17 | ZXZ1 | DG7.62-2P | 接線端子 | 1 | | 18 | PCB | 9*12厘米 | 9*12厘米以上洞洞板
| 1 | | 19 | | 1602 | 1602液晶屏 | 1 | | 20 | K1、 | | 按鍵開關(guān) | 1 | | 21 | | DS18B20 | 溫度傳感器 | 1 | | | | | 導(dǎo)線 | | 若干 | | | | 焊錫絲 | | 若干 |
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (41.35 KB, 下載次數(shù): 17)
下載附件
2021-5-18 18:00 上傳
原理圖.png (121.34 KB, 下載次數(shù): 26)
下載附件
2020-6-1 15:12 上傳
工程圖.png (210.28 KB, 下載次數(shù): 20)
下載附件
2020-6-1 15:22 上傳
單片機(jī)源程序如下:
- #include <REGX52.H>
- #include <stdio.h>
- #include "LCD.H"
- #include "18B20.H"
- #include "delay.h"
- sbit csb=P1^4; // 第一路 Trig
- sbit csbint=P1^5; // 第一路 Echo
- sbit csb1=P1^6; // 第二路 Trig
- sbit csbint1=P1^7; // 第二路 Echo
- sbit csb2=P3^6; // 第三路 Trig
- sbit csbint2=P3^5; // 第三路 Echo
- sbit csb3=P3^4; // 第四路 Trig
- sbit csbint3=P3^3; // 第四路 Echo
- sbit k1=P1^0; // K1
- sbit k2=P1^1; // K2
- sbit led=P2^7; // 指示燈
- sbit fmq=P3^2; //蜂鳴器
- unsigned char aa[16]={' ','.',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','.',' ',' ','m'};
- unsigned char bb[16]={' ','.',' ',' ','m',' ','.',' ',' ',' ',' ',' ','.',' ',' ','m'};
- unsigned char zf;
-
- unsigned int dz,k,s,j,bgz,k,s1,s2,s3,s4;
- int temp;
- float csbc,wdz;
- main()
- {
- TH0=0;
- TL0=0;
- TMOD=0X11; //T1,T0為16位定時(shí)器
- EA=0;
- init();
- Init_DS18B20();
- dz=100; //報(bào)警定值
- LCD_Write_String(0,0,aa);
- aa[9]=0xdf;
- while(1)
- {
- temp=ReadTemperature();
- DelayMs(100);
- if(temp<0)
- {
- temp=-(temp-1);
- zf=1;
- aa[12]='-';
- }
- else
- {
- zf=0;
- aa[12]=' ';
- }
- wdz=0.00000607*temp; //溫度補(bǔ)償計(jì)算
- if(zf==0)
- {
- csbc=0.03315+wdz;
- }
- else csbc=0.03315-wdz;
- aa[6]=temp/1000+0x30;
- aa[7]=temp/100%10+0x30;//顯示十位
- aa[8]=temp%100/10+0x30;//顯示個(gè)位
- if(zf==0)
- {
- if(temp<1000)
- {
- aa[6]=' ';
- if(temp<100)
- {
- aa[7]=' ';
- }
- }
- }
- else
- {
- if(temp<1000)
- {
- aa[6]='-';
- // aa[12]=' ';
- if(temp<100)
- {
- aa[6]=' ';
- aa[7]='-';
- }
- }
- }
- ///////////////////////////////////////////
- // 第一路 測距模塊 //
- ///////////////////////////////////////////
- csb=0; //啟動(dòng)一次模塊
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _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; //啟動(dòng)計(jì)數(shù)器T0,用以計(jì)時(shí)
- TR0=1;
- EA=1;
- j=50; //延時(shí)
- while(j--)
- {
- }
- csbint=1;
- j=0;
- while(csbint) //判斷接收回路是否收到超聲波的回波
- {
- j++;
- if(j>=2500) //如果達(dá)到一定時(shí)間沒有收到回波,則將csbint置零,退出接收回波處理程序
- csbint=0;
- }
- TR0=0;
- s1=TH0*256+TL0; //讀取時(shí)間數(shù)據(jù)
- TH0=0;
- TL0=0;
- csbc=csbc/2;
- s1=s1*csbc-4;
- ///////////////////////////////////////////
- // 第二路 測距模塊 //
- ///////////////////////////////////////////
- csb1=0; //啟動(dòng)一次模塊
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- csb1=1;
- ET0=1; //啟動(dòng)計(jì)數(shù)器T0,用以計(jì)時(shí)
- TR0=1;
- EA=1;
- j=50; //延時(shí)
- while(j--)
- {
- }
- csbint1=1;
- j=0;
- while(csbint1) //判斷接收回路是否收到超聲波的回波
- {
- j++;
- if(j>=2500) //如果達(dá)到一定時(shí)間沒有收到回波,則將csbint置零,退出接收回波處理程序
- csbint1=0;
- }
- TR0=0;
- s2=TH0*256+TL0; //讀取時(shí)間數(shù)據(jù)
- TH0=0;
- TL0=0;
- s2=s2*csbc-4;
- ///////////////////////////////////////////
- // 第三路 測距模塊 //
- ///////////////////////////////////////////
- csb2=0; //啟動(dòng)一次模塊
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- csb2=1;
- ET0=1; //啟動(dòng)計(jì)數(shù)器T0,用以計(jì)時(shí)
- TR0=1;
- EA=1;
- j=50; //延時(shí)
- while(j--)
- {
- }
- csbint2=1;
- j=0;
- while(csbint2) //判斷接收回路是否收到超聲波的回波
- {
- j++;
- if(j>=2500) //如果達(dá)到一定時(shí)間沒有收到回波,則將csbint置零,退出接收回波處理程序
- csbint2=0;
- }
- TR0=0;
- s3=TH0*256+TL0; //讀取時(shí)間數(shù)據(jù)
- TH0=0;
- TL0=0;
- s3=s3*csbc-4;
- ///////////////////////////////////////////
- // 第四路 測距模塊 //
- ///////////////////////////////////////////
- csb3=0; //啟動(dòng)一次模塊
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- csb3=1;
- ET0=1; //啟動(dòng)計(jì)數(shù)器T0,用以計(jì)時(shí)
- TR0=1;
- EA=1;
- j=50; //延時(shí)
- while(j--)
- {
- }
- csbint3=1;
- j=0;
- while(csbint3) //判斷接收回路是否收到超聲波的回波
- {
- j++;
- if(j>=2500) //如果達(dá)到一定時(shí)間沒有收到回波,則將csbint置零,退出接收回波處理程序
- csbint2=0;
- }
- TR0=0;
- s4=TH0*256+TL0; //讀取時(shí)間數(shù)據(jù)
- TH0=0;
- TL0=0;
- s4=s4*csbc-2;
- if(s1<5) //測量值小于下限
- {
- aa[0]='-';
- aa[2]='-';
- aa[3]='-';
- }
- else if(s1>200) //測量值大于上限
- {
- aa[0]='C';
- aa[2]='C';
- aa[3]='C';
- }
- else
- {
- aa[0]=s1/100+'0';
- aa[2]=s1/10%10+'0';
- aa[3]=s1%10+'0';
- }
- if(s2<5) //測量值小于下限
- {
- bb[0]='-';
- bb[2]='-';
- bb[3]='-';
- }
- else if(s2>200) //測量值大于上限
- {
- bb[0]='C';
- bb[2]='C';
- bb[3]='C';
- }
- else
- {
- bb[0]=s2/100+'0';
- bb[2]=s2/10%10+'0';
- bb[3]=s2%10+'0';
- }
- if(s3<5) //測量值小于下限
- {
- bb[11]='-';
- bb[13]='-';
- bb[14]='-';
- }
- else if(s3>200) //測量值大于上限
- {
- bb[11]='C';
- bb[13]='C';
- bb[14]='C';
- }
- else
- {
- bb[11]=s3/100+'0';
- bb[13]=s3/10%10+'0';
- bb[14]=s3%10+'0';
- }
- ///////////////////////////////////////////
- if(s4<5) //測量值小于下限
- {
- aa[11]='-';
- aa[12]='.';
- aa[13]='-';
- aa[14]='-';
- }
- else if(s4>200) //測量值大于上限
- {
- aa[11]='C';
- aa[12]='.';
- aa[13]='C';
- aa[14]='C';
- }
- else
- {
- aa[11]=s4/100+'0';
- aa[12]='.';
- aa[13]=s4/10%10+'0';
- aa[14]=s4%10+'0';
- }
- if(k1==0)
- {
- // while(k1==0);
- dz++;
- if(dz>200)
- {
- dz=200;
- }
- }
- if(k2==0)
- {
- // while(k2==0);
- dz--;
- if(dz<30)
- {
- dz=30;
- }
- }
- bb[6]=dz/100+'0';
- bb[7]='.';
- bb[8]=dz/10%10+'0';
- bb[9]=dz%10+'0';
- ///////////////////////////////////////////
- if(s1<s2)
- {
- s=s1;
- }
- else s=s2;
- if(s<s3)
- {
- s=s;
- }
- else s=s3;
- if(s<s4)
- {
- s=s;
- }
- else s=s4;
- if(s<dz)
- {
- bgz=s*5;
- for (k=0;k<bgz;k++)
- {
- DelayUs2x(150);
- fmq=0; //BEEP
- led=0;
- }
- }
- fmq=1;
- led=1;
- LCD_Write_String(0,0,aa);
- LCD_Write_String(0,1,bb);
- }
- }
復(fù)制代碼
keil工程文件以及 Proteus仿真原理圖壓縮至附件
LCD1602顯示的超聲波測距板_四路_按鍵.zip
(621.4 KB, 下載次數(shù): 96)
2020-6-1 15:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|