对比度调节输入(内部负压时空接)
5
/WR
L
写信号
6
/RD
L
读信号
7
/CE
L
片选信号
8
C/D
H/L
指令/数据选择(H:
指令L:
数据)
9
/RESET
L
复位(模块内已带上电复位电路,加电后可自动复位)
10~17
DB0~DB7
H/L
数据总线0(三态数据总线)
18
FS
H/L
字体选择(H:
6X8点;L:
8X8点,图形方式时建议接低)
19
LED+
--
LED背光电源输入(+5V)或EL背光电源输入(AC80V)
20
LED-
--
LED背光电源输入负极
T6963C是日本东芝公司专门为中等规模LCD模块设计的一款控制器,它通过外部MCU方便地实现对LCD驱动器和显示缓存的管理。
其特点为8位80或Z80系列总线,内部有128个常用字符表,可管理外部扩展显示缓存64KB(本模块为32KB),并具有丰富的指令供MCU实现对LCD显示屏幕的操作与编辑。
其指令如表3-6-2所示:
表3-6-2T6963C指令表
命令
命令码
参数D1
参数D2
功能
地址
指针设置
00100001(21H)
00100010(22H)
00100100(24H)
X横向地址
偏置地址
低8位地址
Y垂直地址
00H
高8位地址
光标地址设置
CGRAM偏置地址设置
读写显缓地址设置
显示
区域设置
01000000(40H)
01000001(41H)
01000010(42H)
01000011(43H)
低8位地址
每行字符数
低8位地址
每行字节数
高8位地址
00H
高8位地址
00H
文本显示区首地址
文本显示区宽度
图形显示区首地址
图形显示区宽度
显示
方式设置
10000000(80H)
10000001(81H)
10000011(83H)
10000100(84H)
-
-
-
-
-
-
-
-
文本与图形逻辑"或"合成显示
文本与图形逻辑"异或"合成显示
文本与图形逻辑"与"合成显示
文本显示特征以双字节表示
显示状态设置
10010000(90H)
10010010(92H)
10010011(93H)
10010100(94H)
10011000(98H)
10011100(9CH)
-
-
-
-
-
-
-
-
-
-
-
-
关所有显示
光标显示但不闪
光标闪动显示
文本显示,图形关闭
文本关闭,图形显示
文本和图形都显示
光标
大小设置
10100000(A0H)
10100001(A1H)
10100010(A2H)
10100011(A3H)
10100100(A4H)
10100101(A5H)
10100110(A6H)
10100111(A7H)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1行八点光标
2行八点光标
3行八点光标
4行八点光标
5行八点光标
6行八点光标
7行八点光标
8行八点光标
进入/退出显示数据自动读/写方式设置
10110000(B0H)
10110001(B1H)
10110010(B2H)
1011001110110011(B3H)
-
-
-
-
-
-
-
-
进入显示数据自动写方式
进入显示数据自动读方式
退出自动读/写方式
退出自动读/写方式
进入显示数据一次读/写方式设置
11000000(C0H)
11000001(C1H)
11000010(C2H)
11000011(C3H)
11000100(C4H)
11000101(C5H)
数据
-
数据
-
数据
-
-
-
-
-
-
-
写一字节数据,地址指针加一
读一字节数据,地址指针加一
写一字节数据,地址指针减一
读一字节数据,地址指针减一
写一字节数据,地址指针不变
读一字节数据,地址指针不变
屏读一
字节
11100000(E0H)
-
-
从当前地址指针(在图形区内)读一字节屏幕显示数据
屏读拷贝(一行)
11101000(E8H)
-
-
从当前地址指针(在图形区内)读一行屏幕显示数据并写回
显示数据
位操作设置
111110XXX
11111XXX
1111X000
1111X001
1111X010
1111X011
1111X100
1111X101
1111X110
1111X111
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
位清零
位置位
设位地址Bit0(LSB)
设位地址Bit1
设位地址Bit2
设位地址Bit3
设位地址Bit4
设位地址Bit5
设位地址Bit6
设位地址Bit7(MSB)
其读写时序如下图7-2所示
图7-2T6963C读写时序图
状态判断指令功能描述
无论是向T6963C读写数据还是写入命令,都必需判断忙状态。
读忙状态满足以下条件:
/RD:
L;/WR:
H;/CE:
L;C/D:
H;D0~D7状态字
T6963C状态字定义如下
MSB
LSB
STA7
STA6
STA5
STA4
STA3
STA2
STA1
STA0
D7
D6
D5
D4
D3
D2
D1
D0
其各位状态描述如下表所示
STA0
指令读写状态
0:
忙1:
闲
STA1
数据读写状态
0:
忙1:
闲
STA2
数据自动读状态
0:
忙1:
闲
STA3
数据自动写状态
0:
忙1:
闲
STA4
未用
STA5
控制器运行检测可能性
0:
不能1:
可能
STA6
屏读/屏拷贝出错状态
0:
对1:
错
STA7
闪烁状态检测
0:
关1:
开
说明1.STA0和STA1在大多数命令和数据传送前必需在同一时刻判断,否则可能会出错;
2.在数据自动读写时判断STA2和STA3;
3.在屏读/屏拷贝时判断STA6;
4.STA5和STA7为厂家测试时用。
7.2电路原理图
液晶12864和单片机的连接示意图如下图3-6-3所示。
WR接P24,RD接P23,CE接P22,CD接P21,RST接P20。
D0~D7接单片机的八位数据口P0,12864的第4脚接变位器,调节背光显示。
图3-6-3STC89C51和LCD12864连接示意图
7.312864液晶C51参考程序
例子:
用C语言编程,在12864液晶上显示两屏画面,开机画面显示“河南科技学院信息工程学院”、“9876543210;”和河南科技学院的网站地址“”,第二屏显示“一路平安万事如意”八个祝福的汉字。
程序代码如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/**************************************************************
*12864(T6963)液晶显示器端口配置,I/O接法
***************************************************************/
sbitREST=P2^0;//Resetsignal,active"L"
sbitC_D=P2^1;//L:
dataH:
code
sbitC_E=P2^2;//Chipenablesignal,active"L"
sbitR_D=P2^3;//readsignal,active"L"
sbitW_R=P2^4;//writesignal,active"L"
#include"祝福.c"
#include"数字.c"
#include"小字体.c"
#include"12864.c"
/***********************************************************
*以下函数功能是从x.y位置开始显示从j到k个16*16的汉字
************************************************************/
voidxiaoziti(ucharx,uchary,ucharj)
{
unsignedintaddress;
ucharn,m=0;
address=LcmLengthDots/8*y+x+0x0800;
for(n=0;n<16;n++)
{
write_ddc(0x24,(uchar)(address),(uchar)(address>>8));
write_dc(0xc0,keji[j][m++]);
write_dc(0xc0,keji[j][m++]);
address=address+128/8;
x=x+4;
y++;
}
}
voiddis_henankeji(ucharx,uchary,uchara,ucharb)
{
ucharm,n;
m=x;
n=y;
for(;a
{
xiaoziti(m,n,a);
m+=2;
}
}
/********************************************************
*以下程序是显示“一路平安万事如意”测试程序32*32的字体
*********************************************************/
voidzhufu_oneword(ucharx,uchary,ucharj)
{
unsignedintaddress;
ucharn,m=0;
address=LcmLengthDots/8*y+x+0x0800;
for(n=0;n<32;n++)
{
write_ddc(0x24,(uchar)(address),(uchar)(address>>8));
write_dc(0xc0,zhufu[j][m++]);
write_dc(0xc0,zhufu[j][m++]);
write_dc(0xc0,zhufu[j][m++]);
write_dc(0xc0,zhufu[j][m++]);
address=address+128/8;
x=x+4;
y++;
}
}
voiddis_zhufu()
{
zhufu_oneword(0,0,0);//yilupingan
zhufu_oneword(4,0,1);//x每变化1就改变横向改变8个小点
zhufu_oneword(8,0,2);
zhufu_oneword(12,0,3);
zhufu_oneword(0,32,4);//wanshiruyi
zhufu_oneword(4,32,5);//y没变化1就改变1个“一个”小点
zhufu_oneword(8,32,6);
zhufu_oneword(12,32,7);
}
/***************************************************
*以下程序是显示0~6个大字体的测试程序
****************************************************/
voidshuzi_oneword(ucharx,uchary,ucharj)
{
unsignedintaddress;
ucharn,m=0;
address=LcmLengthDots/8*y+x+0x0800;
for(n=0;n<32;n++)//数字取的字模为24*32所以为shuzi[][96]其中96=24*(32除以8)
{
write_ddc(0x24,(uchar)(address),(uchar)(address>>8));
write_dc(0xc0,shuzi[j][m++]);
write_dc(0xc0,shuzi[j][m++]);
write_dc(0xc0,shuzi[j][m++]);
address=address+128/8;
x=x+4;
y++;
}
}
/*********************************************
*显示开机画面函数
*********************************************/
voiddis_kjhuamian()
{
dis_henankeji(2,0,0,6);
dis_henankeji(2,16,6,12);
display_string(0,5,"================");
display_string(2,6,"9876543210;");
display_string(0,7,"");
ldelay(500);
F12864_clear();
}
/*主程序*/
voidmain()
{
F12864_init();
F12864_clear();
dis_kjhuamian();//开机画面
F12864_clear();
while
(1)
{
F12864_clear();
dis_zhufu();//祝福的东西
ldelay(700);
F12864_clear();
}
}
/*以下为程序中用到的几个子函数*/
/*****小字体.c*****/
ucharcodekeji[][32]={
/*--文字:
河--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x20,0x00,0x17,0xFE,0x10,0x08,0x00,0x08,0x88,0x08,0x4B,0xC8,0x52,0x48,0x12,0x48,
0x22,0x48,0x23,0xC8,0xE2,0x48,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x10,
/*--文字:
南--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x00,0x3F,0xFC,0x24,0x24,0x22,0x44,
0x2F,0xF4,0x21,0x04,0x3F,0xFC,0x21,0x04,0x21,0x04,0x21,0x14,0x21,0x08,0x00,0x00,
/*--文字:
科--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
/*--文字:
技--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,
0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00,
/*--文字:
学--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,
0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,
/*--文字:
院--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x80,0xF8,0x40,0x8F,0xFE,0x94,0x04,0xA0,0x00,0xA3,0xF8,0x90,0x00,0x88,0x00,
0x8F,0xFE,0xA9,0x20,0x91,0x20,0x81,0x20,0x82,0x22,0x82,0x22,0x84,0x22,0x88,0x1E,
/*--文字:
信--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x08,0x80,0x0C,0x60,0x18,0x40,0x17,0xFE,0x30,0x00,0x33,0xF8,0x50,0x00,0x93,0xF8,
0x10,0x00,0x13,0xF8,0x12,0x08,0x12,0x08,0x12,0x08,0x13,0xF8,0x12,0x08,0x00,0x00,
/*--文字:
息--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x00,0x02,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x1F,0xF0,0x00,0x00,0x09,0x00,0x28,0x84,0x28,0x92,0x68,0x12,0x07,0xF0,0x00,0x00,
/*--文字:
工--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,
/*--文字:
程--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x0D,0xF8,0x71,0x08,0x11,0x08,0x11,0x08,0xFD,0x08,0x11,0xF8,0x30,0x00,0x3B,0xFC,
0x54,0x40,0x50,0x40,0x93,0xFC,0x10,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00,
/*--文字:
学--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,
0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,
/*--文字:
院--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x80,0xF8,0x40,0x8F,0xFE,0x94,0x04,0xA0,0x00,0xA3,0xF8,0x90,0x00,0x88,0x00,
0x8F,0xFE,0xA9,0x20,0x91,0x20,0x81,0x20,0x82,0x22,0x82,0x22,0x84,0x22,0x88,0x1E,
};
/*****祝福.c*****/
ucharcodezhufu[][128]={
/*--文字:
一--*/
/*--华文行楷22;此字体下对应的点阵为:
宽x高=29x30--*/
/*--宽度不是8的倍数,现调整为:
宽度x高度=32x30--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0