资源描述
实验二 IO口实现LED灯闪烁
一、实验目的:
1. 正确安装keil软件
2. 正确安装调试驱动,熟悉实验板的用法
3. 学习IO口的使用方法。
二、实验设备:
单片机开发板、学生自带笔记本电脑
三、 实验内容:
利用单片机IO口做输出,接发光二极管,编写程序,使发光二极管按照要求点亮。
四、实验原理:
1. LPC1114一共有42个GPIO,分为4个端口,P0、P1、P2口都是12位的宽度,引脚从Px.0~Px.11,P3口是6位的宽度,引脚从P3.0~P3.5。引脚的内部构造如图所示。其中Rpu为上拉电阻、Rpd为下拉电阻。
2. 为了节省芯片的空间和引脚的数目,LPC1100系列微处理器的大多数引脚都采用功能复用方式,用户在使用某个外设的时候,要先设置引脚。控制引脚设置的寄存器称之为IO配置寄存器,每个端口管脚PIOn_m都分配一个了一个IO配置寄存器IOCON_PIOn_m,以控制管脚功能和电气特性。
3. IOCON_PIOn_m寄存器其位域定义如表所列。
位域
符号
描述
2:0
FUNC
选择管脚功能
000:选择功能1
001:选择功能2(如果未定义功能2,则保留)
010:选择功能3(如果未定义功能3,则保留)
011:选择功能4(如果未定义功能4,则保留)
100~111:保留
4:3
MODE
选择功能模式(片内上拉/下拉电阻控制)
00:无效模式(无上拉和下拉电阻被允许)
01:允许下拉电阻
10:允许上拉电阻
11:中继模式
5
HYS
滞后模式
1:禁止
0:允许
6
-
保留,复位值为1
7
ADMODE
选择 模拟/数字模式(无AD功能,则保留,复位值为1)
0:模拟输入模式
1:数字功能模式
9:8
I2CMODE
选择为I2C模式
00:标准I2C模式/快速I2C模式(默认)
01:标准I/O功能
10:FM+I2C模式
11:保留
31:8
-
保留,复位值为0
4. 各引脚IOCON寄存器的位[2:0]配置不同的值所相应功能。
5. GPIO寄存器
GPIO数据寄存器用于读取输入管脚的状态数据,或配置输出管脚的输出状态,表5-5对GPIOnDATA寄存器位进行描述。
位
符号
访问
描述
11:0
DATA
R/W
管脚PIOn_0~PIOn_11输入数据(读)或输出数据(写)
31:12
-
-
保留
GPIO的数据方向的设置是通过对GPIOnDIR寄存器的位进行与或操作实现的,LPC1100微处理器和8051单片机的GPIO不同,在使用前一定要先设置数据方向才能使用,
位
符号
访问
值
描述
11:0
IO
R/W
0
引脚PIOn_0~PIOn_11配置为输入
1
引脚PIOn_0~PIOn_11配置为输出
31:12
-
-
-
保留
6. 发光二级管的工作电压和工作电流如何?
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________。
7. 发光二极管的限流电阻如何计算?
__________________________________________________________________________。
五、实验原理图:
六、实验步骤:
一、基本要求
1、默写发光二极管闪烁程序。
二、扩展要求
1.查找关于呼吸灯的资料,弄懂呼吸灯工作原理。
2.自行编写呼吸灯代码,在实验板子上面验证。
七、程序框图:
八、供参考程序:
/*************************************************************************/
#include "LPC11XX.H" // 头文件
#define LED1_ON() (LPC_GPIO1->DATA &= ~(1<<0)) // 点亮连接到P1.0的LED
#define LED1_OFF() (LPC_GPIO1->DATA |= (1<<0)) // 熄灭连接到P1.0的LED
#define LED2_ON() (LPC_GPIO1->DATA &= ~(1<<1)) // 点亮连接到P1.1的LED
#define LED2_OFF() (LPC_GPIO1->DATA |= (1<<1)) // 熄灭连接到P1.1的LED
/**************************************************************************
* FunctionName : Delay()
* Description : 延时函数
* EntryParameter : None
* ReturnValue : None
**************************************************************************/
void Delay()
{
uint16_t i,j;
for(i=0;i<5000;i++)
for(j=0;j<200;j++);
}
/**************************************************************************
* FunctionName : LedInit()
* Description : 初始化LED引脚
* EntryParameter : None
* ReturnValue : None
**************************************************************************/
void LedInit(void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
LPC_IOCON->R_PIO1_0 &= ~0x07;
LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO
LPC_IOCON->R_PIO1_1 &= ~0x07;
LPC_IOCON->R_PIO1_1 |= 0x01; //把P1.1脚设置为GPIO
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_GPIO1->DIR |= (1<<0); // 把P1.0设置为输出引脚
LPC_GPIO1->DATA |= (1<<0); // 把P1.0设置为高电平
LPC_GPIO1->DIR |= (1<<1); // 把P1.1设置为输出引脚
LPC_GPIO1->DATA |= (1<<1); // 把P1.1设置为高电平
}
/**************************************************************************
* FunctionName : main()
* Description : 主函数
* EntryParameter : None
* ReturnValue : None
**********************************************************************/
int main(void)
{
LedInit();
while(1)
{
Delay();
LED1_ON();
LED2_OFF();
Delay();
LED1_OFF();
LED2_ON();
}
}
展开阅读全文