00024 超声波LCD1602ADC0832
实验报告:基于51单片机的身高体重测量仪设计
背景介绍
本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度,通过ADC0832模数转换芯片获取重量数据,并使用LCD1602显示屏显示测量结果。该测量仪器可以自动检测身高和体重,并将结果显示在LCD上,适用于婴儿体检。
硬件介绍
- 51单片机:作为主控芯片,负责整个系统的控制与数据处理。
- LCD1602显示屏:用于显示测量结果,包括体重和身高。
- 超声波传感器:用于测量身高,包含Trig和Echo两个引脚,分别用于触发和接收超声波信号。
- ADC0832模数转换芯片:用于将模拟重量信号转换为数字信号。
- LED:用于指示状态,当重量大于500克时点亮。
设计原理
电路原理
系统电路主要包括以下几个部分:
- 超声波模块连接:
- Trig (P1.6):连接超声波传感器的触发端。
- Echo (P1.7):连接超声波传感器的接收端。
- LED指示灯连接:连接在P3.1端口,用于指示重量状态。
- LCD1602显示屏连接:用于显示测量结果。
程序原理
程序主要分为以下几个模块:
-
初始化模块:
- 初始化LCD1602显示屏。
- 初始化定时器0,用于超声波测距。
- 初始化超声波传感器的引脚。
-
超声波测距模块:
- 通过触发Trig引脚发出超声波。
- Echo引脚接收到回波信号后,通过定时器0计算时间,进而计算出距离。
- 根据测得的距离换算出身高。
-
重量测量模块:
- 使用ADC0832芯片获取重量的模拟信号并转换为数字信号。
- 通过计算公式将ADC结果转换为实际重量值。
-
显示模块:
- 将测得的身高和体重显示在LCD1602上。
-
指示灯控制模块:
- 根据测量的重量控制LED指示灯的亮灭。
主要函数解析
uint Conut()
{
static uint Time = 0, S = 0;
Time = TH0 * 256 + TL0;
TH0 = 0;
TL0 = 0;
S = (Time * 1.7) / 100; // 换算为cm
if ( (S >= 700) || Flag_Ultrasonic == 1 ) // 超出测量范围
{
Flag_Ultrasonic = 0;
S = 700;
}
return(S);
}
void delay_ms( unsigned char x )
{
unsigned char a, b, c;
for ( c = x; c > 0; c-- )
{
for ( b = 102; b > 0; b-- )
for ( a = 3; a > 0; a-- )
;
}
}
void Init_Timer0()
{
TMOD &= 0xf0;
TMOD |= 0x01; // 定时器0模式1
TH0 = 0;
TL0 = 0;
ET0 = 1; // 使能定时器0中断
EA = 1; // 使能总中断
}
void main()
{
u8 disp[10];
u8 count = 0;
u16 distance = 0;
int weight = 0;
Trig = 0;
Echo = 1;
LED = 0;
LCD_init();
Init_Timer0();
LCD_write_str(0, 0, "weight: 00.0 kg");
LCD_write_str(0, 1, "height: 000 cm");
delay_ms(100);
while (1)
{
weight = ((float)Get_AD_Result(0) * (10000.0 / 255.0));
LCD_write_com(0x80 + 8);
LCD_write_data(weight % 100000 / 10000 + '0');
LCD_write_data(weight % 10000 / 1000 + '0');
LCD_write_data('.');
LCD_write_data(weight % 1000 / 100 + '0');
TR0 = 0;
TH0 = 0;
TL0 = 0;
Trig = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
Trig = 0;
while (!Echo);
TR0 = 1;
while (Echo);
TR0 = 0;
distance = 204 - Conut();
count = 0;
disp[count++] = distance % 1000 / 100 + '0';
disp[count++] = distance % 100 / 10 + '0';
disp[count++] = distance % 10 / 1 + '0';
disp[count++] = 0;
LCD_write_str(8, 1, disp);
if (weight > 500)
{
LED = 1;
}
else
{
LED = 0;
}
}
}
void Timer0() interrupt 1
{
Flag_Ultrasonic = 1;
}
结论
本实验成功实现了基于51单片机的身高体重测量仪。通过使用超声波传感器测量身高,ADC0832芯片获取体重数据,并通过LCD1602显示屏显示结果,实现了体检仪的基本功能。该系统可以准确测量和显示婴儿的身高和体重,具有良好的实用性和可靠性。
资料
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2