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

📄 t6963c.c

📁 LPC2132 T6963C驱动 C语言
💻 C
📖 第 1 页 / 共 2 页
字号:
//主程序




/***********************************/
/* LCM(TRULY M240128-1A1)显示程序*/
/* LCM 控制芯片 T6963C 带32KRAM    */
/* MCU 型号: LPC2132               */
/* 时钟频率: 11.0592 MHz           */
/* 接口方式: 模拟方式              */
/* 开发环境: ADS1.2                */
/* 开发日期: 2007.7.7              */
/* 程序编写: 用芯工作              */
/*邮件地址 kufund@163.com          */
/***********************************/

/***********************************
**     硬件接口
**   D0-------P0.4
**        |
**   D7-------P0.11

**   WR-------P0.12
**   RD-------P0.13
**   CE-------P0.14
**   C/D------P0.15
**   RST------P0.16

************************************/

#define t6963c_c 1
#include "t6963c.h"


/***********************************
**
**           接口定义
**
***********************************/

/* 定义总线起始的GPIO,即D0对应的GPIO值(P0.4) */
#define  BUS_NO		4

/* 输出总线数据宏定义 */
#define	 OutData(dat)	IO0CLR = 0xFF<<BUS_NO; IO0SET = (dat&0xff)<<BUS_NO



/*数据口宏定义 */
#define DATA_PORT   0xFF<<BUS_NO


/* 定义 WR 控制 */
#define  LCM_WR	12
#define  SWR();		IO0SET = 1<<LCM_WR
#define  CWR()		IO0CLR = 1<<LCM_WR



/* 定义 RD 控制 */
#define  LCM_RD	13
#define  SRD()		IO0SET = 1<<LCM_RD
#define  CRD()		IO0CLR = 1<<LCM_RD



/* 定义 CE 控制 */
#define  LCM_CE	14
#define  SCE()		IO0SET = 1<<LCM_CE
#define  CCE()		IO0CLR = 1<<LCM_CE



/* 定义 CD 控制 */
#define  LCM_CD	15
#define  SCD()		IO0SET = 1<<LCM_CD
#define  CCD()		IO0CLR = 1<<LCM_CD


/* 定义 CE 控制 */
#define  LCM_RST	16
#define  SRST()		IO0SET = 1<<LCM_RST
#define  CRST()		IO0CLR = 1<<LCM_RST


/****************************************/


/*sfr p0=0x80;
sfr p1=0x90;
sfr p2=0xa0;
sfr p3=0xb0;

sbit reset=p3^0;
sbit cd=P1^3;
sbit cs=p1^2;
sbit rd=P1^1;
sbit wr=P1^0;*/


uint txthome,grhome;


/*********************************************************************************
* 名称:DELAY5()
* 功能:软件延时函数。用于LCM显示输出时序控制。
* 入口参数:无
* 出口参数:无
**********************************************************************************/
void DELAY5(void)
{ int i;

  for(i=0; i<100; i++);
}



