- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如有侵权请联系网站删除,仅供学习交流
如有侵权请联系网站删除,仅供学习交流
仅供学习交流
仅供学习交流
嵌入式课程设计流水灯
流水灯编程
实验目的:
掌握GPIO端口的基本控制方法
掌握硬件电路仿真方法。
实验内容:
.复习流水灯的工作原理。
.按教材上3. 4节的内容或实验指导书2.1节的内容创建好项 目,生成可执行文件。
.阅读LED示例程序代码。
.软件模拟,无误后下载到实验板上运行,观察效果。
.通过硬件仿真的方式调试程序。分析LED_Init、main这2个 函数中每一行代码的作用。
.修改程序使得灯改变一次状态的时间间隔为0. 02、0. 01、
0. 1、0. 3、0. 5、1、2 秒。
.修改程序使得灯闪动的方向反向。
.修改循环亮灯的程序,使每次亮灯的起始位置依次下移。
选做进阶版
.用左边4个灯闪烁代表绿灯,右边4个灯闪烁代表红灯,8个 灯全亮代表黄灯。模拟交通信号灯运行(绿灯10秒,红灯20 秒,绿到红过渡时黄灯3秒)
.将自己的学号编码用LED灯效果展示出来。
实验原理:
电路中有LO, LI, L2, L3, L4, L5, L6, L7共八个发光二极管,当引脚 LED_SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入 为1,则点亮相连接的发光二极管。
A~H引脚连接STM32F108VB芯片的PE8?PE15,程序初始化时,对 其进行初始设置。引脚LED_SEL为1时,发光二极管才工作,否则 右边的数码管工作。注意,LED_SEL连接于PB3,该引脚具有复用功 能,在默认状态下,该引脚的10不可用,需对AFI0_MAPR寄存器进 行设置,设置其为10可用。
实验过程及结果描述:
按实验内容的步骤一步一步的来。重点描述实验内容的6、 7、8还有选修进阶的1、2.
要实现改变灯状态的时间间隔,只需改变delay_ms这函数的里 面的参数即可,例如时间间隔改为0. 02秒就将参数改为20,1秒就 将参数改为1000, (delay_ms()函数里面参数的单位为ms)其它以此 类推。
通过参数的改变可以看到灯状态改变的时延相应的改变了。
改变灯的闪动方向则将light左移或者右移位数的值赋给 light,例如循环一次左移一位,则light=lightl,右移则是 light=light〉l;这里又涉及到当左移(右移)到最左(右)一位 时,再次亮灯时的起始位置设置的问题,这里就可以设置当左移 (右移)到最左(最右),设置一个判断语句当左移(右移)到左(右) 端点时,将初始值赋给题目要求的位置即可。
实验结果:灯的移动方向改变。每次循环完一次之后通过改变赋给初 始亮的灯的值可以实现灯初始位置的下移。
红绿灯的实现,就是实现左边四盏灯、右边四盏灯、八盏灯按先 后次序以及相对应的时延实现全亮。这里主要是理解GPIOE-ODR |= (light8);light=light?l;这两段代码的意思。GPIOE-ODR 高八位有效,通过左移或者右移位数的次数来实现同时点亮哪几盏 灯。比如同时点亮左边四盏,将最左边的灯的值赋给light,然后 添加四个 GPIOE-ODR = (light8) ;light二语句就可以 实现左边四盏灯同时亮的效果。通过设置delay_ms()函数里面的参 数可以实现四盏灯亮多长时间的效果,同样的思路可以实现右边四 盏灯和八盏灯全亮。
最后是学号的LED实现。因为学号的显示在数码管的实验中有更 好的实现,这里只描述简单的数字显示。主要的思路就是将学号存 在一个数组里面,然后每一位学号对应一个数码管显示。
问题及解决:
最初在移位时出了一点问题。比如从左移改为右移时没有更改初 始亮灯的位置,所以之后出现灯不亮的情况。
做这个题目时,看到有些同学做红绿灯这一块,有些同学是实现 常亮(不闪烁),有些同学实现这个有灯光闪烁的效果。于是自己 也想实现一下。总的来说,这个题目难度不是很大,但是要做好还 是要动点,所以在如何实现灯常亮或者闪烁这个问题上出了一点问 题。在灯进入循环时,例如实现左边四盏灯亮时,每一个循环最后 加一个GPIOE-ODR 二?(0xff8);即最后将其高八位置零,之后 再进入循环时就会出现闪烁的效果。
总结:
这个题目在完成基本要求的同时,完成了两个选修进阶项。在 实验的过程中有点粗心,比如移位的时候没有改初试亮灯的位置以 及当灯到两端的时候没有改再次亮灯的初始位置,以致于在一次循 环之后灯就不亮了。一个小小的收获就是在红绿灯的实现时实现了 两种效果一种是常亮的效果,另一种是闪烁的效果。
参考资料:
《STM32中文参考手册_V10 STM32F10xxx参考手册》
《ARM Cortex-M3权威指南(中文版)》
《流水灯说明书》
原创力文档


文档评论(0)