[p]
大家好,第一次在本論壇發(fā)帖,本帖主要介紹一款內(nèi)建中文字庫(kù)的液晶模塊,此模塊是由深圳市卓立恩科技公司研發(fā)的新型液晶,主控芯片是RA8806,此芯片功能十分強(qiáng)大,不僅自帶中文字庫(kù),還自帶電阻式觸摸驅(qū)動(dòng)功能,非常適合廣大單片機(jī)愛(ài)好者學(xué)習(xí)編程,廢話不多說(shuō),現(xiàn)在來(lái)介紹這款液晶顯示屏的點(diǎn)亮.
芯片資料見(jiàn)附件(只有英文的),首先我們應(yīng)該知道怎么樣去看液晶驅(qū)動(dòng)IC的資料,重點(diǎn)在哪里?我的經(jīng)驗(yàn)是1.讀寫(xiě)時(shí)序,這個(gè)要小心,一般液晶控制芯片的時(shí)序分為8080,6800,根據(jù)規(guī)格書(shū)寫(xiě)出讀寫(xiě)子程序,我們?cè)趯?xiě)液晶程序時(shí)有時(shí)候沒(méi)有顯示,程序檢查半天發(fā)現(xiàn)是讀寫(xiě)子程序錯(cuò)誤.2.?dāng)?shù)據(jù)和命令指令寫(xiě)入規(guī)則.3.顯示存儲(chǔ)器的寫(xiě)入規(guī)則.4.指令內(nèi)容和作用,要點(diǎn)亮屏一般只要用到幾個(gè)關(guān)鍵的指令就好了.
下面是引腳定義
sbit cs1=P2^3; 片選信號(hào),低電平選中有效
sbit rs=P2^0; 命令和數(shù)據(jù)選擇信號(hào),低寫(xiě)入的為數(shù)據(jù),高寫(xiě)如的是指令
sbit wr=P2^1; 寫(xiě)信號(hào)
sbit rd=P2^2; 讀信號(hào)
sbit busy=P2^4; 忙信號(hào)
sbit rst=P2^5; 復(fù)位信號(hào)
#define BUS P1 數(shù)據(jù)口P1作為數(shù)據(jù)輸入口
首先看讀寫(xiě)子程序,8806的指令寫(xiě)入規(guī)則是先將指令寄存器REG#寫(xiě)入,例如:我們現(xiàn)在要對(duì)WCLR寄存器操作,那么我們就得首先將00H(REG#)寫(xiě)入,然后將數(shù)據(jù)寫(xiě)入
void LCD_CmdWrite(unsigned char cmdaddr)//8080
{ cs1=0;
rd=1;
rs=1;
BUS=cmdaddr;
wr=0;
wr=1;
cs1=1; /8080時(shí)序
}
將REG#值寫(xiě)入程序
void LCD_DataWrite(unsigned char wrdata)
{ while(busy==0);
cs1=0;
rd=1;
rs=0;
BUS=wrdata;
wr=0;
wr=1;
cs1=1;
}
數(shù)據(jù)寫(xiě)入子程序
假設(shè)我們對(duì)WCLR設(shè)置00H的初值,則:
LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
LCD_DataWrite(0x00);
即可.
void lcd_inital()
{
LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(MISC); //[01H] , Default --> 0x00
LCD_DataWrite(0x08);
LCD_CmdWrite(ADSR); //[03H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(INTR); //[0FH] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(WCCR); //[10H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CHWI); //[11H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x11);
LCD_CmdWrite(AWRR); //[20H] , Default --> 0x27
LCD_DataWrite(39);
LCD_CmdWrite(DWWR); //[21H] , Default --> 0x27
LCD_DataWrite(39);
LCD_CmdWrite(AWBR); //[30H] , Default --> 0xEF
LCD_DataWrite(239);
LCD_CmdWrite(DWHR); //[31H] , Default --> 0xEF
LCD_DataWrite(239);
LCD_CmdWrite(AWLR); //[40H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(AWTR); //[50H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURX); //[60H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGSG); //[61H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDSG); //[62H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURY); //[70H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGCM); //[71H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDCM); //[72H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BTMR); //[80H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(ITCR); //[90H] , Default --> 0x00 需要調(diào)整
LCD_DataWrite(0x80);
LCD_CmdWrite(PNTR); //[E0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FNCR); //[F0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FVHT); //[F1H] , Default --> 0x00
LCD_DataWrite(0x00);
}
初始化程序,大家可以參考芯片的規(guī)格書(shū)理解
顯示漢字子程序:
void display_word(unsigned char code *cha, int count )
{
unsigned int iiii=0;
LCD_CmdWrite(0x00);
LCD_DataWrite(0x0c); /文字模式開(kāi)
LCD_CmdWrite(0x60);
LCD_DataWrite(0x00); /設(shè)置x光標(biāo)的位置
LCD_CmdWrite(0x70);
LCD_DataWrite(0x00); /設(shè)置y光標(biāo)的位置
LCD_CmdWrite(0xb0); /寫(xiě)數(shù)據(jù)模式
for(iiii=0;iiii<count;iiii++)
{
LCD_DataWrite(*cha);
++cha;
delay_nms(1);
}
}
大家可以參考8806規(guī)格書(shū)理解
附件為8806顯示漢字程序
我的郵箱:
xuleif1984@yahoo.com.cn
抱歉,之前程序上傳有失誤,再傳一次
[ 此貼被fongmj在2009-11-19 12:52重新編輯 ]
