STM32 跑马灯程序设计

本文介绍STM32微控制器上实现跑马灯效果的两种编程方法,包括使用GPIO_Write函数直接控制LED和利用GPIO_SetBits及GPIO_ResetBits函数进行更简洁的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跑马灯程序的设计思路与我前面发的LED循环点亮程序总体思路很像,就是跑马灯第一个灯亮完,接着是第一个和第二个灯一起亮,而循环点亮时每次是只能亮一个灯,明白了这些代码的设计也就手到拿来了。

程序也有两种编程方法

下面展示第一种

#include "stm32f10x.h"
uint16_t temp,i,j;
void Delay(unsigned int count)               //延时函数
{
    unsigned int i;
    for(;count!=0;count--)
    {
        i=5000;
        while(i--);
    }
}
int main(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 		//使能GPIOB时钟
		GPIO_InitStructure.GPIO_Pin = 0x03FF;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
		GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB8-PB11
        while(1)                
        {
            temp = 0x0FFFE;                   //设置初始控制码
            for(i=0;i<4;i++)
            {
                GPIO_Write(GPIOB,temp);       //向GPIOB口写点亮LED的控制码
                Delay(100);
                temp=temp<<1;                 //控制码左移一位,获得下一个控制码
            }        
            temp = 0x0FE00;                   //设置初始控制码
            for(j=0;j<4;j++)
            {
                GPIO_Write(GPIOB,temp);       
                Delay(100);
                temp=(temp>>1)+ 0x8000;       //右移一位加0x8000,获得下一个控制码
            }                                 
        }
}

代码说明:“ temp=(temp>>1)+ 0x8000; ”语句为什么要加0x8000,因为temp右移一位时,最高位到此高位,最高位补0。temp右移一位后,加上0x8000使temp的最高位置1。

第二个编程方法

while(1)
{
    GPIO_SetBits(GPIOB,0x0FFFF);        //先熄灭所有LED
    temp = 0x0001;
    for(i=0;i<4;i++)
    {
        GPIO_ResetBits(GPIOB,temp);     //向GPIOB口写控制码
        Delay(100);
        temp = (temp<<1)+1;            //temp左移一位加1获得下一控住码
    }
    temp = 0x0FE00;
    for(j=0;j<4;j++)
    {
        GPIO_SetBits(GPIOB,temp);       //向GPIOB口写控制码
        Delay(100);
        temp = (temp>>1)+0x8000;       //右移一位加0x8000获得下一控住码
    }

}

 代码说明:使用GPIO_SetBits()和GPIO_ResetBits()函数替代GPIO_Write()函数。(个人认为这样更简单更好理解)

GPIO_ResetBits()函数负责点亮LED,GPIO_SetBits()函数负责熄灭LED

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值