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

📄 lm3229.c

📁 T6963C 128x128液晶驱动,非常适合学习和使用单片机开发人员用
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************************
/**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: T6963C 128X128.c
**创   建   人: LUCKY   论坛ID muyuyuzhong 
**最后修改日期: 2007年11月28日
**描        述: 基于T6963C图形液晶芯片的 LM4265 128x128液晶驱动,做简单修改通用适用基于T6963C的图形液晶
**
**说        明 :本来是想写LM3229 240x128的,但是LM3229只显示了上班屏幕.所以改成了LM4265了
**              图形部分还没有写,因为还没找到合适的字模提取软件,也许是我还不会用,呵呵
**              
**              
**注        意:T6963C的字符集不是ASCII,一个8x8的字符点阵的字节顺序是由上而下的	高位在左 低位在右
*********************************************************************************************************/
/*********************************************************************************************************
** 函数名称:  
** 功能描述:  
**           
** 输 入:  
**
** 输 出:  
**         
** 全局变量:  
** 调用模块:  
**
** 作 者:  
** 日 期:  
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include <reg51.h>
#include <intrins.h>


#ifndef UINT8 
#define UINT8 unsigned char
#endif

#ifndef UINT16 
#define UINT16 unsigned int
#endif

#ifndef INT8 
#define INT8 signed char
#endif

#ifndef CHAR
#define CHAR unsigned char
#endif

#ifndef BOOL
#define BOOL bit
#endif
/*********************************************************************************************************
**                        T6963C定义模块
**
********************************************************************************************************/

/*********************定义液晶接口***********************/
sbit LCD_CD = P3^7 ;              //LCD_CD = 1 写命令LCD_CD = 0 写数据 
sbit LCD_RD = P3^6 ;
sbit LCD_WR = P3^5 ;
#define LCD_OutPort P1
/*--------------------------------------------------------*
*定义T6963C的状态字检测
*---------------------------------------------------------*/
#define	 CHECK_01 0x03              //检测0-1位,位0指令读写状态,位1数据读写状态:1 = 准备好 ,0 =  忙  
#define  CHECK_2  0x04              //检测2位,数据自动读状态:1 = 准备好 ,0 =  忙  
#define  CHECK_3  0x08              //检测3位,数据自动写状态:1 = 准备好 ,0 =  忙  
#define  CHECK_6  0x60              //检测6位,屏读/屏拷贝出错状态:1 = 出错,0 = 正确

#define   COLUMN	  16            //定义列为30,作为文本显示区宽度		  、

/***************************T6963C的字符表******************************************
**----------------------------------------------------------------------------------
**0  0x00 0x01 0x02 0x03 0x04 0x03 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
**   空格 !    "    #	$    %    &     ‘   (	   )  *		+	 ,     -  .    /
**----------------------------------------------------------------------------------
**1  0x10 0x11 0x12 0x13 0x14 0x13 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f
**   0    1    2    3    4    5    6    7    8	 9    :    ;    <    =    >    ?
**---------------------------------------------------------------------------------
**2  0x20 0x21 0x22 0x23 0x24 0x23 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f
**   @	  A    B    C    D    E    F    G    H    I    J    K    L    M    N    O
**----------------------------------------------------------------------------------
**3  P   Q     R    S    T    U    V    W    X    Y    Z    [   反/	  ]    ^    _
**----------------------------------------------------------------------------------
**4  '   a     b    c    d    e    f    g    h    i    j    k    l    m    n     o
**----------------------------------------------------------------------------------
**5  p   q     r    s    t    u    v    w    x    y    z    {    直|  }    ~     空格
**----------------------------------------------------------------------------------
**  0x0  1					  5						   a						  f
**其余见T6963C手册
/*********************************************************************************************************
** 函数名称: CheckState 
** 功能描述: 读状态字,在读写数据之前必须要检测状态.在每一次对T6963C的软件操作之前,都要进行判"忙.
**           只有在不忙的状态下计算机对T6963C的操作才有效			 
**           
** 输 入:   bitCheck 检测相应的位
**
** 输 出:   无
**         
** 全局变量: 无
** 调用模块: 无 
** 说明	:    CHECK_01   检测0-1位,位0指令读写状态,位1数据读写状态:1 = 准备好 ,0 =  忙 
**			 CHECK_2    检测2位,数据自动读状态:1 = 准备好 ,0 =  忙  
**			 CHECK_3    检测3位,数据自动写状态:1 = 准备好 ,0 =  忙
**  		 CHECK_6    检测6位,屏读/屏拷贝出错状态:1 = 出错,0 = 正确
**           在仿真中,要关掉检测,实际中应打开
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void CheckState(UINT8 bitCheck)
{
        
    /***********************************
	//仿真时关掉状态检测 
	UINT8 status;	
	LCD_CD = 1;

	
	do 
	{
		LCD_RD = 0;
		status = LCD_OutPort;
		LCD_RD = 1;
		status = bitCheck & status;			
	}while( status != bitCheck);
	********************************/
}

