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交流。
发布
十分感谢
我看说明书 读取了一个礼拜的数据 还是没有读取出来 十分郁闷
原来要空读一次
7920串行模式的数据传输方向是单向,顾不能读取数据,不要再此浪费时间了,更何况7920的绘图很麻烦!
串行我没试过,但我的好多网友都说串行不能读数据!
用户1447181 2009-7-31 00:20
用户216996 2009-7-22 21:07
用户1381877 2009-4-20 14:01
用户1129670 2008-1-3 21:17
十分感谢
我看说明书 读取了一个礼拜的数据 还是没有读取出来 十分郁闷
原来要空读一次
用户1079511 2007-9-29 16:28
7920串行模式的数据传输方向是单向,顾不能读取数据,不要再此浪费时间了,更何况7920的绘图很麻烦!
用户1079511 2007-8-30 17:40
串行我没试过,但我的好多网友都说串行不能读数据!
用户1327242 2007-8-30 10:54