Nokia/諾基亞5110 LCD原理應(yīng)用資料:LPH7366 是NOKIA 公司生產(chǎn)的可用于其5110、6150,6100 等系列移動(dòng)電話的液晶顯示模塊,國(guó)內(nèi)廠家也生產(chǎn)有類似的兼容產(chǎn)品。該產(chǎn)品除應(yīng)用于移動(dòng)電話外,也可廣泛應(yīng)用于各類便攜式設(shè)備的顯示系統(tǒng)。與其它類型的產(chǎn)品相比,該模塊具有以下特點(diǎn):
●84x48 的點(diǎn)陣LCD,可以顯示4 行漢字,
●采用串行接口與主處理器進(jìn)行通信,接口信號(hào)線數(shù)量大幅度減少,包括電源和地在內(nèi)的信號(hào)線僅有9 條。支持多種串行通信協(xié)議(如AVR 單片機(jī)的SPI、MCS51 的串口模式0等),傳輸速率高達(dá)4Mbps,可全速寫入顯示數(shù)據(jù),無等待時(shí)間。
●可通過導(dǎo)電膠連接模塊與印制版,而不用連接電纜,用模塊上的金屬鉤可將模塊固定到印制板上,因而非常便于安裝和更換。
●LCD 控制器/驅(qū)動(dòng)器芯片已綁定到LCD 晶片上,模塊的體積很小。
●采用低電壓供電,正常顯示時(shí)的工作電流在200μA 以下,且具有掉電模式。
LPH7366 的這些特點(diǎn)非常適合于電池供電的便攜式通信設(shè)備和測(cè)試設(shè)備中


C8051F學(xué)習(xí)筆記:Nokia 5110驅(qū)動(dòng)
Nokia5110是一款經(jīng)典機(jī)型,可能由于經(jīng)典的緣故,舊機(jī)器很多,所以很多電子工程師就把舊機(jī)器的屏幕拆下來,自己驅(qū)動(dòng)Nokia5110,用于開發(fā)的設(shè)備顯示,取代LCD1602。
使用Nokia5110液晶的四大理由
1) 性價(jià)比高,LCD1602可以顯示32個(gè)字符,而Nokia5110可以顯示15個(gè)漢字,30個(gè)字符。Nokia5110裸屏僅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。
2) 接口簡(jiǎn)單,僅四根I/O線即可驅(qū)動(dòng),LCD1602需11根I/O線,LCD12864需12根。
3) 速度快,是LCD12864的20倍,是LCD1602的40倍。
4) Nokia5110工作電壓3.3V,正常顯示時(shí)工作電流200uA以下,具有掉電模式,適合電池供電的便攜式移動(dòng)設(shè)備。
可以在市場(chǎng)上買到Nokia5110的裸屏和帶PCB的Nokia5110屏幕,因?yàn)?/span>Nokia5110是不帶背光的,所以通常商家會(huì)在PCB上按了幾個(gè)背光LED,上電就能亮,建議大家還是買那種連上PCB的5110。
Nokia5110原理圖:請(qǐng)到帖子底部下載附件

商家把該引出的管腳都引出了,下面就可以連接C8051F的相應(yīng)管腳,寫程序驅(qū)動(dòng)5110了。
Nokia5110和Nokia3110是兼容的,用的都是同一款驅(qū)動(dòng)芯片PHILIPS PCD8544。
(1) SPI接口時(shí)序?qū)憯?shù)據(jù)/命令
Nokia5110(PCD8544)的通信協(xié)議是一個(gè)沒有MISO只有MOSI的SPI協(xié)議,如果單片機(jī)有富裕的SPI接口,也可以利用硬件SPI,但通常沒有必要,只需要軟件程序模擬即可。

/***********************************************************
函數(shù)名稱:LCD_write_byte
函數(shù)功能:模擬SPI接口時(shí)序?qū)憯?shù)據(jù)/命令LCD
入口參數(shù):data :寫入的數(shù)據(jù);
command :寫數(shù)據(jù)/命令選擇;
出口參數(shù):無
備 注:
***********************************************************/
void LCD_write_byte(unsigned char dat, unsigned char command)
{
unsigned char i;
LCD_CE = 0; //5110片選有效,允許輸入數(shù)據(jù)
if (command == 0) //寫命令
LCD_DC = 0;
else LCD_DC = 1; //寫數(shù)據(jù)
for(i=0;i<8;i++) //傳送8bit數(shù)據(jù)
{
if(dat&0x80)
SDIN = 1;
else
SDIN = 0;
SCLK = 0;
dat = dat << 1;
SCLK = 1;
}
LCD_CE = 1; //禁止5110
}
管腳D/C(LCD_DC)用于選擇寫的是命令(D/C=0)還是數(shù)據(jù)(D/C=1)。
(2) Nokia5110的初始化
接通電源后,內(nèi)部寄存器和RAM的內(nèi)容是不確定的,這需要一個(gè)RES低電平脈沖復(fù)位一下。當(dāng)VDD變?yōu)楦唠娖剑_(dá)到VDDmin(或更高)之后,最多100ms,RST輸入低電平(電平幅度<0.3VDD)。

