STC32G显示电压一直不变 | 已解决, ADC_VREF+ 没接
void main(){
/********************************************************/
P0M1=0x00;
P0M0=0xfe;
P1M1=0x01;
P1M0=0x00;
P3M1=0x00;//0000 0000
P3M0=0xf3;//1111 1011
P2M1=0x00;
P2M0=0xff;
P5M1=0x00;
P5M0=0x00;
P1IE=0xfe;
/*********************************************************/
/**************************************************************/
fan=0;
usb_OUT=1;
Light=255;
//OUTAC=255;
Ht1621_Init(); //上电初始化LCD
//pwm_init();
kj=0;
kj1=0;
kj2=0;
BG=0;
USBOUT=0;
key1=1;
PCON &= ~LVDF; //上电后需要清LVD中断标志位
ELVD = 1; //使能LVD中断
/******************************************************************/
ADCTIM = 0x3f; //设置 ADC 内部时序,ADC采样时间建议设最大值
ADCCFG = 0x2f; //设置 ADC 时钟为系统时钟/2/16/16
ADC_CONTR = 0x80; //使能 ADC 模块
ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16/16,zuo对齐
/*****************************************************************/
_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
DelayMS(200);
IapEraseSector(0x0400);
Light&=0x00;
//Light&=0xbd;//1011 1101
/*********************************************************************************************/
while(1)
{
ADC_RES=0; //寄存器清零
ADC_RESL=0;
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR = ADC_CONTR & 0x9f; //清除ADC完成标志
ADCH_Value=ADC_RES; //保存ADC转换的值
ADCL_Value=ADC_RESL;
//adc_v=Get_ADC12bitResult(1);
adc_v=ADCH_Value*256;
adc_v+=ADCL_Value<<4;
a=adc_v/1000;
bb=adc_v%1000/100;
e=adc_v%100/10;
d=adc_v%10;
/*************************************************************/
下面是LCD显示...
我把输入电压从5V变到15V这个显示数值就是没反应,不知道什么问题?P1.0/ADC0通道。
您好,根据您提供的代码和问题描述“STC32G显示电压一直不变”,我来分析可能的原因以及建议的排查方法。
一、问题描述
您使用的是 STC32G 系列单片机,在使用 ADC 采集电压信号后,通过 LCD 显示,但发现电压显示值 一直不变,无论输入电压如何变化。
二、代码分析
从您的代码片段中,可以看到以下几点:
1. 端口配置部分:
对 P0~P5 端口进行了模式配置(推挽/开漏等),这部分配置是否正确,将影响 ADC 引脚是否能正常输入。
特别注意是否将 ADC 对应的引脚设置为 模拟输入模式(即 PnM1 和 PnM0 设置为 0x01)。
2. ADC 初始化部分:
ADCTIM = 0x3f; 设置了 ADC 采样时间,建议设为最大值,这在低频或高精度场合是合理的。
ADCCFG = 0x2f; 和 ADCCFG = 0x0f; 设置了 ADC 时钟分频,需要注意是否与系统时钟匹配。
ADCCONTR = 0x80; 启用了 ADC 模块。
3. 未看到 ADC 采样启动与读取部分:
从代码中没有看到 ADC 转换的启动(如设置 ADCCONTR 的 CHS 位)和读取结果(读取 ADCRES 和 ADCRESL)的逻辑。
如果没有实际执行 ADC 采样并读取数值,那么电压值自然不会变化。
4. LCD 显示部分:
Ht1621Init(); 是 LCD 初始化函数,但没有看到后续的数据显示逻辑。
如果显示逻辑没有根据 ADC 采集结果更新,也会导致显示不变。
三、常见问题排查方向
1. ADC 引脚配置是否正确?
STC32G 的 ADC 引脚需要设置为 模拟输入模式,即:
```c
PnM1 |= (1
[本文内容由国芯人工智能辅助生成,仅供参考] 使用屠龙刀例程包-“08-16路ADC轮询-每路16次ADC转换取中间8次求平均值-串口1返回结果”测试
示波器观察VREF和ADC引脚实际波形
https://www.stcaimcu.com/data/download/DemoCode/STC32G12K128-LQFP64-DIP64-DEMO-CODE.zip
代码我压缩打包发上来了,主要ADC看看少了哪个寄存器没配置
回复里怎么不能上传图片?
晕啊,要发布后编辑才有上传图片功能
P1M1=0x01;
P1M0=0x00;
这两个配置不能对ADC0/P1.0通道有效?
fzhlpp 发表于 2025-9-30 10:44
代码我压缩打包发上来了,主要ADC看看少了哪个寄存器没配置
回复里怎么不能上传图片?
先使用例程测试下,至少例程测过的,上传的这个代码看着基本扩展使能都没开呢
EAXFR = 1; //扩展寄存器(XFR)访问使能
新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反刍/吐槽,新手乐园,毕业设计 国芯人工智能技术交流网站 - AI32位8051交流社区
ercircle 发表于 2025-9-30 11:02
先使用例程测试下,至少例程测过的,上传的这个代码看着基本扩展使能都没开呢
EAXFR = 1; //扩展寄 ...
EAXFR = 1; 我试过了,这句不管放哪里下载就进行不了,一直下载不了程序{:zhemo:} fzhlpp 发表于 2025-9-30 11:24
EAXFR = 1; 我试过了,这句不管放哪里下载就进行不了,一直下载不了程序
下载不了提示什么截图看看
先用一个自行改变的变量代替ADC值显示,看数字是否变化,然后再改回显示ADC值。主循环取反一个IO,示波器观察主循环是否正常执行。 ercircle 发表于 2025-9-30 11:26
下载不了提示什么截图看看
fzhlpp 发表于 2025-9-30 12:13
这两没直接关系,可以上传这个问题工程我试下,下载例程包里带EAXFR操作的例程也不行?
普通串口工具下载要注意手动上下电。