系列单片机最小标准系统液晶显示.docx
《系列单片机最小标准系统液晶显示.docx》由会员分享,可在线阅读,更多相关《系列单片机最小标准系统液晶显示.docx(19页珍藏版)》请在冰豆网上搜索。
![系列单片机最小标准系统液晶显示.docx](https://file1.bdocx.com/fileroot1/2023-1/31/034b9a64-a604-42c8-8ff5-489c737ae424/034b9a64-a604-42c8-8ff5-489c737ae4241.gif)
系列单片机最小标准系统液晶显示
《创新设计报告》
基于51系列单片机最小系统的液晶显示
学院:
机电与自动化学院
专业班级:
电气自动化技术0802
学生姓名:
刘刚
学生学号:
20082822077
指导教师:
姚裕安
同组设计者:
吴勇
(课程设计时间:
2011年03月03日——2011年03月13日)
华中科技大学武昌分校
目录
1.设计题目…………………………………………………………………02
2.设计任务及要求……………………………………………………02
3.系统硬件电路设计…………………………………………………………02
3.1设计电路原理图…………………………………………………………02
3.2主要元器件清单…………………………………………………………03
3.3OMC12864-4(T6963c)的简介…………………………………………03
4.系统软件设计………………………………………………………………05
4.1程序流程图………………………………………………………………05
4.2子程序功能介绍…………………………………………………………06
4.3完整程序及其功能注释…………………………………………………06
5.系统调试故障分析…………………………………………………………12
6.调试结果与设计任务分析…………………………………………………13
7.课设收获与建议……………………………………………………………13
参考文献………………………………………………………………………13
1.设计题目
基于51单片机最小系统板实现“液晶显示汉字、数字、英文”
2.设计任务及要求
任务:
最小系统板实现“液晶显示汉字、数字、英文”;
要求:
对液晶显示操作技能训练;学会运用Protell软件;
绘制软件流程图、编写并调试程序、详细注释软件功能;
对系统性能指标进行分析并提出改进方案;
作品演示与讲解(硬件、软件、调试、改进、)
3系统硬件电路设计(含文字介绍、电路原理图)
3.1用Protell软件绘制电路原理图采用的是直接访问方式。
如图
(1)
直接访问方式是把内置T6963C控制器的液晶显示模块作为存储器或I/O设备直接挂在计算机的总线上。
模块的数据线接计算机的数据总线上,片选及寄存器选择信号线由算机的地址总线提供,读和写操作由计算机的读写操作信号控制。
图
(1)
图
(1)中的引脚说明OCM12864-4与STC89C52RC接口:
P0.0-0.7<==========>D0-7GND<==========>/CE
P3.7<==========>/RDVCC<==========>/RESET
P3.6<==========>/WRGND<==========>FG
P2.0<==========>C/D
3.2本设计所要用到的主要元器件:
金鹏OMC12864-4液晶显示模块(主控芯片T6963C);JZ-M2单片机最小系统(采用STC89C52RC51系列单片机);
3.3关于OMC12864-4(T6963c)的简介
3.3.1管脚定义见下表
(1):
表
(1)
3.3.2关于主控芯片T6963C说明:
结构特点:
内藏T6963C的液晶显示模块上已经实现了T6963C与行、列驱动器及显示缓冲区RAM的接口,同时也已用硬件设置了液晶屏的结构(单双屏、数据传输方式、显示窗口长度、宽度等等。
我们常用的液晶显示模块一般都是单屏结构,因此我们这里只讨论单屏结构的液晶显示模块。
内藏T6963C的单屏结构点阵图形液晶显示模块的方框图如图
(2):
图
(2)
►T6963C是点阵式液晶图形显示控制器它能直接与8位微处理器接口;
►T6963C的字符字体可由硬件或软件设置,其字体有4种5X8、6X8、7X8、8X8;
►T6963C的占空比可从1/16到1/128;
►T6963C可以图形方式、文本方式及图形和文本合成方式进行显示,以及文本方式下的特征显示,还可以实现图形拷贝操作等等;
►T6963C具有内部字符发生器CGROM,共有128个字符。
T6963C可管理64K显示缓冲区及字符发生器CGRAM,并允许MPU随时访问显示缓冲区,甚至可以进行位操作。
3.3.3主控芯片T6963C指令说明:
如表
(2)
命令
代码(bin)
代码(hex)
参数D1
参数D2
功能
Status
S0-S7
-
-
读状态
RegSeting
00100001
21H
XAddress
yAddress
设光标指针
00100010
22H
偏移量
00H
设偏移量寄存器
00100100
24H
低位地址
高位地址
设地址指针
SetControl
Word
01000000
40H
低位地址
高位地址
设文字区起始地址
01000001
41H
字节数
00H
设文字区宽度
01000010
42H
低位地址
高位地址
设图形区起始地址
01000011
43H
字节数
00H
设图形区宽度
Modeset
1000*000
80H/88H
OR
*=0内部字符发生器
*=1外部字符发生器
1000*001
81H/89H
XOR
1000*011
83H/8BH
AND
1000*100
84H/8CH
文字属性
DisplayMolde
10010000
90H
显示关
1001xx10
92H
光标显示,闪烁关
1001xx11
93H
光标显示,闪烁开
100101xx
94H
文字开,图形关
100110xx
98H
文字关,图形开
100111xx
9BH
文字开,图形开
CursorPattern
10100D2-0
A0H-A8H
光标高度
DataAuto
Read/write
10110000
B0H
设置数据自动写
10110001
B1H
设置数据自动读
10110010
B2H
退出自动读写
Data
Read/write
11000000
C0H
显示数据
写数据,地址指针自加1
11000001
C1H
-
读数据,地址指针自加1
11000010
C2H
显示数据
写数据,地址指针自减1
11000011
C3H
-
-
读数据,地址指针自减1
11000100
C4H
显示数据
-
写数据,地址指针不变
11000101
C5H
-
-
读数据,地址指针不变
Screenpeek
11100000
E0H
-
-
屏幕读取
Screencopy
11101000
E8H
-
-
屏幕复制
Bit
Set/reset
11110xxxx
-
-
BitClear
11111xxxx
-
-
BitSet
表
(2)
4.系统软件设计(含程序流程图,子程序功能介绍、程序功能注释)
4.1程序流程图,如图(3)
N
Y
图(3)
4.2子程序功能介绍
LCD_Write_Data()写数据子
LCD_Write_Command0()写无参数命令字
LCD_Write_Command1()写单参数命令字
LCD_Write_Command2()写双参数命令子
voidLCD_T6963_Ini()液晶模块初始化工作
voidLCD_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液晶模块硬件进行定义;定义了对液晶模块最层的操作函数,
如:
读状态字函数,读数据函数,写无参数命令字函数,写单参数命令字函数,
字双参数命令字函数,写数据函数
时间:
2011/01/010修改时间:
2011/01/12
作者:
HUSTWbwuyong
***************************************************/
/*说明:
本程序主要用来进行文本显示,实现的功能有:
显示英文数组,中文数组,
在主函数中可以直接调用的函数有:
T6963C初始化程序,液晶屏清零程序
显示英文数组,中文数组.实现了程序的封装.
修改日间:
2011/01/12
T6963C命令的定义
********************************************************************/
//指针设置指令
#defineLCD_CUR_POS0X21//光标位置设置(只有设置到有效显示地址并打开显示才看到),双参数(D1水平位置,D2垂直位置)
#defineLCD_CGR_POS0X22//CGRAM偏置地址设置(用来增加自己的符号),双参数(D1低5位有效,D2=00)
#defineLCD_ADR_POS0x24//地址指针位置(设置读写操作打针)
//显示区域设置指令
#defineLCD_TXT_STP0X40//文本区首址(从此地址开始向屏幕左上角显示字符)
#defineLCD_TXT_WID0X41//文本区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点数)
#defineLCD_GRH_STP0X42//图型区首址(从此地址开始向屏幕左上角显示点,((有等进一步确认))为文本方式显示时,显示为文本显示特性
#defineLCD_GRH_WID0X43//图形区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点数)
//显示方式设置指令,当CG(D3)为0启用CGROM
#defineLCD_MOD_OR0X80//显示方式:
逻辑或
#defineLCD_MOD_XOR0X81//显示方式:
逻辑异或
#defineLCD_MOD_AND0x83//显示方式:
逻辑与
#defineLCD_MOD_TCH0x84//显示方式:
文本
//显示开关设置指令,(D0,D1,D2,D3)=1/0<==========>(光标闪烁,光标显示,文本显示图形显示)启用/禁用
#defineLCD_DIS_SW0x90//显示开关设置
//光标开头设置指令
#defineLCD_CUR_SHP0xA0//光标型形状选择:
0xA0-0xA7代表光标占的行数
//自动读写设置指令
#defineLCD_AUT_WR0xB0//自动写设置
#defineLCD_AUT_RD0xB1//自动读设置
#defineLCD_AUT_OVR0xB2//自动读写结束
//数据一次读写设置指令
#defineLCD_INC_WR0xC0//数据一次写,地址加1
#defineLCD_INC_RD0xC1//数据一次读,地址加1
#defineLCD_DEC_WR0xC2//数据一次写,地址减1
#defineLCD_DEC_RD0xC3//数据一次读,地址减1
#defineLCD_ZER_WR0xc4//数据一次写,地址不变
#defineLCE_ZER_RD0xc5//数据一次读,地址不变
//屏读设置指令
#defineLCD_SCN_RD0xE0//屏读,屏读只能在图形显示区内;该指令是把屏上的内容取出来作为数据使用.
//屏拷贝
#defineLCD_SCN_CP0xE8//屏拷贝,该指令将屏上当前地址指针(图形)处开妈的一行合成显示内容拷贝到相对应的图形显示区的一级单元
//位操作指令
#defineLCD_BIT_OP0xFF//该指令可将显示缓冲区单无的某位清零或置位.D0-D1--定义D0-D7位;D3--1为置位,D3--0为复位
unsignedcharxdataLCD_DAT_ADD_at_0x8000;//C/D-P2.0
unsignedcharxdataLCD_COM_ADD_at_0x8100;//C/D-P2.0
/***********************************************************************
函数名称:
LCD_Write_Data()
功能:
写数据子程序,将数据输入T6963C
入口参数:
data想要写入的数据
出口参数:
无
说明:
在写命令之前,状态位D0(STA0),D1(STA1)必须全为1
***********************************************************************/
voidLCD_Write_Data(unsignedchardata1)
{
while(((LCD_COM_ADD)&0x03)!
=0x03);
LCD_DAT_ADD=data1;
}
/***********************************************************************
函数名称:
LCD_Write_Command0()
功能:
写无参数命令字程序,将T6963C对应的指令写入,没有参数
入口参数:
commond想要写入的命令字
出口参数:
无
说明:
在写命令之前,状态位D0(STA0),D1(STA1)必须全为1
***********************************************************************/
voidLCD_Write_Command0(unsignedcharcommand)
{
while(((LCD_COM_ADD)&0x03)!
=0x03);
LCD_COM_ADD=command;
}
/***********************************************************************
函数名称:
LCD_Write_Command1()
功能:
写单参数命令字程序,将T6963C对应的指令写入
入口参数:
commond想要写入的命令字
出口参数:
无
说明:
先送数据,再送命令字
***********************************************************************/
voidLCD_Write_Command1(unsignedcharcommand,unsignedchardata1)
{
LCD_Write_Data(data1);
LCD_Write_Command0(command);
}
/***********************************************************************
函数名称:
LCD_Write_Command2()
功能:
写双参数命令子程序,将T6963C对应的指令写入
入口参数:
commond想要写入的命令字
出口参数:
无
说明:
先送数据,再送命令字
***********************************************************************/
voidLCD_Write_Command2(unsignedcharcommand,unsignedchardata1,unsignedchardata2)
{
LCD_Write_Data(data1);
LCD_Write_Data(data2);
LCD_Write_Command0(command);
}
/************************************************************************
函数名称:
LCD_T6963_Ini()
功能:
液晶模块初始化工作
入口参数:
无
出口参数:
无
说明:
初始化工作的主要要完成对文本方式的RAM起始地址的设定,文本模式的显示
宽度,图形方式的RAM的起始地址,以及其宽度;设置显示方式等工作.
**************************************************************************/
voidLCD_T6963_Ini(void)
{
LCD_Write_Command2(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_Command0(LCD_MOD_OR);//设置显示方式为逻辑或方式
LCD_Write_Command0(LCD_DIS_SW|0x94);//设置文本显示方式
}
/***************************************************************************
函数名称:
LCD_Fill_All()
功能:
LCD填充.对LCD的空间填入同一个数据
入口参数:
dat
出口参数:
无
说明:
填充,主要可用来对液晶进行清屏,只对其填入使屏为白的字就行了
****************************************************************************/
voidLCD_Fill_All(unsignedchardat)
{
unsignedinti;
LCD_Write_Command2(LCD_ADR_POS,0x00,0x00);//置地址指针
LCD_Write_Command0(LCD_AUT_WR);//自动写
for(i=0;i<32767;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对应是字符在屏上的字符坐标
****************************************************************************/
LCD_Dis_Str(unsignedcharx,unsignedchary,unsignedchar*wordcode,unsignedchar*wordattr,unsignedcharwordlongth)
{
unsignedchari,xlable,ylable;
unsignedintdataadd;
dataadd=y*30+x;
xlable=dataadd&0xff;
ylable=dataadd/256;//计算字符RAM的地址
LCD_Write_Command0(LCD_DIS_SW|0x08);//设置设置显示方式
LCD_Write_Command0(LCD_DIS_SW|0x02);
LCD_Write_Command0(0X8c);//设置为文本特征显示方式
LCD_Write_Command2(LCD_ADR_POS,(xlable+0),(ylable+0));//设置地址
for(i=0;i{
LCD_Write_Command1(LCD_INC_WR,wordcode[i]);
}
LCD_Write_Command2(LCD_ADR_POS,0x00,0x08);//写字符对应的特征位
for(i=0;i{
LCD_Write_Command1(LCD_INC_WR,wordattr[i]);
}
}
/*********************************************************************************建立CGRAM
函数名称:
LCD_Mak_Cgr()
功能:
创建CGRAM,CGRAM中包含能用文本方式显示的自定义字符
入口参数:
cgramnum
出口参数:
无
说明:
在CGRAM中写入字符点阵
*******************************************