车速检测显示,温度检测显示。
改变CLOCK频率就可以修改车速。
随着现代汽车电子技术的发展,车速与温度检测已成为汽车系统中的重要组成部分。本实验利用DS18B20温度传感器和LCD1602显示模块,结合单片机对车辆速度和环境温度进行实时检测和显示,实现一个简易的车速与温度检测系统。
学习并掌握DS18B20温度传感器的原理及使用方法。
学习LCD1602显示模块的基本原理及使用方法。
掌握单片机定时器的配置及中断服务程序的编写。
实现车辆速度和温度的实时检测与显示。
STC89C51单片机
DS18B20温度传感器
LCD1602显示模块
按键(用于车速检测)
相关电阻、电容及连接线
DS18B20温度传感器连接:DQ引脚接单片机P2.3,VCC接电源正极,GND接电源负极。
LCD1602显示模块连接:RS、RW、E及数据引脚分别接单片机相应引脚。
按键连接:一端接单片机P3.5,另一端接地。
DS18B20是一种数字温度传感器,采用单总线协议进行通信。其主要操作包括初始化、发送命令和读取数据。每次温度转换后,温度数据存储在寄存器中,通过读取该寄存器获得温度值。
通过检测按键触发时间间隔来计算车速。每次按键触发时,记录两个触发事件的时间差,从而计算车速。
LCD1602是一种字符型液晶显示模块,通过并行接口与单片机通信。主要操作包括初始化、设置显示位置、写入字符等。
本系统主要包括温度检测电路和车速检测电路:
温度检测电路:DS18B20传感器连接到单片机的P2.3引脚,单片机通过该引脚与DS18B20通信,读取温度数据。
车速检测电路:按键连接到单片机的P3.5引脚,通过检测按键按下的时间间隔来计算车速。
显示电路:LCD1602显示模块通过并行接口连接到单片机的P0、P2等引脚,单片机通过该接口控制LCD1602显示温度和车速。
温度检测包括以下几个步骤:
初始化DS18B20:通过单片机发送复位脉冲,等待传感器响应。
启动温度转换:向DS18B20发送启动温度转换命令。
读取温度数据:读取DS18B20寄存器中的温度数据,并进行数据处理。
车速检测通过定时器中断实现:
定时器配置:设置定时器1,每50ms产生一次中断。
中断服务程序:在中断服务程序中记录按键按下的时间,计算时间间隔,从而计算车速。
显示程序包括以下几个步骤:
初始化LCD1602:设置显示模式和光标位置。
显示数据:将温度和车速数据转换为字符,通过并行接口写入LCD1602显示。
cvoid Init_DS18B20(void) {
DQ = 1;
delay_18B20(8);
DQ = 0;
delay_18B20(80);
DQ = 1;
delay_18B20(14);
}
unsigned int ReadTemperature(void) {
unsigned char a = 0;
unsigned int b = 0;
unsigned int t = 0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
DelayMs(10);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a = ReadOneChar();
b = ReadOneChar();
b <<= 8;
t = a + b;
return t;
}
cvoid T1_time() interrupt 3 {
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
time++;
}
void main() {
while (1) {
if (key == 0) {
delay_ms(5);
if (key == 0) {
while (key == 0);
if (time < 60 && time > 2) {
chesu = (int)(1762.0 / ((float)time * 50.0) * 3600);
GotoXY(7, 1);
LCD1602_Write(1, chesu % 100000 / 10000 + 0x30);
LCD1602_Write(1, chesu % 10000 / 1000 + 0x30);
LCD1602_Write(1, '.');
LCD1602_Write(1, chesu % 1000 / 100 + 0x30);
}
time = 0;
}
}
}
}
cvoid main() {
int adc5, adc6, adc7;
int temp = 0;
LCD1602_init();
LCD1602_Print(0, 0, "DS18B20:");
LCD1602_Print(0, 1, "SPEED: 00.0 km/h");
while (1) {
temp = (uint)(ReadTemperature() * 0.625);
adc5 = temp % 1000 / 100;
adc6 = temp % 100 / 10;
adc7 = temp % 10 / 1;
GotoXY(10, 0);
LCD1602_Write(1, adc5 + 0x30);
LCD1602_Write(1, adc6 + 0x30);
LCD1602_Write(1, '.');
LCD1602_Write(1, adc7 + 0x30);
}
}
通过本实验,我们成功实现了基于DS18B20温度传感器和LCD1602显示模块的车速与温度检测系统。实验过程中,我们熟悉了DS18B20和LCD1602的使用方法,掌握了单片机定时器和中断的配置及使用技巧。这些知识和技能对于以后的嵌入式系统开发具有重要意义。
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!