📄 t6963驱动.h
字号:
/***************************************************
显示面页设置函数
void ShowPageSet(uchar Page)
字节图形写入函数
void WrByteImage(uchar x,uchar y,uchar *Pointer,uchar Dot,uchar Page)
点阵图形写入函数(字模采用横向取模子节正序)
void WrDotImage(uchar x,uchar y,uchar *Pointer,uchar Dot,uchar Page)
画园函数 CoreX圆心的x坐标,CoreY圆心的y坐标,Dia直径,Dot点颜色
void circle(uchar CoreX,uchar CoreY,uchar Dia,uchar Dot,uchar Page)
任意画线函数 StartX,StartY为线的水平和垂直起点变量,EndX,EndY为线的水平和垂直重点变量
void Linexy(uchar StartX,uchar EndX,uchar StartY,uchar EndY,uchar Dot,uchar Page)
清显示区函数(以字节方式清楚)w,h为宽度与高度 Dot为点的颜色White或Black Page为要清除的显示页号
void ClearShow(uchar x,uchar y,uchar Dot,uchar Page,uchar w,uchar h)
清显示区函数(以点方式清楚)w,h为宽度与高度,Dot为点的颜色White或Black Page为要清除的显示页号
void ClearShowBit(uchar x,uchar y,uchar Dot,uchar Page,uchar w,uchar h)
画点函数 Dot为点的颜色,WhiteDot为白色BlackDot为黑色
void point(uchar x,uchar y,uchar Dot,uchar Page)
面页拷贝函数
void CopyByteImage(uchar RdPage,uchar WrPage)
液晶初始化函数
void LcdIni(void)
光标位置设置 X=1..30 Y=1..16 Size=0..7 Size变量指定光标的高度
void AssciPointerAddrSet(uchar X,uchar Y,uchar Size)
函数OffPointer用来关闭光标显示
#define OffPointer WrLcdCmd(LCD_DIS_SW|0x0c);
ASSCI数据显示函数 X,Y坐标,X=1..30,Y=1..16 *Pointer为Assci字库指针Assci字库第一个字节为Assci字符的个数
void AssciShow(uchar x,uchar y,uchar *Pointer)
菜单位置计算函数通过菜单指针计算当前菜单在字库中的位置
菜单在字库中的存储位置要与菜单指针定义的相同并连续存储
Temp为菜单光标形参,Point为菜单在字库中的首地址
uint MenuAddrC(uchar Temp,uchar *Point)
创建信息窗口:在指定的页中显示一个104*50 的信息窗口
CopyPage为要复制的面页,FoundPage为要创建的面页
void FoundMessageWindow(uchar CopyPage,uchar FoundPage)
****************************************************/
#define uchar unsigned char
#define uint unsigned int
/**********************************************
*液晶端口定义
**********************************************/
#define LcdDataProt P0
sbit W_R = P2^7;//写控制端口
sbit R_D = P2^6;//读控制端口
sbit C_D = P2^5;//指令数据通道选择控制端口
/**********************************************
*T6963C 命令定义
**********************************************/
#define LCD_CUR_POS 0x21 // 光标位置设置
#define LCD_CGR_POS 0x22 // CGRAM 偏置地址设置
#define LCD_ADD_POS 0x24 // 地址指针位置
#define LCD_TXT_STP 0x40 // 文本区首址
#define LCD_TXT_WID 0x41 // 文本区宽度
#define LCD_GRH_STP 0x42 // 图形区首址
#define LCD_GRH_WID 0x43 // 图形区宽度
#define LCD_MOD_OR 0x80 // 显示方式逻辑或
#define LCD_MOD_XOR 0x81 // 显示方式逻辑异或
#define LCD_MOD_AND 0x82 // 显示方式逻辑与
#define LCD_MOD_TCH 0x83 // 显示方式文本特征
#define LCD_DIS_SW 0x90 // 显示开关
// D0=1/0:光标闪烁启用/禁用
// D1=1/0:光标显示启用/禁用
// D2=1/0:文本显示启用/禁用
// D3=1/0:图形显示启用/禁用
#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_NOC_WR 0xC4 // 数据一次写地址不变
#define LCD_NOC_RD 0xC5 // 数据一次读地址不变
#define LCD_SCN_RD 0xE0 // 屏读
#define LCD_SCN_CP 0xE8 // 屏拷贝
#define LCD_BIT_OP 0xF0 // 位操作
/***********************************************
*显示页参数定义:共分为8个显示页
***********************************************/
#define Page0 0
#define Page1 1
#define Page2 2
#define Page3 3
#define Page4 4
#define Page5 5
#define Page6 6
#define Page7 7
//unsigned char gCurRow,gCurCol; // 当前行列存储行高16 点列宽8点
/************************************************
*函数名称:读液晶状态位函数
*功能说明:输入要读的状态,返回非0值表示就绪
d0 指令读写状态 1就绪
d1 数据读写状态 1就绪
d2 数据自动读状态 1就绪
d3 数据自动写状态 1就绪
d5 液晶控制器运行检测可能性 1可能
d6 屏读/拷贝出错状态 1出错
d7 闪烁状态检测 1正常显示 0关显示
************************************************/
#define LcdDataCmdRWStateCheck 0//液晶数据命令读写状态检测
#define LcdAutoRdStateCheck 1//液晶自动读状态检测
#define LcdAutoWrStateCheck 2//液晶自动写状态检测
#define LcdReadCopyStateCheck 3//液晶屏读/拷贝状态检测
void RdLcdState(uchar State)
{
uchar i;
uchar LcdState;
for(i=10;i>0;i--)
{
LcdDataProt=0xff;
C_D=1;/*指令通道*/
R_D=0;
_nop_();
LcdState=LcdDataProt;/*读状态位*/
R_D=1;
switch (State)
{
case LcdDataCmdRWStateCheck:
{
if((LcdState&=0x03)==0x03)goto EscRdLcdState;//液晶数据命令读写状态检测
}break;
case LcdAutoRdStateCheck:
{
if(LcdState&0x04==0x04)goto EscRdLcdState;//液晶自动读状态检测
}break;
case LcdAutoWrStateCheck:
{
if(LcdState&0x08==0x08)goto EscRdLcdState;//液晶自动写状态检测
}break;
case LcdReadCopyStateCheck:
{
if(LcdState&0x40==0x40)goto EscRdLcdState;//屏读/拷贝状态检测
}break;
}
}
EscRdLcdState:;
}
/************************************************
*函数名称:读液晶数据
*功能描述:返回读出的数据
************************************************/
uchar RdLcdData(void)
{
uchar Data;
RdLcdState(LcdDataCmdRWStateCheck);
LcdDataProt=0xff;
C_D=0;/*数据通道*/
R_D=0;
_nop_();
Data=LcdDataProt;
R_D=1;
return(Data);
}
/************************************************
*函数名称:写液晶数据
*功能描述:输入要写入的数据
************************************************/
void WrLcdData(uchar Data)
{
RdLcdState(LcdDataCmdRWStateCheck);
C_D=0;/*数据通道*/
LcdDataProt = Data;
W_R=0;
_nop_();
_nop_();
W_R=1;
}
/************************************************
*函数名称:写液晶命令字
*功能描述:输入要写入的命令
************************************************/
void WrLcdCmd(uchar Cmd)
{
RdLcdState(LcdDataCmdRWStateCheck);
C_D=1;/*指令通道*/
LcdDataProt = Cmd;
W_R=0;
_nop_();
_nop_();
W_R=1;
}
/************************************************
*函数名称:写双参数的指令
*功能描述:
************************************************/
void WrDparCmd(uchar Cmd,uchar Par1,uchar Par2)
{
WrLcdData(Par1);
WrLcdData(Par2);
WrLcdCmd(Cmd);
}
/************************************************
*函数名称:写单参数的指令
*功能描述:
************************************************/
void WrParCmd(uchar Cmd,uchar Par1)
{
WrLcdData(Par1);
WrLcdData(Cmd);
}
/************************************************
*函数名称:设置显示地址
*功能描述:
************************************************/
void ShowAddrSet(uchar y,uchar x,uchar Page)
{
uint LcdIramAddr;
LcdIramAddr = (uint)y * 30 + x+Page*0xf00;
WrDparCmd(LCD_ADD_POS,LcdIramAddr & 0xFF,LcdIramAddr/256);
}
/************************************************
*函数名称:ASSCI数据显示函数
*功能描述:X,Y坐标,X=1..30,Y=1..16 *Pointer为Assci字库指针
* Assci字库第一个字节为Assci字符的个数
************************************************/
void AssciShow(uchar x,uchar y,uchar *Pointer)
{
uchar Time;
uint LcdIramAddr=0x7800;
x-=1,y-=1;
LcdIramAddr += (uint)y * 30 + x;
WrDparCmd(LCD_ADD_POS,LcdIramAddr & 0xFF,LcdIramAddr/256);
Time=*Pointer++;
WrLcdCmd(LCD_AUT_WR); // 自动写
for(;Time!=0;Time--)
{
WrLcdData(*Pointer++-0x20);
}
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
}
/************************************************
*函数名称:光标位置设置
*功能描述:X=1..30 Y=1..16 Size=0..7
* Size变量指定光标的高度
* 函数OffPointer用来关闭光标显示
************************************************/
#define OffPointer WrLcdCmd(LCD_DIS_SW|0x0c);
void AssciPointerAddrSet(uchar X,uchar Y,uchar Size)
{
WrDparCmd(LCD_CUR_POS,X-1,Y-1);
WrLcdCmd(LCD_DIS_SW|0x0f);
WrLcdCmd(LCD_CUR_SHP|Size);
}
/************************************************
*函数名称:显示面页设置函数
*功能描述:
************************************************/
void ShowPageSet(uchar Page)
{
uint Tpage;
Tpage=Page*0xf00;
WrDparCmd(LCD_GRH_STP,Tpage&0xff,Tpage/0xff); // 图形显示区首地址
}
/************************************************
*函数名称:LCD 初始化
*功能描述:
************************************************/
void LcdIni(void)
{
uint i;
WrDparCmd(LCD_TXT_STP,0x00,0x78); // 文本显示区首地址
WrDparCmd(LCD_TXT_WID,0x1E,0x00); // 文本显示区宽度
WrDparCmd(LCD_GRH_WID,0x1E,0x00); // 图形显示区宽度
WrLcdCmd(LCD_CUR_SHP|7); // 光标形状
WrLcdCmd(LCD_MOD_OR); // 显示方式设置
WrDparCmd(LCD_ADD_POS,0x00,0x00); // 置地址指针为从零开始
WrLcdCmd(LCD_AUT_WR); // 自动写
for(i=0;i<0x8000;i++) // 清全部RAM
{
WrLcdData(0x0);// 写数据0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -