找回密码
 立即注册
楼主: cmwdslzz

求助STC8G1K08A的P30引脚如何点亮led

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层
截图202607011121513878.jpg


截图202607011122322605.jpg


STC8G1K08A-SOP8,工作在24MHz, 需要
1,P3.0低电平点亮LED灯的演示程序
2,P3.0/P3.1/P3.2/P3.3/P3.4/P5.4/P5.5
低电平点亮LED灯的流水灯演示程序


截图202607011128534619.jpg





回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 4 天前 | 显示全部楼层

好的,根据从 STC8G 数据手册和 AI8 手册中获得的信息,特别是关于引脚配置和 SOP8 封装特性的说明,我为你编写了以下两个演示程序。

重要说明

  1. 关于封装与引脚 P3.4
    根据手册, STC8G1K08A-SOP (SOP8) 封装只有 6 个可用 I/O 口,分别为 P3.0, P3.1, P3.2, P3.3, P5.4, P5.5
    该封装没有 P3.4 引脚。
    你要求的 P3.4 仅在 TSSOP20SOP16 封装(如 STC8G1K08A-38I-TSSOP20)上存在。因此,以下流水灯程序会基于 SOP8 封装的 6 个引脚实现。如果你需要使用 P3.4,请改用 TSSOP20 封装的芯片。

  2. 关于 I/O 口初始化(关键!)
    根据手册第4.5.5节:

    • P3.0 和 P3.1:上电后默认是准双向口,可以直接输出。
    • 其他 I/O 口 (P3.2, P3.3, P5.4, P5.5):上电后均为高阻输入状态,必须在程序初始化时先设置模式,否则无法正常输出高低电平!
      手册建议:驱动 LED 时,推荐使用推挽输出模式,并采用高电平点亮,这样可以获得更好的驱动能力和稳定性,避免地线干扰。
  3. 关于点亮方式
    你要求“低电平点亮”。在推挽模式下,无论高电平还是低电平,驱动能力都很强。以下代码在推挽模式下实现你要求的低电平点亮逻辑。


程序1:P3.0 单独低电平点亮 LED

这个程序专门用于测试 P3.0 引脚是否能正常驱动 LED。

#include "STC8G.h"
#include "intrins.h"

#define MAIN_Fosc 24000000L   // 定义主时钟为 24MHz

// 如果使用的是 Ai8G1K08A 系列,请包含 Ai8G.h 头文件
// #include "Ai8G.h"

sbit LED_P30 = P3^0;

void delay_ms(unsigned int ms)
{
    unsigned int i;
    do {
        i = MAIN_Fosc / 10000;
        while(--i);
    } while(--ms);
}

void main(void)
{
    // --- 初始化 I/O 口模式 ---
    // 设置 P3.0 为推挽输出模式 (P3M0=1, P3M1=0)
    // 推挽模式下,低电平驱动能力很强,适合点亮 LED
    P3M0 |= 0x01;   // 设置 P3.0 对应位为 1
    P3M1 &= ~0x01;  // 设置 P3.0 对应位为 0
  
    // 也可以设置为准双向口(默认模式),但驱动电流较小
    // P3M0 &= ~0x01;
    // P3M1 &= ~0x01;

    // 关闭所有无关外设以节省功耗(可选)
    P_SW2 = 0x80;   // 使能访问 XFR
    // 根据具体型号关闭不需要的外设时钟...

    delay_ms(100);  // 等待系统稳定

    // --- 主循环 ---
    while(1)
    {
        // 低电平点亮 LED(假设 LED 正极接 VCC,负极通过限流电阻接 P3.0)
        LED_P30 = 0;
      
        // 如果想闪烁,可以取消下面的注释
        // delay_ms(500);
        // LED_P30 = 1;
        // delay_ms(500);
    }
}

程序2:6 路流水灯(SOP8 封装可用引脚)

这个程序实现了 P3.0, P3.1, P3.2, P3.3, P5.4, P5.5 的流水灯效果。请根据你的实际硬件封装修改引脚数组。

#include "STC8G.h"
#include "intrins.h"

#define MAIN_Fosc 24000000L

// 定义需要操作的引脚
// 注意:SOP8 封装下无 P3.4,以下是 SOP8 的 6 个引脚
// 如果你使用的是 TSSOP20 封装,可以取消 P3.4 的注释,并启用对应的引脚
sbit LED0 = P3^0;
sbit LED1 = P3^1;
sbit LED2 = P3^2;
sbit LED3 = P3^3;
// sbit LED4 = P3^4;   // SOP8 封装无此引脚!请改用 TSSOP20
sbit LED5 = P5^4;
sbit LED6 = P5^5;

