基于Proteus的ARM7 LPC21XX学习笔记三、GPIO输出实例

来源:互联网 发布:91论坛邀请码淘宝 编辑:程序博客网 时间:2024/04/29 10:17
呵呵,真是越来越懒了,隔了这么长时间才来更新。
前面学习了如何基于MDK和proteus来建立ARM7的学习环境。今天我们就来实际演练一把,学习一下如何控制LPC2124的GPIO执行输出操作。
1、实例功能:使用LPC2124的P1.18-P1.25这8个端口,控制8个LED实现一系列的LED亮灭实验。
2、先来了解一下LPC2124的GPIO的一些功能。
LPC2124的64脚封装最多可以有46个GPIO。GPIO的特性有
  • 单独的方向控制位
  • 单独控制的置位和清零
  • 所有I/O在复位后默认为输入

GPIO的控制寄存器有:

  • 管脚值寄存器IOxPIN
  • 输出置位寄存器IOxSET
  • 输出清零寄存器IOxCLR
  • 方向寄存器IOxDIR
LPC2124的引脚一般是多个功能复用的,可以通过引脚连接模块在多个功能之间进行选择。引脚连接模块通过配置寄存器控制多路开关来连接引脚和片内外设(寄存器PINSELx)。
引脚连接模块的用途是将引脚设置为需要的功能,可实现独立的引脚配置。
外设在激活和任何相关中断使能之前,必须连接到适当的引脚。
引脚连接模块包含三个寄存器,分别是PINSEL0,PINSEL1,PINSEL2,其中PINSEL0,PINSEL1这两个寄存器控制P0口。PINSEL2控制P1口。
例如,要设置P0.0为GPIO功能,则应进行如下设置:
PINSEL0=PINSEL0&0xFFFFFFFC,这样P0.0只能作为GPIO使用,不能用作其它功能。
所以,GPIO的一般操作步骤是:
先通过PINSELx寄存器,将端口设置为GPIO功能,然后通过IOxDIR寄存器,选择GPIO是作为输入还是输出口。如果作为输入口,那么可以通过IOxPIN读出端口的值。如果作为输出口,则可以通过IOxSET,IOxCLR设置端口输出高电平还是低电平
3、通过MDK建立一个GPIO项目工程
#include <lpc21xx.h>
#define uint8 unsigned char
#define uint16 unsigend short
#define uint32 unsigned int
const  uint32 LED8 = (0xff << 18);  //8个LED分别连接到P1.25-P1.18
/******************
延时函数
***************************/
void delayms(uint32 delay)
{
  uint32 i;
for(;delay > 0;delay--)
  for(i = 0;i < 5000;i++);
}
/********************
  流水灯花样,
************************/
const uint32 LED_TBL[] = {
0x00,0xff,            //全部熄灭然后全部点亮
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,    //依次逐个点亮
0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,    //依次逐个叠加点亮
0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,   //依次逐个递减点亮
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,   //两个靠拢后分开
0x81,0xc3,0xe7,0xff,0xff,0xe7,0xc3,0x81,   //从两边叠加后递减
};
/***************************
主程序
*****************************/
int main(void)
{
uint8 i;
PINSEL2 = PINSEL2 & (~0x80);   //设置P1.25-P1.18为GPIO模式
IO1DIR = LED8;       //设置为输出口
while(1)        //
{
   for(i = 0;i < 42;i++)
  {
    IO1SET =  ~((LED_TBL[i]) << 18);   //低电平点亮LED
   delayms(100);        //
   IO1CLR = (LED_TBL[i]) << 18;  //
   delayms(100);
  }
}
}
4、在proteus环境下建立实验电路
需要说明的是,由于LPC2124的端口输入电流推荐是4mA,所以需要将LED的属性修改如下:驱动电压1.7V,电流4mA。
5、观察仿真效果