[p]
大家好,第一次在本論壇發帖,本帖主要介紹一款內建中文字庫的液晶模塊,此模塊是由深圳市卓立恩科技公司研發的新型液晶,主控芯片是RA8806,此芯片功能十分強大,不僅自帶中文字庫,還自帶電阻式觸摸驅動功能,非常適合廣大單片機愛好者學習編程,廢話不多說,現在來介紹這款液晶顯示屏的點亮.
芯片資料見附件(只有英文的),首先我們應該知道怎么樣去看液晶驅動IC的資料,重點在哪里?我的經驗是1.讀寫時序,這個要小心,一般液晶控制芯片的時序分為8080,6800,根據規格書寫出讀寫子程序,我們在寫液晶程序時有時候沒有顯示,程序檢查半天發現是讀寫子程序錯誤.2.數據和命令指令寫入規則.3.顯示存儲器的寫入規則.4.指令內容和作用,要點亮屏一般只要用到幾個關鍵的指令就好了.
下面是引腳定義
sbit cs1=P2^3; 片選信號,低電平選中有效
sbit rs=P2^0; 命令和數據選擇信號,低寫入的為數據,高寫如的是指令
sbit wr=P2^1; 寫信號
sbit rd=P2^2; 讀信號
sbit busy=P2^4; 忙信號
sbit rst=P2^5; 復位信號
#define BUS P1 數據口P1作為數據輸入口
首先看讀寫子程序,8806的指令寫入規則是先將指令寄存器REG#寫入,例如:我們現在要對WCLR寄存器操作,那么我們就得首先將00H(REG#)寫入,然后將數據寫入
void LCD_CmdWrite(unsigned char cmdaddr)//8080
{ cs1=0;
rd=1;
rs=1;
BUS=cmdaddr;
wr=0;
wr=1;
cs1=1; /8080時序
}
將REG#值寫入程序
void LCD_DataWrite(unsigned char wrdata)
{ while(busy==0);
cs1=0;
rd=1;
rs=0;
BUS=wrdata;
wr=0;
wr=1;
cs1=1;
}
數據寫入子程序
假設我們對WCLR設置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 需要調整
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);
}
初始化程序,大家可以參考芯片的規格書理解
顯示漢字子程序:
void display_word(unsigned char code *cha, int count )
{
unsigned int iiii=0;
LCD_CmdWrite(0x00);
LCD_DataWrite(0x0c); /文字模式開
LCD_CmdWrite(0x60);
LCD_DataWrite(0x00); /設置x光標的位置
LCD_CmdWrite(0x70);
LCD_DataWrite(0x00); /設置y光標的位置
LCD_CmdWrite(0xb0); /寫數據模式
for(iiii=0;iiii<count;iiii++)
{
LCD_DataWrite(*cha);
++cha;
delay_nms(1);
}
}
大家可以參考8806規格書理解
附件為8806顯示漢字程序
我的郵箱:
xuleif1984@yahoo.com.cn
抱歉,之前程序上傳有失誤,再傳一次
[ 此貼被fongmj在2009-11-19 12:52重新編輯 ]
