找回密码
 立即注册
查看: 13|回复: 1

STC32G点灯

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-12 18:28:24
已绑定手机

1

主题

3

回帖

65

积分

注册会员

积分
65
发表于 昨天 18:28 | 显示全部楼层 |阅读模式
#include <STC32G.H>


//变量区(所有的变量放到这里不要放到main里)


int a = 100;  // 呼吸灯亮度控制变量(0~100)


//变量区////////////////////////////////////


//函数区***********************************
void Delay10us(void);
void delay(unsigned int x);
//函数区***********************************




//初始化-----------------------------------
void init(void)
{
                RSTCFG |= (1 << 4);  // 使能P5.4复位功能
    // 配置P1.1为推挽输出
    P1M0 |= 0x02;
    P1M1 &= 0xFD;
}
//初始化-----------------------------------




//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
void main(void)
{
    init();
    while (1)
    {
        P11 = 1;        // LED点亮(假设低电平有效,此处需根据硬件调整)
        delay(a);       // 亮延时:a*10us
        P11 = 0;        // LED熄灭
        delay(100 - a); // 灭延时:(100-a)*10us,总周期1000us=1ms


        a--;
        if (a == 0) a = 100;  // 循环重置
    }
}
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-


//模块库*************************************




// 11.0592MHz下,约10微秒延时
void Delay10us(void)
{
    unsigned int i;
    _nop_(); _nop_(); _nop_(); _nop_();
    i = 26;
    while (i--);
}


// 延时x个10微秒(x范围:0~65535)
void delay(unsigned int x)
{
    while(x--){ Delay10us(); }
}




//模块库*************************************

回复

使用道具 举报 送花

3

主题

1888

回帖

624

积分

等待验证会员

积分
624
发表于 昨天 18:33 | 显示全部楼层
您提供的代码片段似乎不完整,且没有明确说明您在使用STC32G系列单片机进行点灯过程中遇到了什么问题。为了更好地帮助您解决问题,我将基于常见的STC32G开发流程和点灯程序,给出一个完整的、结构清晰的C语言示例,并对代码进行详细解释,帮助您理解如何实现LED点灯,特别是呼吸灯效果的实现。

一、项目说明

目标:使用STC32G系列单片机实现LED呼吸灯效果。

所用外设:GPIO(通用输入输出口),用于控制LED的亮灭;定时器或软件延时函数用于控制亮度变化。

二、完整示例代码(基于STC32G12K128)

```c
include

// 变量区(所有的变量放到这里,不要放到main里)
int a = 100;  // 呼吸灯亮度控制变量(0~100)

// 函数声明区
void Delay10us(void);
void delay(unsigned int x);
void PWMLED(int dutycycle);  // 模拟PWM控制LED亮度

// 初始化函数
void init(void) {
    // 假设LED连接在P0.0引脚
    P0M1 = 0x00;    // 设置P0为推挽输出模式
    P0M0 = 0xFF;
   
    // 其他初始化配置(如时钟、中断等)可根据需要添加
}

// 延时10微秒函数(根据主频调整)
void Delay10us(void) {
    unsigned char i;
    i = 2;
    while (--i);
}

// 自定义延时函数(单位:毫秒)
void delay(unsigned int x) {
    unsigned int i, j;
    for (i = x; i > 0; i--)
        for (j = 120; j > 0; j--);
}

// 模拟PWM控制LED亮度
void PWMLED(int dutycycle) {
    if (dutycycle >= 100) {
        P00 = 0;  // 高电平点亮LED(根据硬件接法可能为低电平)
    } else if (dutycycle

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-13 08:03 , Processed in 0.111912 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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