一、前言
隨著科技的不斷進步和應(yīng)用需求的增加,測距儀成為了許多領(lǐng)域必備的工具之一。傳統(tǒng)的測距儀價格昂貴、體積龐大,使用起來不夠方便。本項目采用STC89C52單片機作為主控芯片,結(jié)合XKC-KL200激光測距模塊和LCD1602顯示器,實現(xiàn)了一個簡易且高效的激光測距儀。這個測距儀可以幫助用戶快速準確地測量目標與測距儀之間的距離,并將結(jié)果通過LCD1602顯示器直觀地展示出來。
目前很多測距儀主要采用超聲波或紅外線等技術(shù)進行測量,但這些方法存在一定的局限性,比如受到環(huán)境干擾、測量距離有限等問題。而激光測距技術(shù)在測量精度和穩(wěn)定性方面具有顯著優(yōu)勢。XKC-KL200模塊是一款基于激光測距原理的模塊,具有高精度、快速測量等特點。通過與STC89C52單片機相結(jié)合,能夠利用模塊提供的數(shù)據(jù)和功能,快速實現(xiàn)一個功能完善的激光測距儀。
LCD1602顯示器作為輸出設(shè)備,能夠直觀地顯示測得的距離信息,具有體積小巧、低功耗、易于集成等特點,非常適合作為測距儀的顯示屏。通過將測量結(jié)果轉(zhuǎn)換為字符串,并利用LCD1602的命令和數(shù)據(jù)寫入函數(shù),可以在顯示器上清晰地展示出測得的距離值。
基于STC89C52單片機和XKC-KL200激光測距模塊的激光測距儀項目,結(jié)合了激光測距技術(shù)和單片機控制技術(shù),通過LCD1602顯示器直觀地展示出測得的距離信息。這個項目不僅滿足了測距需求,而且具有成本低、體積小、使用方便等優(yōu)勢,無論是在建筑、工程、地理測量還是運動、航空等領(lǐng)域,這個激光測距儀都可以正常使用。
二、硬件連線說明
【1】LCD1602模塊
(1)VSS 引腳連接到單片機的GND引腳(地線)
(3)VO 引腳可以通過一個10K電位器連接到單片機的GND引腳,用于調(diào)節(jié)背光亮度
(4)RS 引腳連接到單片機的P0口(作為命令/數(shù)據(jù)選擇引腳)
(5)RW 引腳連接到單片機的GND引腳(將LCD設(shè)為寫模式)
(6)E 引腳連接到單片機的P1口(作為使能引腳)
(7)D0 ~ D7 引腳分別連接到單片機的P2 ~ P7口(作為數(shù)據(jù)引腳)
【2】XKC-KL200激光測距模塊
(1)VCC 引腳連接到單片機的5V引腳(正電源)
(2)GND 引腳連接到單片機的GND引腳(地線)
(3)TX 引腳連接到單片機的RXD引腳(串口接收引腳)
(4)RX 引腳連接到單片機的TXD引腳(串口發(fā)送引腳)
三、XKC-KL200激光測距模塊
XKC-KL200 是一款智能非接觸式開關(guān)、帶有 UART 串口,高低電平或 NPN 驅(qū)動輸出的激光測距傳感器。
該傳感器利用激光對物體漫反射原理:當人或物體進入傳感器設(shè)定的感應(yīng)區(qū)域,傳感器輸出信號,同時能精確輸出
距離;人或物體離開感應(yīng)區(qū)后傳感器則關(guān)閉輸出。
硬件采用 uart。 棕色(VCC)、黃色(信號輸出)藍色(GND)、黑色(RXD)
供電 5~24V
在客戶 MCU 電源與 OUTPUT(黃線)之間跨接一個 1K 左右的上拉電阻。
串口默認配置: 波特率:9600 、數(shù)據(jù)位:8 、校驗位:無 、停止位:1
應(yīng)用范圍
(1)智能感應(yīng)潔具。
(2)家居安防。
(3)智能檢測,智能控制。
(4)機器人障礙識別。
(5)實時顯示距離。
(6)水龍頭感應(yīng)、大小便斗自動沖水、自動烘手機、防盜器、自動門鈴、樓梯過道感應(yīng)、電視近距離收看電視
提醒器、自動門、廣告燈箱、自動垃圾箱。
四、項目代碼設(shè)計
#include <reg52.h>
#include <stdio.h>
// LCD1602引腳連接
sbit LCD_RS = P0^0; // RS引腳接口定義
sbit LCD_E = P1^0; // E引腳接口定義
sbit LCD_D4 = P2^4; // D4引腳接口定義
sbit LCD_D5 = P2^5; // D5引腳接口定義
sbit LCD_D6 = P2^6; // D6引腳接口定義
sbit LCD_D7 = P2^7; // D7引腳接口定義
// 激光測距模塊引腳連接
sbit laser_TX = P3^0; // TX引腳接口定義
sbit laser_RX = P3^1; // RX引腳接口定義
// LCD1602初始化
void LCD_Init() {
LCD_WriteCommand(0x02); // 回到Home位置
LCD_WriteCommand(0x28); // 設(shè)置4位數(shù)據(jù)總線、2行顯示、5x8點陣
LCD_WriteCommand(0x0C); // 顯示開,關(guān)游標
LCD_WriteCommand(0x06); // 光標右移
LCD_WriteCommand(0x01); // 清屏
}
// 向LCD寫入命令
void LCD_WriteCommand(unsigned char command) {
LCD_RS = 0; // 將RS置低,指定為寫入命令
LCD_E = 0; // 拉低E線,準備寫入
LCD_D4 = command >> 4 & 0x01; // 寫入高4位數(shù)據(jù)
LCD_D5 = command >> 5 & 0x01;
LCD_D6 = command >> 6 & 0x01;
LCD_D7 = command >> 7 & 0x01;
LCD_E = 1; // 拉高E線,寫入命令
DelayMs(1); // 延時等待
LCD_E = 0; // 拉低E線,結(jié)束寫入
LCD_D4 = command >> 0 & 0x01; // 寫入低4位數(shù)據(jù)
LCD_D5 = command >> 1 & 0x01;
LCD_D6 = command >> 2 & 0x01;
LCD_D7 = command >> 3 & 0x01;
LCD_E = 1; // 拉高E線,寫入命令
DelayMs(1); // 延時等待
LCD_E = 0; // 拉低E線,結(jié)束寫入
}
// 向LCD寫入數(shù)據(jù)
void LCD_WriteData(unsigned char dat) {
LCD_RS = 1; // 將RS置高,指定為寫入數(shù)據(jù)
LCD_E = 0; // 拉低E線,準備寫入
LCD_D4 = dat >> 4 & 0x01; // 寫入高4位數(shù)據(jù)
LCD_D5 = dat >> 5 & 0x01;
LCD_D6 = dat >> 6 & 0x01;
LCD_D7 = dat >> 7 & 0x01;
LCD_E = 1; // 拉高E線,寫入數(shù)據(jù)
DelayMs(1); // 延時等待
LCD_E = 0; // 拉低E線,結(jié)束寫入
LCD_D4 = dat >> 0 & 0x01; // 寫入低4位數(shù)據(jù)
LCD_D5 = dat >> 1 & 0x01;
LCD_D6 = dat >> 2 & 0x01;
LCD_D7 = dat >> 3 & 0x01;
LCD_E = 1; // 拉高E線,寫入數(shù)據(jù)
DelayMs(1); // 延時等待
LCD_E = 0; // 拉低E線,結(jié)束寫入
}
// 清空LCD顯示
void LCD_Clear() {
LCD_WriteCommand(0x01); // 清屏指令
DelayMs(2); // 延時等待
}
// 在指定位置顯示字符串
void LCD_DisplayString(unsigned char x, unsigned char y, unsigned char *str) {
unsigned char addr;
if (y == 0) {
addr = 0x80 + x; // 第一行地址計算
} else {
addr = 0xC0 + x; // 第二行地址計算
}
LCD_WriteCommand(addr); // 設(shè)置顯示位置
while (*str != '?') {
LCD_WriteData(*str); // 逐個顯示字符
str++;
}
}
// 毫秒級延時函數(shù)
void DelayMs(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
// 串口初始化
void UART_Init() {
TMOD = 0x20; // 設(shè)置定時器1為模式2
TH1 = 0xFD; // 設(shè)置波特率為9600
TL1 = 0xFD;
TR1 = 1; // 啟動定時器1開始工作
SCON = 0x50; // 設(shè)置UART為模式1,允許接收
}
// 串口數(shù)據(jù)接收
unsigned char UART_Receive() {
while (!RI); // 等待接收完成
RI = 0;
return SBUF; // 返回接收到的數(shù)據(jù)
}
五、總結(jié)
在本項目中,成功設(shè)計了一個激光測距儀,使用STC89C52作為主控芯片,搭配XKC-Kl200激光測距模塊。通過串口通信的方式,能夠獲取到被測物體與激光測距模塊之間的距離,并將其實時顯示在LCD1602液晶顯示屏上。
項目的實現(xiàn)過程中,先進行硬件連接,將STC89C52與XKC-Kl200模塊通過串口相連,連接了LCD1602顯示屏。編寫程序代碼,LCD1602和串口通信的初始化函數(shù),以及數(shù)據(jù)的接收和顯示函數(shù)。
通過激光測距儀,可以方便地獲得不同物體與測距模塊之間的距離信息,并通過LCD1602顯示出來。這為測量工作提供了便利,無論是在科研實驗、工程測量還是日常生活中,都具有廣泛的應(yīng)用前景。