⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_t6963_all.c

📁 LCD显示的ENGLISH键盘
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************
说明:   本程序为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 + -