你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 跑马灯程序设计

[复制链接]
STMCU小助手 发布时间:2022-5-25 18:00
跑马灯程序的设计思路与我前面发的LED循环点亮程序总体思路很像,就是跑马灯第一个灯亮完,接着是第一个和第二个灯一起亮,而循环点亮时每次是只能亮一个灯,明白了这些代码的设计也就手到拿来了。

程序也有两种编程方法

下面展示第一种

  1. #include "stm32f10x.h"
  2. uint16_t temp,i,j;
  3. void Delay(unsigned int count)               //延时函数
  4. {
  5.     unsigned int i;
  6.     for(;count!=0;count--)
  7.     {
  8.         i=5000;
  9.         while(i--);
  10.     }
  11. }
  12. int main(void)
  13. {
  14.                 GPIO_InitTypeDef GPIO_InitStructure;
  15.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                 //使能GPIOB时钟
  16.                 GPIO_InitStructure.GPIO_Pin = 0x03FF;
  17.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
  19.                 GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB8-PB11
  20.         while(1)               
  21.         {
  22.             temp = 0x0FFFE;                   //设置初始控制码
  23.             for(i=0;i<4;i++)
  24.             {
  25.                 GPIO_Write(GPIOB,temp);       //向GPIOB口写点亮LED的控制码
  26.                 Delay(100);
  27.                 temp=temp<<1;                 //控制码左移一位,获得下一个控制码
  28.             }        
  29.             temp = 0x0FE00;                   //设置初始控制码
  30.             for(j=0;j<4;j++)
  31.             {
  32.                 GPIO_Write(GPIOB,temp);      
  33.                 Delay(100);
  34.                 temp=(temp>>1)+ 0x8000;       //右移一位加0x8000,获得下一个控制码
  35.             }                                 
  36.         }
  37. }
复制代码


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

第二个编程方法

  1. while(1)
  2. {
  3.     GPIO_SetBits(GPIOB,0x0FFFF);        //先熄灭所有LED
  4.     temp = 0x0001;
  5.     for(i=0;i<4;i++)
  6.     {
  7.         GPIO_ResetBits(GPIOB,temp);     //向GPIOB口写控制码
  8.         Delay(100);
  9.         temp = (temp<<1)+1;            //temp左移一位加1获得下一控住码
  10.     }
  11.     temp = 0x0FE00;
  12.     for(j=0;j<4;j++)
  13.     {
  14.         GPIO_SetBits(GPIOB,temp);       //向GPIOB口写控制码
  15.         Delay(100);
  16.         temp = (temp>>1)+0x8000;       //右移一位加0x8000获得下一控住码
  17.     }

  18. }
复制代码


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

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


收藏 评论0 发布时间:2022-5-25 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版