- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-09-19 16:46:49
已绑定手机
新手上路
- 积分
- 33
|
发表于 2025-9-19 17:34:56
|
显示全部楼层
【Ai8051U学习打卡】- 让屏幕“动”起来
今日成果: 驱动0.96寸OLED屏幕,并实时显示ADC电位器的电压值,做出了一个简易的“电压表”。
开发过程与代码:
硬件连接: OLED使用I2C接口(SDA-P3.0, SCL-P3.1),电位器接到P1.0(ADC通道0)。
代码关键:
c
#include "oled.h"
#include "adc.h"
void main() {
u16 adc_value;
float voltage;
OLED_Init();
ADC_Init(0); // 初始化ADC,选择通道0
OLED_ShowString(0, 0, "Ai8051U ADC Test");
OLED_ShowString(0, 2, "Voltage:");
while (1) {
adc_value = ADC_Read(0); // 读取通道0的ADC值(12位)
voltage = (adc_value / 4095.0) * 3.3; // 将ADC值转换为电压值(假设Vref=3.3V)
OLED_ShowNum(60, 2, (u16)(voltage * 1000), 4); // 显示毫伏值
OLED_ShowString(100, 2, "mV");
DelayMs(200);
}
}
踩坑记录:
问题: ADC读数跳动很大,不稳定。
解决: 采用了软件滤波算法。连续采样10次,然后取平均值,读数瞬间稳定了!
c
// 简单的平均值滤波函数
u16 ADC_Read_Average(u8 ch, u8 times) {
u32 sum = 0;
for (u8 i=0; i<times; i++) {
sum += ADC_Read(ch);
}
return (sum / times);
}
学习感悟: 掌握了I2C通信和ADC采集两大核心技能。软件滤波是实际工程中必不可少的技巧,光读一次数据是不可靠的。 |
|