📄 mainc.c
字号:
/********************************************************************************
函数名:Void ShowHZ16x16(unsigned char column,unsigned char lin,unsigned int hzcode)
函数功能:显示一个汉字(16*16点阵)
column:汉字起始列(0-15)
lin: 汉字起始行(0-(64-16))
hzcode: 汉字代码(自定义的)
注:超出范围的将直接写到RAM中,可以实现卷屏效果
********************************************************************************/
void ShowHZ16x16(unsigned char column,unsigned char lin,unsigned int hzcode)
{
uchar i,temp1,temp2;
uint StartAddr;
StartAddr=lin*LineChar+ column+GraphicStartAddr; //定位起始行
for(i=0;i<16;i++)
{
WriteCmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), AddrSet);
temp1=HZK16x16[hzcode][i*2];
WriteCmd2(temp1, DataWAddrI); // 左半部 地址加一
temp2=HZK16x16[hzcode][i*2+1];
WriteCmd2(temp2, DataWAddrNV); // 右半部 显示地址不变
StartAddr=StartAddr + LineChar; // 换到下一行
}
}
/********************************************************************************
函数名: Void Show16x16Chars(unsigned char column,unsigned char lin,unsigned int hzcode,unsigned int num)
函数功能:显示一行汉字
column:汉字起始列(0-15)
lin:汉字汉字起始行(0-(64-16))
hzcode:第一个汉字的编码(自定义)
num:显示个数(0-8)
*********************************************************************************/
void Show16x16Chars(unsigned char column,unsigned char lin,unsigned int hzcode,unsigned int num)
{
int i;
for(i=0;i<num;i++)
ShowHZ16x16(column+i*2,lin,hzcode+i);
}
#endif // 是否允许显示汉字结束
#if ReverseShowEnable // 是否允许反显
/********************************************************************************
函数名: Void ReverseShowChar(unsigned char column,unsigned char lin)
函数功能: 反显一个字符
column:待反显字符的起始列(0-15)
lin: 待反显字符的起始行(0-(64-16))
********************************************************************************/
void ReverseShowChar(unsigned char column,unsigned char lin)
{
unsigned char i;
unsigned char dat;
unsigned int StartAddr;
StartAddr=lin*LineChar +column+GraphicStartAddr; //定位起始行
for(i=0;i<16;i++)
{
WriteCmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), AddrSet); //set address
WriteCmd1( DataRAddrNV ); // 数据一次读,地址不变
dat=ReadCmd(); // 读入数据
dat=~dat; // 取反
WriteCmd2( dat, DataWAddrNV); // 送回
StartAddr=StartAddr+ LineChar;
}
}
/********************************************************************************
函数名: Void ReverseShowHZ(unsigned char column,unsigned char lin)
函数功能: 反显一个汉字
column:待反显汉字的起始列(0-15),
lin: 待反显汉字的起始行(0-(64-16))
********************************************************************************/
void ReverseShowHZ(unsigned char column,unsigned char lin)
{
ReverseShowChar(column,lin);
ReverseShowChar(column+1,lin);
}
/********************************************************************************
函数名: Void ReverseShowChars(unsigned char column,unsigned char lin,unsigned char num)
函数功能: 反显一串字符
column:待反显字符的起始列(0-15),
lin: 待反显字符的起始行(0-(64-16))
num: 待反显字符的个数
********************************************************************************/
void ReverseShowChars(unsigned char column,unsigned char lin,unsigned char num)
{
uchar i;
for(i=0;i<num;i++)
ReverseShowChar(column+i,lin);
}
#endif // 是否允许反显结束
/********************************************************************************
函数名: Void WriteCmd1(uchar cmd)
Void WriteCmd2(uchar dat1,uchar cmd)
Void WriteCmd3(uchar dat1,uchar dat2,uchar cmd)
Void WriteData(uchar dat)
函数功能: 写指令和写数据子程序
********************************************************************************/
void WriteCmd1(uchar cmd) // 写指令不带参数
{
RWcheck();
P3=cmd;
WriteSingle();
}
void WriteCmd2(uchar dat1,uchar cmd) // 写指令带一个参数
{
RWcheck(); // 写参数
CDLine=0;
P3=dat1;
WriteSingle();
RWcheck(); // 写指令
P3=cmd;
WriteSingle();
}
void WriteCmd3(uchar dat1,uchar dat2,uchar cmd) // 写指令带两个参数
{
RWcheck(); // 写第一个参数
CDLine=0;
P3=dat1;
WriteSingle();
RWcheck(); // 写第二个参数
CDLine=0;
P3=dat2;
WriteSingle();
RWcheck(); // 写第三个参数
P3=cmd;
WriteSingle();
}
void WriteData(uchar dat) // 写一个数据
{
RWcheck();
CDLine=0;
P3=dat;
WriteSingle();
}
/********************************************************************************
函数名: Void ReadCmd()
函数功能: 读数据子程序
********************************************************************************/
uchar ReadCmd()
{
uchar ReturnValue;
RWcheck();
CDLine=0;
ReadLine=0;
ReturnValue=P3;
ReadLine=1;
return ReturnValue;
}
/********************************************************************************
函数名: Void CursorPosSet(uchar X,uchar Y)
函数功能: 光标位置设置
********************************************************************************/
void CursorPosSet(unsigned char x,unsigned char y)
{
WriteCmd3(x,y,CursorPointer); //X的取值范围0-20;Y的取值范围0-15;
}
#if CursorEnable // 控制是否允许对光标的控制
/********************************************************************************
函数名: Void CursorUp()
函数功能: 光标向上移动一格
********************************************************************************/
void CursorUp()
{
if(Cursor_Y>0)Cursor_Y-=1;
WriteCmd3(Cursor_X,Cursor_Y,CursorPointer);
}
/********************************************************************************
函数名: Void CursorDown()
函数功能: 光标向下移动一格
********************************************************************************/
void CursorDown()
{
if(Cursor_Y<8)Cursor_Y+=1;
WriteCmd3(Cursor_X,Cursor_Y,CursorPointer);
}
/********************************************************************************
函数名: Void CursorRight()
函数功能: 光标向右移动一格
********************************************************************************/
void CursorRight()
{
if(Cursor_X<20)Cursor_X+=1;
WriteCmd3(Cursor_X,Cursor_Y,CursorPointer);
}
/********************************************************************************
函数名: Void CursorLeft()
函数功能: 光标向左移动一格
********************************************************************************/
void CursorLeft()
{
if(Cursor_X>0)Cursor_X-=1;
WriteCmd3(Cursor_X,Cursor_Y,CursorPointer);
}
/********************************************************************************
函数名: Void CursorEnter()
函数功能: 光标换行
********************************************************************************/
void CursorEnter()
{
Cursor_X=0;
Cursor_Y+=1;
WriteCmd3(Cursor_X,Cursor_Y,CursorPointer);
}
#endif // 是否允许控制光标结束
/********************************************************************************
函数名: Void ReadState()
函数功能: 读状态字,返回当前状态
********************************************************************************/
uchar ReadState()
{
uchar ReturnValue;
DataPort=0xff;
CDLine=1;
ReadLine=0;
ReturnValue=P3;
ReadLine=1;
return ReturnValue;
}
/********************************************************************************
函数名: Void RWcheck()
函数功能: 判断状态位STA1,STA0子程序(读写指令和读写数据状态),在写指令的读,
写数据之前这两个标志位必须同时为1
********************************************************************************/
void RWcheck()
{
do{
;
}while( !(ReadState()&0x03) );
}
#if AutoWcharEnable // 是否允许自动写开始
/********************************************************************************
函数名: Void AutoRcheck()
函数功能: 判断状态位STA2的子程序(数据自动读状态),该位在数据自动读操作过程中
取代STA0和STA1有效。在连续读过程中每读一次之前都要确认STA2=1
********************************************************************************/
void AutoRcheck()
{
do{
;
}while( !(ReadState()&0x04) );
}
/********************************************************************************
函数名: Void AutoWcheck()
函数功能: 判断状态位STA3子程序(数据自动写状态)
********************************************************************************/
void AutoWcheck()
{
do{
;
}while( !(ReadState()&0x08) );
}
#endif // 是否允许自动写结束
/*判断状态位STA6子程序(屏读/屏拷贝状态)
st6:lcall read_state
jb acc.6,err
ret
err:ljmp st6
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -