ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:287.59KB ,
资源ID:5509340      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5509340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统课程设计基于UCOSII的LCD驱动设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统课程设计基于UCOSII的LCD驱动设计.docx

1、嵌入式系统课程设计基于UCOSII的LCD驱动设计课程设计报告 题 目 基于UCOSII的LCD驱动设计 专 业 通信工程 学 号 授课班号 学生姓名 指导教师 摘要 近年来,嵌入式系统的应用已经越来越普及,对人类社会产生了巨大的影响。C/OS-II作为一种高可靠性的实时嵌入式操作系统已经被广泛使用在实际中,并且其具有简单易学、便于移植等特点。本文综述了嵌入式系统发展现况,分析了C/OS-II内核及其应用在8051单片机上的特点,并介绍了C/OS-II编写驱动的方法和规则。本设计以Keil C51为开发环境,通过修改函数使其可重入、修改堆栈设计等步骤,将C/OS-II移植到了89C51单片机上

2、,并编写了单片机上的LED模块、键盘模块及串行通讯模块的驱动,验证了移植C/OS-II的正确性。LCD是嵌入式操作系统的重要组成部分,是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。用户可以只通过LCD监测系统内部运行状态,然后作出相应的处理。因而具有良好的人机界面的嵌入式操作系统能过很好的完成系统开发、生产生活的需要!关键词:C/OS-II;8051单片机;移植;驱动程序绪言1.ucos-II的简介及特点(1)简介C/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先 式多任务实时内核,作者是Micrium公司总裁Jean

3、J.Labrosse。由于C/OS-II的绝大部分代码是用ANSI C写的,因此可以较为方便的移植到多种微处理器,微控制器和数字处理芯片中(目前已经移植到超过100种以上的微处理器应用中)。同时,该系统源代码开放、整洁、一致,注释详尽,适合系统开发。C/OS-II已经通过联邦航空局(FAA)商用航行器认证,符合航空无线电技术委员会(RTCA)DO-178B标准,虽然这一特性对用户的需求并不一定实用,但却可在一定程度上证明该系统的稳定和安全性。(2)特点1、公开源代码:源代码完全公开;2、可移植性强:和处理器硬件相关的部分是用汇编些的,绝大部分是用C语言写的,可移植性很强;可以移植到8、16、3

4、2、64位处理器上运行;3、可固化:可固化到产品中,称为嵌入式产品的一部分;4、可裁剪:应用程序可以只使用需要的系统服务。5、抢占式内核:意味着操作系统总是运行优先级最高的就绪任务,6、多任务:ucosii可以管理64个任务,提供给用户用的是56个,系统保留8个任务。7、任务栈: 每个任务有自己单独的栈;8、系统服务:ucosii提供很多系统服务,如邮箱、消息、信号量、时间相关函数。9、中断管理:可以使暂时执行的任务暂时挂起,如果高优先级的任务被中断唤醒,则去执行更高优先级的任务。二、课题目标及总体方案首先学习了解LCD的驱动程序,然后在移植好的UCOSII项目中添加LCD的驱动程序, 最后能

5、够在uCOSII下,编写LCD应用任务的简单编程实例,来检验LCD驱动程序的完好度。本实验实例为在LCD屏上显示跑马灯,同时模拟CPU板上D7、D8灯的交替闪烁,闪烁周期为跑马灯周期。1. LCD驱动程序组成LCD驱动程序的文件夹Gui(如图1所示),其中,包括四个文件夹:Font中存放的是字体文件,存放四个文件,Font_Cn12.c为调用汉字库12X12汉字的引用文件;Font_Cn16.c为调用汉字库16X16汉字的引用文件;Font8X16为调用ASCII码的源文件,它的大小为8X16;Gchar.c为显示字符的源程序库。Glib中存放绘图的中层和上层的函数,上层函数是直接供用户调用的

6、API,。Glib文件夹内存放两个文件,Glib.c是图形显示库的源代码,它主要实现LCD的中层和上层供用户调用的API函数,Glib.h则是供其他文件或自身调用的头文件。Init中存放GUI初始化的函数,Init文件夹内存放两个文件,data.h是数据类型重定义的文件,GUI_Init.c是GUI系统的初始化文件。Lcddriver中存放的是LCD的底层驱动函数,以及对LCD控制器的初始化函数。Lcddriver文件内存放两个文件,Lcddriver.c包括LCD的底层读写内存用来绘图的函数,以及初始化LCD控制寄存器的初始化硬件的函数。Lcddrive 是供其他文件或自身调用的头文件。2.

