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

MEGA8单片机对LCD1602液晶屏的驱动,第1张

调试过程总结一下:

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. */

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2570726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-07
下一篇 2022-08-07

发表评论

登录后才能评论

评论列表(0条)

保存