/**********************************
//= 函数原型: uchar check_cmd_st()
//= 功    能: 查询是否可读写命令和数据的状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
uchar check_cmd_st(void) // 状态位STA1,STA0 判断(读写指令和读写数据)
{
    uchar i,temp;
    for(i=100;i>0;i--)
    {
    	
    	CCE();
    	DELAY5();
    	SCD();
      DELAY5();
      SRD();
      DELAY5();
 	    CRD();
 	    DELAY5();
 	    temp = (uchar)((IO0PIN&0x00000FF0)>>4);  //读总线数据
 	    SRD();
 	    if((temp & 0x03) == 0x03)
 	    break;
    }
    return i; // 若返回零,说明错误
}

/**********************************
//= 函数原型: uchar check_ar_st
//= 功    能: 查询是否可数据自动读状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
uchar check_ar_st(void) // 状态位ST2 判断(数据自动读状态)
{
    uchar i,temp;
    for(i=100;i>0;i--)
    {
    	CCE();
    	DELAY5();
    	SCD();
    	DELAY5();
    	SRD();
    	DELAY5();
 	    CRD();
 	    temp = (uchar)((IO0PIN&0x00000FF0)>>4);  //读总线数据
 	    SRD();	     
 	    if((temp & 0x04) == 0x04)
 	    break;
    	
    }
    return i; // 若返回零,说明错误
}

/**********************************
//= 函数原型: uchar check_aw_st
//= 功    能: 查询是否可数据自动写状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
uchar check_aw_st(void) // 状态位ST3 判断(数据自动写状态)
{
    uchar i,temp;
    for(i=100;i>0;i--)
    {
      CCE();
      DELAY5();
    	SCD();
    	DELAY5();
    	SRD();
 	    DELAY5();
 	    CRD();
			DELAY5();
 	    temp = (uchar)((IO0PIN&0x00000FF0)>>4);  //读总线数据
 	    SRD();	     
 	    if((temp & 0x08) == 0x08)
 	    break;
    }
    return i; // 若返回零,说明错误
}

/**********************************
//= 函数原型: uchar check_scrPeek_st()
//= 功    能: 查询是否可屏读/屏拷贝状态状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
uchar check_scrPeek_st(void) // 状态位ST6 判断(屏读/屏拷贝状态)
{
    uchar i,temp;
    for(i=100;i>0;i--)
    {
    	CCE();
    	DELAY5();
    	SCD();
    	DELAY5();
    	SRD();
 	    DELAY5();
 	    CRD();
			DELAY5();
 	    temp = (uchar)((IO0PIN&0x00000FF0)>>4);  //读总线数据
 	    SRD();	     
 	    if((temp & 0x40) == 0x40)
 	    break;
    }
    return i; // 若返回零,说明错误
}

/**********************************
//= 函数原型: uchar wr_cmd_2(uchar uCmd,uint uPar)
//= 功    能: 给T6963C写带双参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar wr_cmd_2(uchar uCmd,uint uPar) // 写双参数的指令
{
	 uchar temp;
	 
    if(check_cmd_st() == 0)    return 1;
    	 	CCD();
    	 	DELAY5();
      	SWR();
      	DELAY5();
      	CWR();
        DELAY5();
 	      temp = (uchar)(uPar& 0xFF); 
 	      OutData(temp);               //先写低字节
 	      DELAY5();
 	      SWR();
 	      DELAY5();
      	SCD();
    if(check_cmd_st() == 0)    return 2;
    	
        CCD();
        DELAY5();
      	SWR();
      	DELAY5();
      	CWR();
      	DELAY5();
 	      temp = (uchar)(uPar>>8);  //再写高字节
 	      OutData(temp); 
 	      DELAY5();
 	      SWR();
 	      DELAY5();
      	SCD();	
        
    if(check_cmd_st() == 0)    return 3;
    	SCD();
    	DELAY5();
		 	SWR();
		 	DELAY5();
 		  CWR();
 		  DELAY5();
 		  OutData(uCmd);
 		  DELAY5();
    	SWR();	
    
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar wr_cmd_1(uchar uCmd,uchar uPar1)
//= 功    能: 给T6963C写带单参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar wr_cmd_1(uchar uCmd,uchar uPar) // 写单参数的指令
{
    if(check_cmd_st() == 0)    return 1;
        CCD();
        DELAY5();
      	SWR();
      	DELAY5();
      	CWR();
      	DELAY5();
      	OutData(uPar);   
 	      DELAY5(); 
 	      SWR();
 	      DELAY5();
      	SCD();	
    if(check_cmd_st() == 0)    return 2;
     SCD();
     DELAY5();
		 SWR();
		 DELAY5();
 		 CWR();
 		 DELAY5();
 		 OutData(uCmd);
 		 DELAY5();
     SWR();	
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar wr_cmd_0(uchar uCmd)
//= 功    能: 给T6963C写无参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar wr_cmd_0(uchar uCmd) // 写无参数的指令
{
    if(check_cmd_st() == 0)    return 1;
     SCD();
     DELAY5();
		 SWR();
		 DELAY5();
 		 CWR();
 		 DELAY5();
 		 OutData(uCmd);
 		 DELAY5();
     SWR();	
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar wr_data(uchar uData)
//= 功    能: 给T6963C写一次数据
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar wr_data(uchar uData) // 写一次数据
{
    if(check_cmd_st() == 0)    return 1;
        CCD();
        DELAY5();
      	SWR();
      	DELAY5();
      	CWR();
      	DELAY5();
 	      OutData(uData);         
				DELAY5();
 	      SWR();
 				DELAY5();
      	SCD();		
    return 0; // 返回0 成功
}


/**********************************
//= 函数原型: uchar awr_data(uchar uData)
//= 功    能: 给T6963C写一个地址增加自动连续数据
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar awr_data(uchar uData) // 自动写数据
{
    if(check_aw_st() == 0)    return 1;
        CCD();
        DELAY5();
      	SWR();
      	DELAY5();
      	CWR();
        DELAY5();
 	     // P0=  uData; 
 	      OutData(uData);         
 	      DELAY5();
 	      SWR();
 	      DELAY5();
      	SCD();		
   // LCMDP = uData;
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar ard_data(uchar uData)
//= 功    能: 从T6963C读一个地址增加自动连续数据
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
uchar ard_data(void) // 自动读数据
{
	  uchar temp;
	  
	  
	  if(check_ar_st() == 0)    return 1; 
	    CCE();
	    DELAY5();
    	CCD();
    	DELAY5();
    	SRD();
    	DELAY5();
 	    CRD();
 	    DELAY5();
 	    temp = (uchar)((IO0PIN&0x00000FF0)>>4);  //读总线数据
 	    SRD();	     
	    return temp;	
  //  if(check_ar_st() == 0)    return 1;
    	  
   // return LCMDP;
}

/**********************************
//= 函数原型: void char_addr_Pointer_Set(uchar urow, uchar ucol)
//= 功    能: 根据字符的行列设置vram地址
//= 参    数:
//= 返 回 值:
//= 函数性质:私有函数
**********************************/
void char_addr_Pointer_Set(uchar urow, uchar ucol)
{
    uint iPos;
    iPos = urow * 30 + ucol + txthome;
    wr_cmd_2(LC_ADD_POS,iPos);
}

/**********************************
//= 函数原型: Clr_char_Scr(void)
//= 功    能: 清除当前文本屏幕
//= 参    数:
//= 返 回 值:
//= 函数性质:公有函数
**********************************/

void Clr_char_Scr(void)//文本屏可以在内存中保持很多屏
{

⌨️ 快捷键说明

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