/**********************帶字庫液晶顯示模塊LCM12864ZK*****************************/ #include <REG51.H> #include <STDIO.H>
/*********************************************************************/ #define Uchar unsigned char #define Uint unsigned int #define Ulong unsigned long sbit E=P3^0; //對應(yīng)第8腳 sbit RW=P3^1; //對應(yīng)第7腳 sbit RS=P3^2; //對應(yīng)第6腳 sbit BG=P3^3; //背光源正極2腳 Uchar BUSY,hang,lie;
/********************************/ //定義字符串?dāng)?shù)組 */ /********************************/ code char STR2[]="單片機顯示技術(shù)網(wǎng)"; code char STR3[]="網(wǎng)址:http://www.mcubbs.net";
/**************************定義函數(shù)原型********************************/ void Delayus(Ulong t) ; /*延時函數(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ù)**//
/*********************************************延時**************************************/ 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); } //*********************寫控制字函數(shù)****************************// void Write_command(Uchar CMD,Uchar bb) { if(bb) {BUSYLOOP();} RS=0; RW=0; E=1; P1=CMD; Delayus(1); E=0; }
//*********************寫數(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ù)開始***********************************/ main() { CLEAR(); CHUSHIHUA(); //初始化函數(shù)// Display(STR2,0x82); // 上面一行顯示一個預(yù)定字符串 Display(STR3,0x88); Delayus(200); Write_command(0x9C,0); //將光標(biāo)移到0x9C Write_command(0x0f,0); //光標(biāo)處反白閃爍
// write_command(0x08,0); //進入睡眠狀態(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]); //輸出單個字符 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/**********************帶字庫液晶顯示模塊LCM12864ZK*****************************/ #include <REG51.H> #include <STDIO.H>
/*********************************************************************/ #define Uchar unsigned char #define Uint unsigned int #define Ulong unsigned long sbit E=P3^0; //對應(yīng)第8腳 sbit RW=P3^1; //對應(yīng)第7腳 sbit RS=P3^2; //對應(yīng)第6腳 sbit BG=P3^3; //背光源正極2腳 Uchar BUSY,hang,lie;
/********************************/ //定義字符串?dāng)?shù)組 */ /********************************/ code char STR2[]="單片機顯示技術(shù)網(wǎng)"; code char STR3[]="網(wǎng)址:http://www.mcubbs.net";
/**************************定義函數(shù)原型********************************/ void Delayus(Ulong t) ; /*延時函數(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ù)**//
/*********************************************延時**************************************/ 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); } //*********************寫控制字函數(shù)****************************// void Write_command(Uchar CMD,Uchar bb) { if(bb) {BUSYLOOP();} RS=0; RW=0; E=1; P1=CMD; Delayus(1); E=0; }
//*********************寫數(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ù)開始***********************************/ main() { CLEAR(); CHUSHIHUA(); //初始化函數(shù)// Display(STR2,0x82); // 上面一行顯示一個預(yù)定字符串 Display(STR3,0x88); Delayus(200); Write_command(0x9C,0); //將光標(biāo)移到0x9C Write_command(0x0f,0); //光標(biāo)處反白閃爍
// write_command(0x08,0); //進入睡眠狀態(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]); //輸出單個字符 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; } } } }
|
|