5110復(fù)位時(shí)序
/***********************************************************
函數(shù)名稱:LCD_init
函數(shù)功能:5110初始化
入口參數(shù):無
出口參數(shù):無
備 注:
***********************************************************/
void LCD_init(void)
{
LCD_RST = 0; // 產(chǎn)生一個(gè)讓LCD復(fù)位的低電平脈沖
delay_1us();
LCD_RST = 1;
LCD_CE = 0; // 關(guān)閉LCD
delay_1us();
LCD_CE = 1; // 使能LCD
delay_1us();
LCD_write_byte(0x21, 0); // 使用擴(kuò)展命令設(shè)置LCD模式
LCD_write_byte(0xc8, 0); // 設(shè)置液晶偏置電壓
LCD_write_byte(0x06, 0); // 溫度校正
LCD_write_byte(0x13, 0); // 1:48
LCD_write_byte(0x20, 0); // 使用基本命令,V=0,水平尋址
LCD_clear(); // 清屏
LCD_write_byte(0x0c, 0); // 設(shè)定顯示模式,正常顯示
LCD_CE = 0; // 關(guān)閉LCD
}
(3)設(shè)置Nokia5110液晶的坐標(biāo)
Nokia5110(PCD8544)的命令集:

命令字符解釋:

要注意的是“功能設(shè)置”命令的“H”和“V”。
H=0使用基本指令集命令,H=1使用擴(kuò)展指令集命令。
V=0水平尋址,V=1垂直尋址。

48*84點(diǎn)陣的格式如上圖,數(shù)據(jù)以字節(jié)8bit為單位下載到PCD8544的48*84bit顯示數(shù)據(jù)RAM矩陣。列通過地址指針尋址,地址范圍為X 0~83(1010011),Y 0~5(101)。地址不允許超過這個(gè)范圍。

在垂直尋址(V=1),Y地址在每個(gè)字節(jié)之后遞增,經(jīng)最后的Y地址(Y=5)之后,Y繞回0,X遞增到下一列的地址。

在水平尋址模式(V=0),X地址在每個(gè)字節(jié)之后遞增,經(jīng)最后的X地址(X=83)之后,X繞回0,Y遞增到下一行的地址。
經(jīng)每一個(gè)最后地址之后(X=83,Y=5),地址指針繞回地址(X=0,Y=0)。
/***********************************************************
函數(shù)名稱:LCD_set_XY
函數(shù)功能:設(shè)置LCD坐標(biāo)函數(shù)
入口參數(shù):X :0-83
Y :0-5
出口參數(shù):無
備 注:
***********************************************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0); // column
LCD_write_byte(0x80 | X, 0); // row
}
(4)顯示英文字符
英文字符占用6*8個(gè)點(diǎn)陣,通過建立一個(gè)ASCII的數(shù)組font6x8[][6]來尋址。而這個(gè)數(shù)字的行號(hào)對(duì)應(yīng)(字符ASCII碼-32)。ASCII碼表如下:

/***********************************************************/
函數(shù)名稱:LCD_write_char
函數(shù)功能:顯示英文字符
入口參數(shù):c : 顯示的字符
出口參數(shù):無
備 注:
***********************************************************/
void LCD_write_char(unsigned char c)
{
unsigned char line;
c -= 32; //數(shù)組的行號(hào)
for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);
}
如要在NOKIA5110輸出大寫“A”,對(duì)應(yīng)數(shù)組的行號(hào)為33,對(duì)應(yīng)的元素為
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },水平尋址(V=0)

NOKIA5110 一行可以顯示14個(gè)字符,可以顯示六行。
(5)顯示漢字
顯示漢字可以采用兩種點(diǎn)陣方式,一種是12*12點(diǎn)陣,一種是16*16點(diǎn)陣,網(wǎng)上也有一個(gè)自動(dòng)提取字模的小軟件“3310液晶顯示屏漢字提取程序”,這個(gè)小程序只適用于水平尋址(V=0)。
3310液晶顯示屏漢字提取程序 下載:請(qǐng)到帖子底部下載附件
采用12*12點(diǎn)陣漢字時(shí),由于不是8的整數(shù)倍數(shù),因此行與行之間只能隔開,這樣才能完整顯示一個(gè)漢字。
//歡
{0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x01,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00},

12*12點(diǎn)陣
(6)顯示圖形
顯示的圖形像素大小不能超過84*48。也有一個(gè)字模提取小軟件Zimo21可以幫助我們得到圖像的像素?cái)?shù)組。但要注意Zimo21軟件的設(shè)置,不然的話就顯示不了想要的圖片。
Zimo21設(shè)置

要注意選中“縱向取!薄白止(jié)倒序”這樣才能在5110上顯示正確的圖像。
/***********************************************************
函數(shù)名稱:LCD_draw_bmp_pixel
函數(shù)功能:位圖繪制函數(shù)
入口參數(shù):X、Y :位圖繪制的起始X、Y坐標(biāo);
*map :位圖點(diǎn)陣數(shù)據(jù);
Pix_x :位圖像素(長(zhǎng))
Pix_y :位圖像素(寬)
出口參數(shù):無
備 注:
***********************************************************/
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y)
{
unsigned int i,n;
unsigned char row;
//計(jì)算位圖所占行數(shù)
if (Pix_y%8==0) //如果為位圖所占行數(shù)為整數(shù)
row=Pix_y/8;
else
row=Pix_y/8+1; //如果為位圖所占行數(shù)不是整數(shù)
LCD_set_XY(X,Y);
for (n=0;n<row;n++) //換行
{
for(i=0;i<Pix_x;i++)
{
LCD_set_XY(X+i,Y+n);
LCD_write_byte(map[i+n*Pix_x], 1);
}
}
}

要顯示的圖像

NOKIA5110顯示出來的效果