7、 UCOSII操作系统下添加LCD驱动程序在UCOSII操作系统下添加LCD驱动程序,也就是把整个GUI文件夹加入该项目里。同时,还要在ApplicationINC目录下的config.h文件中,加入GUI程序的头文件,#include .GuiGlibGlib.h,这是为了在应用中方便调用画图的API函数。如果,要在LCD上显示英文或汉字,还要在ApplicationSRCMain.c中声明引用的是extern GUI_FONT CHINESE_FONT12;等外部定义过的字体。这样,编译就能通过,就把LCD的驱动程序以及小型的GUI图形库,加载到了UCOSII操作系统上了。在UCOSII操

8、作系统下,要单独开辟一个GUI任务,进行画图,一般这个任务的优先级很低,一般它仅比空闲任务的优先级高,这样做是为了可以使更多的任务等级显示在屏上。在Application/SRC下的MAIN.C文件,有GUI的应用任务,绘图的API函数即放在这里,或者作一个应用函数的文件,在此任务里调用。所有的对LCD显示操作内容要在MAIN.C文件中编写。3. 应用程序本实验实例为在LCD屏上显示跑马灯,同时模拟CPU板上D7、D8灯的交替闪烁,闪烁周期为跑马灯周期。来检验LCD驱动程序是否能正常工作。实验流程图如下:程序开始先进行各项初始化,包括开发板、GUI初始化、系统初始化,然后配置LCD屏幕设置,运

9、行时先调用跑马灯延时程序Timedelay(),跑马灯运行一周后,置开发板上D7、D8灯亮灭,通过信号传递置LCD屏幕上模拟D7D8灯亮灭, 接着调用Timedelay()函数,循环任务。三、实验结果测试测试方法:1、在移植好的UCOSII项目中添加LCD的驱动程序。(方法参见第一章 第二节) 2、在main.c文件中编写程序(源程序见附录),先使用画图函数绘出包含跑马灯,模拟D7,D8两灯在内的LCD界,用函数timedelay()控制跑马灯运行,timedelay()亦是延时函数。D7,D8两灯每交替闪说一次,调用一次timedelay()延时函数。 3、连接电脑和试验箱,编译程序,无错误

10、,把程序下载到S3C44B0X,观察结果。4、观察现象,有问题检查修改MAIN.C文件。LCD界面显示如下:四、总结实验结果显示出预期的LCD界面,LCD屏幕显示预定图案(如图2)。屏幕上D7、D8随CPU板上的D7,D8两灯同步闪烁,而且跑马灯每转一周,两个等交替闪烁一次。说明LCD驱动即添加到内核中没有问题,系统工作正常。五、心得体会课程设计终于完成了,小组的成员终于松了一口气。一开始的时候。遇到了很多问题,上课时老师说ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。在ARM汇编中

11、,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。可是实际中我们在编程序时,总是忘了这个忘了那个。我说嘛,这程序明明没问题怎么老是编译错误,经过老师的指导问题顺利解决。可是烧到实验箱里的时候发现烧不进去。后来小组其他成员查资料才知道烧之前要先用软件检测一下芯片是否存在。结果发现原来是数据线坏了。经过九九八十一难,终于搞好。课程设计让我认识到个人的力量是渺小的,依靠一个人的努力也是不够的,许多事情只有靠大家精诚合作,一起思考讨论,分工协作,才能完成。大家之间要默契配合,相互理解,阐述各自对

12、问题不同看法、不同理解的相互交流是发现问题学的新知的良好契机。课程设计很快就结束了,我觉得最大的收获就是能够理论联系实际,把书本上的知识活学活用道实际中来解决一些实际问题,这样才能发挥用途。独立思考解决问题,并能够接受他人意见来修正完善自己的想法,最终付诸于实现。六、参考文献1 王永,何立民嵌入式系统原理与设计M浙江:浙江大学出版社2JEAN J.LABROSSE C/OS-II源码公开的实时嵌入式操作系统.北京:中国电力出版社,20013王田苗. 嵌入式系统设计与实例开发.北京:清华大学出版社,20024 毛德操,胡希明. 嵌入式系统M. 杭州:浙江大学出版社, 2003:325334.5J

13、ean J. Labrosse 嵌入式实时操作系统C/OS- 第2版M 北京:北京航空航天大学出版社七、附 录源程序:#include .incconfig.h#define STACKSIZE 256OS_STK_DATA stk;extern GUI_FONT CHINESE_FONT12;extern GUI_FONT CHINESE_FONT16;extern GUI_FONT GUI_Font8x16;OS_EVENT * Send_D7light_Sem;OS_EVENT * Send_LCD_Sem;/* 分配各任务的堆栈容量 */OS_STK Stack_Task_1STACK

