嵌入式流水灯实验Word下载.docx
《嵌入式流水灯实验Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式流水灯实验Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
在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。
③选用DebugInRam生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的P1.[18:
25]管脚对应与LED[1:
8]跳线短接gde台ngtheng。
⑤选择Project->
⑥全速运行程序,程序将会在main.c的主函数中停止。
或者全速运行程序,停止程序运行,观察变量的值,判断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
return(0);
程序清单2
/*LED8~LED18个LED分别由P1.25~P1.18控制*/
constuint32LEDS8=(0xFF<
18);
//P1[25:
18]控制LED8~LED1,低电平点亮
/*********************************************************************************************函数名称:
**函数功能:
长软件延时
**入口参数:
dly延时参数,值越大,延时越久
**出口参数:
*******************************************************************************************/
voidDelayNS(uint32dly)
{uint32i;
for(;
dly--)
for(i=0;
50000;
/*******************************************************************************************
**函数名称:
流水灯显示实验。
**调试说明:
连接跳线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;
42;
i++)
{/*流水灯花样显示*/
IO1SET=~((LED_TBL[i])<
DelayNS(20);
IO1CLR=((LED_TBL[i])<