找回密码
 注册会员
搜索附件  
MCU资讯论坛 附件中心 单片机论坛 51单片机论坛 5_81113_cc69849fe8110fe.jpg

5_81113_cc69849fe8110fe.jpg

 

带中文字库320240图形点阵液晶显示屏的点亮:




 [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重新编辑 ]





5_81113_cc69849fe8110fe.jpg

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 16:31 , Processed in 0.041867 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部