重庆交通大学信息科学与工程学院
综合性设计性实验报告
专 业 班 级 : 电子信息工程2008级2班
学 生 姓 名 : 高 申 学号:08200204
实验项目名称: GPIO输入输出实验
实验项目性质: 设计性
实验所属课程: ARM嵌入式系统基础教程
实验室(中心): 现代电子实验中心
指 导 教 师 : 闫 果
实验完成时间: 2011 年 6 月 17 日
教师评阅意见:
签名: 年 月 日 实验成绩:
一、实验目的
1、巩固并加深学生对《ARM嵌入式系统基础教程》理论知识的理解; 2、培养学生编写ARM程序的能力;
3、进一步熟悉和应用ADS 1.2集成开发环境及ARMulator软件仿真;
4、进一步熟悉LPC2000系列ARM7微控制器的GPIO控制及使用GPIO的输入模式读取开关信号
二、实验内容及要求
以GPIO的输出控制实验和GPIO输入实验为基础,读取P0.20口上的电平值,然后将读到的值通过GPIO输出,控制蜂鸣器和8个LED流水灯显示,要求有自己的流水灯点亮方式和扬声器鸣叫方式。
三、实验原理
P0.20口设置为输入模式时,口线内部无上拉电阻,当与按键或跳线器连接使用时需要外接上拉电阻,防止口线悬空,如图①所示。
图① 按键连接电路
1
如图②所示,短接MagicARM2200-S教学实验开发平台上LED跳线JP5。
图② LED连接电路
四、实验设备及软件
●硬件:PC机
一台 一套
MagicARM2200-S教学实验开发平台
●软件:Windows98/XP/2000系统,ADS 1.2集成开发环境
五、实验过程及原始记录
(1)启动 ADS 1.2,使用 ARM Executable Image for MagicARM2200 工程模板建 一个工程 gaoshen。
(2)在 user 组中的 main.c 中编写主程序代码。 (3)选用 DebugInExram 生成目标,然后编译链接工程。
(4)选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
(5)单步运行程序,通过 LED1~LED8 的显示以及扬声器判断结果是否正确。 (6)全速运行程序,观察 LED1~LED8 的显示和扬声器的鸣叫。
实验代码为: #include \"config.h\"
#define LEDCON 0x00ff0000 //P1.16~P1.23引脚控制LED1~LED8 #define BEEPCON 1<<7 // P0.7 引脚控制B1,低电平蜂鸣 #define KEY 1<<20 // 定义按键
const uint32 DISP_TAB1[8] = {0xff80ffff,0xff01ffff,0xff40ffff,0xff02ffff,
2
0xff20ffff,0xff04ffff,0xff10ffff,0xff08ffff}; const uint32 DISP_TAB2[8] = {0xff01ffff,0xff02ffff,0xff04ffff,0xff08ffff, 0xff10ffff,0xff20ffff,0xff40ffff,0xff80ffff}; void DelayNS(uint32 dly) //延时函数 {
uint32 i; for(;dly>0;dly--) {
for(i=0;i<5000;i++) { ; } } }
int main(void) //主函数 {
Uint8 i; uint32 t = 10;
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IO0DIR = BEEPCON; // 设置B1 控制口为输出,其它I/O 为输入 PINSEL1 = 0x00000000; // 设置管脚连接GPIO IO1DIR = LEDCON; //配置LED控制I/O方向 while(1) {
if( (IO0PIN&KEY)!=0 ) //按键没有按下 {
IO0SET = BEEPCON; //扬声器不叫 IO1SET = 0xffffffff; //LED全灭 }
Else //按键按下 {
for(i=0;i<8;i++) {
3
IO1CLR = DISP_TAB1[i]; //输出LED显示方式1数据 IO0CLR = BEEPCON; //扬声器叫 DelayNS(t); //延时 IO1SET = 0xffffffff; // LED全灭 IO0SET = BEEPCON; //扬声器不叫 DelayNS(t); //延时 t += 10; //增加延时时间 } t = 10; for(i=0;i<8;i++) {
IO1CLR = DISP_TAB2[i]; IO0CLR = BEEPCON; DelayNS(t); IO1SET = 0xffffffff; IO0SET = BEEPCON; DelayNS(t); t += 10; } t = 10; for(i=0;i<3;i++) {
IO1CLR = 0xffffffff; IO0CLR = BEEPCON; DelayNS(50); IO1SET = 0xffffffff; IO0SET = BEEPCON; DelayNS(50); } } } return(0); }
4
//输出LED显示方式2数据 //扬声器叫 //延时 // LED全灭 //扬声器不叫 //LED全亮 //扬声器叫 //延时 //LED全灭 //扬声器不叫 //延时 六、实验结果及分析
实验结果为:当按下按键后,LED灯按照1、8、2、7、3、6、4、5的顺序逐个点亮,同时扬声器鸣叫,延时时间逐渐变长;然后LED灯按照1、2、3、4、5、6、7、8的顺序逐个点亮,同时扬声器鸣叫,延时时间逐渐变长;最后8个LED灯同时闪烁三次,扬声器也鸣叫三次。
实验结果与程序中的设计完全一致,实现了按键控制LED流水灯和扬声器的功能,扬声器鸣叫时间有变化,本次实验设计成功。
七、实验体会
本次实验要求我们通过自己的设计实现简单的GPIO输入输出控制功能,刚看到这个题目的时候,感觉这和单片机设计没什么区别,真正去做的时候还是遇到了一些小困难,因为我们对ARM编程的实践操作太少,对ARM的很多指令和编程方式还不熟悉。通过查阅资料、与同学讨论以及自己的尝试,最后终于了解了实验的原理,设计出了自己的方案。
这次实验比较简单,本质上和我们学过的单片机是一样的,我们只需要熟悉ARM的指令和操作方式,再结合以前的编程思想,就可以很容易的实现要求了。
不过设计过程中,我还是发现了自己的一些缺点,由于轻视简单的问题,以至于我忽略了有些细节,造成了功能上的欠缺,演示之后才发现。这教育我做任何事都要一丝不苟,严谨对待,细节往往能够是决定成败。同时我们看到自己设计的成果,心里挺开心的,也加深了对该学科的兴趣,动手实践对学习是有很大帮助的。
5
因篇幅问题不能全部显示,请点此查看更多更全内容