/*********************************************************************************************************
** 函数名称: WriteData 
** 功能描述: 写数据到T6963C			 
**           
** 输 入:   dat  传输数据变量
**
** 输 出:   无
**         
** 全局变量: 无
** 调用模块: void CheckState(UINT8 bitCheck) 
** 说明	:    无
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteData(UINT8 dat)		    //写数据
{
	CheckState(CHECK_01);          //检测状态位0 1
	LCD_CD = 0;
	LCD_WR = 0;	
    LCD_OutPort = dat;
	LCD_WR = 1;
}

/*********************************************************************************************************
** 函数名称: WriteCommand 
** 功能描述: 写命令到T6963C			 
**           
** 输 入:   cmd  传输命令变量
**
** 输 出:   无
**         
** 全局变量: LCD_CD 
**           LCD_WR  
** 调用模块: void CheckState(UINT8 bitCheck) 
** 说明	:    无
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteCommand(UINT8 cmd)		   //写命令
{
	CheckState(CHECK_01);             //检测状态位0 1
	LCD_CD = 1;
	LCD_WR = 0;	
    LCD_OutPort = cmd;
	LCD_WR = 1;	
}

/*********************************************************************************************************
** 函数名称: ReadData 
** 功能描述: 从T6963C读数据到MCU		 
**           
** 输 入:   无
**
** 输 出:   dat 返回读出的数据
**         
** 全局变量: 无 
** 调用模块: void CheckState(UINT8 bitCheck) 
** 说明	:    无
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 ReadData(void)		        //读数据
{
	UINT8 dat;
	CheckState(CHECK_01);           //检测状态位0 1
	LCD_CD = 0;					   
	LCD_RD = 0;	
    dat = LCD_OutPort;
	LCD_RD = 1;	;

	return dat;
}
/*********************************************************************************************************
** 函数名称: WriteOneDataOneCmd 
** 功能描述: 写有一个数据,一个命令		 
**           
** 输 入:   dat 传数据
**           cmd 传命令
**
** 输 出:   无
**         
** 全局变量: 无 
** 调用模块: vvoid WriteData(UINT8 dat)	
**           void WriteCommand(UINT8 cmd)
** 说明	:    无
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteOneDataOneCmd(UINT8 dat, UINT8 cmd)
{
	WriteData(dat);
	WriteCommand(cmd);
}

/*********************************************************************************************************
** 函数名称: WriteTwoDataOneCmd 
** 功能描述: 写有两个数据,一个命令			 
**           
** 输 入:   data1 传数据1
**           data2 传数据1
**           cmd 传命令
**
** 输 出:   无
**         
** 全局变量: 无 
** 调用模块: vvoid WriteData(UINT8 dat)	
**           void WriteCommand(UINT8 cmd)
** 说明	:    当data1和data2组合传输一个16位的参数时,data1为低八位,data2为高八位           
** 作 者:   LUCKY
** 日 期:   2007 - 11 -20
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteTwoDataOneCmd(UINT8 data1, UINT8 data2, UINT8 cmd)
{
	WriteData(data1);	   
	WriteData(data2);
	WriteCommand(cmd);	
}
/*********************************************************************************************************
** 函数名称: LCD_Init 
** 功能描述: 初始化液晶,设置文本图形			 
**           
** 输 入:   无
**
** 输 出:   无
**         
** 全局变量: 无 
** 调用模块: void WriteTwoDataOneCmd(UINT8 data1, UINT8 data2, UINT8 cmd)
**           void WriteCommand(UINT8 cmd)
** 说明	:    当data1和data2组合传输一个16位的参数时,data1为低八位,data2为高八位           
** 作 者:   LUCKY
** 日 期:   2007 - 11 -20
**-------------------------------------------------------------------------------------------------------
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCD_Init(void)
{
	UINT8 data1,data2,cmd;

	/*********************设置文本显示*****************************/
	data1 = 0x00;
	data2 = 0x00;
	cmd = 0x40;                //设置文本显示区首地址
	WriteTwoDataOneCmd(data1,data2,cmd);
	data1 = 0x10;
	data2 = 0x00;
	cmd = 0x41;                //设置文本显示区宽度
	WriteTwoDataOneCmd(data1,data2,cmd);

	/*********************设置图形显示*****************************/
	data1 = 0x00;
	data2 = 0x08;
	cmd = 0x42;                //设置图形显示区首地址
	WriteTwoDataOneCmd(data1,data2,cmd);
	data1 = 0x1e;
	data2 = 0x00;
	cmd = 0x43;                //设置图形显示区宽度
	WriteTwoDataOneCmd(data1,data2,cmd);
	
	/*********************设置图形显示*****************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -