实现在8个8段数码管上扫描显示A—H
一、代码
这段代码是为 STM32 微控制器编写的,目的是通过 GPIO 控制8段数码管显示器,使其显示一系列的字符。这里分析代码的主要部分:
初始化部分
- led_duan_init() - 这个函数负责初始化数码管的段(即数码管的每一部分),设置相应的GPIO端口为输出模式。
- led_wei_init() - 这个函数负责初始化数码管的位(即控制哪一个数码管显示),同样配置相关的GPIO端口。
- SysTick_Init() - 初始化系统滴答定时器,通常用于精确的时间控制。
- delay_init() - 初始化延时函数,为后续的延时调用做准备。
主循环
在 while(1) 循环中,代码执行以下操作:
- 循环遍历 - 使用 for 循环遍历数组 a,数组中的每个元素代表一个数码管位。
- Display(i) - 这个函数调用将特定字符的译码写入GPIOA的端口。参数 i 指定了要显示的字符。这里的 i 与字符’A’到’H’的映射有关。
- GPIO_ResetBits(GPIOE, a[i]) - 点亮特定的数码管位。这里使用数组 a 中的元素作为参数,这意味着在每次迭代中点亮不同的数码管位。
- delay_ms(1) - 提供1毫秒的延时,这个短暂的延时保持当前显示。
- GPIO_SetBits(GPIOE, a[i]) - 关闭特定的数码管位,结束当前位的显示。
- 再次 delay_ms(1) - 这个延时是在切换到下一个数码管位之前提供短暂的视觉暂停。
main.c
int main(void)
{
led_duan_init();//数码管段初始化
led_wei_init(); //数码管位初始化
SysTick_Init(); //定时器初始化
delay_init();//延时初始化
int a[8]={GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3,
GPIO_Pin_4,GPIO_Pin_5,GPIO_Pin_6,GPIO_Pin_7};
while(1)
{
for(int i = 0 ; i < 8 ; i++){
Display(i);//将A的译码写到GPIOA的端口
GPIO_ResetBits(GPIOE, a[i]);//亮/ 位置控制
delay_ms(1);
GPIO_SetBits(GPIOE, a[i]);//灭
delay_ms(1); // 视觉暂停
}
}