📄 lcd.c
字号:
setpages(p->y/8+j);
setpagem(p->y/8+j);
for(i=p->x;i<p->w+p->x;i++)
{
if(i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(0);
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(0);
}
buf++;
}
}
}
/*
调用方式:void drawbmp(struct PIC *p)
函数说明:画图程序
入口参数: 图形结构体指针
出口参数:无
内部函数:是
*/
void drawbmp(struct PIC *p)
{//y must 0,8,16 or 24
/*display a 8*8 bitmap */
uchar i;
uchar *buf;
buf=p->dat;
if(p->h==16)
{
setpages(p->y/8+2);
setpagem(p->y/8+2);
for(i=0;i<p->w+p->x;i++)
{
if(i < p->x)
{
setcolm(i);
OutMD(0);
}
else if(i>=p->x && i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
buf +=2;
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
buf +=2;
}
//buf +=2;
}
buf=p->dat+1;
setpages(p->y/8+3);
setpagem(p->y/8+3);
for(i=0;i<p->w+p->x;i++)
{
if(i < p->x)
{
setcolm(i);
OutMD(0);
}
else if(i>=p->x && i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
buf +=2;
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
buf +=2;
}
//buf +=2;
}
}
if(p->h==32)
{
setpages(p->y/8+2);
setpagem(p->y/8+2);
for(i=p->x;i<120;i++)
{
if(i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
}
buf +=2;
}
buf=p->dat+1;
setpages(p->y/8+3);
setpagem(p->y/8+3);
for(i=p->x;i<120;i++)
{
if(i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
}
buf +=2;
}
buf=p->dat;
setpages(p->y/8);
setpagem(p->y/8);
for(i=p->x;i<p->w+p->x-120;i++)
{
if(i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
}
buf +=2;
}
buf=p->dat+1;
setpages(p->y/8+1);
setpagem(p->y/8+1);
for(i=p->x;i<p->w+p->x-120;i++)
{
if(i<61)
{//是主控制器控制的列
setcolm(i);
OutMD(*buf);
}
else
{//是从控制器控制的列
setcols(i-61);
OutSD(*buf);
}
buf +=2;
}
}
}
/*
调用方式:void init_lcd(void)
函数说明:lcd初始化程序
入口参数: 无
出口参数:无
用到的全局变量:无
调用函数:void OutMI(uchar a);
void OutSI(uchar a);
*/
void init_lcd(void)
{
//OutMI(0XE3); /***复位***/
//OutSI(0XE3);
//OutMI(0X56); /***电源保护****/
//OutSI(0X56);
//OutMI(0XA4); /***动态驱动***/
//OutSI(0XA4);
//OutMI(0XA9); /***1/32占空比***/
//OutSI(0XA9);
//OutMI(0XA1); /***ADC选择,选择顺时针读入显示RAM数据***/
//OutSI(0XA1);
//OutMI(0XE0); /***写模式***/
//OutSI(0XE0);
//OutMI(0XAF); /***开显示器***/
//OutSI(0XAF);
//OutMI(0X00); /***设置主控制和从控制选择显示列为0***/
//OutSI(0X00);
//OutMI(0XC0); /***设置主控制和从控制选择显示行为0***/
//OutSI(0XC0);
OutMI(0XE3); /***复位***/
OutSI(0XE3);
OutMI(0XAE); /***关显示器***/
OutSI(0XAE);
OutMI(0XA4); /***OFF 动态驱动***/
OutSI(0XA4);
OutMI(0XA9); /***1/32占空比***/
OutSI(0XA9);
//OutMI(0XA1); /***ADC选择,选择顺时针读入显示RAM数据***/
//OutSI(0XA1);
OutMI(0XA0); /***ADC选择,选择~顺时针读入显示RAM数据***/
OutSI(0XA0);
OutMI(0XEE); /***OFF 读修改写模式***/
OutSI(0XEE);
OutMI(0X00); /***设置主控制和从控制选择显示列为0***/
OutSI(0X00);
OutMI(0XC0); /***设置主控制和从控制选择显示行为0***/
OutSI(0XC0);
OutMI(0XAF); /***开显示器***/
OutSI(0XAF);
//OutMI(0XAF); /***开显示器***/
//OutSI(0XAF);
//OutMI(0X00); /***设置主控制和从控制选择显示列为0***/
//OutSI(0X00);
//OutMI(0XC0); /***设置主控制和从控制选择显示行为0***/
//OutSI(0XC0);
}
/*
调用方式:void lcd(uchar order, uchar num)
函数说明:lcd显示程序
入口参数: order:显示数据标志字符,num:*的数量
出口参数:无
用到的全局变量:无
调用函数:void drawbmp(struct PIC *p);
void clearbmp(struct PIC *p);
*/
void lcd(uchar order, uchar num)
{
struct PIC This;
if ('a' == order)
{/*欢迎使用*/
This.x=0;
This.y=0;
This.w=122;
This.h=32;
clearbmp(&This);
This.x=16;
This.y=0;
This.w=88;
This.h=16;
This.dat=huanyingshiyong;
drawbmp(&This);
}
else if('b' == order)
{/*请输入密码*/
This.x=0;
This.y=0;
This.w=122;
This.h=32;
clearbmp(&This);
This.x=24;
This.y=0;
This.w=80;
This.h=16;
This.dat=qing;
drawbmp(&This);
}
else if ('c' == order)
{ /*请重新输入密码*/
This.x=0;
This.y=0;
This.w=122;
This.h=32;
clearbmp(&This);
This.x=24;
This.y=0;
This.w=80;
This.h=16;
This.dat=chongxin;
drawbmp(&This);
}
else if ('d' == order)
{ /*显示'*'*/
if(num >= 0 && num < 30)
{
This.x=0;
This.y=0;
This.w=122;
This.h=32;
clearbmp(&This);
This.x=0;
This.y=0;
This.w=(num+1)*8;
This.h=16*(num/15+1);
This.dat=xing;
drawbmp(&This);
}
}
else if ('e' == order)
{ /*clrlcd*/
This.x=0;
This.y=0;
This.w=122;
This.h=32;
clearbmp(&This);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -