嵌入式报告
摘 要
以应用为中心、以计算机为基础的嵌入式技术,是当今发展最快、应用最广、
最有发展前景的主要技术之一。嵌入式技术已经被广泛应用于工业控制、移动通
信、信息家电、医疗仪器、汽车电子、航空航天等各个领域。在各种嵌入式处理
器中,ARM 以体积小、低功耗、低成本、高性能等优点,获得许多半导体厂商
的支持,在嵌入式应用领域取得巨大的成功。软件方面,LCD 液晶显示屏是一
种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统,因而被使
用频繁。
本文主要研究了日历电子钟的设计。采用LPC2103,六个键分别用来调节时
间和日期。用LPC2103显示,整个设计元器件少,简介美观,并且具有模块化。
关键词 嵌入式系统、日历电子钟、LPC2103
目 录
摘 要 . ................................................................................................................... 1
目 录 . ................................................................................................................... 2
第一章 绪 论 . ..................................................................................................... 3
1.1 设计题目 . ............................................................................................. 3
1.2 设计目的 . ............................................................................................. 3
1.3 设计器材 . ............................................................................................. 3
1.4 任务分析 . ............................................................................................. 3
第二章 设计原理 . ................................................................................................. 4
2.1 设计原理简述 . ..................................................................................... 4
2.2 嵌入式操作系统的概述 . ..................................................................... 4
2.2.1 嵌入式操作系统的特性 . ........................................................... 4
2.2.2 嵌入式操作系统的分类 . ........................................................... 4
2.2.3 嵌入式操作系统的特点 . ........................................................... 5
第三章 系统设计 . ............................................................................................... 6
3.1 系统需求分析 . ..................................................................................... 6
3.1.1 课程设计内容 . ............................................................................. 6
3.1.2 课程设计要求 . ............................................................................. 6
3.2 硬件设计 . ............................................................................................. 6
3.2.1 ARM处理器 . ................................................................................ 6
3.2.2 ARM硬件结构 . ............................................................................ 7
3.3 软件设计 . ........................................................................................... 10
3.3.1启动Keil . .................................................................................... 11
第四章 系统代码 . ............................................................................................. 14
第五章 系统调试 . ............................................................................................. 21
5.1 硬件检测 . ............................................................................................. 21
5.2 功能调试 . ............................................................................................. 21
结 论 . ....................................................................................................................I
主要参考资料(文献) . ........................................................................................I
第一章 绪 论
1.1 设计题目
日历电子钟设计。
1.2 设计目的
1、本次课程设计的主要目的是实现日历,电子钟的显示以及调整,充分调
动学生的积极性和创造性,重视学生实际动手能力的培养;
2、了解并掌握掌握相关专业课程知识和设计能力;
3、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本
方法和技术;
4、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
5、加深对专业课的理解,强化学生的逻辑思维能力和动手能力,巩固良好
的编程习惯,掌握工程软件设计的基本方法,为将来工作的学习打下坚实基础。
1.3 设计器材
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
① 硬件要求:LPC 教学开发板一块。
② 软件配置:windows XP。
1.4 任务分析
由于网络与通信技术的发展,嵌入式系统在经历了近20年的发展历程后,
又进入了一个新的历史发展阶段,即从普通的低端应用进入到一个高,低端并行
发展,并且不断提升低端应用技术水平的时代,其标志是近年来32位MCU 的
发展。
时钟的特性:带日历和时钟功能;提供秒,分,小时,月,年和星期;可调
节数字。通过LPC 开发板来显示并调节日历和时间数值。
第二章 设计原理
2.1 设计原理简述
实时时钟提供一套计数器,在系统工作时对时间进行测量。RTC 消耗的功率
非常低,这使其合适于由电池供电的,CPU 不连续工作的系统。
在设计过程中,需要有定时报警功能。当RTC 的当前时间与报警时间相匹
配时,就会引发中断。
关于闰年的计算,RTC 执行一个简单的位比较,观察年计数器的最低2位是
否为0。如果为0,那么RTC 认为这一年为闰年。RTC 认为所有能被4整除的年
份都为闰年。闰年对RTC 的影响只是改变2月份的长度,日期和年的计数值。
2.2 嵌入式操作系统的概述
嵌入式系统是集成电路发展过程中的一个标志性成果,它把计算机直接嵌入
到应用系统中,融合了计算机软/硬件技术、通信技术和微电子技术,是一种微
电子产业和信息技术产业的最终产品。微电子产业是许多国家优先发展的产业。
以超深亚微米工艺和IP 核复用技术为支撑的系统芯片技术是国际超大规模集成
电路发展的趋势和21世纪集成技术的主流。
2.2.1 嵌入式操作系统的特性
随着计算机技术和产品向其它行业的广泛渗透,由于嵌入式系统具有小巧、
高度自动化、响应速度快的特点,因而非常适应信息家电和现代控制设备的需要,
嵌入式技术成为了一个研究热点。嵌入式系统,是将计算机直接嵌入至系统中,
是信息IT 的最终产品。它根据应用的要求,将操作系统和功能软件集成于计算
机硬件系统中,实现软件与硬件一体化。
2.2.2 嵌入式操作系统的分类
嵌入式操作系统是随着嵌入式系统的发展出现的。从应用范围角度大致可以
分为可分为专用型(如Ucos 、Windows CE、VxWorks 、嵌入式Linux 等)和通
用型(如Palm OS、Symbian )的嵌入式操作系统等。从实时性的角度大致可以
分为实时嵌入式操作系统和一般嵌入式操作系统。
2.2.3 嵌入式操作系统的特点
嵌入式操作系统是对通用操作系统的继承和发展,具有操作系统的基本功
能,包括指令执行、任务调度、存储器管理、设备管理和中断处理等。但是,由
于嵌入式系统的硬件环境和程序运行需求有很大限制,所以嵌入式操作系统又有
如下并不同于一般操作系统的特点。
(1) 资源限制。
嵌入式操作系统一般只有64MB 内存,而且非易失性FLASH 通常也就
32MB ,因此,操作系统运行时,就不能像在PC 上那样使用资源了。
(2) 安全性限制。
在嵌入式领域,系统在运行之后一般都不能在短时期内停机或者重启,
因此死机、蓝屏是绝对不允许的。
(3) 可移植性。
在设计过程中常采用通用的程序设计语言和运行支撑环境,尽量不用与
系统的底层相关性强的语言。
第三章 系统设计
3.1 系统需求分析
3.1.1 课程设计内容
采用LPC 嵌入式开发板,控制其上的LCD 液晶屏显示日历和日期,并可以
对其修改。
3.1.2 课程设计要求
(1) 熟悉LPC 开发板平台。
(2) 熟悉LCD 液晶屏的工作原理。
(3) 熟悉RTC 原理。
(4) 时间可调,走时准确,有报时功能。
3.2 硬件设计
3.2.1 ARM处理器
ARM (Advanced RISC Machines ),既可以认为是一个公司的名字,也可
以认为是对微处理器的通称,还可以认为是一种技术的名字。ARM 处理器是一
个32位元精简指令集(RISC)处理器架构, 其广泛地使用在许多嵌入式系统设计。
(1)ARM 处理器系列
ARM7系列 、ARM9系列、 ARM9E 系列 、ARM10E 系列 、SecurCore
系列 Intel 的Xscale Intel 的StrongARM ARM11系列,其中,ARM7、ARM9、
ARM9E 和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性
能来满足不同应用领域的需求。
(2)ARM 处理器特点
1、体积小、低功耗、低成本、高性能;
2、支持Thumb (16位)/ARM(32位)双指令集,能很好的兼容8位/16
位器件;
3、大量使用寄存器,指令执行速度更快;
4、大多数数据操作都在寄存器中完成;
5、寻址方式灵活简单,执行效率高;
6、指令长度固定。
(3)指令结构
ARM 微处理器的在较新的体系结构中支持两种指令集:ARM 指令集和
Thumb 指令集。其中,ARM 指令为32位的长度,Thumb 指令为16位长度。Thumb
指令集为ARM 指令集的功能子集,但与等价的ARM 代码相比较,可节省30%~
40%以上的存储空间,同时具备32位代码的所有优点。
3.2.2 ARM硬件结构
飞利浦半导体推出了一系列非常方便使用ARM 核心的嵌入式芯片。飞利浦
半导体部门现在已经成为一家独立的公司,采用了新的名称NXP 。智林测控的
Z2101/03 开发板分别使用NXP 的ARM 嵌入式处理器LPC2101/03 两种芯片。
LPC2101/2102/2103 基于一个支持实时仿真的 ARM7TDMI-S CPU,并带有 8kB
和32kB 嵌入的高速 Flash 存储器。128 位宽度的存储器接口和独特的加速结构
使 32 位代码能够在最大时钟速率下运行。这可以使得中断服务程序和 DSP 算
法中重要功能的性能较Thumb 模式提高30﹪。对代码规模有严格控制的应用可
使用 16 位 Thumb 模式将代码规模降低超过 30%,而性能的损失却很小。
由于 LPC2101/2102/2103 非常小的尺寸和极低的功耗,它们非常适合于那
些将小型化作为主要要求的应用,多个 UART 、SPI 到 SSP 和 2 个 I2C 总线
组成的混合串行通信接口和片内 2kB/4kB/8kB 的 SRAM 一起作用,可使得
LPC2101/2102/2103 非常适合用来实现通信网关和协议转换器、数学协处理器以
及足够大空间的缓冲区的强大处理功能。而多个 32 位和16 位的定时器、一个
经改良后的 10 位 ADC 、PWM 特性(通过所有定时器上的一个输出匹配来实
现)和 32 个快速 GPIO (含有多达 9 个边沿或电平有效的外部中断管脚)使
它们特别适用于工业控制和医疗系统。开发板实物图如下所示:
图3.1 开发板实物图
ARM 的主要特性如下:
(1)16/32 位 ARM7TDMI ‐S 处理器,极小型 LQFP48 封装
(2)2kB/4kB/8kB 的片内静态 RAM ,8kB/16kB/32kB 的片内 Flash 程序
存储器,128 位 宽的接口/加速器使其实现了 70MHz 的高速操作。
(3)通过片内 Boot ‐loader 软件实现在系统/在应用编程(ISP/IAP)。Flash
编程时间:1ms ,可编程 256 字节,单个 Flash 扇区擦除或整片擦除只需 400ms 。
(4)EmbeddedICE RT 通过片内 RealMonitor 软件来提供实时调试。
(5) 10 位的 A/D 转换器含有 8 个模拟输入,每个通道的转换时间低至
2.44 s ,专用的结果寄存器使中断开销降到最低。
(6)2 个 32 位的定时器/外部事件计数器,具有 7 路捕获和 7 路比较通
道。
(7)2 个 16 位的定时器/外部事件计数器,具有 3 路捕获和 7 路比较通
道。
(8)低功耗实时时钟(RTC ),有独立的供电电源和专门的 32kHz 时钟输
入。
(9)多个串行接口,包括 2 个 UART (16C550),2 个快速 I2C 总线
(400kbits/s)以及带缓冲和可变数据长度功能的 SPI 和 SSP 。
(10)向量中断控制器,可配置优先级和向量地址。
(11)多达 32 个可承受 5V 的通用 I/O 口。
(12)高达 13 个边沿或电平有效的外部中断管脚。
(13)通过可编程的片内 PLL (可能的输入频率范围:10MHz ~25MHz )
可实现最大为70MHz 的CPU 时钟频率,设置时间为 100us 。
(14)片内集成的振荡器,工作在 1MHz ~25MHz 的外部晶体下。
(15)节电模式包括空闲模式、RTC 有效的睡眠模式和掉电模式。
(16)CPU 运行电源电压范围:3.0 V 到3.6 V (3.3 V ±10 %) ,I/O 口可承受5V 电压;
(17)通过外设功能的单独使能/禁止和调节外设时钟来实现功耗的最优化。
(18)通过外部中断或 RTC 将处理器从掉电模式中唤醒。
ARM 结构框图如下所示:
图3.2ARM 结构框图
ARM 管脚排列如下图所示:
图3.3ARM 管脚排列
3.3 软件设计
很多人都很很熟悉Keil 的C51 开发环境,当看到Keil forARM 的开发环境时,你会发现一切是那么熟悉,我们几乎不用关心汇编语言,可以直接进入C 语言编程。我们所要学习和了解的主要内容是熟悉片上设备的用法。Keil uVision 调试器可以帮助用户准确地调试ARM 器件的片内外围功能(I2C、CAN 、UART 、SPI 、中断、I/O 口、A/D 转换器、D/A 转换器 和PWM 模块等功能) 。ULINK USB ‐JTAG 转换器将PC 机的USB 端口与用户的目标硬件相连(通过JTAG 或OCD) ,使用户可在目标硬件上调试代码。通过使用Keil uVision IDE/调试器和ULINK USB‐JTAG 转换器,用户可以很方便地编辑、下载和在实际的目标硬件上测试嵌入的程序。支持Philips 、Samsung 、 Atmel 、 Analog Devices、 Sharp 、 ST 等众多厂商ARM7 内核的ARM 微控制器。
Keil fo rARM 的开发环境运行界面如下图所示:
图3.4 Keil for ARM用户界面
3.3.1启动Keil
进入Keil 开发环境,Keil 会自动加载上次开发的项目。现在我们可以在Keil 环境中使用ARM 的编译器了,所以在建来新项目前,我们要注意一下当前编译器是什么,点击Project 项的弹出窗口点击“Folders/Extensions” ,勾选Use RealView Compiler,我们使用ARM 公司的最新发行的编译器RealVfiew 。点击主菜单的Projcet 项的New Project。弹出文件对话窗如下所示:
图3.5弹出会话窗
选择新项目的文件夹,输入新项目名称,点击保存。出现设备选择窗口,找到NXP(founded by Philips)分类,点击前面的加号“+”展开,选择我们开发板对应的CPU 型号,例如LPC2103,如下图所示:
图3.6设备选择窗口
选择后设备如下图所示:
图3.7设备选择
点击“确定”按钮,弹出对话框,这是在询问是否需要把启动代码拷贝到目标文件夹并添加到项目中,我们选择“是”,这时候,开发环境已经为我们建立了一个只包含启动代码的空项目,对话框如下图所示:
图3.8弹出对话框
我们看到这个项目目前只包含一个汇编文件Startup.s 是启动代码,除非非常必要,否则我们不必修改这个文件,我们只要写C 语言就可以了,这是Keil 环境做的方便之处。
第四章 系统代码
1.RTC.C 程序:
#include
#include "TFT018.h"
#include
#define BP2 (1
#define BUZZER (1
#define BP9 (1
#define LED (1
unsigned int data,data2 ;
// 引入相关芯片的头文件
// 发光管接在P0.3引脚
#define LED (1
#define FPCLK 60000000 /*----------------------------------------------------------*\ | TYPE DEFINE | \*----------------------------------------------------------*/
typedef char S8;
typedef unsigned char U8;
typedef short S16;
typedef unsigned short U16;
typedef int S32;
typedef unsigned int U32;
typedef long long S64;
typedef unsigned long long U64;
typedef unsigned char BIT;
typedef unsigned int BOOL;
char s[20];
char z[20] ;
// int q=0;
//int p=1;
int i=0;//判断响的次数
int FLAG = -1;
enum weekday{sun,mon,tue,wed,thu,fri,sat} ;
enum weekday week=mon;
/*----------------------------------------------------------*\
| nuber to string |
\*----------------------------------------------------------*/
/*----------------------------------------------------------*\
| Realtime Initial |
\*----------------------------------------------------------*/
void RTCInit(void) {
PCONP |= 0x00000200; //RTC使能,默认为1使能,对其供电
CCR = 0x00000002;//CCR时钟控制寄存器
CIIR = 0x00000000; //ciir计数器增量中断使能寄存器
AMR = 0x000000FC;//AMR报警屏蔽寄存器
ILR = 0x00000003; //ILR中断位置寄存器
//PREINT = FPCLK / 32768 - 1;
//PREFRAC = FPCLK - (FPCLK / 32768) * 32768;
CCR = 0x00000011;
}
/*----------------------------------------------------------*\
| Set current time
\*----------------------------------------------------------*/
void SetNow(void) {
CCR = 0x00000002;//开始设置计数器禁止进行 初始化
YEAR = 2014;
MONTH = 1;
DOM = 10;
HOUR = 0;
MIN = 0;
SEC = 0;
CCR = 0x00000011; /////////////////////完成设置启动
}
/*void DecStr(char *s,int d) {
signed char t[20],i=0,l=0;
if(d==0)
{
s[0]='0';s[1]=0;return;
}
while(d>0) {
t[i++]=d%10;
d/=10;
}
s[i--]=0;
for(;i>=0;i--) {
s[i]=t[l++]+'0';
}
} */
/*----------------------------------------------------------*\
| Delay ns
\*----------------------------------------------------------*/
void DelayNS (U32 dly) {
U32 i;
for ( ; dly>0; dly--)
| |
for (i=0; i
}
/*----------------------------------------------------------*\
| ADC Initial |
\*----------------------------------------------------------*/
void ADCInit(void) {
PINSEL1 |= 3
}
void dly()
{ int j,i;
for (i=0;i
for(j=0;j
}
/*void Time1_init(void) {
T1TC=0; // 定时器1的初值设置为0
T1PR = 99; // 设置定时器分频为100分频,得600000Hz
T1MCR = 0x649; // 设置T1MR0、T1MR1、T1MR2、T1MR3匹配后继续计数, 并产生中断标志
T1MR0 = 600000/2; // 设置0.5s 匹配值
//T1MR1 = 600000; // 设置1.0s 匹配值
// T1MR2 = 600000*1.5; // 设置1.5s 匹配值
//T1MR3 = 600000*2.5; // 设置2.5s 匹配值
T1TCR = 0x01; // 启动计数
} */
void DELAY(long n)//延时程序
{
long i;
for(;n>0;n--)
for(i=0;i
}
/* void set()
{
if((IOPIN&BP2)!=BP2)//判断开关是否按下;开关未按下时P0.14引脚为高电平
{ while(p)
{
if(q==1){sprintf(s,"%4u",YEAR);
LCD_PutString(30,50,s,Green,Blue);
YEAR--;
DELAY(200);
p=0;
}
/* Time0_init(20,1000);
IOCLR=LED;
DELAY(200);
Time0_init(6000,12000);
IOCLR=LED;
DELAY(200);
IOSET=LED;
PINSEL0 = (PINSEL0 & 0xFFFF3FFF);
}
}
} */
void RTC_ISR(void) __irq //在ADS 开发环境中,中断服务程序要这样定义 void __irq EINT1_ISR(void) 注意irq 前面是两个下划线 /////////
{ FLAG = -FLAG; //修改标志变量
ILR = 0x02; //清除中断标志
VICVectAddr=0; //向量中断地址清0,中断结束
}
2. 报警设置:
void SetAlarm(void)
{ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CCR = 0x00000002; //时间计数器被禁止,此时准备进行初始化 ALYEAR = 2014;
ALMON = 1;
ALDOM = 6;
ALHOUR = 22;
ALMIN = 0;
ALSEC = 0;
CCR = 0x00000001; //RTC使能,对晶体振荡器的信号开始计数 }
void RTC_Init(void)
{////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //PCONP |= 0x00000200; //RTC使能,默认为1使能,对其供电
CCR = 0x00000010; //时间计数器被禁止,此时准备进行初始化 CIIR = 0x00000000; //设置计数器增量中断,0为禁止增量中断 AMR = 0x000000FC; //分钟、秒值与报警寄存器比较
ILR = 0x00000002; //清除中断标志。此句必须写,防止以前的中断标志导致初始化后立即发生中断。
PREINT = FPCLK / 32768 - 1;
PREFRAC = FPCLK - (FPCLK / 32768) * 32768;
VICIntSelect = VICIntSelect & (~(1
VICVectAddr0 = (unsigned long)RTC_ISR; //irq执行服务程序地址
VICIntEnable = 1
CCR = 0x00000001; //RTC使能,对FPCLK 或晶体振荡器的信号开始
计数
}
3. 主函数:
int main(void) { ///////////////////////////////////////////////////////////////
// char z[20];
unsigned int ADC_Data;//记录AD 转换的参数
//IODIR=LED; //设置LED 控制口为输出
//IOCLR=LED;
int t; //////////////////////////////////////////////////////////////////////////////////////////////// BacklightOn(); //背光on
LCD_Init(); //屏幕显示位置
LCD_Clear_Screen(Blue);
SetNow();
ADCInit();//ad入口
RTC_Init();
//SetNow();
SetAlarm();
///////////////////////////////////////////////////////////////////////////////////
/* 进行ADC 模块设置 */
ADCR = (1
((60000000 / 1000000 - 1)
(0
(0
DelayNS(10);
ADC_Data = ADGDR; // 读取ADC 结果,并清除DONE 标志位 //////////////////////////////////////改过
PINSEL0 = (PINSEL0 & 0xFFFF3FFF)|(2
// Font = 0;
//LCD_PutString(15,0,"LPC2101-03 开发板",Cyan,Blue);
// LCD_PutString(50,16,"RTC实验",Red,Yellow);
// Font = 1; 0
// LCD_PutString(38,32,"Version 2.0",Green,Blue);
// LCD_PutString(10,94,"智林测控技术研究所",Yellow,Blue);
// LCD_PutString(36,111,"www.the0.net",Magenta,Blue);
for(;;) {
ADCR |= 1
while ((ADGDR & 0x80000000) == 0); // 等待转换结束
ADCR |= 1
while ((ADGDR & 0x80000000) == 0); // 等待转换结束
ADC_Data = ADGDR; // 读取ADC 结果
ADC_Data = (ADC_Data >> 6) & 0x3ff;
ADC_Data = ADC_Data * 3300; // 参考电压3.3v
ADC_Data = ADC_Data / 1024;
4. 清屏设置:
if((IOPIN&BP9)==BP9){
sprintf(s,"%4u",YEAR);
LCD_PutString(30,50,s,Green,Blue);
YEAR--;
DELAY(50);
}
else{
if (FLAG == 1)
{
for(t=0;t
LCD_Clear_Screen(Red);
DELAY(20);
LCD_Clear_Screen(Green);
DELAY(20);
LCD_Clear_Screen(Blue);
}
FLAG = -FLAG;
}
5. 年月日进行设置:
if((ADC_Data/100)==0)
{ sprintf(s,"%4u",YEAR);
LCD_PutString(30,50,s,Green,Blue);
YEAR++;
DELAY(50);
//控件没有展开左边除掉右边按纽区域的矩形
}
else if((ADC_Data/100)==6){
sprintf(s,"%2u",MONTH);
LCD_PutString(70,50,s,Green,Blue);if(MONTH
else if((ADC_Data/100)==10){sprintf(s,"%2u",DOM);
//////////////////////////////
LCD_PutString(95,50,s,Green,Blue);
switch(MONTH) {
case2:
if((YEAR%4==0&&YEAR%100!=0)||(YEAR%400==0)){ if( DOM>28)DOM=0; }else {if(DOM>27)DOM=0;} ;break;
case 4: if( DOM>29)DOM=0; ;break;
case 6: if( DOM>29)DOM=0; ;break;
case 9: if( DOM>29)DOM=0; ;break;
case 11: if( DOM>29)DOM=0; ;break;
}
week++;
DOM++;
DELAY(50);
}
6. 时分秒进行设置:
else if((ADC_Data/100)==16){sprintf(s,"%2u",HOUR);
LCD_PutString(40,70,s,Green,Blue);if(HOUR
else if((ADC_Data/100)==19){sprintf(s,"%2u",MIN);
LCD_PutString(65,70,s,Green,Blue);if(MIN
MIN=0;;DELAY(40);}
else if((ADC_Data/100)==24){sprintf(s,"%2u",SEC);
LCD_PutString(90,70,s,Green,Blue);SEC=0;DELAY(50);}
else{sprintf(s,"%4u:%2u:%2u",YEAR,MONTH,DOM);
LCD_PutString(-50,50,s,0xF800,0xFFE0);
sprintf(s,"%2u:%2u:%2u",HOUR,MIN,SEC);
LCD_PutString(40,70,s,0xF800,0xFFE0);
sprintf(s," today is xingqi%2u",week=(week%7));
////////////////////////////////////////////////////////
LCD_PutString(62-(SEC+2),94,s,Yellow,Blue);
/////////////////////////////////////////////////////////////
LCD_PutString(0-(SEC+2),94," ",Blue,Blue);
LCD_PutString(1+SEC,111," made by sun li jia",Magenta,Blue);
LCD_PutString(0+SEC,111,".",Blue,Blue);
Font = 0;
7. 闰年的设置:
if((YEAR%4==0&&YEAR%100!=0)||(YEAR%400==0)){LCD_PutString(30,16,"A Leap year ",Red,Yellow);
if((MONTH==2)){Font = 0;
LCD_PutString(30,30,"A Leap moon ",Red,Yellow);}
//'''''''''''''''''''''''''''''''''runyue
else {LCD_PutString(30,30,"A Leap moon ",Blue,Blue);}//................qu diao
}
else {LCD_PutString(30,16,"A Leap year
",Blue,Blue);LCD_PutString(30,30,"A Leap moon ",Blue,Blue);
第五章 系统调试
5.1 硬件检测
将所需要的各项器件进行装配,装配完毕后调试。
5.2 功能调试
将写好的程序烧进板子上,灯亮,开始调试。
由于没能及时对结果取图作证,因此这里用示例图代替说明。如5-1所示。
图5-1
用此图来说明。
(1) 年,月,日,时,分,秒分别连接一个管脚,各由一个按钮
控制,按键可以调节其数值。
(2) 滚动字幕,由“LCD_PutString(1+SEC,111," made by sun li
jia",Magenta,Blue);LCD_PutString(0+SEC,111,".",Blue,Blue)”这段
语句控制,可以调节它的位置和颜色。
(3) 关于闰年的显示,通过:
“if((YEAR%4==0&&YEAR%100!=0)||(YEAR%400==0)){ if( DO
M>28)DOM=0; }else {if(DOM>27)DOM=0;”来判断;
case 4: if( DOM>29)DOM=0; ;break;
case 6: if( DOM>29)DOM=0; ;break;
case 9: if( DOM>29)DOM=0; ;break;
case 11: if( DOM>29)DOM=0; ;break;
}
week++;
DOM++;
DELAY(50); 判断并修改
(4) 关于数值的位置和颜色调整,
LCD_PutString(40,70,s,Green,Blue);if(HOUR
这段语句是调整数值的位置和颜色,即年,月,日,时,分,秒的调
整。
测试完毕后将各器件拆分放置好,并整理试验台。
沈阳工程学院课程设计报告 结论
结 论
这次设计的题目是基于LPC2103的日历电子钟设计。
本次实训我们组一共三人。刚开始拿到这个题目的时候,完全不知道从何下手,虽然我们这个学期学习了ARM 这门课,但是我们掌握的知识比较浅,没学到多少知识,但是在我们组长的带领下,我们通过在网上和图书馆找资料,我们有了思路,在老师给我们的程序样本基础上加以修改,终于实现了我们想要的功能。
虽然由于LPC2103板子的问题,我们有的功能无法按着原计划显示,但是我们换了一个思路,将无法显示的功能用另一种方式体现出来,也一样达到了目的。 在这期间,老师多次不厌其烦的帮助和开导也使我们加快了课设的完成。
通过这次课设,无论在编程还是对ARM 这门课的认识都有了新的理解,动手能力也提高了很多,课设让我们学的更快,更有效,感谢学校安排这样的课设来给予我们更多的知识。
沈阳工程学院课程设计报告 参考文献
主要参考资料(文献)
[1] 科尔特. LINUX设备驱动程序[M]. 北京:中国电力出版社,2005.
[2] 亚默. 构建嵌入式LINUX 系统[M]. 北京:中国电力出版社,2004.
[3] Jasmin Blanchette, Mark Summerfield. C++ GUI Programming with Qt3[M]. Prentice Hall in association with Trolltech Press, 2004.
[4] 陈帮鹏,王焕文. Linux操作系统之浅见[J]. 民营科技,2007,13(2): 38-51.
[5] 马宁,于洪志. Linux的民文化艺术[J]. 西北民族大学学报,2005,43(3): 1-6.
[6] 《ARM 嵌入式系统实验教程(三)》周立功 等编著,北京航空航天大学出版社
[7]《ARM 嵌入式系统学习指导》周立功 等编著,北京航空航天大学出版社
[8]《嵌入式实时操作系统µC-OS Ⅱ》(第2版) [美]Jcan J,Latbrosse 著,邵贝贝 等译,北京航空航天大学出版社
[9]《ARM 体系结构与编程》杜春雷 编著,清华大学出
沈阳工程学院课程设计报告 结论