搜索
bottom↓
回复: 9

[原创]怎样从ST7920里读数据

[复制链接]

出0入0汤圆

发表于 2007-8-23 17:15:00 | 显示全部楼层 |阅读模式
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;  

}



注意:在设定好要读的地址后,要先空读一次,然后才能依次读出两个字节的数据。如果还有不明白的地方可以QQ交流。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2007-8-23 23:21:08 | 显示全部楼层
楼主再弄个串行读的吧,并行线太多。

出0入0汤圆

发表于 2007-8-23 23:50:08 | 显示全部楼层
做个记号。

出0入0汤圆

发表于 2007-8-24 01:49:51 | 显示全部楼层
ST7920不能串行读出!

出0入0汤圆

发表于 2008-6-14 08:15:22 | 显示全部楼层
并行我也没有搞成功

出0入0汤圆

发表于 2010-5-12 15:37:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-2 20:14:41 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-1-2 20:44:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-30 19:52:59 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 22:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表