一般情況下,LCD1602與單片機(jī)連接的線路共有11條,其中有8條數(shù)據(jù)線,3條控制線(其余的5條為電源和地)。如果把它們都連接上,將占用較多的單片機(jī)的接口。那么如何減少接口呢?LCD1602還有一種使用高4位數(shù)據(jù)線的接法,可以減少單片機(jī)的負(fù)擔(dān)。另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態(tài),就可以用稍事等待來代替。這樣一來,RW就可以直接接地,使LCD1602永遠(yuǎn)處于寫入的狀態(tài)。那么,LCD1602和單片機(jī)之間就僅僅需要6條線了,這算是一種比較簡潔的接法了。下面的一個(gè)例子是使用P1口的高4位連接到LCD1602的高4位數(shù)據(jù)線。 功能說明:讓1602顯示“51Start:” “the best one!” 程序: #include #define uchar unsigned char #define uint unsigned int sbit lcdrs=P3^2; //數(shù)據(jù)/命令選擇端,低電平為指令,高電平為數(shù)據(jù) sbit lcdrw=P3^3; //讀寫控制端,低電平為寫 sbit lcden=P3^4; //使能端 uchar code table1[]=' 51Start: '; uchar code table2[]=' the best one! '; void delay(uint x) //延時(shí) x 毫秒 { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } /*========================================================== *函數(shù)名稱:Lcd_1602_write(uchar com,date) *功 能:向1602寫數(shù)據(jù)/指令 *入口參數(shù):com(com=0 寫命令 com=1 寫數(shù)據(jù)) *出口參數(shù): *說 明:四線用的是1602的高四位DB4-DB7,單片機(jī)的數(shù)據(jù)口為P1口的高四位P1.4-P1.7 *==========================================================*/ void Lcd_1602_write(uchar com,date) { uchar i; lcdrw=0; //設(shè)置為寫 lcdrs=com; //將形參傳給lcdrs for(i=0;i<2;i++)>2;i++)> { lcden=1; P1=(P1&0x0f)|(date&0xf0); //將date的高四位送入P1,同時(shí)保持P1的低四位不變 //如果使用P1的低四位的話,則該處應(yīng)該改為:P1=(P1&0xf0)|((date>>4)&0x0f); delay(3); //適當(dāng)延時(shí),數(shù)據(jù)穩(wěn)定 lcden=0; //送入數(shù)據(jù) date<=4;>=4;> } } /*========================================================== *函數(shù)名稱:void Lcd_1602_init() *功 能:對1602進(jìn)行初始化 *入口參數(shù): *出口參數(shù): *說 明:用四線時(shí),1602的初始化只需要高四位數(shù)據(jù)就可以完成,在初始化完成之后必須再傳入四位數(shù)據(jù),需注意。 * 執(zhí)行完write_1602(0,0x28);之后液晶已經(jīng)初始化,其實(shí)在執(zhí)行了一半的時(shí)候就已經(jīng)初始化完成,此時(shí)又傳入了 四位數(shù)據(jù)(一個(gè)寫語句會(huì)傳入8位數(shù)據(jù)),這時(shí)候如果直接寫數(shù)據(jù)的話,就會(huì)形成亂碼 *==========================================================*/ void Lcd_1602_init() { Lcd_1602_write(0,0x28);//0x28=0010 1000,將液晶設(shè)置為16*2顯示,5*7點(diǎn)陣,4位數(shù)據(jù)口 delay(5);// lcden=1; // lcden=0; Lcd_1602_write(0,0x28); //顯示方式設(shè)置 Lcd_1602_write(0,0x0e); //設(shè)置開顯示,不顯示光標(biāo) Lcd_1602_write(0,0x06); //默認(rèn)(0x06)寫入新數(shù)據(jù)后光標(biāo)右移 屏幕不移動(dòng) Lcd_1602_write(0,0x01); //顯示清0,數(shù)據(jù)指針清0 } //主函數(shù) void main() { uchar num; Lcd_1602_init(); Lcd_1602_write(0,0x80); //第一行 for(num=0;num<> { Lcd_1602_write(1,table1[num]);//寫數(shù)據(jù) delay(3); } Lcd_1602_write(0,0xc0); //第二行 for(num=0;num<> { Lcd_1602_write(1,table2[num]); delay(3); } while(1); } 本文素材來自網(wǎng)絡(luò)。以上信息僅供參考,希望對大家有幫助。 |
|