📄 ms12864iyejingqudong.txt
字号:
#define Commandin_left XBYTE[0xc400] //显示屏命令定义
#define Datein_left XBYTE[0xc500]
#define Stateout_left XBYTE[0xc600]
#define Dateout_left XBYTE[0xc700]
#define Commandin_right XBYTE[0xc800]
#define Datein_right XBYTE[0xc900]
#define Stateout_right XBYTE[0xca00]
#define Dateout_right XBYTE[0xcb00]
sbit P14=P1^4; //29c020控制引脚
/*------------------------------------------------------------------------------------
*
* MS12864I显示模块:实现数据命令的读写
*
* 进而实现液晶屏的显示
*
*-----------------------------------------------------------------------------------*/
uchar decbusy_left() //左半屏判断忙函数,若忙返回0
{
uchar i;
uchar date;
P14=1;
for(i=40;i>0;i--)
{
date=Stateout_left;
if((date&0x80)==0x00)
break;
}
// P14=0;
return(i);
}
uchar decbusy_right(void) //右半屏判断忙函数,若忙返回0;
{
uchar i;
uchar date;
P14=1;
for(i=10;i>0;i--)
{
date=Stateout_right;
if((date&0x80)==0x00)
break;
}
// P14=0;
return(i);
}
void writecom_left(uchar command) //左半屏写命令函数
{
P14=1;
while(!decbusy_left());
Commandin_left=command;
P14=0;
}
void writedate_left(uchar date) //左半屏写数据函数
{
P14=1;
while(!decbusy_left());
Datein_left=date;
P14=0;
}
uchar readdate_left() //左半屏读数据函数
{
uchar outdate;
P14=1;
while(!decbusy_left());
outdate=Dateout_left;
P14=0;
return(outdate);
}
void writecom_right(uchar command) //右半屏写命令函数
{
P14=1;
while(!decbusy_right());
Commandin_right=command;
P14=0;
}
void writedate_right(uchar date) //右半屏写数据函数
{
P14=1;
while(!decbusy_right());
Datein_right=date;
P14=0;
}
void comddateWR_left(uchar page,uchar column,uchar date) //左半屏写两个命令一个数据
{
writecom_left(page);
writecom_left(column);
writedate_left(date);
}
void comddateWR_right(uchar page,uchar column,uchar date) //右半屏写两个命令一个数据
{
writecom_right(page);
writecom_right(column);
writedate_right(date);
}
//LCM初始化
void Initscreen(void)
{
writecom_right(0xc0); // 设置显示起始行为第一行
writecom_right(0x3f); // 开显示设置
writecom_left(0xc0);
writecom_left(0x3f);
}
//页地址确定函数
void setpage(uchar L_or_R,uchar page)
{
page=page&0x07;
page=page|(0xb8);
if(L_or_R>0)
writecom_right(page); //设置右半屏
else
writecom_left(page); //设置左半屏
}
//列地址设置函数
void setcolumn(uchar L_or_R,uchar column)
{
column=column&0x3f;
column=column|(0x40);
if(L_or_R>0)
writecom_right(column); //设置右半屏
else
writecom_left(column); //设置左半屏
}
//清屏程序
void screencls(void)
{
uchar i;
uchar t;
uchar j;
uchar L_or_R=0;
P14=1;
for(j=0;j<2;j++)
{
for(t=0;t<8;t++)
{
setpage(L_or_R,t);
for(i=0;i<64;i++)
{
setcolumn(L_or_R,i);
if(L_or_R)
writedate_right(0x00); //清右半屏
writedate_left(0x00); //清左半屏
}
}
L_or_R=1;
}
P14=0;
}
//左右半屏判断
uchar decleft_right(uchar column)
{
uchar i;
if(column<64)
i=0; //在左半屏
else
i=1; //在右半屏
return(i);
}
//汉字写入程序(16*16)
void HZshow(uchar *T,uchar L_or_R,uchar page,uchar column,uchar n)
{
uchar i;
uchar t;
uchar m;
uchar line;
uchar col;
for(t=0;t<n;t++)
{
line=page;
for(m=0;m<2;m++)
{
col=column;
setpage(L_or_R,line);
for(i=0;i<16;i++)
{
if(L_or_R>0)
{
setcolumn(L_or_R,col);
writedate_right(*T);
T++;
col++;
}
else
{
setcolumn(L_or_R,col);
writedate_left(*T);
T++;
col++;
}
}
line++;
}
column=column+16;
}
}
//字母写入程序
void Othershow(uchar *T,uchar L_or_R,uchar page,uchar column,uchar n)
{
uchar i;
uchar t;
uchar m;
uchar line;
uchar col;
for(t=0;t<n;t++)
{
line=page;
for(m=0;m<2;m++)
{
col=column;
setpage(L_or_R,line);
for(i=0;i<8;i++)
{
if(L_or_R>0)
{
setcolumn(L_or_R,col);
writedate_right(*T);
T++;
col++;
}
else
{
setcolumn(L_or_R,col);
writedate_left(*T);
T++;
col++;
}
}
line++;
}
column=column+8;
}
}
void main(void)
{
Initscreen(); //初始化
screencls();
Othershow(tab1,0,1,1,1); //tab1为汉字库首地址
HZshow(tab2,1,1,1,1); //tab2为数字或者字符库地址
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -