新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏


//////////////////////////////////////////////////////////////////////////////////
///全角字符點(diǎn)陣碼數(shù)據(jù)輸出///
//////////////////////////////////////////////////////////////////////////////////
void Putcdot(Uchar Order)
{
Uchar i,bakerx,bakery;///共定義3個(gè)局部變量///
int x;///偏移量,字符量少的可以定義為UCHAR///
bakerx = col;///暫存x,y坐標(biāo),已備下半個(gè)字符使用 ///
bakery = row;
x=Order // 0x20;///每個(gè)字符32字節(jié)///

///上半個(gè)字符輸出,16列///
for(i=0;i<16;i++)
{
Wrdata(Hzk[x]);///寫(xiě)輸出一字節(jié)///
x++;
col++;
if (col==LCMLIMIT){ col=0;row++;row++;} ///下一列,如果列越界換行///
if (row>6) row=0;///如果行越界,返回首行///
}///上半個(gè)字符輸出結(jié)束 ///

///下半個(gè)字符輸出,16列///
col = bakerx;
row = bakery+1;
for(i=0;i<16;i++)///下半部分///
{
Wrdata(Hzk[x]);
x++;
col++;
if (col==LCMLIMIT){col=0;row++;row++;}///下一列,如果列越界換行///
if (row>7) row=1;///如果行越界,返回首行///
}///下半個(gè)字符輸出結(jié)束 ///
row = bakery;
}///整個(gè)字符輸出結(jié)束///

