嵌入式系统实验1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统原理及应用实验一

【实验项目】GPIO实验——LED及按键

姓名:

班级:

学号:

【实验目的】

1、熟悉KEIL4嵌入式开发环境以及Proteus仿真环境;

2、了解ARM7 LPC2138虚拟开发板上各个器件;

3、掌握LPC2138的GPIO配置及使用方法。

【实验设备】

硬件:PC机一台。

软件:Keil uVision集成开发环境,Proteus仿真软件,LPC2138.DSN仿真电路图文件。

【实验原理】

1. LED电路

观察图1所示的LED驱动电路,当LPC2138单片机的GPIO口P0.8~P0.15输出为低电平时,LED D1~D8点亮。

图1. LED驱动电路

2. 按键电路

观察图2所示的按键接口电路,当按键K1~K6按下时,LPC2138单片机的GPIO口P0.16~P0.21为低电平。

R4

【实验内容】

项目1. 循环“点亮-熄灭”LED D1;

项目2. 按键K1控制LED D1的点亮和熄灭;

项目3. 以流水灯方式点亮LED D1~D8;

项目4. 按下按键K1改变LED D1~D8的流水方向。

【实验步骤】

项目1. 循环“点亮-熄灭”LED D1;

1. 建立一个新的keil工程;

(1)在D盘(或其它盘)根目录下新建一个以你学号为名的文件夹,并在其下创建“exp1”文件夹,在“exp1”文件夹下创建“exp1_1”子文件夹。

(2)新建一个新keil工程,名称为“exp1_1”,路径为“exp1_1”子文件夹。

(3)CPU型号选择为“NXP”中的“LPC2138”。

(4)开发环境询问是否将“启动代码”复制到工程中,点击“是”。

(5)将“添加文件”文件夹中的Config.h,Target.c,Target.h以及Deal_err.h复制到工程文件夹中(“exp1_1\”),并添加到工程。

(6)新建main.c文件,并添加至工程。

(7)在main文件开头包含相应的头文件:

(8)修改“目标选项(Target Option)”:

在“输出(Output)”选项卡里,勾选“生成十六进制文件(Create Hex File)”。

2. 配置LED D1对应的GPIO引脚P0.8,代码为:

3. 实现P0.8输出反转,代码为:

4. 延时函数代码为:

5. 点击“构建(Build)”,产生十六进制可执行文件。

6. 在Proteus中打开LPC2138.DSN仿真电路图文件,双击LPC2138器件。在对话框的“程序文件(Program File)”栏里选择上一步生成的十六进制Hex文件,并将时钟频率修改为“12MHz”

7. 运行仿真,观察并记录实验现象。

项目2. 按键K1控制LED D1的点亮和熄灭;

1. 新建Keil工程“exp1_2”。

2. 配置LED D1对应的GPIO引脚P0.8。

3. 配置按键K1对应的GPIO引脚P0.16,代码为:

4. 当K1按下时,点亮D1;K1松开时,熄灭D1:

5. 生成十六进制文件,在Proteus中观察并记录实验结果。项目3. 以流水灯方式点亮LED D1~D8;

1. 新建Keil工程“exp1_3”。

2. 配置LED D1~D8对应的引脚,代码为

4. LED D1~D8流水点亮的代码为:

5. 生成十六进制文件,在Proteus中观察并记录实验结果。

项目4. 按下按键K1改变LED D1~D8的流水方向。

1. 新建Keil工程“exp1_4”。

2. 自己编写main.c文件。附上你的main.c中的所有代码:#include

#include "Config.h"

void delay (uint32 dly)

{

uint32 i;

for ( ; dly>0; dly--)

for (i=0; i

}

void main()

{

int i=8; //利用i来改变点亮的灯

char c=0; //定义一个流水方向的变量PINSEL0 = 0; //使0号IO为GPIO

IO0DIR = 0xff00; //点亮8个led灯

IO0SET = 0xff<<8; //熄灭8个led灯

while (1)

{

if((IO0PIN&0x10000) == 0)//如果按下键,换流水方向

{

if(c==0)

c=1;

else

c=0;

delay(30); //延时保持

}

IO0CLR = 1<

delay(50); //保持

IO0SET = 1<

if(c==0) / /如果c=0则流水方向为从d1到d8

{

i++; //点亮下一个led

if(i == 16) i = 8; //如果已经都点亮过复位到d1 }

Else //如果c不等于0,流水方向为d8到d1

{

i--; //点亮上一个led灯

if(i == 7) i = 15; //如果都已经点亮过复位到d8 }

}

}

5. 生成十六进制文件,在Proteus中观察并记录实验结果。

【实验结果】

项目1的实验结果:

D1不断闪烁

项目2的实验结果:

K1按下时,D1亮;K1松开时,D1熄灭

相关文档
最新文档