超小笔记本电脑:ST7920应用经验1:如何从ST7920里读取数据?

来源:百度文库 编辑:九乡新闻网 时间:2024/03/29 18:11:11
ST7920应用经验1:如何从ST7920里读取数据?

ST7920应用经验1:如何从ST7920里读取数据?

ST7920是一款带中文字库的点阵液晶图形液晶驱动芯片,市场有很多用此控制器成产液晶模块。我有手头就有一款型号为TS12864的液晶模块,其特点是带中文字库,显示中文汉字比较方便,另外还有3线串行驱动模式可以用于管脚少的场合。
既然是图形液晶我们就会用他的绘图功能,有时候为了不破坏原有图形(在现有图形上叠加),这个时候就需要读出原有图形数据然后加工后再次写入。官方手册上对读数据写的不够详细,在网上搜索也找不到例程,使我坡费了一般周折,还好终于搞定!现在吧详细读数据方法和步骤呈上,希望能对大家有所帮助。

官方文档的读数据描述

官方文档并行读数据时序

下面是AVR M48 8M振荡频率下并行读数据的关键部分代码:

#define ST7920_DB_PORT    PORTD    //ST7920数据输入
#define ST7920_DB_PIN    PIND    //ST7920数据输出 
#define ST7920_DB_PORT_SET_OUT  DDRD = 0xFF;  //设置数据端口为输出
#define ST7920_DB_PORT_SET_IN  DDRD = 0x00;  //设置数据端口为输入
#define ST7920_ReadBF  (PIND&(1 << PIND7))  //读忙碌标志位
#define ST7920_RST_SET   PORTB |= (1 << PB0)  //复位置位
#define ST7920_RST_CLR   PORTB &= ~(1 << PB0)  //复位清零
#define ST7920_E_SET   PORTB |= (1 << PB1)  //读写使能置位
#define ST7920_E_CLR   PORTB &= ~(1 << PB1) //读写使能清零
#define ST7920_RW_SET   PORTB |= (1 << PB2)   //读写置位       
#define ST7920_RW_CLR   PORTB &= ~(1 << PB2)    //读写清零
#define ST7920_RS_SET   PORTB |= (1 << PB3)  //显示/命令置位
#define ST7920_RS_CLR   PORTB &= ~(1 << PB3) //显示/数据清零

************************************************************************
名称: unsigned char ST7920_ReadData(void)                  
功能: 从ST7920读数据                   
参数: 无                                      
返回: uchRevData 读取的一字节数据                
************************************************************************  
*/
unsigned char ST7920_ReadData(void)
 {
  unsigned char uchRevData;
  ST7920_CheckBusy();                     //忙碌检测 
  ST7920_DB_PORT = 0xFF;           //打开上拉电阻
  ST7920_DB_PORT_SET_IN;        //设置为输入 
  ST7920_RS_SET;
  ST7920_RW_SET;
  ST7920_E_SET;
  asm("nop"::);
  asm("nop"::);
  uchRevData =  ST7920_DB_PIN;
  ST7920_E_CLR;
  return uchRevData;
 }
/*
************************************************************************   
名称: unsigned int ST7920_ReadGDRAMData(unsigned char uchX ,
          unsigned char uchY)                   
功能: 从GDRAM指定地址读取两字节数据                                    
参数: uchX水平地址(0-127) uchY垂直地址(0-63)                                                                       
返回: 读取两字节数据                                                
************************************************************************                       
*/
unsigned int ST7920_ReadGDRAMData(unsigned char uchX ,unsigned char uchY)
 {
  unsigned int uiReadData = 0;
  ST7920_GDRAMLocate(uchX, uchY);          //设定GDRAM地址
  ST7920_ReadData();                                     //先预读一次
  uiReadData = ST7920_ReadData();               //读设定地址高字节数据
  uiReadData = uiReadData << 8 | ST7920_ReadData();          //读设定地址低字节数据
  ST7920_WriteCMD(0x36);          
  ST7920_WriteCMD(0x30);
  return uiReadData;  
 } 

注意:1.在设定好要读的地址后,要先空读一次,然后才能依次读出两个字节的数据。

      2.7920串行模式的数据传输方向是单向,顾不能串行读取数据

 

中文图形显示控制芯片ST7920中文资料