keilc程序设计课程报告_第1页
keilc程序设计课程报告_第2页
keilc程序设计课程报告_第3页
keilc程序设计课程报告_第4页
keilc程序设计课程报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩评定表学生姓名鹿蕾班级学号1303020207专业测控技术与仪器课程设计题目点阵式液晶上滚屏设计评语组长签字:成绩日期201 年 月 日课程设计任务书学 院自动化与电气工程学院专 业测控技术与仪器学生姓名鹿蕾班级学号1303020207课程设计题目点阵式液晶上滚屏设计实践教学要求与任务:1、熟悉所确定的题目,从问题需求、程序结构、难点及关键技术等方面进行分析,形成系统的设计方案; 2、根据方案设计硬件电路; 3、软件编程并调试;4、完成课程设计报告,打印程序,给出运行结果。工作计划与进度安排:第18周(12月28日-12月31日):根据设计要求和内容查阅参考文献或资料,提出设计方案,进行原

2、理设计。第20周(1月11日-1月15日):根据设计方案,完善设计,并进行硬件及软件调试,测试,撰写课程设计报告,答辩。指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:2015年 月 日目录一 设计要求11.1设计要求11.1.1 功能及技术指标要求11.1.2设计内容.11.2 设计目的.1二 系统整体设计方案.22.1总体方案.22.2系统方框图22.3 设计元器件连接说明.2三 点阵式液晶下滚屏的设计.3四 系统运行结果及分析.74.1 程序调试及运行结果.74.2 结果分析.94.3 心得体会.9五 参考文献.9六 附录106.1 程序代码.106.2 相应

3、汉字的显示代码.18一 设计要求1.1设计要求1.1.1 功能及技术指标要求利用51单片机+12864点阵液晶显示器设计汉字滚屏(上滚)系统,滚动周期小于5秒。1.1.2 设计内容完成以下设计环节:1)(可选)使用Altium Desinger开发工具,设计电路原理图与PCB制板图。2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。1.2设计目的(1)利用51单片机+12864点阵液晶显示器设计汉字滚屏(上滚)系统,滚动周期小于5秒;(2)熟悉51单片机的内部结构和功能,合理使用其内部寄存器,能够完成

4、相关软件编程设计工作;(3)对软件编程、排错调试、相关软件的使用技能等方面得到较全面的锻炼和提高;(4)本次课程设计从硬件和软件两个方面入手,全面具体地掌握设计思路、方法和过程,使理论与实际相结合,充分地锻炼了动手能力和思维扩展能力。二 系统整体设计方案2.1总体方案点阵式LCD液晶显示,即在了解122*32A的内部结构,工作原理,编程方法,SED1250的特性,内部结构,时序特性,各个管教的功能,以及获取字模的方法后,编写一个完整的程序用HK-51仿真系统运行后确保无误,并要在122*32A液晶显示屏上显示所要求显示的内容。2.2系统方框图图12.3设计元器件连接说明:点阵式液晶显示屏与80

5、51单片机管脚连接如下:第1脚:GND接地;第2脚:VCC接5v电源;第3脚:DB7DB0接8051芯片的P0.7P0.0口;第4脚:CS1接8051芯片的P2.3;CS3接8051芯片的P2.4口;第5脚:E端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行令(接8051芯片的P2.0口)第6脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。(接8051芯片的P2.1口)第7脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高

6、电平 R/W为低电平时可以写入数据。接8051芯片的P2.2口;第8脚:/PES为复位信号,V0为可调;三 点阵式液晶下滚屏的设计如下图2所示即为判断当前LCD的状态,RS=0, 数据指令选择,D/I(RS)="L" ,表示 DB7DB0 为显示指令数据,RW=1; R/W="H" ,E="H"数据被读到DB7DB0。EN=1;EN下降源,_nop_(); /一个短延时。一直进行 while循环,直到dat=0x00 。 图2 判断当前状态的LCD 如图3 所示即为液晶显示屏幕的选择函数,若CSI=0 CS2=0则显示全部,若CSI=

