?? 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顯示模塊:實現(xiàn)數(shù)據(jù)命令的讀寫
*
* 進(jìn)而實現(xiàn)液晶屏的顯示
*
*-----------------------------------------------------------------------------------*/
uchar decbusy_left() //左半屏判斷忙函數(shù),若忙返回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) //右半屏判斷忙函數(shù),若忙返回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) //左半屏寫命令函數(shù)
{
P14=1;
while(!decbusy_left());
Commandin_left=command;
P14=0;
}
void writedate_left(uchar date) //左半屏寫數(shù)據(jù)函數(shù)
{
P14=1;
while(!decbusy_left());
Datein_left=date;
P14=0;
}
uchar readdate_left() //左半屏讀數(shù)據(jù)函數(shù)
{
uchar outdate;
P14=1;
while(!decbusy_left());
outdate=Dateout_left;
P14=0;
return(outdate);
}
void writecom_right(uchar command) //右半屏寫命令函數(shù)
{
P14=1;
while(!decbusy_right());
Commandin_right=command;
P14=0;
}
void writedate_right(uchar date) //右半屏寫數(shù)據(jù)函數(shù)
{
P14=1;
while(!decbusy_right());
Datein_right=date;
P14=0;
}
void comddateWR_left(uchar page,uchar column,uchar date) //左半屏寫兩個命令一個數(shù)據(jù)
{
writecom_left(page);
writecom_left(column);
writedate_left(date);
}
void comddateWR_right(uchar page,uchar column,uchar date) //右半屏寫兩個命令一個數(shù)據(jù)
{
writecom_right(page);
writecom_right(column);
writedate_right(date);
}
//LCM初始化
void Initscreen(void)
{
writecom_right(0xc0); // 設(shè)置顯示起始行為第一行
writecom_right(0x3f); // 開顯示設(shè)置
writecom_left(0xc0);
writecom_left(0x3f);
}
//頁地址確定函數(shù)
void setpage(uchar L_or_R,uchar page)
{
page=page&0x07;
page=page|(0xb8);
if(L_or_R>0)
writecom_right(page); //設(shè)置右半屏
else
writecom_left(page); //設(shè)置左半屏
}
//列地址設(shè)置函數(shù)
void setcolumn(uchar L_or_R,uchar column)
{
column=column&0x3f;
column=column|(0x40);
if(L_or_R>0)
writecom_right(column); //設(shè)置右半屏
else
writecom_left(column); //設(shè)置左半屏
}
//清屏程序
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為數(shù)字或者字符庫地址
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -