一:实验名称:四位流水灯
二:实验内容
实现四位流水灯的循环闪烁
三:实验目的
1:掌握LED硬件电路
2:掌握KL25 GPIO模块输出的寄存器配置方法
3: 掌握四位流水灯循环闪烁的编程方法
四:实验方法
1:查阅该部分的电路图
发现KL25的PTB8、PTB9、PTB10、PTB11引脚分别控制着D6、D7、D8、D9四个LED发光二极管。
file:///C:\Users\AA\AppData\Local\Temp\ksohtml\wps_clip_image-3968.png
2:对GPIO模块的相应寄存器进行配置
(1) 查阅KL25 Reference Manual 122页发现GPIO由Platform clock提供时钟。
(2) 将Platform clock时钟和POTRB模块接通,编程如下:
SIM_SCGC5=SIM_SCGC5_PORTB_MASK;//可查阅SIM_SCGC5寄存器
(3) 设置复用引脚属性,将PTB8、PTB9、PTB10、PTB11配置为GPIO功能,编程如下:
PORTB_PCR8=PORT_PCR_MUX(1);
PORTB_PCR9=PORT_PCR_MUX(1);
PORTB_PCR10=PORT_PCR_MUX(1);
PORTB_PCR11=PORT_PCR_MUX(1);
// 可查阅PORTx_PCRn寄存器和KL25 Data Sheet 46页进行相关的了解
(4)设置引脚输入输出方向,将PTB8、PTB9、PTB10、PTB11设置成输出,编程如下:
GPIOB_PDDR=GPIO_PDDR_PDD(0x00000f00u);//可查阅GPIOx_PDDR寄存器
(5)设置引脚输出逻辑电平,将PTB8、PTB9、PTB10、PTB11设置输出高电平,编程如下:
GPIOB_PDOR=GPIO_PDOR_PDO(0x00000f00u); //可查阅GPIOx_PDOR寄存器
3:实现四位流水灯的循环闪烁
查阅例程主函数里面的相应程序/*
***********************************************************
*file name : main.c
*function: function for main
*
***********************************************************
*/
#include "derivative.h"
#include "config.h"
#include "crg.h"
#include "gpio.h"
/******************************主函数*************************************/
int main(void)
{
asm(" CPSID i");//关总中断
crg_default_init();//系统默认时钟
//crg_configuration_init();//配置之后的时钟
MCGIRCLK_outenable();//使能MCGIRCLK输出2M
clock_test(4);//相应时钟的测试
gpio_init();//GPIO初始化
asm(" CPSIE i");//开总中断
for(;;)
{
GPIOB_PDOR=GPIO_PDOR_PDO(0x00000100u);//PTB8输出高电平 ,D6LED灯亮
delayms(15000);//延时
GPIOB_PDOR=GPIO_PDOR_PDO(0x00000200u);//PTB9输出高电平 ,D7LED灯亮
delayms(15000);//延时
GPIOB_PDOR=GPIO_PDOR_PDO(0x00000400u);//PTB10输出高电平 ,D8LED灯亮
delayms(15000);//延时
GPIOB_PDOR=GPIO_PDOR_PDO(0x00000800u);//PTB11输出高电平 ,D9LED灯亮
delayms(15000);//延时
}
}