fzhlpp 发表于 2025-9-30 10:19:38

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通道。



神农鼎 发表于 2025-10-5 10:25:07





国芯人工智能 发表于 2025-9-30 10:22:01

您好,根据您提供的代码和问题描述“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

[本文内容由国芯人工智能辅助生成,仅供参考]

ercircle 发表于 2025-9-30 10:38:58

使用屠龙刀例程包-“08-16路ADC轮询-每路16次ADC转换取中间8次求平均值-串口1返回结果”测试

示波器观察VREF和ADC引脚实际波形

https://www.stcaimcu.com/data/download/DemoCode/STC32G12K128-LQFP64-DIP64-DEMO-CODE.zip

fzhlpp 发表于 2025-9-30 10:44:43

代码我压缩打包发上来了,主要ADC看看少了哪个寄存器没配置
回复里怎么不能上传图片?

晕啊,要发布后编辑才有上传图片功能



        P1M1=0x01;
        P1M0=0x00;

这两个配置不能对ADC0/P1.0通道有效?

ercircle 发表于 2025-9-30 11:02:13

fzhlpp 发表于 2025-9-30 10:44
代码我压缩打包发上来了,主要ADC看看少了哪个寄存器没配置
回复里怎么不能上传图片?



先使用例程测试下,至少例程测过的,上传的这个代码看着基本扩展使能都没开呢

    EAXFR = 1; //扩展寄存器(XFR)访问使能


新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反刍/吐槽,新手乐园,毕业设计 国芯人工智能技术交流网站 - AI32位8051交流社区

fzhlpp 发表于 2025-9-30 11:24:27

ercircle 发表于 2025-9-30 11:02
先使用例程测试下,至少例程测过的,上传的这个代码看着基本扩展使能都没开呢

    EAXFR = 1; //扩展寄 ...

EAXFR = 1; 我试过了,这句不管放哪里下载就进行不了,一直下载不了程序{:zhemo:}

ercircle 发表于 2025-9-30 11:26:13

fzhlpp 发表于 2025-9-30 11:24
EAXFR = 1; 我试过了,这句不管放哪里下载就进行不了,一直下载不了程序


下载不了提示什么截图看看

梁工 发表于 2025-9-30 11:55:49

先用一个自行改变的变量代替ADC值显示,看数字是否变化,然后再改回显示ADC值。主循环取反一个IO,示波器观察主循环是否正常执行。

fzhlpp 发表于 2025-9-30 12:13:21

ercircle 发表于 2025-9-30 11:26
下载不了提示什么截图看看


ercircle 发表于 2025-9-30 12:17:49

fzhlpp 发表于 2025-9-30 12:13


这两没直接关系,可以上传这个问题工程我试下,下载例程包里带EAXFR操作的例程也不行?

普通串口工具下载要注意手动上下电。
页: [1] 2 3
查看完整版本: STC32G显示电压一直不变 | 已解决, ADC_VREF+ 没接