在上一章(【蓝桥杯嵌入式】记录一次模拟赛(上)-优快云博客)中,我们完成了B2、B3按键的第一功能:触发ADC采集。
七、B2按键第二功能:参数标准选项

又是熟悉的循环切换的模式,继续用求模的方法。首先,我们用一个数组来存储这些标准参数(上、下限),那么按键B2第二功能就是在切换数组的当前索引,这样就可以修改对应的参数。数组的类型选择用整型,原因同上一章中讲到的浮点型的精度问题,在整个做题过程中,大多数涉及显示为小数的数据存储、计算时都使用整型,显示格式化、串口信息格式化时才转化为浮点型。
unsigned int standard_goods[4] = {220, 120, 300, 140}; // 产品标准参数数组:R37上限,R37下限,R38上限,R38下限
unsigned char standard_key = 0; // 产品标准参数数组索引
按照选择的顺序,我们定义数组中元素对应R37上、下限,R38上下限
用变量standard_key作为数组索引,那么B2第二功能就是修改standard_key。
只需要在原来的基础上加上对standard_key求模的部分即可。
// 按键B2的功能实现
void function_B2()
{
if (lcd_mode == 0)
{
// 采集R37电压
unsigned int adc_dat; // ADC采集到的数据
char line_disp[21]; // 存储LCD行显示内容的数组,每行最多显示20个字符
// 启动ADC转换
HAL_ADC_Start(&hadc2);
// 等待ADC转换完成,超时时间为100毫秒
if (HAL_ADC_PollForConversion(&hadc2, 100) == HAL_OK)
{
// 读取ADC转换后的数据
adc_dat = HAL_ADC_GetValue(&hadc2);
// 计算R37电阻的电压值(0-3.3V)
adc_R37 = (adc_dat / 4095.0) * 330;
// 格式化R37电压值为字符串,保留两位小数
sprintf(line_disp, " R37:%.2fV ", (float)(adc_R37 / 100.0));
// 在LCD的第三行显示R37电压值
LCD_DisplayStringLine(Line3, (unsigned char *)line_disp);
// 增加总的R37检测量计数
all_r37++;
// 停止ADC转换
HAL_ADC_Stop(&hadc2);
}
}
else if (lcd_mode == 1)
{
standard_key = (standard_key + 1) % 4; // 切换标准参数索引
}
}
八、B3、B4第二功能:修改标准上下限


这里的加减上下限同样也使用加一、求模的方法实现。只是需要注意区分出上下限(用不同的范围)。(索引0、2表示上限,索引1、3表示下限)
加减完的结果应当实时显示在界面上:
case 1:
// 标准设置界面
// "12345678901234567890"
LCD_DisplayStringLine(Line1, (unsigned char *)" STANDARD "); // 第一行显示:标准设置标题
sprintf(line_disp, " SR37:%.1f-%.1f ", (float)(standard_goods[1] / 100.0), (float)(standard_goods[0] / 100.0));
LCD_DisplayStringLine(Line3, (unsigned char *)line_disp); // 第三行显示:R37标准范围
sprintf(line_disp, " SR38:%.1f-%.1f ", (float)(standard_goods[3] / 100.0), (float)(standard_goods[2] / 100.0));
LCD_DisplayStringLine(Line4, (unsigned char *)line_disp); // 第四行显示:R38标准范围
break;
在lcd_disp()函数中补全标准设置界面的代码,记得将数组元素转为合适的浮点型,才能使用“%.1f”。
B3、B4第二功能部分的代码:
// 按键B3的功能实现
void function_B3()
{
if (lcd_mode == 0)
{
// 采集R38电压
unsigned int adc_dat;
char line_disp[21];
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
adc_dat

最低0.47元/天 解锁文章
3万+