7、0 CS2=1则显示左部,若CSI=1 CS2=0则显示右部,若CSI=1 CS2=1则液晶不显示。图3 液晶显示屏幕的选择如图4所示为延迟函数的显示过程,外层i<50,内层j<110,否则一直循环。图4 延迟函数主函数的实现过程如下图5所示,先判断LCD的当前状态,进行清屏操作,执行循环,每行128列,每个汉字占有32个字节,通过全屏显示,将字模上输入的汉字在液晶屏上显示出来并实现上滚的效果。开始输入i;LCD()=12864Clear Screen(0)i=0 Ni<128? Yi+SetStartLine(i);Display(2,0,0*16,0);Display(2

8、,0,0*16,1);Display(2,0,0*16,2); Display(2,0,0*16,3);Display(2,0,0*16,4);Display(2,0,0*16,5)delay(50);图4.4 主函数四 系统运行结果及分析4.1程序调试及运行结果1打开Keil C51集成开发环境,新建工程,文件,输入代码保存名为“text1.c”图6编译调试结果2.右键单击source group1选中add file to group,选中“text1.c”文件单击add如图:图7添加文件到组3.选中文件夹target1右键单击 options for target,选中output勾选c

9、reat hex如图:图8生成text1.hex文件4.打开Proteus仿真系统,单击89c51选中program file选择“text1.hex”文件,单击ok图9添加文件 5.单击运行,结果如下图:图10运行结果4.2结果分析经过字模提取汉字后,得到各个汉字,将其输入到代码中,结果如图5.1所示如上图可看出输出结果出现了乱码现象,可能原因是在运用字模时可能设置的参数有问题。经过认真检验及调试,发现字模参数设置中字节倒序没有选中。经过重新设置字模参数,纵向取模,字节倒序,保留,任何时候都取0,设置完成后再进行一次运行,则出现了正确结果。4.3 心得体会通过这次课程设计,不仅让我了解了单片

10、机的仿真设计和单片机程序设计,也让我真正的明白了LCD屏的显示功能的强大。从刚开始对实验不知所措,到老师上课认真讲解和同学的热情解答疑问让我有了大概的了解,当自己动手做的时候碰到很多问题,在老师的和同学的帮助下慢慢的接近答案,最后终于完成这个课设,我感到一种成就感油然而生。这次给我留下了很深刻的印象,因为课设给我的不单单是编程上的进步,还提升我处理实际问题的能力以及沟通交流能力,总之十分感谢这次课设。五 参考文献1谢维成 杨加国主编单片机原理与应用及C51程序设计,清华大学出版社,六 附录6.1程序代码#include <reg51.h>#include <intrins.h

11、>#define uint unsigned int#define uchar unsigned char#define DATA P0 /LCD12864数据线 sbit RS=P22; / 数据指令 选择 sbit RW=P21; / 读写 选择 sbit EN=P20; / 读写使能 sbit cs1=P24; / 片选1 sbit cs2=P23; / 片选2 /*定义中文字库*/字体取模时的选项设置为:点阵格式为阴码,取模方式为列行式,取模走向为逆向,文字大小为宽x高=16x16 uchar code Hzk=/*- 文字: 你 -*/*- 宋体12; 此字体下对应的点阵为:宽

12、x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 若-*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x0

13、4,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 安 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 好 -*/*- 宋

14、体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0x12,0xD2,0x56,0x5A,0x52,0x53,0x52,0x5A,0x56,0xD2,0x12,0x10,0x10,0x00,0x40,0x30,0x00,0x77,0x85,0x85,0x8D,0xB5,0x85,0x85,0x85,0xE7,0x00,0x10,0x60,0x00,/*- 文字: 便 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,

15、0x42,0x40,0x00,0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00,/*- 文字: 是 - */*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x0

16、0,/*- 文字: 晴 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,/*- 文字: 天 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0

17、x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,;/*状态检查,LCD是否忙*/voidCheckState()Uchar dat;/状态信息(判断是否忙) RS=0; / 数据指令选择,D/I(RS)="L" ,表示 DB7DB0 为显示指令数据 RW=1; /R/W="H" ,E="H"数据被读到DB7DB0 do DATA=0x00; EN=1;/EN

