资源描述
河海大学本科课程设计报告河海大学本科课程设计报告- 1 -河河海海大大学学计计算算机机及及信信息息工工程程学学院院(常常州州)课课程程设设计计报报告告 题题 目目 基基于于LCD 的的电电子子时时钟钟 专专业业学学号号 电电子子信信息息工工程程 0962610222 授授课课班班号号 277701 学学生生姓姓名名 王王宁宁 指指导导教教师师 梁梁瑞瑞宇宇 完完成成时时间间 2012.5.18 河海大学本科课程设计报告河海大学本科课程设计报告- 2 -课程设计(报告)任务书课程设计(报告)任务书(理(理 工工 科科 类)类)、课程设计(报告)题目: 基于基于 LCD 的电子时钟实验的电子时钟实验 、课程设计(论文)工作内容一、课程设计目标一、课程设计目标 1、培养综合运用知识和独立开展实践创新的能力;2、培养学生将理论知识与实际应用结合在一起;3、培养学生的自我学习能力和解决问题的能力;4、培养学生的协作意识和团队合作能力;5、培养学生的总结经验的能力。二、研究方法及手段应用二、研究方法及手段应用1、问题解决模块化,将任务分成若干模块,分模块调试和完成任务;2、查阅网上的相关素材,查阅相关论文资料,进行比较、研究;3、在独立思考的基础上,请教老师,和同组同学讨论、学习;4、反复调试、总结经验、排除差错;5、连接 PC 和 EL-ARM-830 实验箱,完成整个实验环境搭建;6、运用 Code Warrior for ARM 编译软件编译汇编语言和进行调试;7、使用 H-JTAG 下载至硬件进行观察、调试。三、课程设计预期效果三、课程设计预期效果1、在液晶屏上显示表盘,和时间点和时、分、秒针;2、在液晶屏上显示时、分、秒、年、月、日;3、在液晶屏上实现指针的动态图像;4、可以实现自己设定的初始时间。学生姓名: 王宁 专业年级: 09 电子信息工程 河海大学本科课程设计报告河海大学本科课程设计报告- 3 -目目录录前言前言.4 4第一章系统设计第一章系统设计.5 5第一节课题目标及总体方案第一节课题目标及总体方案.5 5第二节相关组件说明第二节相关组件说明.5 5第三节项目设计模块描述及流程图第三节项目设计模块描述及流程图.7 71.1.主函数模块主函数模块.8 82.2.时钟表盘的构建模块时钟表盘的构建模块.8 83.3. 表盘下日期的显示模块表盘下日期的显示模块.9 94.4.任务运行模块任务运行模块 10第二章第二章结果与显示结果与显示.1111结果显示结果显示.1111心得体会心得体会.1212参考文献参考文献.1313附附 录录.1313河海大学本科课程设计报告河海大学本科课程设计报告- 4 -前前 言言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的 IT 应用领域之一。实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出。这些新品不仅具有准确的 RTC,还有大容量的存储器、温度传感器和 A/D 数据采集通道等,已成为集 RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。关键字:嵌入式系统、实时时钟 RTC河海大学本科课程设计报告河海大学本科课程设计报告- 5 -第一章系统设计第一章系统设计第一节课题目标及总体方案第一节课题目标及总体方案随着嵌入式技术的发展,我们身边充斥着各类各样的嵌入式电子产品。实时时钟(RTC)就是一种在现代电子设备中应用非常普遍,可以帮助人们实时、准确的掌握时间的器件,如手机、PDA 及一些智能仪表都提供了时钟显示。我们本次课题的目标就是要基于 S3C44BOX 芯片设计出一个实时时钟,编写汇编语言可以通过 Code Warrior for ARM 软件调试,然后下载至实验箱内进行观察。在试验箱中的 LCD 液晶屏幕上显示出时钟的圆盘和动态的指针,并在时钟下方显示出当前的年份和日期。另外,我们将要实现的系统分为几个模块实现,每个模块间相对独立而又相互联系,在主函数中进行调用。 第二节相关组件说明第二节相关组件说明一、一、LCD 显示原理显示原理S3C44B0X 中具有内置的 LCD 控制器,它能将显示缓存(在 SDRAM 存储器中)中的 LCD 图像数据传输到外部的 LCD 驱动电路上的逻辑功能。它支持单色、4 级、16 级灰度 LCD 显示,以及 256 彩色 LCD 显示。在显示灰度时,它采用时间抖动算法(time-based dithering algorithm)和帧率控制 (Frame Rate Control)方法,在显示彩色时,它采用 RGB 的格式,即 RED、GREEN、BLUE,三色混合调色。通过软件编程,可以实现 233 或 332 的 RGB 调色的格式。对于不同尺寸的 LCD 显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对 LCD 控制器中的相应寄存器写入不同的值,来配置不同的 LCD 显示板。本次课设的显示模式设置为 8bit 单扫描模式。河海大学本科课程设计报告河海大学本科课程设计报告- 6 -二、项目文件说明二、项目文件说明本实验使用实验教学系统的 CPU 板,液晶显示器(LCD) ,在 LCD 下方,有一个可调电阻,标号为 VR2,它用来调整 LCD 的对比度及亮度。在 LCD 的右下方,有一个黄头的按键,它用来开关 LCD,它的标号为 LCD_ON/OFF。该项目添加了包含 LCD 驱动程序的文件夹 Gui,其中,包括四个文件夹,Font 中存放的是字体文件,Glib 中存放绘图的中层和上层的函数,上层函数是直接供用户调用的 API,Init 中存放 GUI 初始化的函数,Lcddriver 中存放的是 LCD 的底层驱动函数。以及对 LCD 控制器的初始化函数。把 LCD驱动程序加入的过程,也就是把整个 GUI 文件夹加入该项目里,同时,还要在 ApplicationINC 目录下的 config.h 文件中,加入 GUI 程序的头文件,#include .GuiGlibGlib.h,这是为了在应用中方便调用画图的API 函数。如果,要在 LCD 上显示英文或汉字,还要在ApplicationSRCMain.c 中声明引用的是 extern GUI_FONT CHINESE_FONT12;等外部定义过的字体。图 1河海大学本科课程设计报告河海大学本科课程设计报告- 7 -第三节项目设计模块描述及流程图第三节项目设计模块描述及流程图1.1.模块描述:模块描述:我先进行了整个系统的规划,将整个系统分为四大模块:第一,主函数模块;第二,时钟表盘的构建模块,包括:设置液晶全屏背景色、绘制时钟表盘形状并着色、绘制表盘内 12 个点的形状并着色以及绘制表盘内指针的形状并着色;第三,表盘下日期的显示模块,包括:定位表盘下时间和日期的坐标和日期显示函数的编写;第四,任务运行模块。2 2.流程图流程图:河海大学本科课程设计报告河海大学本科课程设计报告- 8 -一、主函数模块一、主函数模块二、时钟表盘的构建模块二、时钟表盘的构建模块(1)绘制时钟表盘形状并着色(2)绘制表盘内 12 个点的形状并着色河海大学本科课程设计报告河海大学本科课程设计报告- 9 -(3)绘制表盘内指针的形状并着色(以秒针为例)三、表盘下日期的显示模块三、表盘下日期的显示模块(1)定位表盘下时间和日期的坐标(仍以秒计时为例)(2)日期显示函数的编写河海大学本科课程设计报告河海大学本科课程设计报告- 10 -四、任务运行模块四、任务运行模块河海大学本科课程设计报告河海大学本科课程设计报告- 11 -第二章第二章结果与结果与显示显示结果显示结果显示1.经过多次的调试和排查,以及总结,使用编译器编译,编译器提示编译文件正确,没有出现任何错误,没有出现任何警告,而且编译出文件容量很小,下载迅速,符合软件设计要求。河海大学本科课程设计报告河海大学本科课程设计报告- 12 -2.下面的图片是从实验箱上的 LCD 屏幕上显示的图像拍下来的,也就是我本次课程设计的成果。从图片显示上可以看出,所有预计实现的功能和界面都实现了。表盘显示在相对中央的地方,整个屏幕以白色为基调,表盘底色为灰色,指针为红、绿、黄三种颜色,点数为绿色,表盘下方显示当前时间、日期,同时界面很漂亮,色彩对比很鲜明。 图 2效果显示图心得体会心得体会说实话, 刚开始拿到课设题目的时候感觉 毫无头绪,即使在查阅了大量相关资料的基础上。后来,手上有了一份参考程序,打开一看,顿时懵了。当时想如果纯粹靠我自己或者和同学讨论,恐怕很难完成这次课设吧。于是,实验室刚开放,我就立刻去调试程序,通过观察试验箱上显示的结果来理解程序。一个模块一个模块对应的理解下去之后,思路开始清晰起来。每当遇河海大学本科课程设计报告河海大学本科课程设计报告- 13 -到一行程序不懂或者有疑问时,比如这行程序起什么作用、可不可以删掉或者可不可以换个位置,我都通过程序的相关改动结合实验结果的观察将这些疑问解决掉了。同时,同学的帮助也给了我很多的启发,非常感谢他们。但不得不承认,关于 C/OS-II 操作系统方面理解的很不透彻。验收时,我只是把时钟界面的构建部分理解了,没有过多的加深对操作系统C/OS-II 的学习,所以验收时对于老师的提问也是磕磕绊绊。因而,在编写这份报告前,我又认真地上网搜索了 C/OS-II 操作系统的简介,尤其是它的优点和任务调度方面。在写这份报告时,我也许还没能完全弄懂C/OS-II 操作系统,但我相信,只要努力过,总会有收获。参考文献参考文献 吴学智, 基于 ARM 的嵌入式系统设计与开发 人民邮电出版社,2007金建设, 嵌入式系统基础实验大连理工大学出版社,2009王晓薇, 嵌入式硬件基础实验与习题解答电子工业出版社,2009附附录录河海大学本科课程设计报告河海大学本科课程设计报告- 14 -1.软件清单:1)Code Warrior for ARM 编译软件;2)AXD Debugger 调试软件;3)H-JTAG 软件;2.硬件:PC 和 EL-ARM-830 实验箱;程序清单:#include .incconfig.h#define x_line 160#define y_line 80extern GUI_FONT CHINESE_FONT12;extern GUI_FONT CHINESE_FONT16;extern GUI_FONT GUI_Font8x16;I8 Hour3,Min3,Sec3;I8 hour = 9, min = 0, sec = 0,ms;I8 YEA13,YEA23,MON3,DAY3;int yea1 = 20,yea2=12, mon = 5, day = 18;I8 XH13,XH23,XH33,XH43,XH53,XH63,XH73;int xh1=9,xh2=62,xh3=61;int xh4=02,xh5=19,xh6=22,xh7=23;河海大学本科课程设计报告河海大学本科课程设计报告- 15 -/SpaceXS61、SpacYS61分别表示秒针的横坐标、纵坐标/SpaceXM61、SpaceXM61分别表示分针的横坐标、纵坐标/SpaceXH13、SpacYH13 分别表示时针的横坐标、纵坐标int SpaceXS61=160,165,170,175,180,185,189,193,197,201,205,206,207,208,209,210,209,208,207,206,205,201,197,193,189,185,180,175,170,165,160,155,150,145,140,135,131,127,123,119,115,114,113,112,111,110,111,112,113,114,115,119,123,127,131,135,140,145,150,155,160, , SpaceYS61=30,31,32,33,34, 35,39,43,47,51, 55,60,65,70,75, 80,85,90,95,100, 105,109,113,117,121, 125,126,127,128,129, 130,129,128,127,126, 125,121,117,113,109, 105,100,95,90,85, 80,75,70,65,60, 55,51,47,43,39, 35,34,33,32,31,30, SpaceXM61=160,164,168,172,176,180,183,186,189,192, 195,196,197,198,199,200,199,198,197,196,河海大学本科课程设计报告河海大学本科课程设计报告- 16 - 195,192,189,186,183,180,176,172,168,164, 160,156,152,148,144,140,137,134,131,128, 125,124,123,122,121,120,121,122,123,124, 125,128,131,134,137,140,144,148,152,156, 160 , SpaceYM61=40,41,42,43,44,45,48,51,54,57, 60,64,68,72,76,80,84,88,92,96, 100,103,106,109,112,115,116,117,118,119, 120,119,118,117,116,115,112,109,106,103, 100,96,92,88,84,80,76,72,68,64, 60,57,54,51,48,45,44,43,42,41, 40 , SpaceXH13=160,175,185,190,185,175,160,145,135,130,135,145,160, SpaceYH13=50,55,65,80,95,105,110,105,95,80,65,55,50,/当前要显示的时间的 3 个指针的坐标取地址。 *Placex=&SpaceXS0,*Placey=&SpaceYS0,*Placexm=&SpaceXM0,*Placeym=&SpaceYM0, *Placexh=&SpaceXH9,*Placeyh=&SpaceYH9;/显示学号函数 void Display_xh1(char xx1,char yy1);void Display_xh2(char xx2,char yy2);void Display_xh3(char xx3,char yy3);/show s and m and hvoid Shows() Set_Color(GUI_GRAY); /擦除上一秒的 Draw_Line(x_line,y_line,*Placex,*Placey); Placex=Placex+1; Placey=Placey+1;河海大学本科课程设计报告河海大学本科课程设计报告- 17 - Set_Color(GUI_YELLOW); /显示下一秒的 Draw_Line(x_line,y_line,*Placex,*Placey); Set_Color(GUI_RED); /显示下一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym); Set_Color(GUI_GREEN); /显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); if(Placex=&SpaceXS60&Placey=&SpaceYS60) Placex=&SpaceXS0; Placey=&SpaceYS0; /show munite and hourvoid Showm() Set_Color(GUI_GRAY); /擦除上一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym); Placexm=Placexm+1; Placeym=Placeym+1; Set_Color(GUI_RED); /显示下一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym); Set_Color(GUI_GREEN); /显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); if(Placexm=&SpaceXM60&Placeym=&SpaceYM60) 河海大学本科课程设计报告河海大学本科课程设计报告- 18 - Placexm=&SpaceXM0; Placeym=&SpaceYM0; /show hourvoid Showh() Set_Color(GUI_GRAY); /擦除上一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); Placexh=Placexh+1; Placeyh=Placeyh+1; Set_Color(GUI_GREEN); /显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); if(Placexh=&SpaceXH12&Placeyh=&SpaceYH12) Placexh=&SpaceXH0; Placeyh=&SpaceYH0; void Shouw_Cricle() / 整 点Set_Color(GUI_GREEN); Fill_Circle (160, 30,2); / 12 点(x,y,r) Fill_Circle (135, 35,2); / 11 点(x,y,r) Fill_Circle (115, 55,2); / 10 点(x,y,r) Fill_Circle (110, 80,2); / 9 点(x,y,r) Fill_Circle (115, 105,2); / 8 点(x,y,r)河海大学本科课程设计报告河海大学本科课程设计报告- 19 - Fill_Circle (135, 125,2); / 7 点(x,y,r) Fill_Circle (160, 130,2); / 6 点(x,y,r) Fill_Circle (185, 125,2); / 5 点(x,y,r) Fill_Circle (205, 105,2); / 4 点(x,y,r) Fill_Circle (210, 80,2); / 3 点(x,y,r) Fill_Circle (205, 55,2); / 2 点(x,y,r) Fill_Circle (185, 35,2); / 1 点(x,y,r)/表盘背景色void Show_ht()Set_Color(GUI_GRAY); Fill_Circle (160,80,54);void Delay(int time);void ChangeForm(char Time,char time) Time0 = time / 10 + 48; Time1 = time % 10 + 48; Time2 = 0;void Display_Time(char x,char y) ChangeForm(Hour, hour); ChangeForm(Min, min); ChangeForm(Sec, sec); ChangeForm(MON, mon);河海大学本科课程设计报告河海大学本科课程设计报告- 20 - ChangeForm(DAY, day); ChangeForm(YEA1, yea1); ChangeForm(YEA2, yea2); /Disp_String(const I8 *s, I16 x, I16 y),s:char ,x:x_label position y:y_label position Disp_String (Hour,x,160); Disp_String (:,x + 18,160); Disp_String (Min,x + 28,160); Disp_String (:,x + 46,160); Disp_String (Sec,x + 56,160); Disp_String (YEA1,x -5, 180); Disp_String (YEA2,x +11,180); Disp_String (.,x + 27,180); Disp_String (MON,x + 35,180); /40 Disp_String (.,x + 51,180); /56 Disp_String (DAY,x + 59,180);/64void Display_xh1(char xx1,char yy1) ChangeForm(XH1, xh1); ChangeForm(XH2, xh2); ChangeForm(XH3, xh3); ChangeForm(XH4, xh4); ChangeForm(XH5, xh5); Disp_String (XH1,xx1,yy1); Disp_String (XH2,xx1+16,yy1); Disp_String (XH3,xx1+32,yy1); Disp_String (XH4,xx1+48,yy1); Disp_String (XH5,xx1+64,yy1); 河海大学本科课程设计报告河海大学本科课程设计报告- 21 -void Display_xh2(char xx2,char yy2) ChangeForm(XH1, xh1); ChangeForm(XH2, xh2); ChangeForm(XH3, xh3); ChangeForm(XH4, xh4); ChangeForm(XH6, xh6); Disp_String (XH1,xx2,yy2); Disp_String (XH2,xx2+16,yy2); Disp_String (XH3,xx2+32,yy2); Disp_String (XH4,xx2+48,yy2); Disp_String (XH6,xx2+64,yy2); void Display_xh3(char xx3,char yy3) ChangeForm(XH1, xh1); ChangeForm(XH2, xh2); ChangeForm(XH3, xh3); ChangeForm(XH4, xh4); ChangeForm(XH7, xh7); Disp_String (XH1,xx3,yy3); Disp_String (XH2,xx3+16,yy3); Disp_String (XH3,xx3+32,yy3); Disp_String (XH4,xx3+48,yy3); Disp_String (XH7,xx3+64,yy3); void Show_Color()河海大学本科课程设计报告河海大学本科课程设计报告- 22 -Set_Color( GUI_WHITE );/填充矩形函数 Fill_Rect(0,0,319,239); Set_Color(GUI_RED); Set_BkColor (GUI_WHITE); Fill_Rect(0,0,319,2); Fill_Rect(0,0,2,239); Fill_Rect(0,237,319,239); Fill_Rect(317,0,319,239); Set_Color(GUI_RED); Set_Font(&CHINESE_FONT16); /*- 函数名称 : StartTheSystem(void)- 函数说明 : 启动系统- 输入参数 : 无- 输出参数 : 无*/void StartTheSystem(void)河海大学本科课程设计报告河海大学本科课程设计报告- 23 - for(;) /*全屏颜色设计*/ /*时 钟 位 置*/ Show_Color(); Show_ht(); /*点 的 坐 标*/ Shouw_Cricle(); /*设定背景颜色 API*/ Set_Color(GUI_RED); /显示 Draw_Line(x_line,y_line,*Placex,*Placey); Set_Font(&GUI_Font8x16); Display_Time(130, 160);/时间 Set_Font(&CHINESE_FONT16); Disp_String(CN_start实时时钟CN_end,68,5); Set_Font(&CHINESE_FONT16); Disp_String(CN_start嵌入式课程设计CN_end, 138, 5); Set_Font(&CHINESE_FONT16); Disp_String(CN_start庞荣CN_end, 285, 100); Set_Font(&CHINESE_FONT16); Disp_String(CN_start王宁CN_end, 285, 120); Set_Font(&CHINESE_FONT16); Disp_String(CN_start王尊志CN_end, 268, 140); /显示 Set_Color(GUI_BLACK); /Dowhile 循环实现时钟的计时 do河海大学本科课程设计报告河海大学本科课程设计报告- 24 - Delay(1200); sec+; Shows(); Shouw_Cricle(); if (sec = 60) sec = 0; min+; Showm(); if (min = 60) min = 0; hour+; Showh(); if (hour = 24) hour = 0; day+; if(day =32) day = 1; mon+; if(mon = 13) mon = 1; yea1+; 河海大学本科课程设计报告河海大学本科课程设计报告- 25 - Set_Font(&GUI_Font8x16); Display_Time(130, 160);/时间 日期 Display_xh1(0,100); Display_xh2(0,120); Display_xh3(0,140);while(1);/*/*主 函 数*/*/void Main(void) Target_Init(); / ARMII 实验系统的初始化,包括 CPU 板/ ARMII 实验系统的初始化,包括 CPU 板 GUI_Init(); /GUI 的图形初始化 Rtc_Tick_Init(); /打开时钟节拍,让操作系统跑起来 StartTheSystem(); /启动系统
展开阅读全文