// 定义引脚组:数组方式便于流水灯操作
// 按照流水灯顺序排列:P3.0, P3.1, P3.2, P3.3, P5.4, P5.5
#define LED_PORT_COUNT  6

// 毫秒级延时函数 (24MHz 下粗略延时)
void delay_ms(unsigned int ms)
{
    unsigned int i;
    do {
        i = MAIN_Fosc / 10000;
        while(--i);
    } while(--ms);
}

void main(void)
{
    unsigned char i;

    // --- 初始化所有用到的 I/O 口为推挽输出 ---
    // 推挽输出模式下,高低电平都有很强的驱动能力
  
    // P3.0 - P3.3: 设置为推挽输出
    P3M0 |= 0x0F;   // 位0-3 置1
    P3M1 &= ~0x0F;  // 位0-3 置0
  
    // P5.4, P5.5: 设置为推挽输出
    P5M0 |= 0x30;   // 位4,5 置1
    P5M1 &= ~0x30;  // 位4,5 置0
  
    // 如果需要使用 P3.4 (仅 TSSOP20 封装),取消下面的注释
    // P3M0 |= 0x10;
    // P3M1 &= ~0x10;

    // --- 初始化所有 LED 为熄灭状态(高电平熄灭,低电平点亮)---
    // 先全部置高(熄灭)
    P3 |= 0x0F;     // P3.0 - P3.3 置1
    // P3 |= 0x10;  // P3.4 (仅 TSSOP20)
    P5 |= 0x30;     // P5.4, P5.5 置1
  
    delay_ms(200);  // 等待系统稳定

    // --- 主循环:流水灯 ---
    while(1)
    {
        // 循环点亮每一个 LED(低电平点亮)
        for(i = 0; i < LED_PORT_COUNT; i++)
        {
            // 根据 i 的值点亮对应的 LED
            switch(i)
            {
                case 0: LED0 = 0; break;
                case 1: LED1 = 0; break;
                case 2: LED2 = 0; break;
                case 3: LED3 = 0; break;
                // case 4: LED4 = 0; break;  // P3.4 (仅 TSSOP20)
                case 4: LED5 = 0; break;   // P5.4
                case 5: LED6 = 0; break;   // P5.5
                default: break;
            }
          
            delay_ms(150);  // 每个 LED 亮 150ms
          
            // 熄灭当前 LED(置高)
            switch(i)
            {
                case 0: LED0 = 1; break;
                case 1: LED1 = 1; break;
                case 2: LED2 = 1; break;
                case 3: LED3 = 1; break;
                // case 4: LED4 = 1; break;  // P3.4 (仅 TSSOP20)
                case 4: LED5 = 1; break;   // P5.4
                case 5: LED6 = 1; break;   // P5.5
                default: break;
            }
        }
    }
}

硬件连接与注意事项

  1. LED 连接方式

    • LED 正极 → VCC (3.3V 或 5V)
    • LED 负极 → 限流电阻 (约 330Ω ~ 1kΩ) → 单片机引脚
    • 这样当引脚输出低电平时,电流从 VCC 流过 LED 和电阻到引脚,LED 点亮。
  2. 关于 P3.0 和 P3.1

    • 这两个引脚同时也是串口下载引脚 (RxD/TxD)。
    • 如果在下载程序时,这两个引脚上的 LED 电路可能会影响下载,请在下载前拔掉下载线,或者确保 LED 电路不会将引脚电平拉死。
    • 下载完成后,再插上 LED 电路观察效果。
  3. 关于封装

    • 如果你确实需要 7 个 I/O 口 (P3.0 ~ P3.4, P5.4, P5.5),请务必更换为 TSSOP20SOP16 封装的 STC8G1K08A-38I 系列。
    • SOP8 封装最多只能有 6 个 I/O 口。
  4. 如果 LED 不亮

    • 检查 I/O 口是否已初始化为 推挽输出 (PxM0/PxM1 寄存器设置正确)。
    • 检查 LED 的极性和限流电阻是否接对。
    • 如果是 SOP8 封装,请确认你没有使用 P3.4。

🔍 搜索 "STC8G1K08A-SOP 工作在24MHz 需要 :
1"

📌 相关论坛讨论

  1. 求助 STC8G1K08A的P3.0引脚如何点亮led
  2. 冲哥视频学习笔记
  3. 学习感悟分享
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 14:04 , Processed in 0.069411 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表