广州大学松田学院毕业论文日志薄题目(中)基于单片机的公交站点显示系统的设计(英)BasedonSCMtransitsitedisplaysystemdesign姓名***年级07级大四班级07信工(1)班指导教师(签名)二○一一年三月1广州大学松田学院2011届本科生毕业论文日志2011年2月28日第1周星期一今天是做毕业设计的第一天,我做的题目是“基于单片机的公交站点显示系统的设计”。乍一看,题目很简单,因为“公交站点”和“显示”都是我们熟悉的字眼,可是真要动手去做,我还真是一头雾水…首先,做毕业设计不光要把原理弄懂、吃透,还要理论结合实际,做出具有相应功能的实物来。其次,要把理论知识按毕业设计的格式和各种要求整理成Word文档。千头万绪,枝枝节节的很多东西要做。幸好,在毕业实习阶段我搜集了很多相关的资料,这为我下一步的行动奠定了良好的基础。我决定分步去实现我的计划。我以一篇类似的资料作为底稿,经过大体修改和增减确定了大体框架,明确了下一步我要做的事情,同时在这个过程中,我对毕业设计的一些格式要求和模块有了初步的了解。这使我想起了我国在大连改造的“瓦良格”号航母,此时此刻,我觉得自己也在改造一艘“航母”,并且要在这个基础上发明创造,开拓视野,立足新意,设计出一些新的东西来,融入新的思维和技巧。之后,我就大刀阔斧地开始了我的毕业设计历程。做毕业设计的前期,我专门学习了如何使用Word系统撰写和排版毕业论文。因为论文的质量包含着两个方面的内容,一方面是论文的构思、结构、内容及观点;另一方面就是论文的排版质量。其实论文的撰写和编辑是个比较麻烦的过程,因为在撰写过程中,我们需要不断地修改,还可能有论文排版格式的修改。往往由于某一部分的变动,使其他部分进行相应的变动,因而常因调整格式而烦恼。但是如果对MicrosoftWord编辑系统有充分的了解,就会得心应手地进行编辑,撰写和排版出有较高质量的论文。基于上面的想法,我系统地学习了用Word设置论文版面、使用样式功能、尾注的标识、分节、设定页码和页眉以及自动生成目录等功能的操作方法并且尝试着去编辑使用这些功能。功夫不负有心人,我终于成功地设定了三级标题和分节符等以前总让我头疼的环节。感觉这样让自己少了很多编辑过程中的烦恼,同时把学校要求的各种格式都涵盖进去了。2现在,可以开始编辑论文了。毕业论文表面看起来烦琐,其实还是一目了然的。大体上分为标题、中文摘要、英文摘要、目录、正文、致谢和参考文献以及附录等部分,标题又分为论文总标题、各部分的标题以及正文的三级结构标题,各个部分标题都有不同的格式与字体要求。在正文中,三级标题下面需要分开的,我采用了(1)、(2)、(3)和①、②、③两种格式。编辑的方法已经准备就绪了,下一步要进行的就是论文的内容了。这并不能急着动手编辑,因为编辑倒是个简单的问题,关键是要学习并掌握各种知识和原理,并在这个基础上设计出具有实际功能的实物来。而编辑,只是对这个过程进行具体记录、表达与总结,可见,下一步并不是动手写,而是疏通整个论文的各个知识要点,掌握其大概原理。真是“汝果欲学诗,功夫在诗外”啊。但是,在学习具体的内容之前,我确定了各个章的大体分配。第一章是绪论,第二章是软件开发、编程语言与主要元器件介绍,第三章是系统硬件设计,第四章是系统软件设计,第五章是程序编译、烧录与系统调试,最后一章是结束语。在我看来,难点在第四章。因为程序设计难度相对比较大,也是我的薄弱点。但是我相信,在我的努力之下,一定能够战胜困难的,我们拭目以待。教师评语:3广州大学松田学院2011届本科生毕业论文日志2011年3月7日第2周星期一现在,伴随着我的思绪,让我们进入这个论文题目的内部,去具体学习它的一些内容。其中有很多困难,也会有很多快乐。首先,我们来分解这个题目。基于单片机、公交站点、显示系统,也就是说,大体上应该分为三个部分,当然事实也是如此。要显示公交站点,必须要有控制它执行的按键,相比之下,我选择了STC89C52作为主控制芯片,用矩阵键盘作为输入控制端,用HJ12864M-1作为显示模块。现在,可以具体从这三个部分发展开去,进入论文的各个细节角落。整个系统就是由矩阵键盘、STC89C52单片机和HJ12864M-1显示器三个部分构成。功能要求很简单,就是每按一个键,在显示屏上要显示相应的公交站点的名称或其他提示内容。目标已经明确了,下一步就要具体掌握各个部分的内容,比如说矩阵键盘是如何实现的;为什么16个按键却只分配了8个I/O口;矩阵键盘的各个端口是连在单片机的哪些I/O口上;STC89C52单片机的各个管脚是怎样分布的;单片机怎样和矩阵键盘、HJ12864M-1显示器相连,它的接口原理图是怎样的;STC89C52单片机有什么功能特性;HJ12864M-1显示器里面的驱动器是什么;驱动器的功能与特性以及怎样按自己的想法设计驱动器的功能;系统框图以及整个系统的程序怎么写等等,很多问题需要一个一个解决,这样,才能一步一步把设计做出来,完成任务。想到这里,我明白了自己要做的事情还有许多,决不是从题目看起来那么简单的。说到这里,有必要明确一下,我使用的编程语言是单片机C语言,同时这也是学校要求的;整个程序的编译是在Keil的环境下完成的,同时也用到了Protel99SE作为画电路图的工具。所以,我又复习了画电路图以及Keil的相关知识,这对完成整个毕业设计来说,是必须的基本步骤。但是,怎样画流程图和时序图成了我一时的难题,许久没有解决。在很多难题面前,我开始通过各种途径继续搜集相关的资料,特别是通过中国知网()、google以及百度来解决各种问题,但是仍然有很多问题没有解决,比如HJ12864M-1带中文字库的液晶显示模块方面的资料比较缺乏。对于按键控制部分,我最初的设想是用家庭常用的电视遥控,在单片机用个红外接受的4模块,接受按键信息并解码。但后来考虑用红外遥控对设备安装不方便,而且红外对人体也有辐射,于是选择用矩阵键盘进行控制。在液晶屏的选择问题上,我也尝试过很多想法。因为液晶屏有很多种,最常用的就有1602字符型液晶显示模块和我最终选用的12864带字库图形液晶模块。1602型只能显示2行共16个汉字,而且用它来显示汉字效果并不理想,不符合公交车上公众对视觉的要求;而12864型可以显示4行共32个汉字,也可完成图形显示。低电压功耗是其显著的特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,硬件电路显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。对于单片机的型号,也是很多的,最常用的当然是AT89C51或AT89C52,同时也是我熟知的,但是我买来的单片机的型号却是STC89C52,这又让我疑惑了一阵子。于是我又开始学习关于单片机型号的知识,最后确定了STC89C52与AT89C52是完全兼容的,才长舒了一口气,心中暗暗庆幸。经过这些小波折,我认识到了我的单片机知识还是比较匮乏的,需要继续努力;也认识到了要完成此次毕业设计,任重而道远。教师评语:5广州大学松田学院2011届本科生毕业论文日志2011年3月14日第3周星期一随着理论学习与实践的深入,我不断地遇到很多新的问题,都是我没有预料到的,比如在程序编译的时候,总是出现一种错误,诸如“missing;beforeU8”,但是在前面加个“;”还是不对,或许根本就不是“在U8前缺少一个分号”的意思。这个问题让我无从着手,在网络上搜索也没得到答案。一时间,就卡在那儿了。还有一个严重的问题,就是感觉在编写程序的时候力不从心,这让我深深地体会到自己的编程能力十分有限,有时后甚至读不懂或不是很懂某段程序,更别说自己去设计编写新的程序了。临时抱佛脚,我只好对照着许多C语言的资料艰难地进行阅读和理解,但是遗憾的是,收获并不多,有时候自己都不敢肯定程序的正确性,稍微有一些灵活变化的程序,我就要花很多时间去消化。于是我开始系统地学习各种C语言的语法规则,结合实际的程序实例进行分析,并且化整为零,分别琢磨每一段程序的作用与功能以及它的具体含义,并且结合硬件系统的I/O口,各种功能管脚具体分析考虑,步步为营,力求突破重重难关,把程序写好。这其中最难理解的就是HJ12864M-1模块内嵌的STN7920驱动器,它涉及到很多指令。比如说复位指令、设置CGRAM指令、设置DDRAM地址指令、读“忙”标志、写显示数据到内部RAM指令和读显示数据指令以及许多扩展指令系统,纷繁复杂,一时不可尽数。对我而言,理解起来比较费力,但是又必须去面对。在知识疏通的过程中,我的设计一度走进了弯道里,转了一圈才发现自己做的工作其实是多余的。比如一开始我在考虑把要显示的汉字的字模提取出来,建立一个小字库,然后进行显示。这本来没有错,但是我没有想到我买的HJ12864M-1液晶显示屏是带中文字库的,既然带中文字库了,就说明常用的汉字里面都有了,那么就不用建立小字库了。之所以犯了一个这样的错误,是因为自己对“带中文字库”和“小字库”这些词理解地不够深,只是从字面意思上去理解,并没有思考它的作用,以为带了中文字库还必须要建立小字库的。不过,俗话说“吃一堑,长一智”,或许可以拿来安慰以下自己吧……接下来是显示的问题,我虽然详细了解了STN7920的主要特点和功能,管脚功能以及读写时序,也系统地学习了STN7920的指令系统和扩展指令系统,但是怎么把“一串汉字”显6示出来,我心里还是没主意。因为很少接触“液晶显示”的内容,而且也缺乏这方面的资料,没有具体的例子可供参考,所以这成了我的头号难题。我只好反反复复地去理解,去琢磨,同时也在网上寻找各种类似的资料,希望能解决我的疑惑。怎样显示汉字串的问题疑惑了我很久。而实际上,这恰好也许是一个最简单的问题。因为汉字在计算机内部是以“内码”形式存储的,就相英文字母在计算机内部是以“ASCII”码形式存储的一样,一个汉字的“内码”占两个字节。汉字串在计算机内部就是“内码”串,STN7920提供的字库就是以“内码”形式存储的国标字库。所以可以用汉字串来直接显示汉字。这就够简单了。如果用《信息交换用汉字编码字符集(基本集)》GB2312-80,想要在STN7920上显示汉字,由于该字符集是按区位码排列的,因此要把区位码变成“内码”才能在程序中使用。显示汉字的问题似乎得到了解决,但是具体怎么编程,还有很多问题等着要解决啊。让我们继续努力……教师评语:7广州大学松田学院2011届本科生毕业论文日志2011年3月21日第4周星期一毕业设计进入第四周,虽然大部分的工作已经做出了个大概的框架,但是要在这个基础上进行细化与具体化还有很多工作等着我去完成。汉字的显示原理就花了我很大的功夫去理解和琢磨。我原来的想法是用1602显示器的,再建立一个小字库,但是在这种显示器上只能显示两行共16个汉字,不能完全满足需要,于是我选择了12864型的图形液晶显示屏,这种显示屏可以显示四行共32个汉字,可以满足公交车提示用语等需要。可喜的是,带中文字库的显示屏显示汉字的时候不需要再建立小字库,省去了很多麻烦。现在我把汉字显示的原理作一个详细的介绍。无论是TurboC支持的各种显示器,还是单片机系统常用的LCD,它们的分辨率都是以像素为单位的,一个像素就是LCD屏上的一个可以显示的最小单位,也就是常说的点。因此,要在LCD屏上显示一个汉字或图形就必须将汉字或图形用点来表示,这些表示某种图形的点的集合就是所说的点阵。如嵌入式控制系统中最常用的汉字是16*16点阵,它是由每行列各16个点,共256个点组成的点阵图案。每行的16个点在内存中占两个字节,一个16*16点阵汉字共16行,在内存中占32个字节。根据这些字节在内存中存放的顺序,第一行的第一个字节称“0”号字节,第二个字节称“1”号字节;第二行的第一个字节称“2”号字节,第二个字节称“3”号字节。依此类推,最后一行的第一个字节称“30”号字节,第二个字节称“31”号字节,每个字节高位在前,低位在后,即D7在一个字节的最左侧,D0在最右侧。不同的汉字各字