930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 10055|回复: 0

LCD 12864液晶模块使用详解3-读写液晶模块

[复制链接]

27

主题

72

帖子

384

积分

版主

Rank: 7Rank: 7Rank: 7

积分
384
发表于 2016-9-13 23:05:41 | 显示全部楼层 |阅读模式
本帖最后由 飞宇 于 2016-9-13 23:24 编辑

1. 开发板和硬件模块硬件连接
       解释程序之前,先说明一下开发板和LCD12864液晶模块之间的连接,这样方便我们理解程序。
       开发板和LCD12864液晶模块之间的接口使用8位并行接口,可读、可写、处理速度也快。详细的描述如下表所示:
表一:开发板和液晶模块之间的连接
2. 读写程序编写
2.1.  读写时序
      编写液晶模块驱动之前,需要先了解一下液晶模块的读写时序,下图是液晶模块的8位并行读写时序,从时序图中,可以看到读写液晶模块时对各个信号的要求。

图1:液晶模块8位并行时序

2.2.   读/写液晶模块
      液晶模块的驱动程序中,有3种最基本的操作:
      1) 读。
      2) 写。写分为写数据和写指令,可以用两个函数来实现,也可以放在一个函数中实现,本文中是使用两个函数实现的。
      3) 判忙。
      其他的如显示字符、图形等函数都以此为基础。




判忙函数程序清单:
  1. /********************************************************************
  2. * 描  述 : LCD12864液晶判忙程序。如LCD为“忙”状态,一直等待直到LCD空闲
  3. * 参  数 : 无
  4. * 返回值 : 无
  5. ********************************************************************/
  6. void Busy(void)   
  7. {   
  8.     uchar busy;
  9.    
  10.     do  
  11.     {         
  12.         RW = 1; RS = 0;   //读                                   
  13.         E = 1;             //使能液晶模块.0=关闭使能端,1=打开使能端
  14.         P2M0=0x00;
  15.         P2M1=0x00;        //设置P2.0~P2.7为准双向口
  16.         busy=P2;          //读取P2状态      
  17.         delay(1);        
  18.         E = 0;            //关闭液晶模块使能端.0=关闭使能端,1=打开使能端     
  19.     }while(busy&0x80);  //判断BUSY位是否工作:1=内部在工作,0=空闲
  20. }  
复制代码


读函数程序清单:
  1. /********************************************************************
  2. * 描  述 : LCD12864液晶模块从当前地址读RAM数据。
  3. * 参  数 : 无
  4. * 返回值 : Dat:读取的数据
  5. ********************************************************************/
  6. uchar ReadDat(void)
  7. {
  8.     uchar Dat;
  9.   
  10.     P2 = 0xff;
  11.     Busy();         //判忙
  12.    
  13.     RW = 1;RS = 1; //读
  14.     E = 1;          //使能液晶模块.0=关闭使能端,1=打开使能端
  15.     Dat=P2;         //保存读取的数据
  16.     delay(1);
  17.     E = 0;          //关闭液晶模块使能端.0=关闭使能端,1=打开使能端      

  18.   return Dat;
  19. }
复制代码

写命令函数程序清单:

  1. /***************************************************************************
  2. * 描  述 : LCD12864液晶命令写入
  3. * 参  数 : cmd[in]:写入的命令
  4. * 返回值 : 无
  5. **************************************************************************/
  6. void Write_Cmd(uchar cmd)
  7. {      
  8.     Busy();       //判忙
  9.       
  10.     RW=0; RS=0;   //写指令                 
  11.     P2M1 = 0;     
  12.     P2M0 = 0xff; //设置P2.0~P2.7为推挽输出
  13.     P2=cmd;       //写入命令
  14.    
  15.     E=1;          //使能液晶模块.0=关闭使能端,1=打开使能端
  16.     delay(1);  
  17.     E=0;          //关闭液晶模块使能端.0=关闭使能端,1=打开使能端     
  18. }
复制代码

写数据函数程序清单:
  1. /***************************************************************************
  2. * 描  述 : LCD12864液晶数据写入
  3. * 参  数 : dat[in]:写入的数据
  4. * 返回值 : 无
  5. **************************************************************************/
  6. void Write_Data(uchar dat)
  7. {   
  8.     Busy();        //判忙              
  9.     RW=0;RS=1;    //写数据   
  10.             
  11.     P2M1 = 0;   
  12.     P2M0 = 0xff;  //设置P2.0~P2.7为推挽输出   
  13.     P2=dat;       //写入数据
  14.   
  15.     E =1;         //使能液晶模块
  16.     delay(1);     
  17.     E =0;         //关闭液晶模块使能端
  18. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

Copyright © 合肥艾克姆电子科技有限公司
快速回复 返回顶部 返回列表