STM32单片机仿真开发实例 课件 3.3 流水灯之软件延时_第1页
STM32单片机仿真开发实例 课件 3.3 流水灯之软件延时_第2页
STM32单片机仿真开发实例 课件 3.3 流水灯之软件延时_第3页
STM32单片机仿真开发实例 课件 3.3 流水灯之软件延时_第4页
STM32单片机仿真开发实例 课件 3.3 流水灯之软件延时_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.3流水灯之软件延时能力目标:理解并掌握通过改进算法提高编程效率的方法。任务要求:

电路如图所示,要求实现流水灯效果,即按LED0~LED7的顺序依次点亮,每次仅限一只LED发光,周期4秒。3.3.1程序算法

算法(Algorithm)是指解决方案准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。首先人们自然会想到“位操作法”,但这种算法编程效率太低,下面介绍两种比较好的算法:⑴查表法

即将8个状态,定义为8个字节,每隔一段时间,按先后顺序查表并将8个状态量赋值给单片机的规定输出口,状态表如下。序号状态字节(二进制)状态字节(十六进制)序号状态字节(二进制)状态字节(十六进制)11111,1110FE51110,1111EF21111,1101FD61101,1111DF31111,1011FB71011,1111BF41111,0111F780111,11117F⑵移位法所谓移位法,就是利用C语言的移位运算符“<<”、“>>”实现状态字节的循环移位。但由于C语言的移位运算符只能实现单向移位,因此必须通过一定的算法来间接实现,具体的做法是:假设M位数据A需要循环左移N位(M>N),先将A左移N位得到B,再将A右移(M-N)位得到C,最后将A、B按位求或运算即可获得最终结果。比如,8位二进制数,各位均用字母表示为“ABCDEFGH”,需要循环左移3位,可先将原数左移3位,得到“DEFGH000”,再将原数右移5位,得到“00000ABC”,最后将两数按位或即可得到循环左移3位的结果“DEFGHABC”,示意如下。①ABCDEFGH<<3→DEFGH000②ABCDEFGH>>5→00000ABC③DEFGH000|00000ABC

→DEFGHABC3.3.2任务程序的编写

本次任务程序将根据位操作法、查表法与移位法三种方法编写,需要用到的新的API函数:

①引脚输出函数HAL_GPIO_WritePin

新版HAL库改为:GPIO_PIN_RESETGPIO_PIN_SET

例程:今天我们要对若干个引脚一起输出相同的电平值,比如

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);//PC0输出低电平HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);//PC0输出高电平HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_5,GPIO_PIN_RESET);//PC0、PC2、PC5三个引脚同时输出低电平或者也可以使用LL库函数,但LL库与HAL库(默认)不能同时使用,且必须在STM32CubeIDE“ProjectManager=>AdvancedSetting”中进行修改。

②引脚输出函数LL_GPIO_WriteOutputPort(推荐)

例程:LL_GPIO_WriteOutputPort(GPIOC,0x00000009);//除了PC0、PC3输出高电平,PC口其余引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论