📄 mzlh12864.c
字号:
#include "Mzlh12864.H"
unsigned char X_Witch=6;
unsigned char Y_Witch=10;
unsigned char X_Witch_cn=16;
unsigned char Y_Witch_cn=16;
unsigned char Dis_Zero=0;
/**
* Initial MzLH12864
* @no params
* @no returns
#define initLCD() {\
DATA |= 0B00000111;\
CTL |= 0B00000100;\
CTL &= 0B11111101;\
SS = 1;\
SDA = 1;\
SCK = 1;\
RST2 = 0;\
delay_ms(10);\
RST2 = 1;\
delay_ms(10);\
}
void initLCD()
{
DATA |= 0B00000111;
CTL |= 0B00000100;
CTL &= 0B11111101;
SS = 1;
SDA = 1;
SCK = 1;
RST2 = 0;
delay_ms(10);
RST2 = 1;\
delay_ms(10);
}*/
/*========================================================================
// 函数: void setSS(unsigned char status)
// 描述: 置SS线状态
// 参数: status =1则置高电平,=0则置低电平
// 返回: 无
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================*/
void setSS(unsigned char status)
{
while(BS == 1); //如Busy为高电平,则循环等待
delay_ms(1);
if(status) SS = 1;
else SS = 0;
}
/*========================================================================
// 函数: void sendData(unsigned char data)
// 描述: 通过串行SPI口输送一个byte的数据置模组
// 参数: data 要传送的数据
// 返回: 无
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================*/
void sendData(unsigned char data)
{
unsigned char i;
while(BS == 1); //wait if LCD is busy
for(i=0; i<8; i++)
{
SCK = 0; //SCK -- low
if(data&0x80) SDA = 1;
else SDA = 0;
data <<= 1;
delay_ms(1);
SCK = 1; //SCK -- High
delay_ms(1);
}
}
/*========================================================================
// 函数: void fontSet(unsigned char Font_NUM,unsigned char Color)
// 描述: ASCII字符字体设置
// 参数: Font_NUM 字体选择,以驱动所带的字库为准
// Color 文本颜色,仅作用于ASCII字库
// 返回: 无
// 备注:
// 版本:
// 2008/06/19 First version
//========================================================================*/
void fontSet(unsigned char Font_NUM,unsigned char Color)
{
unsigned char ucTemp=0;
if(Font_NUM)
{
X_Witch = 6;
Y_Witch = 10;
}
else
{
X_Witch = 8;
Y_Witch = 16;
}
ucTemp = (Font_NUM<<4)|Color;
//设置ASCII字符的字型
setSS(0); //SS置低电平
sendData(0x81); //传送指令0x81
sendData(ucTemp); //选择8X16的ASCII字体,字符色为黑色
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void fontSet_cn(unsigned char Font_NUM,unsigned char Color)
// 描述: 汉字库字符字体设置
// 参数: Font_NUM 字体选择,以驱动所带的字库为准
// Color 文本颜色,仅作用于汉字库
// 返回: 无
// 备注:
// 版本:
// 2008/06/19 First version
//========================================================================
void fontSet_cn(unsigned char Font_NUM,unsigned char Color)
{
unsigned char ucTemp=0;
if(Font_NUM)
{
X_Witch_cn = 12;
Y_Witch_cn = 12;
}
else
{
X_Witch_cn = 16;
Y_Witch_cn = 16;
}
ucTemp = (Font_NUM<<4)|Color;
//设置ASCII字符的字型
setSS(0); //SS置低电平
sendData(0x82); //传送指令0x81
sendData(ucTemp); //选择8X16的ASCII字体,字符色为黑色
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showChar(unsigned char x,unsigned char y,unsigned char a)
// 描述: 写入一个标准ASCII字符
// 参数: x X轴坐标 y Y轴坐标
// a 要显示的字符在字库中的偏移量
// 返回: 无
// 备注: ASCII字符可直接输入ASCII码即可
// 版本:
// 2008/06/19 First version
//========================================================================
void showChar(unsigned char x, unsigned char y, char a)
{
//显示ASCII字符
setSS(0); //SS置低电平
sendData(7); //传送指令0x07
sendData(x); //要显示字符的左上角的X轴位置
sendData(y); //要显示字符的左上角的Y轴位置
sendData(a); //要显示字符ASCII字符的ASCII码值
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showString(int x,int y,char *p)
// 描述: 在x、y为起始坐标处写入一串标准ASCII字符
// 参数: x X轴坐标 y Y轴坐标
// p 要显示的字符串
// 返回: 无
// 备注: 仅能用于自带的ASCII字符串显示
// 版本:
// 2008/06/19 First version
//========================================================================
void showString(unsigned char x, unsigned char y, char *p)
{
while(*p!=0)
{
showChar(x,y,*p);
x += X_Witch;
if((x + X_Witch) > Dis_X_MAX)
{
x = Dis_Zero;
if((Dis_Y_MAX - y) < Y_Witch) y = 0; //display from start
else y += Y_Witch;
}
p++;
}
}
//========================================================================
// 函数: void showChar_cn(unsigned char x,unsigned char y,unsigned short * GB)
// 描述: 写入一个二级汉字库汉字
// 参数: x X轴坐标 y Y轴坐标
// a GB码
// 返回: 无
// 备注:
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================
void showChar_cn(unsigned char x, unsigned char y, flash char * GB)
{
//显示ASCII字符
setSS(0); //SS置低电平
sendData(8); //传送指令0x08
sendData(x); //要显示字符的左上角的X轴位置
sendData(y); //要显示字符的左上角的Y轴位置
//sendData((*GB>>8)&0x00ff); //传送二级字库中汉字GB码的高八位值
//sendData(*GB&0x00ff); //传送二级字库中汉字GB码的低八位值
sendData(*GB); //传送二级字库中汉字GB码的高八位值
GB++;
sendData(*GB); //传送二级字库中汉字GB码的低八位值
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showString_cn(unsigned char x,unsigned char y,unsigned short *p)
// 描述: 在x、y为起始坐标处写入一串汉字字符
// 参数: x X轴坐标 y Y轴坐标
// p 要显示的字符串
// 返回: 无
// 备注: 同PutChar_cn中的解释
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================
void showString_cn(unsigned char x, unsigned char y, flash char *p)
{
//while((*p>>8)!=0)
while(*p != 0)
{
showChar_cn(x,y,p);
x += X_Witch_cn;
if((x + X_Witch_cn) > Dis_X_MAX)
{
x = Dis_Zero;
if((Dis_Y_MAX - y) < Y_Witch_cn) y = 0; //display from start
else y += Y_Witch_cn;
}
p++;
p++;
}
}
//========================================================================
// 函数: void setPaintMode(unsigned char Mode,unsigned char Color)
// 描述: 绘图模式设置
// 参数: Mode 绘图模式 Color 像素点的颜色,相当于前景色
// 返回: 无
// 备注: Mode无效
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================
void setPaintMode(unsigned char Mode, unsigned char Color)
{
unsigned char ucTemp=0;
ucTemp = (Mode<<4)|Color;
//设置绘图模式
setSS(0); //SS置低电平
sendData(0x83); //传送指令0x83
sendData(ucTemp); //选择8X16的ASCII字体,字符色为黑色
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showPixel(unsigned char x,unsigned char y)
// 描述: 在x、y点上绘制一个前景色的点
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 使用前景色
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================
void showPixel(unsigned char x, unsigned char y)
{
//绘点操作
setSS(0); //SS置低电平
sendData(1); //送指令0x01
sendData(x); //送第一个数据,即设置点的X轴位置
sendData(y); //点的Y轴位置
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showLine(unsigned char s_x,unsigned char s_y,
// unsigned char e_x,unsigned char e_y)
// 描述: 在s_x、s_y为起始坐标,e_x、e_y为结束坐标绘制一条直线
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 使用前景色
// 版本:
// 2008/06/19 First version
// 2008/06/19 V1.0 for AVR CVAVR
//========================================================================
void showLine(unsigned char s_x,unsigned char s_y, unsigned char e_x, unsigned char e_y)
{
//绘制直线
setSS(0); //SS置低电平
sendData(2); //送指令0x02
sendData(s_x); //起点X轴坐标
sendData(s_y); //起点Y轴坐标
sendData(e_x); //终点X轴坐标
sendData(e_y); //终点Y轴坐标
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void showCircle(unsigned char x,unsigned char y,
// unsigned char r,unsigned char mode)
// 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
// 参数:
// 返回: 无
// 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
// 版本:
// 2008/06/19 First version
//========================================================================
void showCircle(unsigned char x, unsigned char y, unsigned char r, unsigned char mode)
{
setSS(0);
if(mode)
sendData(6);
else
sendData(5);
sendData(x);
sendData(y);
sendData(r);
setSS(1);
}
//========================================================================
// 函数: void showRectangle(unsigned char left, unsigned char top, unsigned char right,
// unsigned char bottom, unsigned char mode)
// 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
// 参数: left - 矩形的左上角横坐标,范围0到126
// top - 矩形的左上角纵坐标,范围0到62
// right - 矩形的右下角横坐标,范围1到127
// bottom - 矩形的右下角纵坐标,范围1到63
// Mode - 绘制模式,可以是下列数值之一:
// 0: 矩形框(空心矩形)
// 1: 矩形面(实心矩形)
// 返回: 无
// 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
// 版本:
// 2008/06/19 First version
//========================================================================
void showRectangle(unsigned char left, unsigned char top, unsigned char right,
unsigned char bottom, unsigned char mode)
{
setSS(0);
if(mode)
sendData(4);
else
sendData(3);
sendData(left);
sendData(top);
sendData(right);
sendData(bottom);
setSS(1);
}
//========================================================================
// 函数: void clrScreen(void)
// 描述: 清屏函数,执行全屏幕清除或填充前景色
// 参数:
// 返回: 无
// 备注:
// 版本:
// 2007/07/19 First version
//========================================================================
void clrScreen(void)
{
//清屏操作
setSS(0); //SS置低电平
sendData(0x80); //送指令0x80
sendData(0); //指令数据
setSS(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void fill_s(unsigned char x,unsigned char y,
// unsigned char * String,unsigned char Number)
// 描述: 在Y轴y位置上对应的page页的x位置开始填充Number个byte的数据,用于用户
// 自取的图像/文字字模在LCD当中显示
// 参数: x 填充起点的X轴位置
// y 填充起点于哪一页, 该数据低三位无效,如y=10时,表示要填充的是page1,
// y=6时表示page0,注意,这里是指页而不是指哪一行~
// page = y>>3
// *String 要填充的数据序列
// Number 要填充的数据个数
// 返回: 无
// 备注:
// 版本:
// 2007/07/23 First version
//========================================================================
void fill_s(unsigned char x, unsigned char y, char * String, unsigned char Number)
{
//清屏操作
setSS(0); //SS置低电平
sendData(0x09); //送指令0x09
sendData(x); //指令数据
sendData(y); //指令数据
delay_ms(1); //稍稍延一点时间
while(Number!=0)
{
sendData(*(String++)); //指令数据
Number--;
}
setSS(1); //完成操作置SS高电平
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -