📄 lcm(truly m240128-1a1)显示程序.txt
字号:
//主程序
/***********************************/
/* 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; for(i="0;" i,temp; uchar { 判断(读写指令和读写数据) 状态位STA1,STA0 check_cmd_st(void) ********************************** ="函数原型:" 非0不忙,否则忙 值: 回 数: 查询是否可读写命令和数据的状态 能: check_cmd_st() } i++); i<100; i; int DELAY5(void) void ********************************************************************************** 出口参数:无 * 入口参数:无 功能:软件延时函数。用于LCM显示输出时序控制。 名称:DELAY5() ********************************************************************************* txthome,grhome; uint wr="P1^0;*/" sbit rd="P1^1;" cs="p1^2;" cd="P1^3;" reset="p3^0;" p3="0xb0;" sfr p2="0xa0;" p1="0x90;" p0="0x80;" *sfr **************************************** IO0CLR="1<<LCM_WR" CRST() #define IO0SET="(dat&0xff)<<BUS_NO" SRST() 16 LCM_RST 控制 CE 定义 CCD() SCD() 15 LCM_CD CD CCE() SCE() 14 LCM_CE CRD() SRD() 13 LCM_RD RD CWR() SWR(); 12 LCM_WR WR 0xFF<<BUS_NO DATA_PORT *数据口宏定义>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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -