📄 sub.h
字号:
/*延时子程序*/
/*****************************/
/*函数原型:void delay(uint v)
/*参数:v
/*功能:延时
/*说明:delay(1)相当于延时10微秒
/********************************/
void delay(uint v) //定义名为delay的函数,将形参v定义为无符号整型变量
{
while(v!=0)v--; //当v不为0时v自减,为0时跳出循环,目的为指令延时
}
/*延时5秒子程序*/
/************************/
/*函数原型:void delay5()
/*参数:
/*功能:延时5秒
/*说明:调用一次该程序大约延时5秒
/*********************************/
void delay5() //定义名为delay5的函数,无形参
{
uint i; //定义无符号数i,以作计算调用延时子程序次数用
for(i=0;i<10;i++) //给i赋初值0,每次执行完循环体后自动加1,直至i=10,共循环10次
{
delay(50000); //调用延时子程序,每次延时约0.5秒
}
}
/*复位子程序*/
/***********************/
/*函数原型:void reset()
/*参数:
/*功能:复位
/*说明:向LCM的RST引脚置低电平,使LCM复位,延时后恢复高电平,使LCM正常工作
/**************************************************************************/
void reset() //定义名为reset的函数,无形参
{
P32=0; //对LCD的RST引脚置低电平
delay(20); //延时约200微秒
P32=1; //对LCD的RST引脚置高电平
delay(20); //延时约200微秒
}
/*写代码子程序*/
/**************************************************/
/*函数原型:void wcode(uchar c,uchar cs1,uchar cs2)
/*参数:c,cs1,cs2
/*功能:写指令代码
/*说明:D/I和R/W都为0时为写程序代码指令,c为要发送的指令,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/********************************************/
void wcode(uchar c,uchar cs1,uchar cs2) //定义名为wcode的函数,并将形参c、cs1、cs2定义为无符号字符型变量
{
P34=cs1; //是否选中左半屏
P33=cs2; //是否选中右半屏
P37=0; //LCM的D/I置0,选择指令寄存器
P36=0; //LCM的R/W置0,选择写操作
P1=c; //将要写入LCM的指令代码送P1
P35=0; //使能位置0
delay(10); //延时约100微秒
P35=1; //使能位置1
delay(10); //延时约100微秒
P35=0; //使能位由1到0向下跳变,指令代码有效传送
}
/*写数据子程序*/
/*************************************/
/*函数原型:void wdata(uchar c,uchar cs1,uchar cs2)
/*参数:c,cs1,cs2
/*功能:写显示数据
/*说明:D/I为1、R/W为0时,c为要发送到RAM中的显示数据,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/*************************************/
void wdata(uchar c,uchar cs1,uchar cs2) //定义名为wdata的函数,并将形参c,cs1,cs2定义为无符号字符型变量
{
P34=cs1; //是否选中左半屏
P33=cs2; //是否选中右半屏
P37=1; //LCM的D/I置1,选择显示资料寄存器
P36=0; //LCM的R/W置0,选择写操作
P1=c; //将要写入LCM的显示资料送P1
P35=0; //使能位置0
delay(10); //延时约100微秒
P35=1; //使能位置1
delay(10); //延时约100微秒
P35=0; //使能位由1到0向下跳变,显示数据有效传送
}
/*设置显示开始行子程序*/
/********************/
/*函数原型:void set_startline(uchar i)
/*参数:c,cs1,cs2
/*功能:设置显示开始行
/*说明:设置显示开始行为第i行,i为小于64的正整数
/*************************/
void set_startline(uchar i) //定义名为set_startline的函数,并将形参i定义为无符号字符型变量
{
i=0xc0+i; //设定显示起始行的指令代码
wcode(i,1,1); //将显示起始行指令写入LCM的左右半屏
}
/*设置显示具体位置子程序*/
/**********************************/
/*函数原型:void set_adr(uchar x,uchar y)
/*参数:x,y
/*功能:设置读/写显示数据的具体位置
/*说明:设置读/写显示数据的具体位置为第X页的第Y列
/**********************************/
void set_adr(uchar x,uchar y) //定义名为set_ adr的函数,并将形参x、y定义为无符号字符型变量
{
x=x+0xb8;y=y+0x40; //设置第X页和第Y列的指令代码
wcode(x,1,1); //将页地址写入LCM的左右半屏
wcode(y,1,1); //将列地址写入LCM的左右半屏
}
/*显示开关子程序*/
/*****************************/
/*函数原型:dison_off(uchar o)
/*参数:o
/*功能:显示开关
/*说明:当o为0时为关显示,当o为1时为开显示
/*****************************/
void dison_off(uchar o) //定义名为dison_off的函数,并将形参o定义为无符号字符型变量
{
o=o+0x3e; //设定显示开关的指令代码
wcode(o,1,1); //将显示开关指令写入LCM的左右半屏
}
/*清屏子程序*/
/*************************************/
/*函数原型:void clr(uchar cs1,uchar cs2)
/*参数:cs1,cs2
/*功能:清除被选中半屏的显示数据
/*说明:向被选中半屏的RAM中填0x00,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/*************************************/
void clr(uchar cs1,uchar cs2) //定义名为clr的函数,并将形参cs1、cs2定义为无符号字符型变量
{
uchar i,j; //定义无符号数i、j,以作计算页数和列数之用
for(i=0;i<8;i++) //给i赋初值0,从第0页开始,执行完循环体后,i自动加1,直至i=8,共循环8次
{
set_adr(i,0); //设置写入数据起始地址为第i页的第0列
for(j=0;j<64;j++) //给j赋初值0,计算循环的列数,执行完循环体后,j自动加1,直至j=64,共循环64次
{
wdata(0,cs1,cs2);//将被选中半屏的RAM内单元逐个清零
}
}
}
/*写字子程序*/
/***************************************************/
/*函数原型:void wword(uchar cs1,uchar cs2,uchar x,uchar y,uchar w,uchar h,uchar word[10])
/*参数:cs1,cs2,x,y,w,h,word[10]
/*功能:只需指定需要显示字符/图形的左上方起始单元地址以及该字符/图形的宽和高,即能显示出该字符
/*说明:以设定的具体位置为起始地址,在选中的半屏内,从左至右,从上至下地显示一个宽为w列,纵向跨度为h页的字符或图形word
/****************************************************/
void wword(uchar cs1,uchar cs2,uchar x,uchar y,uchar w,uchar h,uchar word[10]) //定义名为clr的函数,并将形参cs1、cs2、x、y、w、h、woed定义无符号字符型变量/数组
{
uint i; //定义i为无符号整型变量
uchar l; //定义l为无符号字符型变量
for(l=0;l<h;l++) //给l赋初值0,用于计算正在输入字符或图形的页数
{
set_adr(x+l,y); //设定当前写数据的地址为第x+l页的第y列
for(i=l*w;i<(l+1)*w;i++) //从l*w开始,对LCM连续写w个开始显示数据
{
wdata(word[i],cs1,cs2); //把word[i]写到指定的半屏的设定位置上
}
}
}
/*拉幕式清屏*/
/***********************************/
/*函数原型:void clre()
/*参数:
/*功能:以拉幕形式从屏幕两边逐渐清屏
/*说明:
/**********************************/
void clre() //定义名为clre的函数,无形参
{
uchar i,j; //定义i、j为无符号字符型变量
for(i=0;i<64;i++) //给i赋初值0,共循环64次,用于设置列地址
{
for(j=0;j<8;j++) //给j赋初值0,共循环8次,用于设置页地址
{
set_adr(j,i); //设置写显示数据地址为第j页,第i列
wdata(0,1,0); //对左半屏的指定单元清零
set_adr(j,63-i); //设置写显示数据地址为第j页,第63-i列
wdata(0,0,1); //对右半屏的指定单元清零
}
delay(1000); //延时10毫秒
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -