基于51单片机的轮胎胎压气压监测测量仪开发之路
基于51单片机轮胎胎压气压监测测量仪_数码管显示(仿真+程序)仿真图proteus 7.8程序编译器:keil 4/keil 5编程语言:C语言主要研究内容:本课程设计用MPX4115传感器来检测压力参数,ADC0832进行模数转换后,利用单片机AT89C52进行数据处理后,用四个八段数码管显示压力值。压力测量的量程在15.3KPA~114.9KPA,分度值位0.1kpa。最近折腾了一个基于51单
基于51单片机轮胎胎压气压监测测量仪_数码管显示(仿真+程序) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 主要研究内容: 本课程设计用MPX4115传感器来检测压力参数,ADC0832进行模数转换后,利用单片机AT89C52进行数据处理后,用四个八段数码管显示压力值。 压力测量的量程在15.3KPA~114.9KPA,分度值位0.1kpa。

最近折腾了一个基于51单片机的轮胎胎压气压监测测量仪,还带数码管显示,感觉挺有意思,来跟大家分享分享。
前期准备
工具选择
这次用到的仿真软件是Proteus 7.8,这软件在单片机仿真这块那是相当好用。程序编译器我用的是Keil 4和Keil 5,对于51单片机开发,这俩算是主流了。编程语言就选C语言,上手容易,逻辑清晰。
核心功能实现
传感器与模数转换
咱们这个设计里,检测压力参数靠的是MPX4115传感器,模数转换的重任交给ADC0832。MPX4115把感受到的压力转化为模拟信号,ADC0832再把模拟信号变成单片机能够处理的数字信号。
数据处理与显示
单片机选用AT89C52,它收到ADC0832传来的数字信号后,开始处理数据,最后把处理好的压力值通过四个八段数码管显示出来。压力测量的量程在15.3KPA - 114.9KPA,分度值是0.1kpa,精度还是不错的。
代码实战
#include <reg51.h>
#include <intrins.h>
// 定义ADC0832端口
sbit CS = P1^0;
sbit CLK = P1^1;
sbit DO = P1^2;
// 数码管段码定义
unsigned char code seg_table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 数码管位选定义
unsigned char code dig_table[] = {0xFE, 0xFD, 0xFB, 0xF7};
// ADC0832读取函数
unsigned char Read_ADC0832(unsigned char ch) {
unsigned char i, dat = 0;
CS = 1;
_nop_();
_nop_();
CS = 0;
_nop_();
_nop_();
// 设置通道选择
if (ch == 0) {
DO = 1;
_nop_();
_nop_();
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
DO = 0;
_nop_();
_nop_();
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
} else if (ch == 1) {
DO = 1;
_nop_();
_nop_();
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
DO = 1;
_nop_();
_nop_();
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
}
// 读取数据
for (i = 0; i < 8; i++) {
CLK = 1;
_nop_();
_nop_();
dat <<= 1;
if (DO) dat |= 0x01;
CLK = 0;
_nop_();
_nop_();
}
for (i = 0; i < 8; i++) {
CLK = 1;
_nop_();
_nop_();
if (DO) dat |= 0x80;
dat >>= 1;
CLK = 0;
_nop_();
_nop_();
}
CS = 1;
return dat;
}
// 数码管显示函数
void Display(unsigned int num) {
unsigned char i, temp;
for (i = 0; i < 4; i++) {
temp = num % 10;
num /= 10;
P0 = seg_table[temp];
P2 = dig_table[i];
_nop_();
_nop_();
P2 = 0xFF;
}
}
void main() {
unsigned int pressure;
while (1) {
// 读取ADC数据
unsigned char adc_value = Read_ADC0832(0);
// 根据量程转换为实际压力值
pressure = (unsigned int)(adc_value * (114.9 - 15.3) / 255 + 153);
// 显示压力值
Display(pressure);
}
}
代码分析
- ADC0832读取函数:首先设置片选CS和时钟CLK,通过控制DO引脚来选择通道,然后通过8次时钟脉冲读取转换后的数据。先读高8位,再读低8位,最后把CS拉高结束读取。
- 数码管显示函数:通过取余和除法操作,把要显示的数值的每一位分离出来,再根据段码表在数码管上显示,通过位选来选择哪个数码管显示。
- 主函数:不断读取ADC0832的数据,根据设定的量程转换为实际压力值,再调用数码管显示函数把压力值显示出来。
通过这样一套流程,就实现了基于51单片机的轮胎胎压气压监测测量仪,能准确测量并显示轮胎胎压,在实际应用中还是挺有意义的。大家要是有兴趣,也可以自己动手试试,说不定能发现更多好玩的改进点。

基于51单片机轮胎胎压气压监测测量仪_数码管显示(仿真+程序) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 主要研究内容: 本课程设计用MPX4115传感器来检测压力参数,ADC0832进行模数转换后,利用单片机AT89C52进行数据处理后,用四个八段数码管显示压力值。 压力测量的量程在15.3KPA~114.9KPA,分度值位0.1kpa。


更多推荐



所有评论(0)