清風(fēng)斜影:
/*SMC1602A(16*2)模擬口線接線方式連接線圖: --------------------------------------------------- |LCM-----51 |LCM-----51 |LCM------51 | --------------------------------------------------| |DB0-----P0.0|DB4-----P0.4|RW-------P2.1 | |DB1-----P0.1|DB5-----P0.5|RS-------P2.0 | |DB2-----P0.2|DB6-----P0.6|E--------P2.2 | |DB3-----P0.3|DB7-----P0.7|VLCD接1K電阻到GND| ---------------------------------------------------=============================================================*/#includesbitLCM_RW=P2^1;//定義引腳sbitLCM_RS=P2^0;sbitLCM_E=P2^2;#defineLCM_DataP0#defineBusy 0x80//用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)voidWriteDataLCM(unsignedcharWDLCM);voidWriteCommandLCM(unsignedcharWCLCM,BuysC);unsignedcharReadDataLCM(void);unsignedcharReadStatusLCM(void);voidLCMInit(void);voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);voidDelay5Ms(void);voidDelay400Ms(void);//unsignedcharcodeuctech[]={"uctech"};//unsignedcharcodenet[]={"uctech.icpcn.com"};voidmain(void){Delay400Ms();//啟動(dòng)等待,等LCM講入工作狀態(tài)LCMInit();//LCM初始化Delay5Ms();//延時(shí)片刻(可不要)//DisplayListChar(0,0,"9.63_8.24");DisplayListChar(0,1,"123.456"); DisplayOneChar(7,0,0x44); DisplayOneChar(8,0,0x46);//DisplayOneChar(8,0,0x20); DisplayOneChar(9,0,0x43);//ReadDataLCM();//測(cè)試用句無(wú)意義while(1);}/*----------------------------------------------------------------*//*寫數(shù)據(jù) *//* 輸入:RS=1,RW=0,E=1,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無(wú) *//*----------------------------------------------------------------*/voidWriteDataLCM(unsignedcharWDLCM){ReadStatusLCM();//檢測(cè)忙LCM_Data=WDLCM;LCM_RS=1;LCM_RW=0;LCM_E=0;//若晶振速度太高可以在這后加小的延時(shí)LCM_E=0;//延時(shí)LCM_E=1;}/*----------------------------------------------------------------*//*寫指令 *//* 輸入:RS=0,RW=0,E=1,D0~D7=指令碼,E=高脈沖 輸出:無(wú) *//*----------------------------------------------------------------*/voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC為0時(shí)忽略忙檢測(cè){if(BuysC)ReadStatusLCM();//根據(jù)需要檢測(cè)忙LCM_Data=WCLCM;LCM_RS=0;LCM_RW=0;LCM_E=0;LCM_E=0;LCM_E=1;}/*----------------------------------------------------------------*//*讀數(shù)據(jù) *//* 輸入:RS=1,RW=1,E=1 輸出:D0~D7=數(shù)據(jù) *//*----------------------------------------------------------------*/unsignedcharReadDataLCM(void){LCM_RS=1;LCM_RW=1;LCM_E=0;LCM_E=0;LCM_E=1;return(LCM_Data);}/*==========================*//*讀狀態(tài):輸入:RS=0,RW=1,E=1 輸出:D0~D7狀態(tài)字 *//* 狀態(tài)字說(shuō)明 *//* D0~D6當(dāng)前數(shù)據(jù)地址指針的數(shù)值 *//* D7 讀寫操作使能 1:禁止 0:允許 *//*==========================*/unsignedcharReadStatusLCM(void){LCM_Data=0xFF;LCM_RS=0;LCM_RW=1;LCM_E=0;LCM_E=0;LCM_E=1;while(LCM_Data&Busy);//檢測(cè)忙信號(hào)return(LCM_Data);}voidLCMInit(void)//LCM初始化{LCM_Data=0;WriteCommandLCM(0x38,0);//三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1);//顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)WriteCommandLCM(0x08,1);//關(guān)閉顯示W(wǎng)riteCommandLCM(0x01,1);//顯示清屏WriteCommandLCM(0x06,1);//顯示光標(biāo)移動(dòng)設(shè)置WriteCommandLCM(0x0C,1);//顯示開(kāi)及光標(biāo)設(shè)置}//按指定位置顯示一個(gè)字符voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1if(Y)X|=0x40;//當(dāng)要顯示第二行時(shí)地址碼+0x40;X|=0x80;//算出指令碼WriteCommandLCM(X,0);//這里不檢測(cè)忙信號(hào),發(fā)送地址碼WriteDataLCM(DData);}//按指定位置顯示一串字符voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData){unsignedcharListLength; ListLength=0;Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1while(DData[ListLength]>0x20)//若到達(dá)字串尾則退出 { if(X