西 安 邮 电 大 学
(计算机学院)
嵌入式系统板级电路装配
课程设计实验报告
专业名称:
计算机科学与技术 班
级:
计科 1405
学
号:
XXXXXXX 姓
名:
XXX 指导教师:
XXX 实验日期:2017 年 12 月 11 日—12 月 22 日 第一周: : 开发板硬件装配
一、
开发板硬件结构
开发板由 PACK 板与底板构成,PACK 板板载一枚 LCP2132 芯片,该芯片就是 NXP 公司(飞利浦创建)设计得一款基于 ARM7TDMIS 得高性能 32 位 RISC 微控制器,具有 Thumb 扩展功能,64KB 片内 Flash ROM,具有在系统编程(ISP)与应用编程(IAP),16KB RAM,向量中断控制器,两个 UART,一个带全调制解调器接口。
两个 I2C 串行接口,两个 SPI 串行接口三个 32 位定时器,瞧门狗定时器,带有备用电池备份得实时时钟,欠压检测电路通用 I/O 引脚。
CPU 时钟高达 60 MHz,片内晶体振荡器与片内 PLL。
板子总体分了电源电路,晶振电路,复位电路,LED 电路,按键电路,串口电路,JTAG 调试电路等几部分,如下图所示
图 1 Easy ARM 2132 开发板底板元件布局图
二、
硬 件 原 理组成及分 析
开 发 板 完整电路图如下图所示 图 2 Easy ARM 2132 开发板完整电路图 1. 电源电路: LPC2132 电源电路部分采用了一个 DC 接口得 POWER1 供电口与一个5V 得 USB 供电口,内部采用了一个
1N5819 二极管来稳流,采用 SPX1117M33、3 低压差稳压器, 如右图所示。
电路另一边有一个红色得发光二极管,当电源接通后,二极管会点亮。
2. 复位电路
复位电路采用一颗 CAT1025 芯片,CAT1025 就是基于微控制器系统得存储器与电源监控得完全解决方案。它们利用低功耗 CMOS 技术将 2K 位得串行 EEPOM 与用于掉电保护得系统电源监控电路集成在一块芯片内。存储器采用 400KHz 得 I2C 总线接口。
CAT1025 包含 1 个精确得 Vcc 监控测电路与 2 个开漏输出:RESET与!RESET。当 Vcc 低于复位门槛电压时,!RESET 引脚将变为高电平,RESET 将变为低电平。CAT1025 还包含一个写保护输入(WP)。如果 WP 连接高电平,则写操作被禁止。
nRST 连接到芯片 LPC2132 得复位引脚,当复位按键 RST1 按下时,CAT1025 得复位引脚输出有效信号,使芯片 LPC2132 复位。
3. 系统时钟电路
LPC2132 微控制器可使用外部晶振或外部时钟源,片外晶振频率范围:1~30MHz,如 下 图 中Y111、0592MHz,内部锁相环电路 PLL 可调整系统时钟,通过片内 PLL 可实 现 最 大 为60MHz 得 CPU操作频率,实时时钟具有独立得时钟源,如下图中 Y232、768KHZ 晶振。
4. G JTAG 接口电路
采用 ARM 公司提出得标准 20 脚 JTAG 仿真调试接口,JTAG 信号得定义以及与 LPC2132 得连接如下图:
5. 按 按键及显示电 路
LPC2132 开发板具有 4 个按键、4 个 LED 灯。4 个 LED 灯一边已经与 DP3V3 连接,另一边经过 1 个 470R 得电阻后与 JP1 跳线相连,当
JP12 连通得时候,LED1 得一侧与芯片得 P0、17 口就会连通,P0、17口输出低电平,LED1 就会点亮,如果 P0、17 输出高电平,LED1 就会熄灭。
4 个按键中复位键已经在前面介绍了,剩下三个按键 KEY1、KEY2、KEY3 一边接地,另一边接了 4K7 得电阻然后与正极相连,还接了 JP2跳线组,如果 JP2 得 12 连通,那么 P0、16 就与 KEY1 连通,当按键按下得时候,P0、16 输出低电平,当按键没有按下得时候 P0、16 输出高电平,因为按键检测电路可以编写为检测就是否有低电平来判断按键就是否按下。
6. T UART 接口电路
CH340G 就是一个USB转串口芯片,可以把电脑得USB口映射为串口用。
当 使 用串 口电路进行UART 调试得时 候 , 需 要 将JP6 短 接 , 连 通P0、 0 与 CH340G得 TXD 口,连通P0、 1 与 CH340G得 RXD 口。另一边 CH340G 得 X1与 X0 接 入 了X112MHz 得晶 振。
三、
开发板硬件安装调试过程
① 焊接最小 系统
首先焊接电源模块,复位电路模块,晶振模块,构成最小系统,然后对最小系统进行测试。
测试方法:将电源线与开发板得电源模块连接,观察电源指示灯就是否点亮,如果点亮,使用万用表测量 U1 点电压,数值范围为:3、29V~3、31V,标准值为 3、30V,表明电源电路模块正常。然后用示波器观察晶振引脚得波形,查瞧晶振就是否正常。
② 焊接外接电路板 。
在洞洞板上面焊接一个LED灯,然后引出接口,一个为正,一个为负,然后将正负极分别与排针焊接在一起;将蜂鸣器得正负极分别于排针焊接;将按键得两边与排针焊接在一起。
测试方法:将 LED 正负极分别与开发板得 DP3、3V 与 GND 连接,可以观察到 LED 灯点亮。蜂鸣器得正负极与开发板得 DP3、3V 与 GND 连接,可以听到蜂鸣器发声。将开发板正极与蜂鸣器正极相连,蜂鸣器负极与开关一边相连,然后开关另一边接低电平,按下按键后蜂鸣器会发出声音,证明开关电路完好。
③ 焊接 D LED 灯
焊接LED电路,将LED1LED7焊接在开发板上面,然后焊接R4R7四个电阻,这就是二极管得分压电阻。
测试方法: 给开发板通电,然后依次给 JP1 得 1、3、5、7 接低电平,会发现 LED1LED4依次点亮,如果有不亮得,说明焊接有误,检查二极管得正负就是否正确,用万用表检测就是否有短路。
④ 焊接 开关
将 KEY1、KEY2、KEY3 焊接到开发板上面,然后将 3 个 4K7 得电阻焊接到R1、R2、R3 三个位置,最后在 JP2 上面焊接一组排针。
测试方法: 给开发板供电,用万用表检测 KEY1KEY3 得电压,正常范围应该就是 3、28V3、31V,当 KEY1 键按下得时候,JP2 得 1 电压应该为 0V;当 KEY2 键按下得时候,JP2 得 3 电压应该为 0V;当 KEY3 键按下得时候,JP2 得 4 电压应该为 0V。
⑤ 焊接 串口模块
将CH340G焊接到开发板对应位置,要注意焊接得时候容易将周围引脚连接在一起,必须非常小心得操作。
测试方法: 给开发板供电,然后USB口与电脑连接,电脑得设备管理器可以检测到串口输入,如下图:
⑥ 焊接 G JTAG 模块
JTAG 模块很简单,只需要将 JTAG 后面得引脚依次焊接即可。
检测方法: 开发板供电后,用 JTAG 线连接开发板得电脑,然后打开 HJTAG Server,
点击搜索可以检测到芯片。如下图:
在 HFlasher 窗口得“Flash Selection”项选择仿真得器件型号LPC2132,在 HFlasher 窗口得“Programming”项窗,点击<Check>按钮,HJTAG 将检测到得器件类型显示于本窗口。
四、
遇到问题分析及硬件调试体会
1、 遇到得问题 焊接好 LED 灯模块后,测试 LED 灯得时候发现 LED3 不亮,用万用表检测后发现就是 LED3 得引脚虚焊,重新焊接后问题解决。
2、硬件调试体会 焊接过程中需要足够得耐心,不能瞧到别得同学进度比自己快就急躁,急于求成做出来得产品只能就是差得甚至就是坏得,我们应该从焊接中总结经验,提高自己得焊接能力,掌握焊接技巧,焊接出最好,最完美得电路板。
第二周: : 软件编程与调试
一、调试环境搭建
① 启动 ADS1、2IDE 集成开发环境。
② 在 ADS 主窗口主菜单选择 File>New,使用 asm for lpc2132 工程模板建立一个工程(图例中工程名称为:ZQL_LIB1),指定工程路径(图例中工程路径为 D:\ARM_Lib_Bak\ARM_asm)。
③ 点击确认<按钮>,创建工程。
④ 在 ZQL_LIB1 工程窗口,双击模板文件 main、S,打开该文件。
⑤ 可在主窗口菜单选择 Edit>Perferences,设置字体与字号。
⑥ 在 main、S 文件编辑窗得 “add the user code here、 添加用户代码”行下建立用户汇编程序代码 。
⑦ 选择 Project>Make(或快捷键<F7>),编译链接整个工程。若编译成功,则 Erros & Warnings 对话框会报告编译错误为 0,此时即可对工程进行仿真。
二、 调试方法
① 单步运行;在 AXD 调试器主窗口,选择 Execute > Step (或快捷键<F10>),处理器执行一行代码; ② 设置断点;在 AXD 调试器“代码调试窗口”双击目标代码行,若出现红色实心圆点,则表示断点设置成功;然后选择 Execute>Go 全速运行,处理器执行程序停止在断点行; ③ 运行到光标行;在 AXD 调试器“代码调试窗口”单击选择目标代码行,然后在 AXD调试器主窗口,选择 Execute>Run to Cursor 运行到光标处;通过断点调试可以观察ARM 寄存器与存储单元得数值变化,具体操作方法在后面得实验中会作详细介绍。
二、完成实验内容
本人主要负责内容:GPIO 输入输出基础实验,交通灯综合实验中得蜂鸣器、中断服务程序、GPIO 初始化模块以及键盘扫描部分编写。
1 1 、O GPIO 输入输出实验
(1)实验目得 ① 掌握 LPC2132 工程模板得使用。
② 掌握 EasyJTAG 仿真器得安装与使用。
③ 能够在 EasyARM 教学实验开发平台上运行第一个程序。
④ 熟悉 LPC2000 系列 ARM7 微控制器得 GPIO 控制。
(2)实验原理 LPC2132 系列得 ARM7 微控制器得所有 GPIO 口,均为双向 I/O 口。引脚可以根据需要配置为 I/O 口或其它功能,与 GPIO 相关得寄存器一共有 6 个见下表:
通过编程控制 BEEP(P0、7)输出低电平,从而实现蜂鸣器持续发声。
(3)实验过程 ① 启动 ADS1、2IDE 集成开发环境,选择 ARM Executable Image for lpc2132 工程模板建立一个工程 BeepCon_C。
② 在 user 组里编写主程序代码 main、c。
③ 选用 DebugInRam 生成目标,然后编译链接工程。
④ 将 EasyARM 教学实验开发平台上得 P0、7 管脚与 Beep 跳线短接 ⑤ 选择 Project>Debug,启动 AXD 进行 JTAG 仿真调试。
⑥ 全速运行程序,程序将会在 main、c 得主函数中停止(因为 main 函数起始处默认设置有断点)。
⑦ 单击 Context Variable 图标按钮(或者选择 Processor Views>Variables)打开变量观察窗口,通过此窗口可以观察局部变量与全局变量。选择 System Views>Debugger Internals 即可打开 LPC2000 系列 ARM7 微控制器得片内外寄存器窗口。
⑧ 可以单步运行程序,可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量得值,判断蜂鸣器控制就是否正确。
(4)问题分析与解决方法
GPIO 功能选择之后没有进行 IO0DIR 方向选择,导致 P0、7 口依然为输入口,无法输出低电平信号,故而蜂鸣器没有发声,添加这行代码后,成功实现功能。
2 2 、 定时器与中断控制
(1)实验目得 ① 熟悉 LPC2000 系列 ARM7 微控制器得定时器 0 得基本设置及匹配输出应用。
(2)实验原理 使用定时器 0 实现 1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。
备注:EasyARM2132 实验板上得系统时钟默认为 11、0592MHz;系统中已定义了符号常量 Fpclk = 11059200 ;
(3)实验过程 ① 启动 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一个工程TimeOut_C。
② 在 user 组中得 main、c 中编写主程序代码。
③ 选用 DebugInExram 生成目标,然后编译连接工程。
④ 选择【Project】>【Debug】,启动 AXD 进行 JTAG 仿真调试。
⑤ 将 LPC2132 开发板上得 P0、7 接入蜂鸣器 ⑥ 全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。
代码如下: :
#include "config、h" #define BEEP
1 << 7
/* P0、7 控制 BEEP,低电平蜂鸣 */ /***************************************************************************************** ** 函数名称 :IRQ_Timer0 ** 函数功能 :定时器 0 中断服务程序,取反 LED2 控制口。
** 入口参数 :无
** 出口参数 :无 ****************************************************************************************** */ void __irq IRQ_Timer0 (void) {
if ((IO0SET & BEEP) == 0)
IO0SET = BEEP;
/* 关闭 BEEP */
else
IO0CLR = BEEP;
T0IR = 0x01;
/* 清除中断标志 */
VICVectAddr = 0x00;
/* 通知 VIC 中断处理结束 */ } /* ***************************************************************************************** ** 函数名称 :main ** 函数功能 :使用定时器实现 1 秒钟定时,控制 LED9 闪烁。中断方式。
** 调试说明 :需要将跳线 JP11 连接 BEEP。
***************************************************************************************** */ int main (void) {
PINSEL1 = 0x00000000;
/* 设置管脚连接 GPIO */
IO0DIR
= BEEP;
/* 设置 BEEP 控制口输出 */
IRQEnable;
/* IRQ 中断使能 */
/* 定时器 0 初始化 */
T0TC
= 0;
/* 定时器设置为 0 */
T0PR
= 0;
/* 时钟不分频 */
T0MCR
= 0x03;
/* 设置 T0MR0 匹配后复位 T0TC,并产生中断标志 */
T0MR0
= Fpclk;
/* 1 秒钟定时;系统中已定义 Fpclk = 11059200 */
T0TCR
= 0x01;
/* 启动定时器 */
/* 设置定时器 0 中断 IRQ */
VICIntSelect = 0x00;
/* 所有中断通道设置为 IRQ 中断 */
VICVectCntl0 = 0x20 | 0x04;
/* 设置定时器 0 中断通道分配最高优先级 */
VICVectAddr0 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址 */
VICIntEnable = 1 << 0x04;
/* 使能定时器 0 中断 */
while (1);
return 0; } (4)问题分析与解决方法
下板后蜂鸣器不发声, 检查后发现就是蜂鸣器一边接了低电平,另一边接了P0、7 引脚,输出低电平后,俩边都就是低,所以蜂鸣器不发声,重新接线后恢复正常。
3 3 、 外中断控制
(1)实验目得
学习 LPC2000 系列 ARM7 微控制器得向量中断控制器及外中断得应用技术。
(2)实验原理 主程序闪烁 LED,EINT 使能/停止 BEEP 得鸣响。
(3)实验过程 ① 跳线 LED1、Key1 与 Beep 分别连接到 P1、18、P0、16 与 P0、7 管脚;使用 KEY1 模拟外中断; ② 启动 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一个工程TimeEINT_C。
③ 在user 组中得main、c 中编写主程序代码;使用系统宏IRQEnable,使能IRQ 中断。
④ 装载并使能外中断; ⑤ 选用 DebugInExram 生成目标,然后编译连接工程。
⑥ 选择【Project】>【Debug】,启动 AXD 进行 JTAG 仿真调试。
⑦ 全速运行程序,LED 闪烁; ⑧ 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
代码如下: #include "config、h" #define
BEEPCON
1<<7
// P0、7 引脚控制 Beep,低电平蜂鸣 #define
LED1
1<<18
// P1、18 引脚控制 LED1,低电灯亮 /**************************************************************************** * 名
称:DelayNS * 功
能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void
DelayNS(uint32
dly) {
uint32
i;
for(; dly>0; dly)
{
for(i=0; i<5000; i++);
} } /**************************************************************************** * 名 称:IRQ_EINT0 * 功 能:外中断服务程序,取反 BEEPCON 控制口。
* 入口参数:无 * 出口参数:无 ****************************************************************************/ void __irq IRQ_Eint0(void) {
if ((IO0SET & BEEPCON) == 0 )
// 反转 BEEPCON 管教输出状态
IO0SET = BEEPCON;
else
IO0CLR = BEEPCON;
while ( (EXTINT &0x01) != 0 )
EXTINT = 0x01;
// 清除 EINT0 中断标志
VICVectAddr = 0x00;
// 通知 VIC 中断处理结束 } /**************************************************************************** * 文 件 名:main、c * 功 能:主程序闪烁 LED1;KEY1 模拟外中断方式,每次外中断事件反转 Beep 鸣响状态。
* 说 明: ****************************************************************************/ int main(void) {
int x;
PINSEL0 = 0x00000000;
// 设置管脚连接 GPIO
PINSEL1 = 0x00000001;
// 设置管脚 P0、16 为 EINT0
IO0DIR = BEEPCON;
// 设置 P0、7 为输出
IO1DIR = LED1;
// 设置 P1、18 为输出
EXTMODE
=
0x00;
IRQEnable;
VICDefVectAddr = (int)IRQ_Eint0;
// 设置 EINT0 为 非向量 IRQ 中断
EXTINT = 0x01;
// 清除 EINT0 中断标志
VICIntEnable = 1<<0x0e; // 使能 EINT0 中断
while(1)
// 等待 EINT0 中断
{
if (x!=0) {
IO1SET = LED1; x = 0;
}
else
{
IO1CLR = LED1; x = 1;
}
DelayNS(100);
}
return(0); } (4)问题分析与解决方法
LED 闪烁正常,但就是按键后蜂鸣器没有任何反应,通过一步步排查,最终发现,引脚定义到了 KEY3,但就是按键却按下了 KEY1,更改引脚定义后,问题解决。
4 4 、T UART 串口通信
(1)实验目得 通过实验,掌握 UART 查询 1 方式程序得设计。
(2)实验原理 通过串口 0 接收上位机发送得字符串,如“Hello EasyARM2132!”,然后返回上位机显示。
(3)实验过程 ① 启动 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一个工程DataRet_C。
② 在 user 组中得 main、c 中编写主程序代码,在项目中得 config、h 文件中加入#include
<stdio、h>。
③ 选用 DebugInRam 生成目标,然后编译连接工程。
④ 将EasyARM2132开发板上得JP6跳线分别选择TxD0与RxD0端时,方可进行UART0通信实验。
⑤ 使用串口延长线把 LPC2132 教学实验开发平台得 CZ2(UART0)与 PC 机得 1 连接。PC 机运行 EasyARM 软件,设置串口为 1,波特率为 115200,然后选择【设置】>【发送数据】,在弹出得发送数据窗口中点击“高级”即可打开接收窗口。
⑥ 选择【Project】>【Debug】,启动 AXD 进行 JTAG 仿真调试。
⑦全速运行程序,在 PC 机上得 EasyARM 软件发送如“Hello EasyARM2132!”字样得字符串,EasyARM2132 开发板接收到数据后,并将接收到得数据回发给 PC 机。
代码如下: #include “config、h” #define UART_BPS 115200
//串口通信波特率 /**************************************************************************** * 名
称:DelayNS * 功
能:长软件延时 * 入口参数:dly
延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void
DelayNS(uint32
dly) {
uint32
i;
for(; dly>0; dly)
for(i=0; i<5000; i++); } /********************************************************************************* **函数名称:UART0_Init **函数功能:串口初始化,设置为 8 位数据位,1 位停止位,无奇偶校验,波特率为 115200 **入口参数:无 **出口参数:无 *********************************************************************************/ void UART0_Init(void) {
uint16 Fdiv;
U0LCR = 0x83;
//DLAB = 1,允许设置波特率
Fdiv = ( Fpclk / 16 ) / UART_BPS; //设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03; } /********************************************************************************* **函数名称:UART0_GetByte **函数功能:从串口接收 1 字节数据,使用查询方式接收
**入口参数:无 **出口参数:接收到得数据 **********************************************************************/ uint8 UART0_GetByte(void) {
uint8 rcv_dat;
while((U0LSR % 0x01) == 0);
//等待接收标志置位
rcv_dat = U0RBR;
return (rcv_dat); } /********************************************************************************* **函数名称:UART0_GetStr **函数功能:从串口接收 **入口参数:s
指向接收数据数组得指针
n
接收得个数 **出口参数:无 **********************************************************************/ void UART0_GetStr(uint8 *s, uint32 n) {
for( ; n > 0; n )
*s++ = UART0_GetByte; } /********************************************************************************* **函数名称:UART0_SendByte **函数功能:向串口发送字节数据 **入口参数:dat 要发送得数据 **出口参数:无 **********************************************************************/ void UART0_SendByte(uint8 dat) {
U0THR = dat;
//写入数据
while((U0LSR & 0x40 ) == 0);
//等待数据发送完毕 } /********************************************************************************* **函数名称:UART0_SendStr **函数功能:向串口发送一字符串 **入口参数:str 要发送得字符串得指针 **出口参数:无 **********************************************************************/ void UART0_SendStr(uint8 const *str) {
while(1) {
if( *str == ‘\0’ )
break;
//遇到结束符,退出
UART0_SendByte(*str++);
//发送数据 } } /**************************************************************************** * 名 称:main * 功 能:从串口 UART0 接收字符串“Hello EasyARM2132!”,并发送回上位机显示 * 说 明:需要 PC 串口显示终端软件,如 EasyARM、exe。
****************************************************************************/ int main(void) { uint8 snd[32]; PINSEL0 = 0x00000005;
// 设置 I/O 连接到 UART0
UART0_Init;
//串口初始化
UART0_GetStr(snd, 18);
//从串口接收字符串
DelayNS(10);
UART0_SendStr(snd);
//向串口发送字符串
DelayNS(10);
while(1); return(0); } (4)问题分析与解决方法
代码运行后,PC机没有显示出来字符串,检查后发现USB接口得接触不良,接触不良得原因就是焊接得时候没有贴牢靠就焊接上去了,解焊后重新焊接了 USB 口,问题解决。
5 5 、 综合实验: : 交通灯
我负责得就是蜂鸣器函数,中断服务程序,GPIO 初始化函数,键盘扫描模块。
最终效果图如下:
蜂鸣器函数模块: :
定义一个 BEEP 引脚 P0、8 作为蜂鸣器得输入口,P0、8 给低电平,蜂鸣器响 uint32 BEEP = 18;
P0、8 控制蜂鸣器,低电平有效 void say{
蜂鸣器函数
IO0CLR = BEEP;
DelayNS(10);
IO0SET = BEEP;
} 中断服务程序模块: :
通过定时器产生 1 秒得时钟频率,然后在中断服务程序中调用 display 函数,display 函数,display 传入得参数就就是数码管要显示得数字,然后每秒调用一次 display 函数,实现倒计时。
void TimeInit
// 中断服务程序初始化函数 {
IRQEnable;
IRQ 中断使能
定时器 0 初始化模块
T0TC
= 0;
定时器设置为 0
T0PR
= 0;
时钟不分频
T0MCR
= 0x03;
设置 T0MR0 匹配后复位 T0TC,并产生中断标志
T0MR0
= Fpclk;
1 秒钟定时
T0TCR
= 0x01;
启动定时器
设置定时器 0 中断 IRQ
VICIntSelect = 0x00;
所有中断通道设置为 IRQ 中断
VICVectCntl0 = 0x20
0x04;
设置定时器 0 中断通道分配最高优先级
VICVectAddr0 = (uint32)IRQ_Timer0;
设置中断服务程序地址
VICIntEnable = 1
0x04;
使能定时器 0 中断
} void __irq IRQ_Timer0 (void)
中断服务程序 {
display(num);
调用数码管显示函数
T0IR = 0x01;
清除中断标志
VICVectAddr = 0x00;
通知 VIC 中断处理结束
} O GPIO 初始化函数: :
PINSEL0 与 PINSEL1 选择 GPIO 功能,然后设置数码管,LED 灯,蜂鸣器引脚做输出功能。
void GPIOInit{
PINSEL0 = 0x00;
设置功能选择 GPIO
PINSEL1 = 0x00;
设置功能选择 GPIO
IO0DIR = (SEG7|LEDS3|BEEP);
设置数码管,lED 灯,蜂鸣器引脚为输出 } 键盘扫描模块: :
将键盘扫描模块写成函数放入 while 循环中,循环判断按键就是否按下,扫描函数带有消抖操作,防止重复检测。Flag 标志,决定了现在灯得状态,flag=0 就是正常倒计时模式,flag=1 就是紧急模式绿灯常亮,flag=2 就是紧急模式红灯常亮。
void keyscan {
键盘扫描函数
if ((IO0PIN & KEY1) == 0)
如果 KEY1 按下
{
DelayNS(10);
消除抖动
if((IO0PIN & KEY1) == 0)
再次检测 KEY1 就是否按下
{
num=21;
flag=0;
功能选择为正常模式
}
}
else if ((IO0PIN & KEY2) == 0)
如果 KEY2 按下
{
DelayNS(10);
消除抖动
if((IO0PIN & KEY2) == 0)
再次检测 KEY2 就是否按下
{
flag=1;
功能选择为绿灯常亮模式
}
}
else if ((IO0PIN & KEY3) == 0)
如果 KEY3 按下
{
DelayNS(10);
消除抖动
if((IO0PIN & KEY3) == 0)
再次检测 KEY3 就是否按下
{
flag=2;
功能选择为红灯常亮模式
}
}
} 三、总结与体会
通过这次实验,对于开发板得焊接,调试有了新得认识,对于焊接电路板得方法与顺序有更好得了解,焊接电路板得时候一定要有耐心,戒骄戒躁,毕竟这就是一个危险得操作,经过多次焊接,掌握了焊接得技巧,焊接技能有了很大提高。焊接精细得引脚时,容易让周围得几个连接在一起,这个时候用焊枪无法分开,通过请教老师,使用松香将连在一起得焊锡分开,学会了焊接问题得正确处理方法。
在电路板得下板调试过程,学会了如何下板,如何编程,引脚怎么定义,如何对引脚进行输入输出方向选择,对引脚得复用设计理念有了更高得认识,对于 LPC 系列芯片得编程与调试有了深入了解。通过 GPIO,定时器中断,外部中断,串口通信四个基础实验,掌握了设计得基本方法,通过一个大交通灯项目,体会到了完整项目得开发过程,函数化,模块化编程在整个开发过程中可以简化流程,写出规规整整得代码,让阅读代码得人一下子就能瞧出您得程序执行流程。对于代码风格得重要性有了更好得理解。
实验要求及评阅表 姓
名
学
号
实 验 内 容 硬件焊接与测试( (第 第 5 15 周) )
周一:讲解基本要求与实验内容,查阅学习资料、观瞧相关视频,学习相关基础知识。
周二:讲解焊接工具得使用方法与安全操作流程,练习焊接与解焊,熟练掌握焊接技术。
周三:讲解测试仪器、仪表得使用方法与测试步骤,JTAG 仿真器得焊接与调试。
周四:根据板级电路得电路图等相关资料焊接主板与主要外设模块。
周五:利用相关仪器、仪表测试焊接电路板,开发板连接调试。
软件编程与调试( (第 第 6 16 周 )
周一:查阅嵌入式软件编程得相关资料与视频,理解工作原理。
周二:GPIO 输入与输出控制编码,定时器控制流水灯闪烁编码及调试。
周三:外部中断控制编码,UART 串行通信编码与调试。
周四:定时器与串行接口结合代码设计运行调试。
周五:所有编程代码综合调试并交付检查。
指 导 教 师 评 语