给个实践OK的驱动范例给你, For the sake of "A month " :(
/* ============================================================================
测试软件 FOR T6963 Long: 240 dots , Width: 128 dots RAM : 32k
Auther: MicroLCD 12 , May 2003
============================================================================= */
#include "reg52M.h" #include "MapDat.h"
#include <ABSACC.H>
//------------------------------------------- 使用直接总线方式控制T6963
#define RESET P3_5 #define CE P3_4
//------ P0 口接 DB0 ~ DB7 , P0口需要上拉10K的电阻到+5V.
//------ RS接P2_7, /RD接3_7, /WR接P3_6
//------------------------ RAM 地址选择寄存器 sfr AUXR = 0x8E;
#define PDATA XBYTE[0x0000] #define PCOM XBYTE[0x8000]
#define T1 1 #define LT 40000 #define ST 50
/*--------------------- 延时 ------------------- */
void delay(uint times) { while(times)times--; }
/*------------------- 状态 测试 ------------ */
/* 0 --> 测试STA0,STA1 状态 */ /* 1 --> 测试STA2,STA3 状态 */
void CheckBF() {
CE=0;
while((PCOM&0x23)!=0x23);
CE=1;
}
/*-------------- 写 指令 寄存器------ */
void Wcode(uchar order) { CE=0; PCOM=order; //delay(ST); CE=1; }
/*-------------- 写数据 寄存器------ */
void Wdata(uchar order) {
CE=0; PDATA=order; //delay(ST); CE=1;
}
/* ------------------------ 初始化子程序---------------------------------*/
void Init() {
//RD=1; //WR=1;
CheckBF(); /* 格式:数据通道(参数1,参数2) + 命令代码 */ Wdata(0x0);
CheckBF(); Wdata(0x0); CheckBF(); Wcode(0x40); /* 设置文本 显示区域首地址:0000H */
CheckBF(); Wdata(0x1e); CheckBF(); Wdata(0x0); CheckBF(); Wcode(0x41); /* 设置文本宽度 30个字符,既一行显示所占字节数 */
CheckBF(); Wdata(0x0); CheckBF(); Wdata(0x08); CheckBF(); Wcode(0x42); /* 设置图形 显示区域首地址:800H */
CheckBF(); Wdata(0x1e); /* 240 Byte */ CheckBF(); Wdata(0x0); CheckBF(); Wcode(0x43); /* 设置图形宽度 240 个字节,既一行显示所占字节数 *
CheckBF(0); Wcode(0xa0); /* 定义光标大小, 1 格显示 */
CheckBF(); Wcode(0x80); /* 设置显示方式 ,选定内部 CGROM,“或逻辑” */
CheckBF(); Wcode(0x98); /* 仅打(图形) 显示*/
}
/* ----------------- 地址定位 ------------- */
void GPS(uint L_addr)
{
uchar KL;
KL=L_addr%256; /* 测定地位 */ Wdata(KL); KL=L_addr/256; /* 测定高位 */ Wdata(KL); Wcode(0x24); /* 设置显示指针 800H */
}
/* ############################## Main Programma ##################################*/
void main() {
uint n; //uchar k;
AUXR=0x03; //EXTRAM=0 --> 选择内部附加的RAM; EXTRAM=1 --> 选择外部数据RAM空间.
RESET=0; /* 低 电 平 复 位 */ delay(LT); RESET=1;
Init(); /* ---------------------------------------------------------------- 初始化 LCM */
//---------------- clear
/* ---------------------------------------++++++++ 以下是 T6963C 的图形测试区 ( 显示一幅图片) +++++++++++*/
GPS(0x800); /* 显示 1 */
CheckBF(); Wcode(0xb0); /* 自动写模式 */
for(n=0;n<3840;n++) Wdata(MAP1[n]);
CheckBF(); Wcode(0xb2);
while(1);
} | |