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; // 换算为cmif ( (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模式1TH0 = 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