📄 lcd_t6963_all.c
字号:
/***************************************************
说明: 本程序为T6963C的驱动
功能: 能对SMG240128液晶模块硬件进行定义;定义了对液晶模块最层的操作函数,
如:,读状态字函数,读数据函数,写无参数命令字函数,写单参数命令字函数,
字双参数命令字函数,写数据函数
时间: 2007/03/05 修改时间:2007/03/11
作者: 李早红
***************************************************/
/*说明: 本程序主要用来进行文本显示,实现的功能有:显示英文数组,中文数组,
在主函数中可以直接调用的函数有:T6963C初始化程序,液晶屏清零程序
显示英文数组,中文数组.实现了程序的封装.
修改日间:2007/03/12
层底软件有几个函数可以供上层软件调用:
1, 初始化函数:
void LCD_T6963_Ini(void)
2, 填屏程序:
void LCD_Fill_All(unsigned char dat) //dat就是要填的数
3, 创建CGRAM函数:
LCD_Mak_Cgr(unsigned char *cgram,unsigned char cgramnum)//cgram为要写入CGRAM字符点阵首地址,cgramnum为字符代码的个数
4, 写英文数组函数:
LCD_Dis_Str(unsigned char x,unsigned char y,unsigned char *wordcode,unsigned char wordlongth) //x,y为想要显示的坐标,wordcode,wordattr分别为要显示的字符代码数组首地址,和显示字符属性地址,wordlongth要显示的字符个数
5, 写汉字数组函数
LCD_Dis_Chi(unsigned char x,unsigned char y,unsigned char *chinacode,unsigned char codelongth) //x,y显示坐标,chinachode要显示汉字代码数组首地址,codelongth要显示的汉字个数
在主函数中,只要调用这几个函数,就能实现显示的文字显示功能
********************************************************************/
/**************************************************
SMG240128与AT89S52接口:
P0.0-0.7 <==========> D0-7
P3.7 <==========> /RD
P3.6 <==========> /WR
P2.0 <==========> C/D
GND <==========> /CE
VCC <==========> /RESET
GND <==========> FG
***************************************************/
/*******************************************************************
以下为LCM的驱动层,主要负责发送T6963C的各种命令,提供设置显示地址等功能
在发送命令前会检测其状态字
带参数命令的发送模式: 先参数->后命令;
操作模式: 先命令->后参数;
T6963C命令的定义
********************************************************************/
//指针设置指令
#define LCD_CUR_POS 0X21 //光标位置设置(只有设置到有效显示地址并打开显示才看到),双参数(D1水平位置,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 //图型区首址(从此地址开始向屏幕左上角显示点,((有等进一步确认))为文本方式显示时,显示为文本显示特性
#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_DIS_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
#define 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 0xF0 //该指令可将显示缓冲区单无的某位清零或置位.D0-D1---定义D0-D7位;D3--1为置位,D3--0为复位
unsigned char xdata LCD_DAT_ADD _at_ 0x8000; // C/D-P2.0
unsigned 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_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()
功 能:写单参数命令字程序,将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_Command2(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_Command2(LCD_TXT_STP,0x00,0x00); //设置文本方式RAM起始地址
LCD_Write_Command2(LCD_TXT_WID, 30,0x00); //设置文本方式的宽度,宽度为N/6或N/8)
LCD_Write_Command2(LCD_GRH_STP,0x00,0x08); //设置图形方式RAM起始地址
LCD_Write_Command2(LCD_GRH_WID, 30,0x00); //设置图形方式的宽度,宽度为N/6或N/8)
LCD_Write_Command0(LCD_CUR_SHP|0x07); //设置光标的形状
LCD_Write_Command0(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_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(unsigned char x,unsigned char y,unsigned char *wordcode,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|0x0c); //设置设置显示方式
LCD_Write_Command0(LCD_MOD_TCH); //设置为文本特征显示方式
LCD_Write_Command2(LCD_ADR_POS,xlable,ylable); //设置地址
for(i=0;i<wordlongth;i++) //写字符代码,利用内部GCROM
{
LCD_Write_Command1(LCD_INC_WR,wordcode[i]-32);
}
/* LCD_Write_Command2(LCD_ADR_POS,0x00,0x08); //写字符对应的特征位
for(i=0;i<wordlongth;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -