原创 1602液晶显示原理及时序操作

2010-5-14 23:18 8994 11 12 分类: MCU/ 嵌入式

1602液晶显示原理及时序操作


液晶显示器件(LCD)是一种平板薄型显示器件,它的驱动电压很低、工作电流极小,可以与CMOS电路结合起来组成低功耗系统,广泛应用于各种电子产品中,但是它还是有缺点的,那就是这种器件一般不耐高温,也不耐低温,所以如果工作环境温度很恶劣的话,LCD就得特别“关照”了。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


我这次调试用的是非常大众化的1602LCD液晶,截个图看看就知道了,


480c127f-5b2e-4366-afe7-7dc9492e714d.jpg


它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它由325*8点阵字符位组成,每一个点阵字符位都可以显示一个字符,但是它不能显示图形。模块内部自带有1605*8点阵字型的字符发生器CHROM8个可由用户自定义的5*8的字符发生器CGRAM


在调试这个液晶之前,我心里还有点畏惧,因为以前在印象中觉得液晶的驱动程序是很复杂的,那是大二暑假时形成的一种心理状态,但是到了现在,我专门花费几天的时间正儿八经地好好看了1602DATASHEET,上下来回反复看,终于看出点感觉了!细细琢磨了一下里面的时序图,感觉写它的驱动程序还是不难的。于是乎,开始动手写代码了,写完之后加上RS232通讯联调,意外的是,效果很好!上位机和液晶“互动”得很“默契”!嘿嘿,先给自己赞一个!icon


我觉得写1602的驱动程序应该好好把握11条指令,DATASHEET里面已经“明文规定”了,自己想要液晶做什么,只管把这11条指令写好再调用就是了,罗列出来如下:


(1)void Clear_display();    //清显示屏指令


(2)void Return_home();      //光标归位指令


(3)void Entry_mode_set();   //输入模式设置指令


(4)void Display_on_or_off();  //显示屏的开关控制指令


(5)void Cursor_or_Display_shift();  //设定显示屏或光标移动方向指令


(6)void Function_set();       //功能设定指令


(7)void Set_character_address();    //设定CGRAM地址指令


(8)void Set_display_address();      //设定DDRAM地址指令


(9)void Read_busy_flag();   //读取忙信号或AC地址指令


(10)void Write_data();      //将数据写入DDRAMCGRAM指令


(11)void Read_data();       //CGRAMDDRAM读出数据的指令


这些子函数的名字可以随便起,我这里起的函数名是按照DATASHEET里的英文名写的,方便大家理解,这里的11条指令我们一般不会全都用上,只是用上其中几条就可以满足一般的应用了。关于具体怎么写这11条指令,我就不多说了,博友可以依据DATASHEET来写,上面已经说得很清楚了,至于单片机的接口方法,里面也有典型图,可以参照一下。


写驱动程序时,还有要特别注意的就是它的时序图,如果时序图理解不了的话,写驱动程序也就无从谈起了。它的读、写操作时序分别如下所示:


Write Mode Timing Diagram:


点击看大图


Read Mode Timing Diagram:


点击看大图


下面是我写的1602液晶显示代码,通过上位机和液晶进行通讯,可以实时给1602输入信息,1602也可以把数据返回到上位机,实践证明效果很好!


 


附录:


    源代码     doc


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2015-10-3 12:53

楼主好人,太感谢了

相关推荐阅读
用户1528479 2011-04-12 21:50
设计第一个六层板所得到的一个深刻体会
        今天中午,由于确实有点困,于是乎仰躺在座椅上眯了半个小时的眼,睡眼朦胧中,好消息随即到来——我的第一个六层板从深圳寄到长沙了!而且元器件都已经由深圳那边的人焊接好了,拆开包装袋一看,简...
用户1528479 2011-03-25 15:28
DDR2 SDRAM×32布局、布线经验谈
最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过程中我遇到了相当多的问题,值得庆幸的是...
用户1528479 2011-03-25 13:30
DDR2 SDRAM×32布局、布线经验谈
DDR2 SDRAM×32布局、布线经验谈最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过...
用户1528479 2011-02-27 19:48
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法) 很久没有写博文了!确实有点过意不去。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使用方法——用它来画高速板子...
用户1528479 2011-02-27 19:46
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法)很久没有写博文了!确实有点过意不去(呵呵,这意味着自己最近懈怠了)。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使...
用户1528479 2011-02-12 09:15
数字旋转编码开关的原理及使用方法
在电子产品设计中,经常会用到旋转编码开关,比如数码电位器等,它的英文名翻译过来就是Rotary Encoder Switch。在写这个元件的驱动程序之前,我google、baidu了一些它的使用说明资...
EE直播间
更多
我要评论
1
11
关闭 站长推荐上一条 /3 下一条