流水灯实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级学号姓名同组人
实验日期室温大气压成绩
流水灯改进
一、实验目的
1、熟悉和掌握ADS集成开发环境及EasyJTAG仿真器的使用;
2、掌握流水灯实验程序的内容;
3、掌握EasyARM72131开发板的具体结构和器件的分布;
4、掌握对原程序进行一定的修改,达到熟练掌握程序编写的目的。
二、实验原理
GPIO概述
LPC2131具有多达47个通用I/O口,分别为P0[31:0]、P1[31:16],其中,P0.24未用,P0.31仅为输出口。由于口线与其他功能复用,因而需要进行相关的管脚连接模块(PINSEL0、PINSEL1、PINSEL2)选择连接GPIO,然后通过IODIR进行输入、输出属性设置后才能操作。
当管脚选择GPIO功能时,有3个寄存器用于控制GPIO的使用,IOSET、IOCLR和IOPTN。IOSET用于口线置1,而IOCLR则用于口线清零,IOPIN则反映当前IO口的状态,读回IOSET则反映当前
IO口设定状态。
特性
●单个位的方向控制;
●单独控制输出的置位和清零;
●所有I/O口在复位后默认为输入。
EasyARM72131开发板上的8路LED(LED8~LED1)分别可选择P1[25:18]进行控制,电路如图4.12所示。
当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。流水灯显示花样可以通过数组人为定义,也可以通过一定的算法计算。程序清单一所示为采用人为定义
数组控制显示花样的实验程序,流程图如图1所示。
(图1)
三、实验器材
装有ADS的电脑一台、EasyARM2131开发板。
四、实验内容及步骤
1、连接EasyARM2131开发板与电脑之间的连接线,检查是否接好(power显示灯会亮);
2、打开电脑,运行EasyJTAG仿真器,并进行相应的调节(选择LPC2138),通过check检查是否与电脑之间可以传输数据;
3、找到实验程序所在的位置,在软件中打开所要运行的程序,并对其进行仿真操作(犹豫电脑原因运行时需要两次操作才能进行仿真);
4、观察仿真的结果,与程序设计的效果进行比较,是否满足要求,如没有错误,可以根据自己的想法和对程序了解的程度进行变动,以达到更好的效果,同时也可以提高个人的能力。
5、实验结束后停止程序运行,关闭电脑,拔掉开发板和电脑之间的连线装入盒中,整理桌面。
五、实验程序
程序清单:流水灯实验程序(下划线为修改部分)
#include "config.h"
/* LED8~LED1 8个LED分别由P1.25~P1.18控制 */
const uint32 LEDS8 = (0xFF << 18); // P1[25:18]控制LED8~LED1,低电平点亮
const uint32 KEY1 = 1 << 16; //P0.16连接KEY1
const uint32 BEEP = 1<<7; //P0.7控制蜂鸣器
/******************************************************************** ** 函数名称:DelayNS()
** 函数功能:长软件延时
** 入口参数:dly 延时参数,值越大,延时越久
** 出口参数:无
********************************************************************/ void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
/******************************************************************** ** 函数名称:main()
** 函数功能:流水灯显示实验。
** 调试说明:连接跳线JP12至LED8~LED1。
********************************************************************/ /* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */
const uint32 LED_TBL[] = {
0xFF,0x00, // 全部点亮后,再全部熄灭
0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, // 依次逐个点亮
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开
0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减};
int main (void)
{
uint8 i;
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
PINSEL1 = 0x00000000; // 设置管脚连接GPIO
PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
IO1DIR = LEDS8; // 设置LED1控制口为输出
IO0DIR =BEEP; //设置BEEP控制口为输出
while (1)
{ for(i=0;i<42;i++)
{