嵌入式流水灯实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
/****************************************************************************
*名称:main()
*功能:控制蜂鸣器蜂鸣。
****************************************************************************/
{ uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
/*******************************************************************************************
**函数名称:main()
*文件名:main.c
*功能:蜂鸣器控制。对蜂鸣器进行控制,采用软件延时方法。
*使用I/O口直接控制,采用灌电流方式。
*说明:将P0.7与Beep短接。
****************************************************************************/
⑧可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断LED1~LED8控制是否正确。
(3)实验参考程序
GPIO输出控制实验的参考程序见3-1。
程序清单1GPIO输出控制实验1的参考程序
/****************************************************************************
编译连接通过后,按键盘的F5键,启动AXD进行调试。注意,由于程序要烧写到片内FLASH,默认选项在每次装载FLASH地址的调试文件时,将会擦除FLASH并下载代码到FLASH中。
脱机运行
使用DebugInFLASH生成目标,并进行调试后(使用JLINK仿真器),程序即烧写到片内FLASH中。将JLINK电源断开,重新上电,程序将脱机运行;
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;//P0.16连接KEY1
const uint32DISP_TAB[10] = { 0x01, 0x02, 0x04, 0x08,0x10,0x20,0x40,0x80, 0xff, 0xff};
int main(void)
{
PINSEL0 = 0x00000000; //设置管脚连接GPIO
IO0DIR = BEEPCON;//设置I/O为输出
while(1)
{
IO0SET = BEEPCON;// BEEPCON = 1
DelayNS(200);
IO0CLR = BEEPCON;// BEEPCON = 0
const uint32 LED_TBL[] =
{
0x00, 0xFF, //全部熄灭后,再全部点亮
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, //依次逐个点亮
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, //依次逐个叠加
};
int main (void)
{ uint8 i;
PINSEL1 = 0x00000000; //设置管脚连接GPIO
IO1DIR = LEDS8; //设置LED控制口为输出
while (1)
{
for (i=0; i<42; i++)
{ /*流水灯花样显示*/
IO1SET = ~((LED_TBL[i]) << 18);
图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的亮灭。
实验预习要求:
LPC2000 GPIO管脚的设置和控制。
四、实验原理
1.GPIO输出实验,蜂鸣器控制
在EasyARM2131开发板上,接有一个蜂鸣器,由P0.7控制,通过跳线JP11选ຫໍສະໝຸດ Baidu连接。
蜂鸣器控制电路如所示。
图3-1蜂鸣器控制电路
如果跳线JP11选择蜂鸣器,当P0.7输出低电平时,蜂鸣器鸣叫,当P0.7输出高电平则停止鸣叫。程序设置PINSEL0使P0.7连接GPIO,并通过IO0DIR将其设置为输出状态,然后通过IO0CLR和IO0SET清零和置位P0.7口,控制蜂鸣器,流程图见图3-2。
⑤选择Project->Debug,启动AXD进行JLINK仿真调试。
⑥全速运行程序,程序将会在main.c的主函数中停止。
⑦单击ContextVariable图标按钮(或者选择Processor Views->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择System Views->Debugger Internals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。
*功能:长软件延时。
*入口参数:dly延时参数,值越大,延时越久
*出口参数:无
****************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
图3-5流水灯花样显示流程图
五、实验步骤
实验内容1步骤
①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程BeepCon_C。
②在user组里编写主程序代码main.c。
③将EasyARM教学实验开发平台上的P0.7管脚与Beep跳线短接gde台ngtheng。
DelayNS(20);
IO1CLR =((LED_TBL[i]) << 18);
DelayNS(20);
}
}
return 0;
}
参考程序3
/****************************************************************************
*文件名:main.c
DelayNS(200);
}
return(0);
}
程序清单2
#include "config.h"
/*LED8~LED1 8个LED分别由P1.25~P1.18控制*/
const uint32 LEDS8 = (0xFF << 18); // P1[25:18]控制LED8~LED1,低电平点亮
/*********************************************************************************************函数名称:DelayNS()
**函数功能:流水灯显示实验。
**调试说明:连接跳线JP12至LED8~LED1。
*******************************************************************************************/
/*流水灯花样,低电平点亮,注意调用时候用了取反操作*/
GPIO输出实验-流水灯实验
EasyARM2131开发板上的8路LED(LED8~LED1)分别可选择P1[25:18]进行控制,电路如图3-4所示。
图3-4 8路LED控制电路
当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。流水灯显示花样可以通过数组人为定义,亦可通过一定的算法计算,程序清单所示为采用人为定义数组控制显示花样的实验程序,流程图如图3-5所示。
**函数功能:长软件延时
**入口参数:dly延时参数,值越大,延时越久
**出口参数:无
*******************************************************************************************/
void DelayNS (uint32 dly)
实验
一、实验目的
熟悉LPC2000系列ARM7微控制器的GPIO输入控制。
二、实验设备
硬件:PC机一台
LPC2131教学实验开发平台一套
软件:Windows 98/XP/2000系统,ADS1.2集成开发环境。
三、实验内容
1. P0.7管脚控制EasyARM教学实验开发平台上的蜂鸣器报警。
2. GPIO输出实验-流水灯实验
⑥全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。
⑦单击Context Variable图标按钮(或者选择Processor Views->Variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择System Views->Debugger Internals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。
④选择Project->Debug,启动AXD进行JLINK仿真调试。在工程窗口中选择DebugInRAM生成目标,然后编译连接工程(单击Make按钮)。如图所示。
选择DebugInRAM生成目标时,编译连接生成的目标代码就是用于在片内RAM调试。
打开ADS开发环境下的【Edit】->【DebugInFLASH Settings...】,在”ARM fromELF”下Outputformat做如图选择,输出文件选择你的文件同一目录下,扩展名’.HEX’
const uint32 DISP_TAB2[10] = { 0x80 , 0x40, 0x20, 0x10, 0x08,0x04, 0x02,0x01, 0xff, 0xff};
*功能:LED显示控制。
*通过GPIO直接控制8个LED产生流水灯效果
*说明:P1.[18:25]管脚对应与LED[1:8]跳线短接,把P0.16与KEY跳线短接,
*使用KEY1键来操作流水灯的运行方向
****************************************************************************/
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, //依次逐个递减
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, //两个靠拢后分开
0x81, 0xC3,0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 //从两边叠加后递减
#include "config.h"
#define BEEPCON 1<<7// P0.7引脚控制Beep,低电平蜂鸣
/****************************************************************************
*名称:DelayNS()
实验内容2实验步骤
①启动ADS1.2IDE集成开发环境,选择ARM Executable Image for lpc2131工程模板建立一个工程LedDisp_C。
②在user组里编写主程序代码main.c。
③选用DebugInRam生成目标,然后编译链接工程。
④将EasyARM教学实验开发平台上的P1.[18:25]管脚对应与LED[1:8]跳线短接gde台ngtheng。
⑧可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。
在FLASH中调试
在工程窗口中选择DebugInFLASH生成目标,然后编译连接工程(单击Make按钮)。
选择DebugInFLASH生成目标时,编译连接生成的目标代码就是用于在片内FLASH调试。
相关文档
最新文档