本帖最后由 電子哎嗨 于 2021-1-9 10:01 編輯
原創(chuàng)作品,禁止轉(zhuǎn)載售賣,僅供學(xué)習(xí)參考。。 功能說明: 1.本設(shè)計(jì)采用STC89C52單片機(jī)作為主控制器; 2.LCD1602液晶顯示測(cè)量的距離和溫度; 3.帶有溫度補(bǔ)償功能(DS18B20傳感器); 4.測(cè)量范圍0.02m~4m,精度為0.01m; 5.帶實(shí)時(shí)語(yǔ)音播報(bào)功能; 6.按鍵功能:按鍵2:加報(bào)警值按鍵3:減報(bào)警值按鍵1:設(shè)置按鍵(只有在按下設(shè)置的時(shí)候才可以加減報(bào)警值),在未按下按鍵1時(shí),按下按鍵3播報(bào)測(cè)量距離。 需要設(shè)計(jì)實(shí)物請(qǐng)私聊~ 實(shí)物制作圖:
水印vx.jpg (363.64 KB, 下載次數(shù): 47)
下載附件
2020-12-29 13:18 上傳
原理圖:
663[~KYON8K0Q3F%~0PRAK1.png (47.66 KB, 下載次數(shù): 53)
下載附件
2020-12-18 13:36 上傳
4556666.png (226.51 KB, 下載次數(shù): 55)
下載附件
2020-12-18 13:44 上傳
單片機(jī)源程序如下:- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- #define ULint unsigned long int
- //溫度零上與零下的標(biāo)志位
- char flag=0;
- //超聲波
- char flags=0;
- //超聲波距離
- char flag1s=0;
- //計(jì)算定時(shí)間
- uint time=0;
- //計(jì)算距離
- ULint L_=0;
- //溫度
- uint t_=0;
- //顯示模式 0正常 1最大值調(diào)整 2最小值調(diào)整
- uchar mode=0;
- uint Max=490;
- uint Min=10;
- //按鍵標(biāo)志
- uchar k=0;
- //數(shù)值有誤
- uchar FW=0;
- //頭函數(shù)
- #include <reg52.h>
- #include <intrins.h>
- #include "BJ_Key.h" //報(bào)警按鍵
- #include "display.h" //顯示頭函數(shù)
- #include "ultrasonic_wave.h"//超聲波頭函數(shù)
- #include "DS18B20.h" //溫度傳感器頭函數(shù)
- uchar ONE1[6]={0x7E,0x04,0x03,0x00,0X0D,0xEF};//現(xiàn)在距離為
- uchar ONE2[6]={0x7E,0x04,0x03,0x00,0X0C,0xEF};//米
- uchar ONE3[6]={0x7E,0x04,0x03,0x00,0X0B,0xEF};//點(diǎn)
- uchar ONE4[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//百位
- uchar ONE5[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//十位
- uchar ONE6[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//個(gè)位
- void delayms(uint ms)
- {
- uchar i=100,j;
- for(;ms;ms--)
- {
- while(--i)
- {
- j=10;
- while(--j);
- }
- }
- }
- /******** UART初始化 波特率:9600 ******/
- void UART_init(void)
- {
- SCON = 0x50; // 10位uart,允許串行接受
- TMOD = 0x20; // 定時(shí)器1工作在方式2(自動(dòng)重裝)
- TH1 = 0xFD;
- TL1 = 0xFD; //設(shè)置波特率為9600
- TR1 = 1;
- }
- /*
- * UART 發(fā)送一字節(jié)
- 入口參數(shù)uint8的數(shù)據(jù)類型 即要發(fā)送的數(shù)據(jù)
- */
- void UART_send_byte(uchar dat)
- {
- SBUF = dat;
- while (TI == 0);
- TI = 0;
- }
- /*
- * UART 發(fā)送字符串
- 第一個(gè)參數(shù)要發(fā)送字符串或數(shù)據(jù)的首地址
- 第二個(gè)參數(shù)是要發(fā)送的數(shù)據(jù)或字符串的長(zhǎng)度
- */
- void UART_send_string(uchar *buf,uchar len)
- {
- uchar i;
- for(i=0;i<len;i++)
- UART_send_byte(*buf++);
- }
- //主函數(shù)
- void main()
- {
- UART_init();
- Init_ultrasonic_wave();
- //屏幕初始化
- Init1602();
- //溫度初始化
- tmpchange();
- t_=tmp();
- tmpchange();
- t_=tmp();
- tmpchange();
- t_=tmp();
- //循環(huán)顯示
- while(1)
- {
- Key();
- if(yuyin_flag==1)
- {
- yuyin_flag=0;
- ONE4[4]=L_/100;
- ONE5[4]=L_/10%10;
- ONE6[4]=L_%10;
- if(ONE4[4]==0)ONE4[4]=0x0A;
- if(ONE5[4]==0)ONE5[4]=0x0A;
- if(ONE6[4]==0)ONE6[4]=0x0A;
-
- UART_send_string(ONE1,6);
- delayms(1);
- UART_send_string(ONE4,6);
- delayms(1);
- UART_send_string(ONE3,6);
- delayms(1);
- UART_send_string(ONE5,6);
- delayms(1);
- UART_send_string(ONE6,6);
- delayms(1);
- UART_send_string(ONE2,6);
- delayms(1);
- }
- //正常顯示
- if(mode==0)
- {
- StartModule();//啟動(dòng)超聲波
- while(!RX); //當(dāng)RX為零時(shí)等待
- TR0=1; //開啟計(jì)數(shù)
- while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
- TR0=0; //關(guān)閉計(jì)數(shù)
-
- delayms(20); //20MS
- tmpchange(); //溫度轉(zhuǎn)換
- t_=tmp(); //度溫度
- Conut(t_/10); //計(jì)算距離
- if(L_>Max||L_<Min)
- {
- Feng_Start();
- }
- else
- {
- if(FW!=1)
- Feng_Stop();
- }
- Display_1602(t_/10,L_);
- }
- //調(diào)整顯示
- else if(mode!=0)
- {
- //最大最小值
- Init_MaxMin();
- while(mode!=0)
- {
-
- Key();
- if(k==1&&mode==1)
- {
- Init_MaxMin();
- write_com(0x8d);//設(shè)置位置
- }
- else if(k==1&&mode==2)
- {
- Init_MaxMin();
- write_com(0x8d+0x40);//設(shè)置位置
- }
- k=0;
- }
- //界面初始化
- Init1602();
- }
- }
- }
- //T0中斷用來計(jì)數(shù)器溢出,超過測(cè)距范圍
- void CJ_T0() interrupt 1
- {
- flags=1; //中斷溢出標(biāo)志
- }
復(fù)制代碼
原理圖.rar
(169.84 KB, 下載次數(shù): 126)
2021-1-9 10:01 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
源程序.rar
(51.76 KB, 下載次數(shù): 123)
2020-12-18 13:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
參考資料(說明文檔、視頻講解、軟件下載等).rar
(10.67 MB, 下載次數(shù): 123)
2020-12-18 13:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|