- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式计算系统实验:一
学院: 计算机与通信工程
专业: 物联网工程
实验一 I/O,Timer
一、实验目的
1. 掌握通过IARforARM开发嵌入式程序的方法。
2. 掌握对I/O管脚以及Timer的控制。
二、实验内容
①通过I/O管脚控制LED灯闪烁方式
查看01bsp_leds_debug工程下application目录中的01bsp_leds.c文件。结合运行结果了解代码如何控制led灯的闪烁方式。
改写代码,调整led灯闪烁速率(delay)
改写代码,改变leds灯闪烁顺序。让leds灯按照红绿蓝黄的顺序一次亮灭,然后反顺序亮灭一次,依次循环。
红 绿 蓝 黄 蓝 绿 红 绿 蓝 黄 ….
改写代码,将leds闪烁顺序为: 红亮 绿灭 蓝亮 黄灭 (同时)红 灭 绿亮 蓝灭 黄亮(同时)…
②通过Timer控制LED灯模拟计数器
下载01bsp_timer-debug代码到openmotestm,查看代码效果
阅读01bsp_bsp_timer.c了解代码如何通过Timer控制LED灯的闪灭时间
改写代码,将红色灯的闪灭速度改成每秒2次
改写代码,对红色LED闪灭进行计时。当红色LED闪灭次数打到2次,点亮绿色LED灯,之后红色LED闪灭次数到2次的时候,灭掉绿色灯,点亮蓝色灯……
(用4钟LED灯表示4位二进制数,0位为红,1位为绿,2位为蓝,3位位为黄)
三、实验步骤
1. 实验名称
(1)实验接线图
(2)实验步骤和现象
代码控制LED灯的闪烁方式:
首先红灯亮,红灯灭,红灯状态反转(本代码中应该是灭),红灯闪烁16次
紧接着绿灯亮,绿灯灭,绿灯反转;然后同理,蓝灯和黄灯;然后四盏灯同时亮灭,然后进入轮转。
控制等的亮灭用到了GPIOC-ODR这个变量:
GPIOC-ODR |= 0X0008红灯亮; GPIOC-ODR = ~0X0008;红灯灭;GPIOC-ODR ^= 0X0008;红灯反转
【首先0x0008转换为二进制是:0000 0000 0000 1000
取或运算的时候红灯那一位为1,亮;当取反再与运算时,红灯那一位为0,灭;当和1000按位异或的时候,相当于反转】
GPIOC-ODR |= 0X0004;绿灯亮;GPIOC-ODR = ~0X0004;绿灯灭; GPIOC-ODR ^= 0X0004;绿灯反转
【0x0004转为二进制0000 0000 0000 0100】
GPIOB-ODR |= 0X0200;蓝灯亮 GPIO;B-ODR = ~0X0200; 蓝灯灭GPIOB-ODR ^= 0X0200;蓝灯反转
【二进制0000 0010 0000 0000】
GPIOB-ODR |= 0X0100; 黄灯亮GPIOB-ODR = ~0X0100; 黄灯灭GPIOB-ODR ^= 0X0100;黄灯反转
【二进制0000 0001 0000 0000】
GPIOC-ODR |= 0X000C;GPIOB-ODR |= 0X0300; 全亮
【C:0000 0000 0000 1100; B: 0000 0011 0000 0000】
GPIOC-ODR = ~0X000C;GPIOB-ODR = ~0X0300;全灭
GPIOC-ODR ^= 0X0008;在shift函数中用到
改写代码,调整led灯闪烁速率(delay):
代码中通过控制delay函数的delay值来修改闪烁间隔,因此修改delay函数即可:
将:
void some_delay(void) {
volatile uint16_t delay;
for (delay=0xffff;delay0;delay--);
}
修改为:
void some_delay(void) {
volatile uint16_t delay;
for (delay=0x00ff;delay0;delay--);
}
可使得闪烁速度变快
改写代码,改变leds灯闪烁顺序。让leds灯按照红绿蓝黄的顺序一次亮灭,然后反顺序亮灭一次,依次循环:红 绿 蓝 黄 蓝 绿 红 绿 蓝 黄 ….
将原来主函数中前几个单独控制闪灭的代码删除,在shift函数中修改,最终main函数中代码如下:
int mote_main(void) {uint8_t i;
board_init();
for (i=0;i9;i++) {
leds_circular_shift(); some_delay();
}
// reset the board, so the program starts running again
board_r
本人专注于k12教育,英语四级考试培训,本人是大学本科计算机专业毕业生,专注软件工程计算机专业,也可承接计算机专业的C语言程序设计,Java开发,Python程序开发。
文档评论(0)