基于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
#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++);
}
延时函数
***************************/
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, //从两边叠加后递减
};
流水灯花样,
************************/
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; //设置为输出口
主程序
*****************************/
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);
}
}
}
{
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、观察仿真效果
- 基于Proteus的ARM7 LPC21XX学习笔记三、GPIO输出实例
- 基于Proteus的ARM7 LPC21XX学习笔记二、在proteus 7.7 sp2下新建一个电路仿真文件
- 基于Proteus的ARM7 LPC21XX学习笔记一、在Realview MDK 4.12下新建一个项目文件
- arm7 lpc21XX系列的IAP应用实例
- ARM7学习笔记——GPIO
- 关于proteus仿真arm7实例出现错误的问题
- 基于proteus的51单片机仿真实例二、关于proteus
- 基于proteus的51单片机仿真实例四十三、C语言的字符串数组演示实例
- 基于proteus的51单片机仿真实例三、新建一个keil c51工程
- 【ARM学习笔记】实验一:S3C2440A的GPIO输出实验
- 基于proteus的51单片机仿真实例四、第一个proteus仿真实例
- 基于proteus的51单片机仿真实例五、第一个proteus仿真实例(续)
- ARM7学习笔记
- 基于proteus的51单片机仿真实例七、关于proteus和keil c51的联调
- 基于proteus的51单片机仿真实例八、关于proteus常用操作的补充说明
- GD32F130FXP6学习笔记三:ARM的GPIO初识
- 基于 KEIL C51和 proteus的 C51汇编程序设计实例
- 基于proteus的51单片机仿真实例一、说明
- 河海大学X-GIS研究组开博辞
- 1948-2006:哈佛大学地理系的灭亡与地理学的重生
- SQL 获取汉字笔画数
- 基于Proteus的ARM7 LPC21XX学习笔记一、在Realview MDK 4.12下新建一个项目文件
- 基于Proteus的ARM7 LPC21XX学习笔记二、在proteus 7.7 sp2下新建一个电路仿真文件
- 基于Proteus的ARM7 LPC21XX学习笔记三、GPIO输出实例
- Read the value of a cookie in Jmeter
- AForge 使用 Grayscale 功能 (C#)
- 檢查字串是否僅包含數值
- SortedSet<T> 類別範例
- 拍婚纱照
- 程式使用多個 Timer 控制項注意事項
- 贺双节,签名版限量特惠
- AForge.NET IterativeThreshold (C#)