使用1602液晶顯示的實驗例子
SMC1602A(16*2)模擬口線接線方式
連接線圖:
|LCM-----51 | LCM-----51 | LCM------51 | [注:AT89S51使用12M晶振] #define LCM_RW P2_0 //定義引腳 #include at89x51.h> void WriteDataLCM(unsigned char WDLCM); unsigned char code cdle_net[] = {www.cdle.net}; void main(void) DisplayListChar(0, 0, cdle_net); //寫數(shù)據(jù) //寫指令 //讀數(shù)據(jù)
|
|DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0 |
|DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1 |
|DB2-----P1.2 | DB6-----P1.6 | E--------P2.2 |
|DB3-----P1.3 | DB7-----P1.7 | VLCD接1K電阻到GND|
#define LCM_RS P2_1
#define LCM_E P2_2
#define LCM_Data P1
#define Busy 0x80 //用于檢測LCM狀態(tài)字中的Busy標識
void WriteCommandLCM(unsigned char WCLCM,BuysC);
unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
unsigned char code email[] = {pnzwzw@cdle.net};
{
Delay400Ms(); //啟動等待,等LCM講入工作狀態(tài)
LCMInit(); //LCM初始化
Delay5Ms(); //延時片刻(可不要)
DisplayListChar(0, 1, email);
ReadDataLCM();//測試用句無意義
while(1);
}
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //檢測忙
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時
LCM_E = 0; //延時
LCM_E = 1;
}
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
unsigned char ReadDataLCM(void)
{
LCM_RS = 1;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
return(LCM_Data);
}
評論