14、SIZE;OS_STK Stack_Task_2STACKSIZE*3; /*- 函数名称 : Task_3(void *pdata)- 函数说明 : GUI任务,优先级为56- 输入参数 : pdata- 输出参数 : 无*/void Task_2(void *pdata) INT8U err,flag=0; Set_Color(GUI_WHITE); /LCD背景颜色 Fill_Rect(0,0,319,239); /背景颜色填充(0,0)至(319.239)的矩形 /画刷填充矩形 Set_Color(GUI_BLUE); /LCD方框颜色 Fill_Rect(0,0,319,2); /填

15、充4条边 Fill_Rect(0,0,2,239); Fill_Rect(0,237,319,239); Fill_Rect(317,0,319,239); Set_Color(GUI_WHITE); /小组成员姓名学号显示 Set_Font(&CHINESE_FONT16); Disp_String (CN_start河海大学常州校区CN_end,5,10); Set_Color(GUI_WHITE); /小组成员姓名学号显示 Set_Font(&CHINESE_FONT16); Disp_String (CN_start嵌入式课设CN_end,5,30); Set_Color(GUI_WH

16、ITE); Set_Font(&CHINESE_FONT16); Disp_String (CN_start指导老师:许老师CN_end,5,50); Set_Color(GUI_WHITE); Set_Font(&CHINESE_FONT16); Disp_String (CN_start课题:液晶驱动CN_end,5,70); Set_Color(GUI_WHITE); /小组成员姓名学号显示 Set_Font(&CHINESE_FONT16); Disp_String (CN_start小组成员:CN_end,160,5); Set_Color(GUI_WHITE); Set_Font(

17、&CHINESE_FONT16); Disp_String (CN_start徐维响CN_end,160,25); Set_Color(GUI_WHITE); Set_Font(&CHINESE_FONT16); Disp_String (CN_start徐帅东CN_end,160,45); Set_Color(GUI_WHITE); Set_Font(&CHINESE_FONT16); Disp_String (CN_start周斌CN_end,160,65); Set_Color(GUI_WHITE); Set_Font(&GUI_Font8x16); Disp_String (09623

18、10229,230,25); Set_Color(GUI_WHITE); Set_Font(&GUI_Font8x16); Disp_String (0962310228,230,45); Set_Color(GUI_WHITE); Set_Font(&GUI_Font8x16); Disp_String (0962310231,230,65); Set_Color(GUI_WHITE); /设定字体颜色 Set_Font(&GUI_Font8x16); /设定字体类型 Disp_String (D7,5,175); /D7位置 Disp_String (D8,5,115); /D8位置 fo

19、r(;) /闪烁 OSSemPend(Send_D7light_Sem, 0, &err); if(flag=0) /0状态 Set_Color(GUI_GREEN); /圆1颜色 Fill_Circle(50 , 120, 20); /圆1位置 Set_Color(GUI_RED); /圆2颜色 Fill_Circle(50 , 180, 20); /圆2位置 flag = 1; /转换为1状态 else /其他状态(即1状态) Set_Color(GUI_RED); /圆1颜色 Fill_Circle(50, 120, 20); Set_Color(GUI_GREEN); /圆2颜色 Fi

20、ll_Circle(50, 180, 20); flag = 0; /转换为0状态 OSSemPost(Send_LCD_Sem); /*- 函数名称 : Task_START- 函数说明 : 系统启动后运行的第一个任务,,点亮D7熄灭D8- 输入参数 : pdata- 输出参数 : 无*/void Task_1(void *pdata) INT32U flag=0; INT8U err; Rtc_Tick_Init(); /打开时钟节拍,让操作系统跑起来 for(;) int i; OSSemPend(Send_LCD_Sem, 0, &err); if(flag=0) for(i=0;i5

21、00000;i+); rPCONB = 0x7cf; rPDATB = 0x7ef; flag = 1; else for(i=0;i500000;i+); rPCONB = 0x7cf; rPDATB = 0x7df; flag = 0; OSSemPost(Send_D7light_Sem); /*- 函数名称 : Main(void)- 函数说明 : 系统的主程序入口- 输入参数 : 无- 输出参数 : 无*/void Main(void) Target_Init(); / ARMII实验系统的初始化,包括CPU板 GUI_Init(); OSInit(); / 操作系统的初始化 Send_D7light_Sem = OSSemCreate(0); Send_LCD_Sem = OSSemCreate(0); OSSemPend; OSSemPost(Send_D7light_Sem); /创建信号量 OSTaskCreate(Task_1, (void *)0, (OS_STK *)&Stack_Task_1STACKSIZE - 1, 5); /创建任务一 OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2(STACKSIZE*3) - 1, 56); /创建任务二 OSStart();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1