|
楼主 |
发表于 2010-9-28 08:46:10
|
显示全部楼层
贴点代码,不然很空洞的,呵呵!
5.1实验1—4LED跑马灯1
本实验使用连接在P2口上的4个LED灯实现跑马灯的效果。由于LED是采用灌电流方式设计的,所以当P2.0输出低电平时第一个LED灯亮。本实验设计的编程有系统初始化、通用IO口的初始化、系统软延时和通用IO口的输出等。
首先如第3章所述建立一个工程并且设置好工程。在Project里面新建一个组,命名为Source(本实验的所有代码、包括头文件都放在这里),新建一个main.c文件,添加进Source组。在main.c中添加如下代码:
#include "lpc17xx.h" // 包含头文件,头文件内保护系统初始化头文件
void delay(void)
//软延时函数,大工程中不建议使用,占用系统资源,
{ //M3有系统节拍定时器,可以达到效果
uint32_t j;
for(j = 3000000; j > 0; j--);
}
int main(void)
{
uint32_t i=0; //定义变量
SystemInit(); //系统初始化函数
LPC_SC->PCONP|=(1<<15);
//功耗控制,此处可以注释掉,因为复位后GPIO默认开启
LPC_GPIO2->FIODIR=0x0000000F; //FIODIR设置端口的输入输出
LPC_GPIO2->FIOSET=0x0000000F;
//GPIO置位,当某位为1则置位,为0不变
while(1)
{
for(i = 0; i < 4; i++)
{
LPC_GPIO2->FIOCLR = 1 << i;
//GPIO清零,为1清零,为0不变
delay();
}
LPC_GPIO2->FIOSET=0x0000000F;
delay();
}
}
配置keil工程的选项,选择生成HEX,配置仿真器jlink。
在Source组里添加system_LPC17xx.c和core_cm3.c(由于系统初始化函数在system_LPC17xx.c中定义,要调用该函数则要访问system_LPC17xx.c,访问方式有2中一是工程中调用该文件对应的.h文件然后在工程中添加.c文件,二是在工程中将.h和.c文件都调用)。编译,没有错误,下载到目标板上,可以看出4个LED灯依次被点亮,然后熄灭,然后接着被依次点亮,循环。在程序中所偶寄存器的访问都是基于结构体的,如FIODIR是GPIO的输入输出配置寄存器,访问的时候要按结构体方式访问,若要访问P1口则有LPC_GPIO1->FIODIR=0x00000000;由于PCONP在LPC_SC结构体定义的所以访问时需要LPC_SC->PCONP;结构体的定义都是按照功能定义在LPC17xx.h里的,不明白的查看一下。
注:需要将LED闪烁改成一个LED依次点亮,可以将:
LPC_GPIO2->FIOCLR = 1 << i;
修改成:
LPC_GPIO2->FIOPIN =~( 1 << i); |
|