/**********************帶字庫(kù)液晶顯示模塊LCM12864ZK*****************************/
#include <REG51.H>
#include <STDIO.H>
/*********************************************************************/
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
sbit E=P3^0; //對(duì)應(yīng)第8腳
sbit RW=P3^1; //對(duì)應(yīng)第7腳
sbit RS=P3^2; //對(duì)應(yīng)第6腳
sbit BG=P3^3; //背光源正極2腳
Uchar BUSY,hang,lie;
/********************************/
//定義字符串?dāng)?shù)組 */
/********************************/
code char STR2[]="單片機(jī)顯示技術(shù)網(wǎng)";
code char STR3[]="網(wǎng)址:http://www.mcubbs.net";
/**************************定義函數(shù)原型********************************/
void Delayus(Ulong t) ; /*延時(shí)函數(shù)*/
void BUSYLOOP(); //*判忙函數(shù)*//
void Write_command(Uchar CMD,Uchar bb); //*發(fā)控制字函數(shù)*//
void Write_data(Uchar CMD); //*發(fā)數(shù)據(jù)函數(shù)*//
void CHUSHIHUA(); //*初始化函數(shù)*//
void CLEAR(); //*清屏*//
void Display( Uchar *ptr,Uchar ddram); //**顯字符串函數(shù)**//
/*********************************************延時(shí)**************************************/
void Delayus(Ulong t)
{int i,j;
for (i=0;i<t;i++)
for (j=0;j<t;j++)
;
}
//*********************判忙函數(shù)************************//
void BUSYLOOP()
{ P1=0x0ff;
RS=0;
RW=1;
do {
E=1;
BUSY=P1;
E=0;
}
while(BUSY>0x7F);
}
//*********************寫(xiě)控制字函數(shù)****************************//
void Write_command(Uchar CMD,Uchar bb)
{ if(bb)
{BUSYLOOP();}
RS=0;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}
//*********************寫(xiě)數(shù)據(jù)函數(shù)****************************//
void Write_data(Uchar CMD)
{ BUSYLOOP();
RS=1;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}
//*************************液晶初始化********************************//
void CHUSHIHUA()
{
Delayus(38);
Write_command(0x30,0);
Delayus(1);
Write_command(0x30,0);
Delayus(1);
Write_command(0x0C,1);
Delayus(1);
Write_command(0x01,1);
Delayus(20);
Write_command(0x06,1);
}
/***************************清 屏*************************************/
void CLEAR()
{ RS=0;
RW=0;
E=1;
P1=0x01;
Delayus(1);
E=0;
}
/**************************主函數(shù)開(kāi)始***********************************/
main()
{ CLEAR();
CHUSHIHUA(); //初始化函數(shù)//
Display(STR2,0x82); // 上面一行顯示一個(gè)預(yù)定字符串
Display(STR3,0x88);
Delayus(200);
Write_command(0x9C,0); //將光標(biāo)移到0x9C
Write_command(0x0f,0); //光標(biāo)處反白閃爍
// write_command(0x08,0); //進(jìn)入睡眠狀態(tài)
// delayus(200);
// write_command(0x0C,0); //喚醒
while(1)
{ ; }
}
/*************************主函數(shù)結(jié)束*************************************/
/*=======================================================
顯示字符串
=======================================================*/
void Display(Uchar *ptr,Uchar ddram)
{
Uchar l,i1,x;
l=0;
if(ddram<0x88)
{ hang=0; } //定位行地址:第一行
else if(ddram<0x90)
{ hang=2; } //定位行地址:第三行
else if(ddram<0x98)
{ hang=1; } //定位行地址:第二行
else
{ hang=3; } //定位行地址:第四行
lie=0x0f&ddram; //定位列地址
if(lie>0x07)
{ lie=lie-0x08;}
x=lie*2;
Write_command(ddram,0); // 定位顯示起始地址
while ((ptr[l])!='\0')
{l++;}
for (i1=0;i1<l;i1++)
{ Write_data(ptr[i1]); //輸出單個(gè)字符
x++;
if (x ==0x10)
{ x=0;
hang++;
switch (hang)
{
case 0:Write_command(0x80,0);
break;
case 1:Write_command(0x90,0);
break;
case 2:Write_command(0x88,0);
break;
case 3:Write_command(0x98,0);
}
if (h/**********************帶字庫(kù)液晶顯示模塊LCM12864ZK*****************************/
#include <REG51.H>
#include <STDIO.H>
/*********************************************************************/
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
sbit E=P3^0; //對(duì)應(yīng)第8腳
sbit RW=P3^1; //對(duì)應(yīng)第7腳
sbit RS=P3^2; //對(duì)應(yīng)第6腳
sbit BG=P3^3; //背光源正極2腳
Uchar BUSY,hang,lie;
/********************************/
//定義字符串?dāng)?shù)組 */
/********************************/
code char STR2[]="單片機(jī)顯示技術(shù)網(wǎng)";
code char STR3[]="網(wǎng)址:http://www.mcubbs.net";
/**************************定義函數(shù)原型********************************/
void Delayus(Ulong t) ; /*延時(shí)函數(shù)*/
void BUSYLOOP(); //*判忙函數(shù)*//
void Write_command(Uchar CMD,Uchar bb); //*發(fā)控制字函數(shù)*//
void Write_data(Uchar CMD); //*發(fā)數(shù)據(jù)函數(shù)*//
void CHUSHIHUA(); //*初始化函數(shù)*//
void CLEAR(); //*清屏*//
void Display( Uchar *ptr,Uchar ddram); //**顯字符串函數(shù)**//
/*********************************************延時(shí)**************************************/
void Delayus(Ulong t)
{int i,j;
for (i=0;i<t;i++)
for (j=0;j<t;j++)
;
}
//*********************判忙函數(shù)************************//
void BUSYLOOP()
{ P1=0x0ff;
RS=0;
RW=1;
do {
E=1;
BUSY=P1;
E=0;
}
while(BUSY>0x7F);
}
//*********************寫(xiě)控制字函數(shù)****************************//
void Write_command(Uchar CMD,Uchar bb)
{ if(bb)
{BUSYLOOP();}
RS=0;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}
//*********************寫(xiě)數(shù)據(jù)函數(shù)****************************//
void Write_data(Uchar CMD)
{ BUSYLOOP();
RS=1;
RW=0;
E=1;
P1=CMD;
Delayus(1);
E=0;
}
//*************************液晶初始化********************************//
void CHUSHIHUA()
{
Delayus(38);
Write_command(0x30,0);
Delayus(1);
Write_command(0x30,0);
Delayus(1);
Write_command(0x0C,1);
Delayus(1);
Write_command(0x01,1);
Delayus(20);
Write_command(0x06,1);
}
/***************************清 屏*************************************/
void CLEAR()
{ RS=0;
RW=0;
E=1;
P1=0x01;
Delayus(1);
E=0;
}
/**************************主函數(shù)開(kāi)始***********************************/
main()
{ CLEAR();
CHUSHIHUA(); //初始化函數(shù)//
Display(STR2,0x82); // 上面一行顯示一個(gè)預(yù)定字符串
Display(STR3,0x88);
Delayus(200);
Write_command(0x9C,0); //將光標(biāo)移到0x9C
Write_command(0x0f,0); //光標(biāo)處反白閃爍
// write_command(0x08,0); //進(jìn)入睡眠狀態(tài)
// delayus(200);
// write_command(0x0C,0); //喚醒
while(1)
{ ; }
}
/*************************主函數(shù)結(jié)束*************************************/
/*=======================================================
顯示字符串
=======================================================*/
void Display(Uchar *ptr,Uchar ddram)
{
Uchar l,i1,x;
l=0;
if(ddram<0x88)
{ hang=0; } //定位行地址:第一行
else if(ddram<0x90)
{ hang=2; } //定位行地址:第三行
else if(ddram<0x98)
{ hang=1; } //定位行地址:第二行
else
{ hang=3; } //定位行地址:第四行
lie=0x0f&ddram; //定位列地址
if(lie>0x07)
{ lie=lie-0x08;}
x=lie*2;
Write_command(ddram,0); // 定位顯示起始地址
while ((ptr[l])!='\0')
{l++;}
for (i1=0;i1<l;i1++)
{ Write_data(ptr[i1]); //輸出單個(gè)字符
x++;
if (x ==0x10)
{ x=0;
hang++;
switch (hang)
{
case 0:Write_command(0x80,0);
break;
case 1:Write_command(0x90,0);
break;
case 2:Write_command(0x88,0);
break;
case 3:Write_command(0x98,0);
}
if (hang>3)
{
Write_command(0x80,0);
hang=0;
}
}
}
}
ang>3)
{
Write_command(0x80,0);
hang=0;
}
}
}
}