Wddz 发表于 2025-2-12 14:00:16

AI8H1K28-32P的 P0端口没反应是什么原因


下面这个程序,为什么P0口的P0.2没反应呢?

#include <AI8H.h>

sbit LED1 = P1^2; // 第 3 脚 P1.2 指示灯 LED1
sbit LED2 = P1^3; // 第 4 脚 P1.3 指示灯 LED2
sbit LED3 = P1^4; // 第 5 脚 P1.4 提示灯 LED3
sbit LED4 = P1^5; // 第 6 脚 P1.5 指示灯 LED4
sbit LED5 = P1^6; // 第 7 脚 P1.6 提示灯 LED5

sbit KEY1 = P3^2; // 第 15 脚 P3.2 接按键 KEY1
sbit KEY2 = P3^3; // 第 16 脚 P3.3 接按键 KEY2
sbit KEY3 = P3^4; // 第 17 脚 P3.4 接按键 KEY3
sbit KEY4 = P3^5; // 第 18 脚 P3.5 接按键 KEY4
sbit KEY5 = P3^7; // 第 20 脚 P3.7 接按键 KEY5
sbit KEY6 = P2^0; // 第 21 脚 P2.0 接按键 KEY6
sbit KEY7 = P2^1; // 第 22 脚 P2.1 接按键 KEY7
sbit KEY8 = P2^2; // 第 23 脚 P2.2 接按键 KEY8
sbit KEY9 = P2^3; // 第 24 脚 P2.3 接按键 KEY9

sbit OUT_P26 = P2^6; // 第 27 脚 P2.6 默认输出低电平
sbit OUT_P27 = P2^7; // 第 28 脚 P2.7 默认输出低电平
sbit OUT_P00 = P0^0; // 第 29 脚 P0.0 默认输出低电平
sbit OUT_P01 = P0^1; // 第 30 脚 P0.1 默认输出低电平
sbit OUT_P02 = P0^2; // 第 31 脚 P0.2 默认输出低电平
sbit ADC_PIN = P0^3; // 第 32 脚 P0.3 默认输出低电平

// ADC 初始化
void ADC_Init() {
    P0M1 |= 0x08;   // 设置 P0.3 为高阻输入模式
    ADCCFG = 0x0F;// 设置 ADC 时钟和结果右对齐
    ADC_CONTR = 0x80; // 使能 ADC 模块
}

// 读取 ADC 值
unsigned int ADC_Read() {
    ADC_CONTR = 0x8B; // 选择 P0.3 通道并启动转换
    _nop_();          // 短暂延时
    while (!(ADC_CONTR & 0x20)); // 等待转换完成
    ADC_CONTR &= ~0x20; // 清除转换完成标志
    return (ADC_RES << 8) | ADC_RESL; // 返回 10 位 ADC 结果

void main()
{
    // 初始化
    P1M0 = 0xFC; P1M1 = 0x00; // 设置 P1.2 - P1.6 为推挽输出
    P2M0 = 0xC0;            // 设置 P2.6 - P2.7 为推挽输出
    P0M0 = 0x00;             // 设置 P0.0 - P0.2 为

while(1)
{
// 如果 KEY1 按下且 KEY5 未按下
   if (!KEY1 && KEY5)
{

            LED2 = ~LED2; // 点亮 LED2
            OUT_P02 = ~OUT_P02; //
}
}
}

晓飛飛 发表于 2025-2-12 14:28:24

您所谓P0没反应是如何得出的结论,是通过什么方法测量或者指示的?

Lkck8210 发表于 2025-2-12 15:02:28

8H的引脚模式预设是高阻
即P0M0=0;P0M1=0xFF;
你的代码只写了P0M0=0;
等于没有初始化


Wddz 发表于 2025-2-13 08:06:45

晓飛飛 发表于 2025-2-12 14:28
您所谓P0没反应是如何得出的结论,是通过什么方法测量或者指示的?

在焊的板子上测量这几个脚位都没有反应,一直低电平

Wddz 发表于 2025-2-13 08:13:55

Lkck8210 发表于 2025-2-12 15:02
8H的引脚模式预设是高阻
即P0M0=0;P0M1=0xFF;
你的代码只写了P0M0=0;


ADC初始化哪里写了P0M1 |= 0x08;   // 设置 P0.3 为高阻输入模式,,这样写不行吗?

Lkck8210 发表于 2025-2-13 09:31:43

Wddz 发表于 2025-2-13 08:13
ADC初始化哪里写了P0M1 |= 0x08;   // 设置 P0.3 为高阻输入模式,,这样写不行吗? ...

你看看你贴子开头第一句问的是什么

Wddz 发表于 2025-2-13 20:03:28

Lkck8210 发表于 2025-2-13 09:31
你看看你贴子开头第一句问的是什么

大佬,P0,P2口是不是要加上拉电阻

Wddz 发表于 2025-2-14 00:33:46

Wddz 发表于 2025-2-13 20:03
大佬,P0,P2口是不是要加上拉电阻

试了,不能加上拉

zhang32568 发表于 2025-2-14 08:26:01

你这个肯定不能工作。while循环。KEY1按下 一秒钟循环执行上万次。你的LED能来得及不。必须加判断。比如key1 停止按下后开始执行一次。

Wddz 发表于 2025-2-14 16:53:33

zhang32568 发表于 2025-2-14 08:26
你这个肯定不能工作。while循环。KEY1按下 一秒钟循环执行上万次。你的LED能来得及不。必须加判断。比如key ...
按键按下,LED2 能控制亮灭,但是P0.2这几个口都没反应,也不知是IC挂了,还是没有配置好
Desktop/ymj-
页: [1] 2
查看完整版本: AI8H1K28-32P的 P0端口没反应是什么原因