//////////////////////////////////////////////////////////////////////////////////
///清屏,全屏幕清零///
//////////////////////////////////////////////////////////////////////////////////
void Lcmcls( void )
{
for(row=0;row<8;row++)
for(col=0;col
}

//////////////////////////////////////////////////////////////////////////////////
///從液晶片上讀數(shù)據(jù),保留在全局變量中///
//////////////////////////////////////////////////////////////////////////////////

void Rddata(void)
{
Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
Datalcm=0xFF;
Dilcm = 1;///數(shù)據(jù)///
Rwlcm = 1;///讀數(shù)據(jù)///
Elcm = 1;///讀入到LCM///
_nop_();
cbyte = Datalcm;///虛讀一次 ///
Elcm = 0;
Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
Datalcm=0xFF;
_nop_();
Dilcm = 1;///數(shù)據(jù)///
Rwlcm = 1;///讀數(shù)據(jù)///
Elcm = 1;///讀入到LCM///
_nop_();
cbyte = Datalcm;///從數(shù)據(jù)口讀數(shù)據(jù),真讀 ///
Elcm = 0;
}

//////////////////////////////////////////////////////////////////////////////////
///數(shù)據(jù)寫(xiě)輸出///
//////////////////////////////////////////////////////////////////////////////////

void Wrdata(Uchar X)
{
Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
//wtcom();
Dilcm = 1;///數(shù)據(jù)輸出///
Rwlcm = 0;///寫(xiě)輸出///
Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
Elcm = 1;///讀入到LCM///
_nop_();
Elcm = 0;
}

//////////////////////////////////////////////////////////////////////////////////
/// 命令輸出,每次輸出一個(gè)分區(qū)控制口 ///
//////////////////////////////////////////////////////////////////////////////////

///void Wrcmd(Uchar X)
//{
//Locatexy();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
//wtcom();///等待LCM操作允許 ///
//Dilcm = 0;///數(shù)據(jù)操作///
//Rwlcm = 0;///寫(xiě)輸出///
//Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
//Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
//}

//////////////////////////////////////////////////////////////////
/// 命令輸出到左區(qū)控制口///
//////////////////////////////////////////////////////////////////

void WrcmdL(Uchar X)
{
lcdbusyL();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
Dilcm = 0;///命令操作///
Rwlcm = 0;///寫(xiě)輸出///
Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
}

//////////////////////////////////////////////////////////////////
/// 命令輸出到中區(qū)控制口///
//////////////////////////////////////////////////////////////////

void WrcmdM(Uchar X)
{
lcdbusyM();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
Dilcm = 0;///命令操作///
Rwlcm = 0;///寫(xiě)輸出///
Datalcm = X;///命令輸出到數(shù)據(jù)口 ///
Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
}

//////////////////////////////////////////////////////////////////
/// 命令輸出到右區(qū)控制口///
//////////////////////////////////////////////////////////////////

void WrcmdR(Uchar X)
{
lcdbusyR(); ///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
Dilcm = 0;///命令操作///
Rwlcm = 0;///寫(xiě)輸出///
Datalcm = X;///命令輸出到數(shù)據(jù)口 ///
Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 分區(qū)操作允許等待,返回時(shí)保留分區(qū)選擇狀態(tài)///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void lcdbusyL(void)
{
CS1LCM = 0;///CLRCS1///
CS2LCM = 1;///SETBCS2///
CS3LCM = 1;///SETBCS3///
wtcom();/// waitting for enable///
}

void lcdbusyM(void)
{
CS1LCM = 1;///SETBCS1///
CS2LCM = 0;///CLRCS2///
CS3LCM = 1;///SETBCS3///
wtcom();/// waitting for enable///
}

void lcdbusyR(void)
{
CS1LCM = 1;///SETBCS1///
CS2LCM = 1;///SETBCS2///
CS3LCM = 0;///CLRCS3///
wtcom();/// waitting for enable///
}

void wtcom(void)
{
Dilcm = 0;///CLRDI///
Rwlcm = 1;///SETBRW///
Datalcm = 0xFF;///MOVDATA_LCM,#0FFH///
Elcm= 1;_nop_();
while(Datalcm & Lcdbusy);
Elcm= 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個(gè)操作單元位置///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Locatexy(void)
{
unsigned charx,y;
switch (col&0xc0)///col.and.0xC0///
{///條件分支執(zhí)行///
case 0:{lcdbusyL();break;} ///左區(qū)///
case 0x40:{lcdbusyM();break;} ///中區(qū)///
case 0x80:{lcdbusyR();break;} ///右區(qū)///
}
x = col&0x3F|SETX;///col.and.0x3f.or.setx///
y = row&0x07|SETY;///row.and.0x07.or.sety///
wtcom();///waitting for enable///
Dilcm = 0;///CLRDI///
Rwlcm = 0;///CLRRW///
Datalcm = y;///MOVP0,Y///
Elcm = 1;_nop_();Elcm = 0;
wtcom();///waitting for enable///
Dilcm = 0;///CLRDI///
Rwlcm = 0;///CLRRW///
Datalcm = x;///MOVP0,X///
Elcm = 1;_nop_();Elcm = 0;
}

//////////////////////////////////////////////////////////////////
///液晶屏初始化///
//////////////////////////////////////////////////////////////////

void Lcminit(void)
{
cbyte = DISPOFF;///關(guān)閉顯示屏 ///
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPON;///打開(kāi)顯示屏 ///
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPFIRST;///定義顯示起始行為零 ///
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
Lcmcls();
col=0;///清屏///
row=0;
Locatexy();
}
//////////////////////////////////////////////////////////////////
/// 延時(shí)///
//////////////////////////////////////////////////////////////////
void Delay(Uchar MS)
{
Uchar us,usn;
while(MS!=0)
{ usn = 4;
while(usn!=0)
{
us=0xf0;
while (us!=0){us--;};
usn--;
}
MS--;
}
}

//////////////////////////////////////////////////////////////////
//定義字符串?dāng)?shù)組///
//////////////////////////////////////////////////////////////////

Uchar code STR1[]=
{
0x80,0x81,0x82,0x83,0x84,0x85,
0x86,0x87,0x88,0x89,0x8a,0x8B
};

Uchar code STR2[]="Our friend over the wold";
Uchar code STR3[]="Program by Keil C51 6.12";
Uchar code STR4[]="Thank you ~v~ 1234567890";


評(píng)論


技術(shù)專區(qū)

關(guān)閉