|
//=============熟練運(yùn)用以下方案可以擴(kuò)展到工業(yè)控制中的人機(jī)介友好介面顯示,實(shí)現(xiàn)中文化可視控制=======//
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define Lcd_Bus P0 //數(shù)據(jù)總線
sbit RS=P1^0; // 并行的指令/數(shù)據(jù)選擇信號(hào);串行的片選信號(hào)
sbit RW=P1^1; // 并行的讀寫選擇信號(hào);串行的數(shù)據(jù)口
sbit E=P1^2; // 并行的使能信號(hào);串和的同步時(shí)鐘
/*************************************************************/
/******************************************************************************/
void chk_busy(){ //檢查忙位(底層)
RS=0;
RW=1;
E=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80);
E=0;
}
//============================================================//寫命令到LCD(底層)
void write_com(unsigned char cmdcode){
chk_busy(); //忙檢查
RS=0;
RW=0; //RS=0,RW=0;表示MCU寫指令到指令暫存器IR
E=1;
Lcd_Bus=cmdcode; //Lcd_Bus=P0;
E=0; //E由高到低變化將配合W進(jìn)行寫數(shù)據(jù)或?qū)懼噶?br />
}
//------------------------------------------------------------//寫數(shù)據(jù)到LCD(底層)
void write_data(unsigned char Dispdata){
chk_busy(); //忙檢查
RS=1;
RW=0; //RS=1;RW=0;表示MCU寫數(shù)據(jù)到暫存器DR
E=1;
Lcd_Bus=Dispdata; //Lcd_Bus=P0;
E=0; //E由高到低變化將配合W進(jìn)行寫數(shù)據(jù)或?qū)懼噶?br />
}
//============================================================//初始化LCD屏(被調(diào)用層)
void lcm_init(){
write_com(0x30); //選擇8bit數(shù)據(jù)流 0X30=0011,0000
write_com(0x0C); //開顯示(無(wú)游標(biāo)、不反白)
write_com(0x01); //清除顯示,并且設(shè)定地址指針為00H
}
//============================================================//寫指令或數(shù)據(jù)(被調(diào)用層)
void lcm_w_test(bit i,unsigned char word){
if(i == 0){ //根據(jù)i的狀態(tài)區(qū)分指令或數(shù)據(jù)
write_com(word);//寫指令或數(shù)據(jù)(0,指令)
}
else{
write_data(word);//寫指令或數(shù)據(jù)(1,數(shù)據(jù))
}
}
//-----------------------------------------------------------//清屏函數(shù)
void lcm_clr(void){
lcm_w_test(0,0x01);
}
//===========================================================//向LCM發(fā)送一個(gè)字符串,長(zhǎng)度64字符之內(nèi)。(被調(diào)用層)
void lcm_w_word(unsigned char *s){
while(*s>0){ //應(yīng)用:lcm_w_word("您好!");
write_data(*s);//這里指針用得很好,用指針后顯示數(shù)據(jù)的地址不用數(shù)組了,減小了內(nèi)存開支
s++; //自加顯示下一個(gè)數(shù)據(jù)地址
}
}
void welcome(void)//==========================================//初始開機(jī)顯示畫面
{
//----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//標(biāo)尺
//lcm_w_word(" WiCN12864LCD V1.0 2013-05-09 LCD:WC12864CBL WWW#WiCN#COM");
lcm_w_test(0,0x81); //寫指令和地址
lcm_w_word ("離離原上草,"); //寫顯示數(shù)據(jù)
lcm_w_test(0,0x91);
lcm_w_word ("一歲一枯榮;");
lcm_w_test(0,0x89);
lcm_w_word ("野火燒不盡,");
lcm_w_test(0,0x99);
lcm_w_word ("春風(fēng)吹又生.");
}
//=========================================================================================//
void DelayM(int num){//延時(shí)函數(shù)
while(num--) ;
}
/*******************************************************************************************/
void main()
{
lcm_init();//初始化液晶顯示器
lcm_clr();//清屏
welcome(); //初始開機(jī)顯示畫面,顯示歡迎信息
DelayM(3000); //顯示等留3秒
while(1);
}
|
|