嵌入式流水灯实验.docx

上传人:b****2 文档编号:500725 上传时间:2023-04-29 格式:DOCX 页数:15 大小:243.77KB
下载 相关 举报
嵌入式流水灯实验.docx_第1页
第1页 / 共15页
嵌入式流水灯实验.docx_第2页
第2页 / 共15页
嵌入式流水灯实验.docx_第3页
第3页 / 共15页
嵌入式流水灯实验.docx_第4页
第4页 / 共15页
嵌入式流水灯实验.docx_第5页
第5页 / 共15页
嵌入式流水灯实验.docx_第6页
第6页 / 共15页
嵌入式流水灯实验.docx_第7页
第7页 / 共15页
嵌入式流水灯实验.docx_第8页
第8页 / 共15页
嵌入式流水灯实验.docx_第9页
第9页 / 共15页
嵌入式流水灯实验.docx_第10页
第10页 / 共15页
嵌入式流水灯实验.docx_第11页
第11页 / 共15页
嵌入式流水灯实验.docx_第12页
第12页 / 共15页
嵌入式流水灯实验.docx_第13页
第13页 / 共15页
嵌入式流水灯实验.docx_第14页
第14页 / 共15页
嵌入式流水灯实验.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式流水灯实验.docx

《嵌入式流水灯实验.docx》由会员分享,可在线阅读,更多相关《嵌入式流水灯实验.docx(15页珍藏版)》请在冰点文库上搜索。

嵌入式流水灯实验.docx

嵌入式流水灯实验

实验三GPIO输出控制实验

一、实验目的

熟悉LPC2000系列ARM7微控制器的GPIO输入控制。

二、实验设备

●硬件:

PC机一台

LPC2131教学实验开发平台一套

●软件:

Windows98/XP/2000系统,ADS1.2集成开发环境。

三、实验内容

1.P0.7管脚控制EasyARM教学实验开发平台上的蜂鸣器报警。

2.GPIO输出实验-流水灯实验

实验预习要求:

LPC2000GPIO管脚的设置和控制。

四、实验原理

1.GPIO输出实验,蜂鸣器控制

在EasyARM2131开发板上,接有一个蜂鸣器,由P0.7控制,通过跳线JP11选择连接。

蜂鸣器控制电路如所示。

图3-1蜂鸣器控制电路

如果跳线JP11选择蜂鸣器,当P0.7输出低电平时,蜂鸣器鸣叫,当P0.7输出高电平则停止鸣叫。

程序设置PINSEL0使P0.7连接GPIO,并通过IO0DIR将其设置为输出状态,然后通过IO0CLR和IO0SET清零和置位P0.7口,控制蜂鸣器,流程图见图3-2。

图3-2蜂鸣器控制实验流程图

2.GPIO输出实验-流水灯实验

单路LED控制

EasyARM2131开发板上有8个独立的LED,分别由8个GPIO口控制,现在使用其中一路进行实验,使用的电路如图3-3所示。

图3-3单路LED电路图

当跳线JP12连接LED1时,P1.18采用灌电流方式驱动LED1,当P1.18输出低电平时,LED1点亮,当P1.18输出高电平时,LED1熄灭。

实验程序首先设置管脚连接GPIO,接着设置P1.18口为输出模式,然后通过IO1CLR和IO1SET控制P1.18,驱动LED1的亮灭。

GPIO输出实验-流水灯实验

EasyARM2131开发板上的8路LED(LED8~LED1)分别可选择P1[25:

18]进行控制,电路如图3-4所示。

图3-48路LED控制电路

当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。

流水灯显示花样可以通过数组人为定义,亦可通过一定的算法计算,程序清单所示为采用人为定义数组控制显示花样的实验程序,流程图如图3-5所示。

图3-5流水灯花样显示流程图

五、实验步骤

实验内容1步骤

①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BeepCon_C。

②在user组里编写主程序代码main.c。

③将EasyARM教学实验开发平台上的P0.7管脚与Beep跳线短接gde台ngtheng。

④选择Project->Debug,启动AXD进行JLINK仿真调试。

在工程窗口中选择DebugInRAM生成目标,然后编译连接工程(单击Make按钮)。

如图所示。

选择DebugInRAM生成目标时,编译连接生成的目标代码就是用于在片内RAM调试。

打开ADS开发环境下的【Edit】->【DebugInFLASHSettings...】,在”ARMfromELF”下Outputformat做如图选择,输出文件选择你的文件同一目录下,扩展名’.HEX’

⑥全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。

⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。

选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

⑧可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。

在FLASH中调试

在工程窗口中选择DebugInFLASH生成目标,然后编译连接工程(单击Make按钮)。

选择DebugInFLASH生成目标时,编译连接生成的目标代码就是用于在片内FLASH调试。

编译连接通过后,按键盘的F5键,启动AXD进行调试。

注意,由于程序要烧写到片内FLASH,默认选项在每次装载FLASH地址的调试文件时,将会擦除FLASH并下载代码到FLASH中。

脱机运行

使用DebugInFLASH生成目标,并进行调试后(使用JLINK仿真器),程序即烧写到片内FLASH中。

将JLINK电源断开,重新上电,程序将脱机运行;

实验内容2实验步骤

①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程LedDisp_C。

②在user组里编写主程序代码main.c。

③选用DebugInRam生成目标,然后编译链接工程。

④将EasyARM教学实验开发平台上的P1.[18:

25]管脚对应与LED[1:

8]跳线短接gde台ngtheng。

⑤选择Project->Debug,启动AXD进行JLINK仿真调试。

⑥全速运行程序,程序将会在main.c的主函数中停止。

