[通用ARM系列] 点个灯

[复制链接]
 楼主| heisexingqisi 发表于 2025-2-27 11:52 | 显示全部楼层 |阅读模式
IO, pi, GPIO, gp, ID, ig
  1. #include "hc32f10x.h"


  2. void delay(u16 n);
  3. void RCC_Configuration(void);
  4. void GPIO_Configuration(void);

  5. int main()
  6. {
  7.         RCC_Configuration();
  8.        
  9.         GPIO_Configuration();

  10.   while (1)
  11.   {
  12.                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
  13.                 delay(1500);
  14.                 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
  15.                 delay(1500);
  16.   }
  17. }

  18. void delay(u16 n)
  19. {
  20.         u16 i,j;
  21.         for(i = 0; i < n; i++)
  22.                 for(j = 0; j < n; j++);
  23. }

  24. void RCC_Configuration(void)
  25. {
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);       
  27. }

  28. void GPIO_Configuration(void)
  29. {
  30.         GPIO_InitTypeDef  GPIO_InitStructure;
  31.        
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  34.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  35.         GPIO_Init(GPIOB, &GPIO_InitStructure);               

  36. //        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  37.        
  38.        
  39. }


 楼主| heisexingqisi 发表于 2025-2-27 11:53 | 显示全部楼层
如果增加几个就是流水灯

增加 GPIO 引脚配置:将 8 个 LED 连接到 GPIOB 的 8 个引脚(例如 GPIO_Pin_0 到 GPIO_Pin_7)。

修改主循环逻辑:实现流水灯效果,即依次点亮和熄灭每个 LED。

优化延时函数:确保流水灯效果流畅。
 楼主| heisexingqisi 发表于 2025-2-27 11:53 | 显示全部楼层
  1. #include "hc32f10x.h"

  2. void delay(u16 n);
  3. void RCC_Configuration(void);
  4. void GPIO_Configuration(void);

  5. int main()
  6. {
  7.     RCC_Configuration();    // 配置系统时钟
  8.     GPIO_Configuration();   // 配置 GPIO

  9.     while (1)
  10.     {
  11.         // 流水灯效果:依次点亮和熄灭 8 个 LED
  12.         for (int i = 0; i < 8; i++)
  13.         {
  14.             GPIO_WriteBit(GPIOB, GPIO_Pin_0 << i, Bit_RESET); // 点亮 LED
  15.             delay(500); // 延时
  16.             GPIO_WriteBit(GPIOB, GPIO_Pin_0 << i, Bit_SET);   // 熄灭 LED
  17.         }
  18.     }
  19. }

  20. // 简单的延时函数
  21. void delay(u16 n)
  22. {
  23.     u16 i, j;
  24.     for (i = 0; i < n; i++)
  25.         for (j = 0; j < n; j++);
  26. }

  27. // 配置系统时钟
  28. void RCC_Configuration(void)
  29. {
  30.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  31. }

  32. // 配置 GPIO
  33. void GPIO_Configuration(void)
  34. {
  35.     GPIO_InitTypeDef GPIO_InitStructure;

  36.     // 配置 GPIOB 的 Pin_0 到 Pin_7 为推挽输出
  37.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
  38.                                   GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  39.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出模式
  40.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度 50MHz
  41.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  42.     // 初始化时将所有 LED 熄灭
  43.     GPIO_Write(GPIOB, 0xFF); // 0xFF 表示所有引脚输出高电平(熄灭)
  44. }
yangjiaxu 发表于 2025-2-27 13:12 | 显示全部楼层
话说,芯圣的MCU有没有用位操作的,直接操作一个位实现点灯这种
呐咯密密 发表于 2025-3-28 16:40 | 显示全部楼层
很简单的一个应用
shenxiaolin 发表于 2025-3-28 20:52 | 显示全部楼层
学习一下
地瓜patch 发表于 2025-3-28 23:05 | 显示全部楼层
要点就点呼吸灯
结合国际经验 发表于 2025-3-30 01:29 | 显示全部楼层
建议使用 SysTick 定时器 进行精准延时,而不是 for 循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

2767

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

157

主题

2767

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部