MEGA8单片机对LCD1602液晶屏的驱动

控制/MCU

1889人已加入

描述

调试过程总结一下:

1)由于找不到的1620资料,不知道它的操作时序。看到一些帖子说1620和1602没区别,还是有点将信将疑。后面用网友编写的1602程序试验,才知道它们俩没啥区别

2)关于是否检测LCD处于空闲,觉得还是最好在写指令和写数据时都加上。不检测,会导致显示结果不正常。

3)由于连线很多14根(加上背光就是16根),如果有一根除了问题就会影响到显示。所以我是用万用表一根线一根线量了之后才通电试验的。

4)看到很多帖子都建议在初始化LCD前延时几十毫秒。本例中并没有延时,显示也正常。

5)总的说来,不是很难。在遇到问题时只要能够仔细分析,就能找出原因和解决方法。自己前几天在试程序时就是显示结果不对,一直在检查自己的程序,没想到原来是单片机的Flash到寿命了那个郁闷啊。

头文件中有五个函数:

Function1.unsigned char AskBusy(void) 询问LCD1620是否空闲, 返回值“1”空闲, “0”为忙;

Function2.WritEDAta(char data) 写数据到LCD1620;

Function3.WriteCommand(char command) 写指令到LCD1620;

Function4.PutOneCharLCD(x,y,*Disp) 在LCD1620上显示一个字符, x,y定义位置

Function5.PutStringLCD(a,b,*DispString) 在LCD1620上显示一个字符串, a,b定义初始位置。 Function6.LCD_Init() 初始化LCD

在使用此头文件之前,必须有以下宏定义:

#define DataPortPullup PORTx

#define DataPortDirection DDRx

#define ReadLCDPINPINx

#defineCTRlPortPullup PORTx

#define CtrlPortDirection DDRx

#define RS_Bit Px?

#define RW_Bit Px?

#define E_Bit Px?

其中“x”代表B,C,D(mega8中无A口),“?”代表“0~1”

完整头文件如下(解释搞了一大堆,也学学用英语……):

/*******************************************************/

/* Project :1620 Display Headfile */

/* Date :2008,3,11 */

/* Author :lhy */

/* Version :v1.1 */

/* Rework :lhy */

/* Rework Date :2008.4.28 */

/* */

/* Comments : */

/* 1 Function Description */

/* Function1.unsigned char AskBusy(void) */

/* --Calls this Fun to ask if LCD is busy, */

/* 1--free,0--busy; */

/* Function2.WritEDAta(char data) */

/* --Write data to LCD */

/* Function3.WriteCommand(char command) */

/* --write command to LCD */

/* Function4.PutOneCharLCD(x,y,*Disp) */

/* --Put one char to LCD. */

/* Function5.PutStringLCD(a,b,*DispString) */

/* --Put String to LCD. Max length 32bits. */

/* */

/* 2 How to use */

/* Before use this HeadFile, */

/* need to define as below: */

/* #define DataPortPullup PORTx */

/* #define DataPortDirection DDRx */

/* #define ReadLCDPin PINx */

/* #define CtrlPortPullup PORTx */

/* #define CtrlPortDirection DDRx */

/* #define RS_Bit Px? */

/* #define RW_Bit Px? */

/* #define E_Bit Px? */

/* ‘x’ -》 A,B,C,D.。. */

/* ‘?’ -》 0,1,2,3,4,5,6,7 */

/* And set control port output,like this: */

/* CtrlPortDirection |= */

/* (1《/* 3 Add the Function “LCD_Init(void)” */

/* Before this Fun, you must set control port */

/* output. */

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分