⑦单击ContextVariable图标按钮(或者选择ProcessorViews->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。

选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。

⑧可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断LED1~LED8控制是否正确。

(3)实验参考程序

GPIO输出控制实验的参考程序见3-1。

程序清单1GPIO输出控制实验1的参考程序

/****************************************************************************

*文件名:

main.c

*功能:

蜂鸣器控制。

对蜂鸣器进行控制,采用软件延时方法。

*使用I/O口直接控制,采用灌电流方式。

*说明:

将P0.7与Beep短接。

****************************************************************************/

#include"config.h"

#defineBEEPCON1<<7//P0.7引脚控制Beep,低电平蜂鸣

/****************************************************************************

*名称:

DelayNS()

*功能:

长软件延时。

*入口参数:

dly延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidDelayNS(uint32dly)

{

uint32i;

for(;dly>0;dly--)

{

for(i=0;i<5000;i++);

}

}

/****************************************************************************

*名称:

main()

*功能:

控制蜂鸣器蜂鸣。

****************************************************************************/

intmain(void)

{

PINSEL0=0x00000000;//设置管脚连接GPIO

IO0DIR=BEEPCON;//设置I/O为输出

while

(1)

{

IO0SET=BEEPCON;//BEEPCON=1

DelayNS(200);

IO0CLR=BEEPCON;//BEEPCON=0

DelayNS(200);

}

return(0);

}

程序清单2

#include"config.h"

/*LED8~LED18个LED分别由P1.25~P1.18控制*/

constuint32LEDS8=(0xFF<<18);//P1[25:

18]控制LED8~LED1,低电平点亮

/*********************************************************************************************函数名称:

DelayNS()

**函数功能:

长软件延时

**入口参数:

dly延时参数,值越大,延时越久

**出口参数:

*******************************************************************************************/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);

}

/*******************************************************************************************

**函数名称:

main()

**函数功能:

流水灯显示实验。

**调试说明:

连接跳线JP12至LED8~LED1。

*******************************************************************************************/

/*流水灯花样,低电平点亮,注意调用时候用了取反操作*/

constuint32LED_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//从两边叠加后递减

};

intmain(void)

{uint8i;

PINSEL1=0x00000000;//设置管脚连接GPIO

IO1DIR=LEDS8;//设置LED控制口为输出

while

(1)

{

for(i=0;i<42;i++)

{/*流水灯花样显示*/

IO1SET=~((LED_TBL[i])<<18);

DelayNS(20);

IO1CLR=((LED_TBL[i])<<18);

DelayNS(20);

}

}

return0;

}

参考程序3

/****************************************************************************

*文件名:

main.c

*功能:

LED显示控制。

*通过GPIO直接控制8个LED产生流水灯效果

*说明:

P1.[18:

25]管脚对应与LED[1:

8]跳线短接,把P0.16与KEY跳线短接,

*使用KEY1键来操作流水灯的运行方向

****************************************************************************/

#include"config.h"

constuint32LEDS8=0xFF<<18;//P1[25:

18]控制LED1~LED8,低电平点亮

constuint32KEY=1<<16;//P0.16连接KEY1

constuint32DISP_TAB[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0xff};

constuint32DISP_TAB2[10]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xff,0xff};

//两个LED图案码表

/****************************************************************************

*名称:

DelayNS()

*功能:

长软件延时

*入口参数:

dly---延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

{

for(i=0;i<5000;i++);

}

}

/****************************************************************************

*名称:

main()

*功能:

根据表DISP_TAB来控制LED显示。

****************************************************************************/

intmain(void)

{uint8i;

PINSEL0=0x00;//P0[15:

0]用作GPIO

PINSEL1=0x00;//P0[31:

16]用作GPIO

PINSEL2=PINSEL2&(~0x08);//P1[25:

16]连接GPIO

IO1DIR=LEDS8;//设置P1[25:

18]为输出口,控制LED[7:

0]

while

(1)

{

if((IO0PIN&KEY)!

=0)//测试KEY按键

for(i=0;i<8;i++)

{

IO1CLR=DISP_TAB[i]<<18;

DelayNS(50);

IO1SET=0xffffffff;

}

DelayNS(10);

if((IO0PIN&KEY)==0)//测试KEY按键

for(i=0;i<8;i++)

{

IO1CLR=DISP_TAB2[i]<<18;

DelayNS(50);

IO1SET=0xffffffff;

}

DelayNS(10);

}

return(0);

}

 

参考程序4

1.

/****************************************************************************

*文件名:

LEDCON.C

*功能:

LED闪烁控制。

对发光二极管LED4进行控制,采用软件延时方法。

*使用I/O口直接控制LED,采用灌电流方式。

*说明:

将跳线器JP4_LED4短接。

****************************************************************************/

#include"config.h"

#defineLEDCON0x02000000/*P0.25引脚控制LED4,低电平点亮*/

 

/****************************************************************************

*名称:

DelayNS()

*功能:

长软件延时

*入口参数:

dly延时参数,值越大,延时越久

*出口参数:

****************************************************************************/

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);

}

 

/****************************************************************************

*名称:

main()

*功能:

控制LED闪烁

****************************************************************************/

intmain(void)

{PINSEL0=0x00000000;//设置所有管脚连接GPIO

PINSEL1=0x00000000;

IO0DIR=LEDCON;//设置LED4控制口为输出

while

(1)

{IO0SET=LEDCON;

DelayNS(30);

IO0CLR=LEDCON;

DelayNS(30);

}

return(0);

}

六、思考

(1)理解实验参考程序中Startup.S文件的作用。

(2)实验程序中的main()函数名是否可以更改为其它名字?

(提示:

main只是一个标号。

(3)在实验参考程序中,如何控制蜂鸣器报警的速度?

七、实验报告要求

写出实验目的、实验仪器设备、实验原理、实验内容、源代码和操作步骤,调试结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2