《嵌入式技术应用开发项目教程》项目2 跑马灯控制设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GPIO_AF_SEL(DIGITAL, PB, 1, 0); //设置PB1引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 2, 0); //设置PB2引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 3, 0); //设置PB3引脚是数字通道和GPIO功能
uint16_t temp, i;
void delay(unsigned int count)
//延时函数
{
unsigned int i;
for(;count!=0;count--)
{
i=5000;
while(i--);
}
}
int main()
{
GPIO_AF_SEL(DIGITAL, PB, 0, 0); //设置PB0引脚是数字通道和GPIO功能
3.LED循环点亮控制设计与实现
实施过程:
1.移植工程模板
复制“任务3 LED闪烁控制” 文件夹,然后然后修改文件夹 名为“任务4 LED循环点亮控 制”,USER文件夹下的M0_ LED.uvprojx工程名不用修改 。
2. LED循环点亮控制程序设计
#include <SC32F5832.h>
#include <GPIO.h>
GPIO_AF_SEL(DIGITAL, PB, 7, 0); //设置PB7引脚是数字通道和GPIO功能
PB->OUTEN|=0x00ff;
//PB0~PB7引脚输出使能,既设置PB0~PB7引脚为输出引脚
PB -> OUT = 0x00ff;
//PB0~PB7输出高电平,LED1~LED8熄灭
while(1)
4.程序下载调试,观察 现象
跑马灯控制设计
【技能训练2-1】 LED双向循环点亮控制
【技能训练2-1】LED双向循环点亮控制
1.任务描述
如何控制LED双向循环点亮?
【技能训练2-1】LED双向循环点亮控制
2.实现分析
思路:
(1)设置正向循环点亮的初始控制码:0x0001; (2)将控制码取反后从PB口输出,点亮一个LED; (3)延时一段时间; (4)将上一个控制码左移一位,获得下一个控制码; (5)重复第2步; (6)完成一次8个LED正向循环点亮后,设置反向循环点亮的初始控制码:0x0080 ; (7)将控制码取反后从PB口输出,点亮一个LED; (8)延时一段时间; (9)将上一个控制码右移一位,获得下一个控制码; (10)重复第7步; (11)完成一次8个LED双向循环点亮后,从第1步重新开始下一次LED双向循环点亮 。
1.培养精细设计理念; 2.理解世界是规律的这一特点,发展探索也要遵循规律; 3.培养阅读代码、编写功能代码的能力。
跑马灯控制设计
任务4 LED循环点亮控制
跑马灯控制设计 任务4 LED循环点亮控制
学习内容
任务4 LED循环点亮控制
1.任务描述
使用基引脚分别接8个LED的阴极,通过C语 言程序控制8个LED循环点亮。
跑马灯控制设计
教学目标
01
知识目标
1. 了解基于Cortex-M0的LK32T102单片机IO口寄存器; 2. 掌握LK32T102单片机IO口设置与操作; 3. 掌握嵌入式应用程序开发经常用到的C语言的define宏定义; 4. 会编写.c文件和.h头文件的设备文件。
02
技能目标
03
素质目标
能完成LED、蜂鸣器等设备的设备文件编写,能通过C语言的define宏定义完 成LK32T102单片机输出控制,实现对LED、蜂鸣器控制的设计、运行与调试 。
LK32T102单片机的IO口操作
1.认识LK32T102单片机的IO口寄存器
1) 引脚配置寄存器CFGx
针对“位4”的模拟通道使能位AEN和“位[2:0]”的 复用功能选择位FUNC,我们如何选择呢?在GPIO.h头 文件中,宏定义了选择数字通道的DIGITAL宏名,也声 明了GPIO引脚复用选择函数GPIO_AF_SEL()的原型。代 码如下:
3)LED循环点亮过程
总结实现过程:
(1)设置初始控制码为0x0001; (2)将控制码取反后从PB口输出,点亮一个LED; (3)延时一段时间; (4)将上一个控制码左移一位,获得下一个控制码; (5)重复第2步; (6)完成一次8个LED循环点亮后,从第1步重新开始下一次LED循环点亮。
任务4 LED循环点亮控制
GPIO_AF_SEL(DIGITAL, PB, 4, 0); //设置PB4引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 5, 0); //设置PB5引脚是数字通道和GPIO功能
GPIO_AF_SEL(DIGITAL, PB, 6, 0); //设置PB6引脚是数字通道和GPIO功能
rw rw
rw
18 17 16 FILT[1:0] rw rw
210 FUNC[2:0]
rw rw rw
引脚配置寄存器CFGx中的x取值为0~15,与I/O口的引脚号相 对应,即每个引脚对应一个引脚配置寄存器CFGx。
LK32T102单片机的IO口操作
1.认识LK32T102单片机的IO口寄存器
1) 引脚配置寄存器CFGx
引脚配置寄存器 CFGx
引脚输出使能寄存器 OUTEN
引脚设置寄存器 OUTSET
引脚清除寄存器 OUTCLR
引脚值翻转寄存器 OUTTGL
输出数据寄存器 OUT
输入数据寄存器 PIN
LK32T102单片机的IO口操作
1.认识LK32T102单片机的IO口寄存器
1) 引脚配置寄存器CFGx
LK32T102可以通过IO口引脚配置 寄存器CFGx对IO口进行配置,主 要是配置IO口引脚的上拉/下拉、 驱动能力、推挽和开漏、输入反 向、模拟和数字、斜率、输入滤 波、复用功能、IO口配置保护等 模式。引脚配置寄存器CFGx的各 位描述,如表2-1所示。
只要将控制码取反后从PB口输出,就能点亮相应的LED
任务4 LED循环点亮控制
2.LED循环点亮控制实现分析
2)如何获得LED循环点亮控制码
下一个控制码如何从上一个控制码获得呢?
先设置初始控制码为0x0001;然后把上一个控制码左移一位,即可获得下一个控制码
任务4 LED循环点亮控制
2.LED循环点亮控制实现分析
【技能训练2-1】LED双向循环点亮控制
3.关键设计步骤
LED双向循环点亮控制主 函数的while语句循环体
跑马灯控制设计
LK32T102单片机的IO口操作
跑马灯控制设计 LK32T102单片机的IO口操作
学习内容
LK32T102单片机的IO口操作
1.认识LK32T102单片机的IO口寄存器
{
temp = 0x0001;
//设置循环点亮的初始控制码0x0001
for(i=0;i<8;i++)
{
PB -> OUT = ~temp
//将初始控制码0x0001取反从PB口输出,点亮一个LED
delay(100);
temp = temp<<1;
//控制码左移一位,获得下一个控制码
}
}
}
3.工程编译
任务4 LED循环点亮控制
2.LED循环点亮控制实现分析
1)LED循环点亮功能分析
如何控制LK32T102单片机的PB0~PB7引脚输出高电平和低电平,实现LED循环点亮呢?
LED循环点亮电路LED采用的是共阳极接法,通过向引脚输出“0”和“1”来控制LED 的亮和灭。
例如:在PB口输出0x0fffe(11111111_11111110B),使PB0输出低电平“0”, LED1被点亮,代码如下:
(6)位8:输出斜率控制位SR。 0:快速;1:慢速。 (7)位[7:6]:上下拉电阻控制位PUPD,复用作模拟功能时无效。 00:上拉及下拉无效; 01:下拉; 10:上拉; 11;repeater模式,根据当前PAD的值自动设置上下拉:如果当前 PAD为高电平,则设置为上拉;如果当前PAD为低电平,则设置为下 拉。 (8)位4:模拟通道使能位AEN。 0:模拟通道关闭; 1:模拟通道开启,此时OUTEN(x)需要设置为“0”,FUNC需要 设置为“0”。 (9)位[2:0]:复用功能选择位FUNC。 000:选择功能0,默认为GPIO; 001~111:选择功能1~选择功能7。
#define DIGITAL (0<<4)
#define ANALOGY
(1<<4)
extern void GPIO_AF_SEL(uint8_t AD,PA_Type* GPIOx,uint8_t
gpiopin,uint8_t fun_num);
引脚复用选择函数GPIO_AF_SEL()是在GPIO.c文件中, 代码如下:
任务4 LED循环点亮控制
2.LED循环点亮控制实现分析
2)如何获得LED循环点亮控制码
(1)LED1点亮:GPIOB口输出0x0fffe,取反为0x0001,初始控制码为0x0001; (2)LED2点亮:GPIOB口输出0x0fffd,取反为0x0002,控制码为0x0002; (3)LED3点亮:GPIOB口输出0x0fffb,取反为0x0004,控制码为0x0004; (4)LED4点亮:GPIOB口输出0x0fff7,取反为0x0008,控制码为0x0008; (5)LED5点亮:GPIOB口输出0x0ffef,取反为0x0010,控制码为0x0010; (6)LED6点亮:GPIOB口输出0x0ffdf,取反为0x0020,控制码为0x0020; (7)LED7点亮:GPIOB口输出0x0ffbf,取反为0x0040,控制码为0x0040; (8)LED8点亮:GPIOB口输出0x0ff7f,取反为0x0080,控制码为0x0080; (9)重复第一步,这样就可以实现LED循环点亮。
CFGx描述如下:
(1)位[26:24]:是滤波时钟分频选择位CLKDIV。 000:GPIO时钟; 001~110:分别为GPIO时钟的2分频~7分频; 111:保留。 (2)位[17:16]:是输入滤波选择位FILT。 00:输入不滤波; 01:输入采用1个时钟的滤波器,不足1个时钟的脉冲被滤除; 10:输入采用2个时钟的滤波器,不足2个时钟的脉冲被滤除; 11:输入采用3个时钟的滤波器,不足3个时钟的脉冲被滤除。 (3)位15:反向输入选择位INV。 0:正向输入; 1:反向输入。 (4)位13:开漏模式使能位OD。 0:开漏模式无效;1:开漏模式开启。 (5)位10:驱动能力选择位DRV。 0:选择低驱动电流;1:选择高驱动电流。
嵌入式技术应用开发项目教程(微课版)
——跑马灯控制设计
跑马灯控制设计
项目导读
LED跑马灯是广告光源中的一种,它以自身的色彩跳动,能够快速抓住人们的眼球,可 以用于招牌装饰,数目亮化,造型装饰,建筑亮化,房屋装饰等。有些汽车的转向灯也是 跑马灯的形式,在转向车灯开关打开时,以绚丽柔和的方式提醒其他车辆或者行人,非常 友好,为打造文明礼貌社会贡献一份力量,也揭示了世界是有规律可循的道理。本项目从 LED循环点亮控制任务入手,首先让读者对LK32T102单片机的IO口寄存器有一个初步了 解;然后介绍IO口操作的define宏定义以及编写设备文件方法。通过基于define宏定义的 LED循环点亮设计和基于设备文件的声光跑马灯设计的设计与实现,让读者进一步掌握IO 口操作编程的方法。
CFGx描述
位 31 30 29 28 27 26 25 24
符号
保留
CLKDIV[2:0]
读写
rw rw rw
位 15 14 13 12 11 10 9 8
符号 INV 保留 OD 保留 保留 DRV 保留 SR
读写 rw
rw
rw
rw
23 22 21 20 19 保留
7 6543
PUPD[1:0] 保留 AEN 保留
LK32T102单片机的IO口操作
1.认识LK32T102单片机的IO口寄存器
2) 引脚输出使能寄存器OUTEN
设置IO引脚的输入输出方向,是通过引脚输出使能寄存器OUTEN来完成的。OUTEN 是1个32位的引脚输出使能寄存器,只用了低16位,该高16位保留。该寄存器的各位 描述,如下表所示
PB -> OUT =0x0fffe;
//PB0输出低电平“0”,其它位输出高电平“1”
又如:在PB口输出0x0ffef(11111111_11101111B),则PB4输出高电平 “0”,LED4被点亮,代码如下:
PB -> OUT =0x0ffef;
//PB4输出低电平“0”,其它位输出高电平“1”
相关文档
最新文档