2024-09-01
售卖作品
00

目录

实验报告:基于单片机的车速与温度检测系统
一、实验背景
二、实验目的
三、实验器件
四、硬件连接
五、设计原理
1. 温度检测原理
2. 车速检测原理
3. LCD1602显示原理
六、电路原理
七、程序原理
1. 温度检测程序
2. 车速检测程序
3. 显示程序
八、代码解析
1. 温度检测代码
2. 车速检测代码
3. 显示程序
九、总结
资料

车速检测显示,温度检测显示。

改变CLOCK频率就可以修改车速。

在这里插入图片描述

实验报告:基于单片机的车速与温度检测系统

一、实验背景

随着现代汽车电子技术的发展,车速与温度检测已成为汽车系统中的重要组成部分。本实验利用DS18B20温度传感器和LCD1602显示模块,结合单片机对车辆速度和环境温度进行实时检测和显示,实现一个简易的车速与温度检测系统。

二、实验目的

  1. 学习并掌握DS18B20温度传感器的原理及使用方法。

  2. 学习LCD1602显示模块的基本原理及使用方法。

  3. 掌握单片机定时器的配置及中断服务程序的编写。

  4. 实现车辆速度和温度的实时检测与显示。

三、实验器件

  1. STC89C51单片机

  2. DS18B20温度传感器

  3. LCD1602显示模块

  4. 按键(用于车速检测)

  5. 相关电阻、电容及连接线

四、硬件连接

  1. DS18B20温度传感器连接:DQ引脚接单片机P2.3,VCC接电源正极,GND接电源负极。

  2. LCD1602显示模块连接:RS、RW、E及数据引脚分别接单片机相应引脚。

  3. 按键连接:一端接单片机P3.5,另一端接地。

五、设计原理

1. 温度检测原理

DS18B20是一种数字温度传感器,采用单总线协议进行通信。其主要操作包括初始化、发送命令和读取数据。每次温度转换后,温度数据存储在寄存器中,通过读取该寄存器获得温度值。

2. 车速检测原理

通过检测按键触发时间间隔来计算车速。每次按键触发时,记录两个触发事件的时间差,从而计算车速。

3. LCD1602显示原理

LCD1602是一种字符型液晶显示模块,通过并行接口与单片机通信。主要操作包括初始化、设置显示位置、写入字符等。

六、电路原理

本系统主要包括温度检测电路和车速检测电路:

  1. 温度检测电路:DS18B20传感器连接到单片机的P2.3引脚,单片机通过该引脚与DS18B20通信,读取温度数据。

  2. 车速检测电路:按键连接到单片机的P3.5引脚,通过检测按键按下的时间间隔来计算车速。

  3. 显示电路:LCD1602显示模块通过并行接口连接到单片机的P0、P2等引脚,单片机通过该接口控制LCD1602显示温度和车速。

七、程序原理

1. 温度检测程序

温度检测包括以下几个步骤:

  • 初始化DS18B20:通过单片机发送复位脉冲,等待传感器响应。

  • 启动温度转换:向DS18B20发送启动温度转换命令。

  • 读取温度数据:读取DS18B20寄存器中的温度数据,并进行数据处理。

2. 车速检测程序

车速检测通过定时器中断实现:

  • 定时器配置:设置定时器1,每50ms产生一次中断。

  • 中断服务程序:在中断服务程序中记录按键按下的时间,计算时间间隔,从而计算车速。

3. 显示程序

显示程序包括以下几个步骤:

  • 初始化LCD1602:设置显示模式和光标位置。

  • 显示数据:将温度和车速数据转换为字符,通过并行接口写入LCD1602显示。

八、代码解析

1. 温度检测代码

c
void 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; }

2. 车速检测代码

c
void 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; } } } }

3. 显示程序

c
void 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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!