18、下降源 _nop_(); /一个短延时 dat=DATA; EN=0;dat=0x80 &dat; /仅当第7位为0时才可操作(判别busy信号) while(!(dat=0x00); /*写命令到LCD中*/SendCommandToLCD(uchar com)CheckState();/状态检查,LCD是否忙 RS=0; /向LCD发送命令。RS=0写指令,RS=1写数据 RW=0;/R/W="L" ,E="HL"数据被写到 IR 或 DR DATA=com; /com :命令 EN=1; _nop_(); _nop_(); EN=0; /E

19、N下降源 /*设置页 0xb8是页的首地址*/Void SetLine(uchar page)page=0xb8|page; /1011 1xxx 0<=page<=7 设定页地址-X 0-7,8行为一页64/8=8,共8页 SendCommandToLCD(page); /*设定显示开始行,0xc0是行的首地址*/ Void SetStartLine(uchar startline) startline=0xc0|startline; /1100 0000 SendCommandToLCD(startline); /设置从哪行开始:0-63,一般从0 行开始显示 /*设定列地址-

20、Y 0-63 ,0x40是列的首地址*/ Void SetColumn(uchar column) column=column &0x3f; /column最大值为64,越出 0=<column<=63 column= 0x40|column; /01xx xxxxSendCommandToLCD(column); /*开关显示,0x3f是开显示,0x3e是关显示*/Void SetOnOff(ucharonoff)onoff=0x3e|onoff; /0011 111x,onoff只能为0或者1 SendCommandToLCD(onoff);/*写显示数据 */Void

21、 WriteByte(uchardat)CheckState();/状态检查,LCD是否忙 RS=1; /RS=0写指令,RS=1写数据 RW=0;/R/W="L" ,E="HL"数据被写到 IR 或 DR DATA=dat;/dat:显示数据 EN=1; _nop_(); _nop_(); EN=0;/EN下降源/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/Void SelectScreen(uchar screen) switch(screen) case 0: cs1=0;/全屏显示 _nop_(); _nop_(); _nop_()

22、; cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左显示屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;/右显示屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; /*清屏screen: 0-全屏,1-左屏,2-右*/ Void ClearScreen(uchar screen) uchari,j;SelectScreen(

23、screen); for SetLine(i);SetColumn(0); for(j=0;j<64;j+) /控制列数0-63,共64列 WriteByte(0x00); /写点内容,列地址自动加1 /*延时程序*/voiddelay(uint z)uinti,j;for(i=0; i<z; i+)for(j = 0; j < 110; j+);/*初始化LCD*/Void InitLCD() CheckState();SelectScreen(0);SetOnOff(0); /关显示 SelectScreen(0);SetOnOff(1); /开显示 SelectScre

24、en(0); ClearScreen(0);/清屏 SetStartLine(0); /开始行:0 /*显示全角汉字*/ void Display(ucharss,ucharpage,ucharcolumn,uchar number) (i=0;i<16;i+) /控制页数0-7,共8页 int i;/选屏参数,pagr选页参数,column选列参数,number选第几汉字输出 SelectScreen(ss);column=column&0x3f;SetLine(page);/写上半页 SetColumn(column); /控制列 for(i=0;i<16;i+) /控

25、制16列的数据输出 WriteByte(Hzki+32*number); /i+32*number汉字的前16个数据输出 SetLine(page+1); /写下半页 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的数据输出 WriteByte(Hzki+32*number+16);/i+32*number+16汉字的后16个数据输出 /*主函数*/void main() uint i;InitLCD();/初始12864 ClearScreen(0);/清屏 while(1) for(i=128;i>1;i-) /12864有128

26、列,显示开始行从0128切换,因此可以实现循环显示 SetStartLine(i);/显示开始行 Display(2,0,0*16,0);/显示第一个字Display(2,0,1*16,1);/ 显示第二个字int i;/选屏参数,pagr选页参数,column选列参数,number选第几汉字输出 SelectScreen(ss);column=column&0x3f;SetLine(page);/写上半页 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的数据输出 WriteByte(Hzki+32*number); /i+32*n

27、umber汉字的前16个数据输出 SetLine(page+1); /写下半页 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的数据输出 WriteByte(Hzki+32*number+16);/i+32*number+16汉字的后16个数据输出 /*主函数*/void main() uint i;InitLCD();/初始12864 ClearScreen(0);/清屏 while(1) for(i=128;i>1;i-) /12864有128列,显示开始行从0128切换,因此可以实现循环显示 SetStartLine(i);/显

28、示开始行 Display(2,0,0*16,0);/显示第一个字Display(2,0,1*16,1);/ 显示第二个字Display(2,0,2*16,2);/ 显示第三个字Display(2,0,3*16,3);/ 显示第四个字 Display(1,0,4*16,4);/ 显示第五个字Display(1,0,5*16,5);/ 显示第六个Display(1,0,6*16,6);/ 显示第七个Display(1,0,7*16,7);/ 显示第八个SelectScreen(0);/选择全屏显示 delay(50); /延时 .6.2相应汉字的显示代码课设的几个汉字显示代码如下:/*- 文字:

29、你 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 若 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0

30、x54,0x74,0x04,0x04,0x00,0x04,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 安 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 好 -*/*- 宋体12; 此字体下对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论