嵌入式操作系统---Windows_CE-天津大学-36页精选文档
- 格式:ppt
- 大小:276.50 KB
- 文档页数:36
Blinky实验一、建立Keil工程1.选择Project→New uVision Project命令,弹出Create New Project 对话框,指定工程路径并在文件名文本框中输入Blinky,如图1所示。
图12.单击“保存”按钮,弹出Select Device for Target 窗口,在左侧的列表框中选择CPU的类型(Philips的LPC2138芯片),右边对应出现该芯片的资源描述,如图2所示。
图23.单击OK按钮,出现如图3所示提示信息(是否复制启动代码到工程文件夹并添加文件到工程中)。
这里的启动代码是依据设置的编译器而生成的。
图34.单击是按钮添加启动代码,此时启动代码已经添加到工程中,左侧的Project Workspace 中显示添加的启动代码文件,双击Startup.s可查看代码,如图4所示。
图45.在工作空间中选中Target 1,单击右键从弹出菜单选择Add Group,分别添加System Calls 和 Source Code两个文件夹,然后右键从弹出菜单选择Add Files to Group“System Calls/Source Code”命令分别为其添加retarget.c和blinky.c文件,如图5所示。
图5二、进行工程配置1.在工作空间选择Target1 右键选择Options for Target‘Target1’命令,弹出对话框如图6所示,设置Xtal为8MHz。
图62.单击Output标签,再单击Create Hex File前面的单选按钮,如图7所示。
可生成hex格式可执行文件,再单击Select Folder for Objects按钮,指定输出文件路径。
图73.单击Listing标签,再单击Select Folder for Listings按钮,指定生成的list文件的输出路径,然后单击Assembler Listing和Linker Listing前面的单选按钮,如图8所示。
WinCE实验教程之一嵌入式系统简介嵌入式这个词现在变得越来越流行,然而关于它的很多概念可能还有一大部分人不是很明确,在本文中,我们不追求具体的概念是否准确,而是要对其有一个准确的理解。
嵌入式系统是不同于常见计算机系统的一种计算机系统,它不以独立设备的物理形态出现,即它没有一个统一的外观,它的部件根据主体设备以及应用的需要嵌入在设备的内部,发挥着运算、处理、存储以及控制作用。
从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。
其中嵌入式处理器通常是单片机或微控制器;支撑硬件主要包括存储介质、通信部件和显示部件等;嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件以及应用中间件等。
可见,嵌入式系统是一个很大的概念,一旦嵌入式处理器和支撑硬件选定了,那么工作最多的就集中在嵌入式软件当中了。
而嵌入式软件中的嵌入式操作系统部分和应用软件部分就成了重中之中。
它们与通常说的操作系统与应用软件的概念是相似的,但也有区别。
嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统如Windows CE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm OS、Symbian等。
从实时性的角度看,大致可以分为实时嵌入式操作系统和一般嵌入式操作系统。
从原理上说,嵌入式操作系统仍旧是一种操作系统,因此它同样具有操作系统在进程管理、存储管理、设备管理、处理器管理和输入输出管理几方面的基本功能,但是由于硬件平台和应用环境与一般操作系统的不同,那么它也有自身的特点,最大的特点就是可定制性,也就是它能够提供可配置或可剪裁的内核功能和其他功能,可以根据应用的需要有选择的提供或不提供某些功能以减少系统开销。
前已述及,微软公司的Windows CE操作系统就是一种嵌入式操作系统,它1996年开始发布Windows CE 1.0版本,2004年7月发布了Windows CE .NET 5.0版本,目前用得最多的是Windows CE .NET 4.2版本,其发展速度也是很快的,功能上自不必描述,它的主要应用领域有PDA市场、Pcket PC、Smartphone、工业控制、医疗等。
2013-2014-(2)-Embedded System
《嵌入式系统设计》
实验报告
成绩:
评阅人:
学院:计算机科学与技术
专业:计算机科学与技术
年级:2011级
学生:童浏靓/ 3011216104
邱碧茹/ 3011216076
日期:2014年5月
1.实验内容:
实验内容描述。
参考:《嵌入式系统实验指导书》
注:前几个实验汇总为一个实验报告,综合实验单独一个报告。
2.实验系统框图:
参考:《嵌入式系统实验指导书》
3.软件设计:(综合实验)
软件各组成部分的说明,整体软件流程图,可附少量你自己修改过的代码。
4.实验结果和效果描述:
对实验完成后的结果或效果进行描述。
5.实验心得:
你在本次实习中的心得体会或任何你想说明的其他问题。
《WinCE嵌入式操作系统》课程代码:32030241学位课程/非学位课程:非学位课学时/学分:38/2.5先修课程:汇编语言、微机原理与接口技术、ARM体系结构适用专业:信息工程课程简介WinCE嵌入式操作系统是高等学校电类专业的一门重要的专业选修课,是深入学习专业课程的必备基础,其理论和方法是以EVC工具的使用、 Windows CE的开发技术以及VC语言的编程为基础研究嵌入式系统设计仿真和测试方法和实现。
开设WinCE嵌入式操作系统课程,不仅可以在原先ARM与嵌入式技术上,丰富学生嵌入式系统设计的知识,而且能够给信息工程类专业学生对嵌入式系统的设计,仿真和测试提供一个全新的手段和方法,并运用所学知识去分析、设计和测试嵌入式系统。
因此,WinCE嵌入式操作课程既是一门基础性课程,能培养学生扎实的程序设计基础;又是一门“工具”或“方法”性课程,能培养学生利用计算机软件对嵌入式系统的设计、仿真、时序仿真和硬件测试技术的能力和素质。
一、教学目标1、知识水平教学目标通过ARM体系结构设计课程的学习,学生应获得EVC技术和VC硬件编程语言的基本概念及其应用、EVC设计流程及其工具、VC基本语句和设计方法和设计优化等方面的基本概念、基本理论、基本方法和设计技能,为今后学习DSP等课程,以及从事嵌入式设计工作奠定必要的基础。
2、能力培养目标通过本课程的学习,学生应获得如下能力:(1)使用常用EVC工具的使用方法、Windows CE的开发技术以及VC语言的编程方法,同时能较好地使用VC语言设计简单的嵌入式系统,学会多线程和串口通信技术;(2)会应用EVC软件等常用软件对进行简单的嵌入式系统的设计;(3)主动探索和独立思考的能力,提高学生的嵌入式软件设计和创新意识。
3、素质培养目标通过本课程的学习,应注意培养学生以下素质:(1)善于对嵌入式开发过程进行合理的简化和量化,建立编程模型的素养;(2)能用准确、简明、规范的使用编程语言编程的素养;(3)深入理解嵌入式系统分析、设计、综合、测试基本方法,掌握用软件的方法解决嵌入式系统设计中的实际问题的方法与手段,对各种问题能以多角度探寻解决问题的道路的素养。
实验一Windows CE平台的构建与配置一.实验箱线缆的连接1.连接JTAG线缆:用JTAG线缆将EELIOD系统上的M-CON7(XSBase270-Moudule板上)接口与主机的并口相连。
具体如下图所示。
2.连接串口线缆:该系统使用M-CON5做调试串口。
请将系统所提供的串口线与EELIOD系统MOUDLE板上面的CON5直接相连,另外一端和PC主机上的串口连上。
具体如下图所示。
3.连接交叉的以太网线:用提供的交叉的网线把EELIOD系统上的LAN 口,E-CON14,与主机端网口连接起来。
4.连接电源线缆:用提供的220V电源线连接到220V进行供电。
(当前先不用连接USB Slave线)。
二.超级终端的设置在EELiod中,调试信息是通过串口输出的。
超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。
1.运行超级终端2. 键入一个新的连接的名称3. 选择串口1(或串口2)作连接用,然后按下OK按钮4. 参照下图配置串口1的特性,然后按下OK按钮三.使用H-Jtag烧写EBootH-JTAG软件是免费JTAG调试和Flasher擦写软件,通过并口线连接目标板。
此软件针对EEliod开发平台和XSBASE 270-S开发板(或其它PXA270的开发板),需要进行配置才能正常工作。
1.正常连接下载线到目标板,并给目标板上电。
点击开始菜单->H-JTAG->H-JTAG 运行程序,程序首次启动后,界面如下图3。
如果程序此时提示没有检测到目标板,则需要重新确认目标板是否上电,以及连接线是否连接好,然后点击工具栏上的第二个(放大镜形状的)按钮。
重新检测目标板。
知道能够正确检测到目标板才能进行下面操作。
注意,如果计算机用的并口不是LPT1,则需要在“setting”菜单中进行选择。
The success's road嵌入式操作系统 WinCE华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见初识WinCEWinCE的发展历程 v WinCE的系统特性 v WinCE的体系架构 v WinCE的系统分层结构v华清远见WinCE的发展历程CedarWindows CE 3.0 4/2000Pegasus/AlderWindows CE 1.0 11/1996MacallanWindows CE 5.0 8/2004Tomatin NMD FPSP1 SP2 2.11 2.12 BirchWindows CE 2.0 11/1997Jameson McKendric 4.2 4.1 TaliskerWindows CE .NET 4.0 1/2002YamazakiWindows CE 6 H2/2006华清远见WinCE的发展历程v 1996年,微软32位的WinCE 1.0;卡西欧推出第一款蛤壳式PDA.由于不够稳定而备受指 责. v 2000年,一个名为“共享源代码计划”的共享 成功商业模式在WinCE 3.0基础上推出; 此时 更多的硬件厂商HP、Compaq、Casio等加入 Pocket PC阵营的包括.它们的加入使该系统 逐渐走向成熟. v 2002年,WinCE4.0 继承了良好的发展势头. v 当前主流版本WinCE5.0 v 最新的版本WinCE6.0华清远见WinCE的系统特性v Microsoft 在嵌入式OS方面的主打产品. v 友好的用户界面. v 32位的多任务,多线程的系统. v 强劲的实时性 v 强大的联网能力, 移动特性 v 丰富的多媒体应用 v 支持多种主流CPU.(ARM,MIPS,X86…) v 精简化的WIN32API,便捷的开发环境华清远见WinCE的系统结构华清远见WinCE的体系架构v 借鉴了Windows2000/XP操作系统的设计风格. v 采用分层模型,使整个系统的层次更加 清晰,定制更加方便. v WinCE5.0同时能够支持32个进程. v WinCE5.0每个进程支持32M的虚拟内 存.华清远见WinCE的分层结构应用层 (如网络应用,文本编辑器等) 应用开发层 (MFC,ATL,COM/DCOM,.NET…) 应用支持库 (COMM,GWES,STORAGEMANAGE..) 操作系统层 (CoreDll,Schedule,Memory,Device) OEM适配层 (BSP,CSP,Drivers) 硬件层华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见WinCE广泛的行业应用华清远见WinCE广泛的行业应用v v v v v v v v移动电话/智能电话 数字成像设备 工业自动化设备 Internet/媒体设备 PDA/移动手持设备 住宅门禁/ POS设备 顶置盒 Web板设备华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见WinCE方便的开发平台v 开发工具: Platform Builder v 提供了所有的设计,创建,修改和调试的工具 v 提供了方便的系统定制和驱动开发功能 v 界面友好,使用方便.华清远见WinCE方便的开发平台华清远见内容安排v 初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发 v 华清远见WinCE BSP培训课程华清远见WinCE BSP的开发v BSP的概念 v BSP的主要元素和基本功能 v BSP的开发流程华清远见WinCE BSP的概念v BSP 板级支持包(Board Support Package) v 组成: 启动程序(Boot loader),OEM适配层程序及驱动程序和配置文件 v 存在形式: 源文件,库文件和一些二进制 文件; v 用途:通过Platform Builder,根据特定的 BSP,可以生成针对不同开发板(SDB)的特 定的操作系统镜像;华清远见WinCE BSP的元素和功能华清远见WinCE BSP的元素和功能构成元素 Boot loader OEM adaptation layer 功能说明 完成将操作系统映像下 载到设备存储器的功能 和操作系统内核相连 接,完成硬件的初始化 和管理功能。
嵌入式课程(设计文档)题目:数字电子时钟设计学院专业学号年级姓名2011 年 12月 14 日数字电子时钟设计一实现功能1 基本的数字时钟计时功能2 时间设定功能3 闹钟功能二设计思路数字时钟在lcd上显示,分为三个部分:时钟,分钟和秒钟,为照顾整体美观性,时钟和分钟为统一大字体,在lcd上用矩形拼凑而成,秒钟为小字体,在lcd上用线画出。
秒钟满60自动分钟加一,秒钟重计。
分钟满60后时钟自动加一,分钟重计。
时钟满二十四后自动清零。
在初始时候可以从键盘中输入时钟的时和分进行时间的设定,数字时钟在lcd上显示此时间并以此为基础进行计时。
此时钟还有设定闹钟功能,按下开关键sw2由超级终端开始提示输入闹钟时间并亮起led4,由键盘输入设定时间后当时间到达此设定时间则响起闹钟铃声,关闭sw2,则闹钟停止。
三硬件支持实验设计由MX1下的lcd显示屏,led灯,键盘,开关,音频播放器以及RS232串口通信支持。
四源代码分析#include "INCLUDES.H"#include "mx1_aitc.h"#include "IRQ.h"#include "mx1_gpio.h"#include "mx1_uart.h"#include <string.h>#include "misc.h"#include "mx1_lcdc.h"#include "mx1_ssi.h"#include "wave.h"#include "switch.h"#include "led.h"extern void OSStartTimeTick( void );extern void OSTickISR( void );int sec_1=0,sec_2=0, min_1,min_2,hour_1,hour_2,i;/* 定义所需要的变量*//* 下面定义几个函数*/void Showtime_sec_1(int sec_1)/* 用于显示秒钟第一位的函数*/{MX1_LCDC_DrawRect( 240,0, 280,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第一位的屏幕*/switch(sec_1){case(0):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,250,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, LS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 35, 31, FS_SOLID );MX1_LCDC_DrawLine(250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 250, 5,250, 20, 31, LS_SOLID );MX1_LCDC_DrawLine( 250, 20,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 20,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );}}void Showtime_sec_2(int sec_2)/* 用于显示秒钟第二位的函数*/{MX1_LCDC_DrawRect( 280,0, 320,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第二位的屏幕*/switch(sec_2){case(0):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,290,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(6):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(7):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(8):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(9):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );}}void Showtime_min_1(int min_1)///* 用于显示分钟第一位的函数*/{MX1_LCDC_DrawRect( 170,40, 240,200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新分钟第一位的屏幕*/switch( min_1){case(0):MX1_LCDC_DrawRect( 170, 40,230, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 112,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 112,230,200, 31,31, LS_SOLID,FS_SOLID );}}void Showtime_min_2(int min_2)/* 用于显示分钟第二位的函数*/{MX1_LCDC_DrawRect( 240, 40, 320, 200, 50, 50, LS_SOLID,FS_SOLID );/* 刷新分钟第二位的屏幕*/switch(min_2){case(0):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 40,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 112,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );break;case(3):MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_1(int hour_1)/* 用于显示时钟第一位的函数*/{MX1_LCDC_DrawRect( 10, 40, 70, 200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch( hour_1){case(0):MX1_LCDC_DrawRect( 10, 40,70, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 10, 40,70,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(10,112,70,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(55, 40,70, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 112,25, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_2(int hour_2)/* 用于显示时钟第二位的函数*/{MX1_LCDC_DrawRect( 90, 40, 80, 150, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch(hour_2){case(0):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 40,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 112,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );}}void change(char tmp)/* 将从键盘输入的字符转为整数的函数*/{switch(tmp){case('0'):i=0;break;case('1'):i=1;break;case('2'):i=2;break;case('3'):i=3;break;case('4'):i=4;break;case('5'):i=5;break;case('6'):i=6;break;case('7'):i=7;break;case('8'):i=8;break;case('9'):i=9;}}/* 下面定义两个任务*/#define STK_SIZE_TASK1 256 /* 分配给任务的堆栈大小 */#define STK_SIZE_TASK2 256#define PRIO_TASK1 3 /* 任务的优先级 */#define PRIO_TASK2 4OS_STK StkTask1[STK_SIZE_TASK1]; /* 为任务分配堆栈空间 */OS_STK StkTask2[STK_SIZE_TASK2];void YourTask1( void *pdata )/* 任务一用于显示从键盘输入时间和基本的时钟功能*/{char tmp1,tmp2,tmp3,tmp4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断(必须在第一个运行的任务里进行) */OSStartTimeTick();/* 在下面添加任务内容 */MX1_LCDC_DrawRect(0,0,320,240, 50,50, LS_SOLID, FS_SOLID);MX1_UART_Init( COM1 );MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp1 );change(tmp1);hour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp2 );change(tmp2);hour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp3 );change(tmp3);min_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp4 );change(tmp4);min_2=i;Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 显示从键盘的输入时间,实现功能一*/MX1_LCDC_DrawCircle(160, 100,5, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawCircle(160, 160,5, 31,31, LS_SOLID, FS_SOLID );while( 1 ){OSTimeDlyHMSM( 0, 0, 1, 0);/* 延时一秒后秒钟加一*//* 下面为实现时钟的逻辑*/sec_2++;if(sec_2>9){sec_1++;sec_2=0;}if(sec_1>5){min_2++;sec_1=0;}if(min_2>9){min_1++;min_2=0;}if(min_1>5){hour_2++;min_1=0;}if(hour_2>9){hour_1++;hour_2=0;}if(hour_1==2&&hour_2==4){hour_1=0;hour_2=0;}Showtime_sec_1(sec_1);Showtime_sec_2(sec_2);Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 实现基本时钟功能即功能二*/}}/* 任务二实现闹钟功能*/void YourTask2(void *pdata){int sethour_1,sethour_2,setmin_1,setmin_2;int j=1;char tmpl1,tmpl2,tmpl3,tmpl4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断 */OSStartTimeTick();MX1_UART_Init( COM1 );WAVE_Init( WAVE_BASE_DEFAULT );LED_Init( LED3 );SWITCH_Init( SW2 ); /* 初始化开关 */while(1){if( SWITCH_IS_ON( SW2 )&&j==1 )/* 如果开关二按下超级终端提示依次输入闹钟时间*/{ LED_On( LED4 );j++;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl1 );change(tmp1);sethour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl2 );change(tmp2);sethour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl3 );change(tmp3);setmin_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl4 );change(tmp4);setmin_2=i;}elseLED_Off( LED4 );if(hour_1==sethour_1&&hour_2==sethour_2&&min_1==sethour_1&&min_2==sethour_2 )/* 达到闹钟时间后开始放音乐*/{WAVE_Play( );OSTimeDlyHMSM( 0, 0, 0, 500);}}}/* 初始化后,从这里开始执行C代码 */int __main( void ){unsigned int palette[LCDC_CMRAM_SIZE];int i;MX1_AITC_Init(); /* 初始化中断控制器 */IRQ_Init(); /* 初始化中断管理 */OSInit(); /* 初始化uC/OS-II内核数据结构 */MX1_GPIO_Init( MX1_GPIO_PC );MX1_SSI_Init( MX1_SSI1 );//初始化LCDMX1_LCDC_Init(LCDC_PANEL_WIDTH, LCDC_PANEL_HEIGHT,LCDC_INIT_STARTX, LCDC_INIT_STARTY, LCDC_VPW, LCDC_PANEL_CONF, LCDC_BPP );// 初始化调色板for( i=0; i<16; i++ ){palette[i] = RGB( i, 0, 0 );palette[i+16] = RGB( 0, i, 0 );palette[i+32] = RGB( 0, 0, i );palette[i+48] = RGB( i, i, i );}MX1_LCDC_CMRAM_Set( palette );/* 建立一个任务 */OSTaskCreate( YourTask1, 0, &StkTask1[STK_SIZE_TASK1-1], PRIO_TASK1 );OSTaskCreate( YourTask2, 0, &StkTask2[STK_SIZE_TASK2-1], PRIO_TASK2 );OSStart(); /* 开始调度 */return 0;}五实验现象初始化后,超级终端显示提示时间设定,由键盘输入后,开始计时功能,屏幕上显示时,分,秒在计时阶段若打开开关sw2则提示输入设定闹钟值,输入后当时间到达闹钟值时音乐响起,关闭sw2,则闹钟停止。