1、系列单片机最小标准系统液晶显示创新设计报告 基于51系列单片机最小系统的液晶显示 学 院: 机电与自动化学院 专业班级: 电气自动化技术0802 学生姓名: 刘 刚 学生学号: 20082822077 指导教师: 姚裕安 同组设计者: 吴勇 (课程设计时间:2011年03月03日2011年03月13日) 华中科技大学武昌分校目录1.设计题目 022.设计任务及要求 023.系统硬件电路设计 023.1设计电路原理图 023.2主要元器件清单 033.3 OMC12864-4(T6963c)的简介034.系统软件设计 054.1程序流程图 054.2子程序功能介绍 064.3完整程序及其功能注释
2、 065.系统调试故障分析 126.调试结果与设计任务分析 137.课设收获与建议 13参考文献 131.设计题目 基于51单片机最小系统板实现“液晶显示汉字、数字、英文”2.设计任务及要求 任务:最小系统板实现“液晶显示汉字、数字、英文”;要求:对液晶显示操作技能训练;学会运用Protell软件;绘制软件流程图、编写并调试程序、详细注释软件功能;对系统性能指标进行分析并提出改进方案;作品演示与讲解(硬件、软件、调试、改进、)3系统硬件电路设计(含文字介绍、电路原理图)3.1用Protell软件绘制电路原理图采用的是直接访问方式。如图(1) 直接访问方式是把内置T6963C控制器的液晶显示模块
3、作为存储器或I/O设备直接挂在计算机的总线上。模块的数据线接计算机的数据总线上,片选及寄存器选择信号线由算机的地址总线提供,读和写操作由计算机的读写操作信号控制。图(1)图(1)中的引脚说明OCM12864-4与STC89C52RC接口: P0.0-0.7 D0-7 GND /CE P3.7 /RD VCC /RESET P3.6 /WR GND FG P2.0 C/D 3.2本设计所要用到的主要元器件:金鹏OMC12864-4液晶显示模块(主控芯片T6963C);JZ-M2单片机最小系统(采用STC89C52RC 51系列单片机);3.3关于OMC12864-4(T6963c)的简介3.3.
4、1管脚定义见下表(1):表(1)3.3.2关于主控芯片T6963C说明: 结构特点: 内藏T6963C 的液晶显示模块上已经实现了T6963C 与行、列驱动器及显示缓冲区RAM 的接口,同时也已用硬件设置了液晶屏的结构(单双屏、数据传输方式、显示窗口长度、宽度等等。我们常用的液晶显示模块一般都是单屏结构,因此我们这里只讨论单屏结构的液晶显示模块。内藏T6963C 的单屏结构点阵图形液晶显示模块的方框图如图(2):图(2)T6963C 是点阵式液晶图形显示控制器它能直接与8 位微处理器接口;T6963C 的字符字体可由硬件或软件设置,其字体有4 种5X8 、6X8 、7X8、8X8; T6963
5、C 的占空比可从1/16 到1/128;T6963C 可以图形方式、文本方式及图形和文本合成方式进行显示,以及文本方式下的特征显示,还可以实现图形拷贝操作等等; T6963C 具有内部字符发生器CGROM,共有128 个字符。T6963C 可管理64K显示缓冲区及字符发生器CGRAM,并允许MPU 随时访问显示缓冲区,甚至可以进行位操作。3.3.3主控芯片T6963C指令说明:如表(2)命令代码(bin)代码(hex)参数D1参数D2功能StatusS0-S7-读状态Reg Seting0010000121HXAddressyAddress设光标指针0010001022H偏移量00H设偏移量寄
6、存器0010010024H低位地址高位地址设地址指针 Set ControlWord0100000040H低位地址高位地址设文字区起始地址0100000141H字节数00H设文字区宽度0100001042H低位地址高位地址设图形区起始地址0100001143H字节数00H设图形区宽度Mode set1000*00080H/88HOR*=0内部字符发生器*=1外部字符发生器1000*00181H/89HXOR1000*01183H/8BHAND1000*10084H/8CH文字属性Display Molde1001000090H显示关1001xx1092H光标显示,闪烁关1001xx1193H光
7、标显示,闪烁开100101xx94H文字开,图形关100110xx98H文字关,图形开100111xx9BH文字开,图形开Cursor Pattern10100D2-0A0H-A8H光标高度Data AutoRead/write10110000B0H设置数据自动写10110001B1H设置数据自动读10110010B2H退出自动读写DataRead/write11000000C0H显示数据写数据,地址指针自加111000001C1H-读数据,地址指针自加111000010C2H显示数据写数据,地址指针自减111000011C3H-读数据,地址指针自减111000100C4H显示数据-写数据,地
8、址指针不变11000101C5H-读数据,地址指针不变Screen peek11100000E0H-屏幕读取Screen copy11101000E8H-屏幕复制BitSet/reset11110xxxx-Bit Clear11111xxxx-Bit Set表(2)4.系统软件设计(含程序流程图,子程序功能介绍、程序功能注释)4.1程序流程图,如图(3) N Y 图(3) 4.2子程序功能介绍LCD_Write_Data()写数据子LCD_Write_Command0()写无参数命令字LCD_Write_Command1()写单参数命令字LCD_Write_Command2()写双参数命令子v
9、oid LCD_T6963_Ini()液晶模块初始化工作void LCD_Fill_All() LCD填充.对LCD的空间填入同一个数据LCD_Dis_Chi()在主函数中,只要调用这几个函数,就能实现显示的文字显示LCD_Dis_Str()能利用T9693C内部字符发生器CGROM,在液晶屏上显示西文数组LCD_Mak_Cgr()创建CGRAM,CGRAM中包含能用文本方式显示的自定义字符LCD_DIS_CHI()利用CGRAM自定字符,以文本方式形式输出4.3完整程序及其功能注释*说明: 本程序为T6963C的驱动功能: 能对OMC12864-4液晶模块硬件进行定义;定义了对液晶模块最层的
10、操作函数, 如:,读状态字函数,读数据函数,写无参数命令字函数,写单参数命令字函数, 字双参数命令字函数,写数据函数时间: 2011/01/010 修改时间:2011/01/12作者: HUSTWb wuyong*/*说明: 本程序主要用来进行文本显示,实现的功能有:显示英文数组,中文数组, 在主函数中可以直接调用的函数有:T6963C初始化程序,液晶屏清零程序 显示英文数组,中文数组.实现了程序的封装. 修改日间:2011/01/12T6963C命令的定义*/指针设置指令#define LCD_CUR_POS 0X21 /光标位置设置(只有设置到有效显示地址并打开显示才看 到),双参数(D1
11、水平位置,D2垂直位置)#define LCD_CGR_POS 0X22 /CGRAM偏置地址设置(用来增加自己的符号),双参数(D1 低5位有效,D2=00)#define LCD_ADR_POS 0x24 /地址指针位置(设置读写操作打针)/显示区域设置指令#define LCD_TXT_STP 0X40 /文本区首址(从此地址开始向屏幕左上角显示字符)#define LCD_TXT_WID 0X41 /文本区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点 数)#define LCD_GRH_STP 0X42 /图型区首址(从此地址开始向屏幕左上角显示点,(有等进 一步确认)为文本方
12、式显示时,显示为文本显示特性#define LCD_GRH_WID 0X43 /图形区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点 数)/显示方式设置指令,当CG(D3)为0启用CGROM#define LCD_MOD_OR 0X80 /显示方式:逻辑或#define LCD_MOD_XOR 0X81 /显示方式:逻辑异或#define LCD_MOD_AND 0x83 /显示方式:逻辑与#define LCD_MOD_TCH 0x84 /显示方式:文本/显示开关设置指令,(D0,D1,D2,D3)=1/0 (光标闪烁,光标显示,文本显示 图形显示)启用/禁用#define LCD_D
13、IS_SW 0x90 /显示开关设置/光标开头设置指令#define LCD_CUR_SHP 0xA0 /光标型形状选择:0xA0-0xA7代表光标占的行数/自动读写设置指令#define LCD_AUT_WR 0xB0 /自动写设置#define LCD_AUT_RD 0xB1 /自动读设置#define LCD_AUT_OVR 0xB2 /自动读写结束/数据一次读写设置指令#define LCD_INC_WR 0xC0 /数据一次写,地址加1#define LCD_INC_RD 0xC1 /数据一次读,地址加1#define LCD_DEC_WR 0xC2 /数据一次写,地址减1#defi
14、ne LCD_DEC_RD 0xC3 /数据一次读,地址减1#define LCD_ZER_WR 0xc4 /数据一次写,地址不变#define LCE_ZER_RD 0xc5 /数据一次读,地址不变/屏读设置指令#define LCD_SCN_RD 0xE0 /屏读,屏读只能在图形显示区内;该指令是把屏上的内容 取出来作为数据使用./屏拷贝#define LCD_SCN_CP 0xE8 /屏拷贝,该指令将屏上当前地址指针(图形)处开妈的一行 合成显示内容拷贝到相对应的图形显示区的一级单元/位操作指令#define LCD_BIT_OP 0xFF /该指令可将显示缓冲区单无的某位清零或置位.D
15、0-D1- 定义D0-D7位;D3-1为置位,D3-0为复位unsigned char xdata LCD_DAT_ADD _at_ 0x8000; / C/D-P2.0unsigned char xdata LCD_COM_ADD _at_ 0x8100; / C/D-P2.0/*函数名称:LCD_Write_Data()功 能:写数据子程序,将数据输入T6963C入口参数:data 想要写入的数据出口参数:无说 明:在写命令之前,状态位D0(STA0),D1(STA1)必须全为1*/void LCD_Write_Data(unsigned char data1) while(LCD_COM
16、_ADD)&0x03)!=0x03); LCD_DAT_ADD=data1;/*函数名称:LCD_Write_Command0()功 能:写无参数命令字程序,将T6963C对应的指令写入,没有参数入口参数:commond 想要写入的命令字出口参数:无说 明:在写命令之前,状态位D0(STA0),D1(STA1)必须全为1*/void LCD_Write_Command0(unsigned char command) while(LCD_COM_ADD)&0x03)!=0x03) ; LCD_COM_ADD=command;/*函数名称:LCD_Write_Command1()功 能:写单参数命
17、令字程序,将T6963C对应的指令写入入口参数:commond 想要写入的命令字出口参数:无说 明:先送数据,再送命令字*/void LCD_Write_Command1(unsigned char command,unsigned char data1) LCD_Write_Data(data1); LCD_Write_Command0(command);/*函数名称:LCD_Write_Command2()功 能:写双参数命令子程序,将T6963C对应的指令写入入口参数:commond 想要写入的命令字出口参数:无说 明:先送数据,再送命令字*/void LCD_Write_Command
18、2(unsigned char command,unsigned char data1,unsigned char data2) LCD_Write_Data(data1); LCD_Write_Data(data2); LCD_Write_Command0(command); /*函数名称:LCD_T6963_Ini()功 能:液晶模块初始化工作入口参数:无出口参数:无说 明:初始化工作的主要要完成对文本方式的RAM起始地址的设定,文本模式的显示 宽度,图形方式的RAM的起始地址,以及其宽度;设置显示方式等工作.*/ void LCD_T6963_Ini(void) LCD_Write_Co
19、mmand2(LCD_TXT_STP,0x00,0x00); /设置文本方式RAM起始地址 LCD_Write_Command2(LCD_TXT_WID,0x20,0x00); /设置文本方式的宽度,宽 度为N/6或N/8) LCD_Write_Command2(LCD_GRH_STP,0x00,0x08); /设置图形方式RAM起始地 址 LCD_Write_Command2(LCD_GRH_WID,0x20,0x00); /设置图形方式的宽度,宽 度为N/6或N/8) LCD_Write_Command0(LCD_CUR_SHP|0x08); /设置光标的形状 LCD_Write_Comm
20、and0(LCD_MOD_OR); /设置显示方式为逻辑或方 式 LCD_Write_Command0(LCD_DIS_SW|0x94); /设置文本显示方式/*函数名称:LCD_Fill_All()功 能:LCD填充.对LCD的空间填入同一个数据入口参数:dat出口参数:无说 明:填充,主要可用来对液晶进行清屏,只对其填入使屏为白的字就行了*/void LCD_Fill_All(unsigned char dat) unsigned int i; LCD_Write_Command2(LCD_ADR_POS,0x00,0x00); /置地址指针 LCD_Write_Command0(LCD_
21、AUT_WR); /自动写 for(i=0;i32767;i+) while(LCD_COM_ADD&0x08)!=0x08) LCD_DAT_ADD=dat; /写数据 LCD_Write_Command0(LCD_AUT_OVR); /自动写关 LCD_Write_Command2(LCD_ADR_POS,0x00,0x00); /重置地址指针 /*显示英文数组函数名称:LCD_Dis_Str()功 能:能利用T9693C内部字符发生器CGROM,在液晶屏上显示西文数组入口参数:x,y,*wordcode,*wordattr,wordlongth出口参数:无说 明:x,y对应是字符在屏上的
22、字符坐标*/LCD_Dis_Str(unsigned char x,unsigned char y,unsigned char *wordcode,unsigned char *wordattr,unsigned char wordlongth) unsigned char i,xlable,ylable; unsigned int dataadd; dataadd=y*30+x; xlable=dataadd&0xff; ylable=dataadd/256; /计算字符RAM的地址 LCD_Write_Command0(LCD_DIS_SW|0x08); /设置设置显示方式 LCD_Wri
23、te_Command0(LCD_DIS_SW|0x02); LCD_Write_Command0(0X8c); /设置为文本特征显示方式 LCD_Write_Command2(LCD_ADR_POS,(xlable+0),(ylable+0); /设置地址 for(i=0;iwordlongth;i+) /写字符代码,利用内部GCROM LCD_Write_Command1(LCD_INC_WR,wordcodei); LCD_Write_Command2(LCD_ADR_POS,0x00,0x08); /写字符对应的特征位 for(i=0;iwordlongth;i+) LCD_Write_Command1(LCD_INC_WR,wordattri); /*建立CGRAM函数名称:LCD_Mak_Cgr()功 能:创建CGRAM,CGRAM中包含能用文本方式显示的自定义字符入口参数:cgramnum出口参数:无说 明:在CGRAM中写入字符点阵*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1