Gorgon_Meducer 发表于 2006-2-16 21:35:44

[古董贴][范例]使用级联595驱动的LCD12864 —— 595驱动LCD1602的姊妹篇

在上一次成功使用 单个 595 驱动了1602以后,使用 级联 595 驱动 LCD12864的想法自然就浮出水面了。

参考了网友的 LCD12864驱动以后,我们编写了一个支持位操作、普通端口操作、并行操作、串行操作等多种模式的12864驱动。

试验成功,不敢独享,上传共勉。



点击此处下载armok01102811.rar


-----此内容被Gorgon Meducer于2006-02-16,21:43:48编辑过

Gorgon_Meducer 发表于 2006-2-16 21:37:50

核心程序思想说明:

-----------------------------

1、这次使用了和上次一样SerialToCollateral.h的头文件。

2、编写了一个兼容位操作的LCD12864驱动,主要考虑到,很多人并不习惯使用位段方式作的位操作支持,所以这次使用宏定义的方法,把很多接口引了出来,提高的代码的适应性和复用性。



硬件连接说明:



595端:

VCC

SER       PD5

SRCLK   PD4

RCLK      PD3

GND



595虚拟端口连接方式



第一级595

   QA   RS

   QB   R/W

   QC   E

   QD   CS1

   QE   CS2

   QF   RST

   

   第二级595

   QA~QH 数据端口
-----此内容被Gorgon Meducer于2006-02-16,21:38:40编辑过

Gorgon_Meducer 发表于 2006-2-16 21:42:24

核心代码讲解:

-----------------------------------

# include "SerialToCollateral.h"



/*-----------------定义虚拟端口--------------------*/



# define LCD12864_RS            PV0

# define LCD12864_RW            PV1

# define LCD12864_E             PV2

# define LCD12864_CSA         PV3

# define LCD12864_CSB         PV4

# define LCD12864_RST         PV5



# define SETBIT_RS         LCD12864_RS = High;

# define CLRBIT_RS         LCD12864_RS = Low;

# define SETBIT_RW         LCD12864_RW = High;

# define CLRBIT_RW         LCD12864_RW = Low;

# define SETBIT_E          LCD12864_E= High;refreshVirtualPORT();

# define CLRBIT_E          LCD12864_E= Low;refreshVirtualPORT();

# define SETBIT_CS1      LCD12864_CSA = High;

# define CLRBIT_CS1      LCD12864_CSA = Low;

# define SETBIT_CS2      LCD12864_CSB = High;

# define CLRBIT_CS2      LCD12864_CSB = Low;

# define SETBIT_RST      LCD12864_RST = High;refreshVirtualPORT();

# define CLRBIT_RST      LCD12864_RST = Low;refreshVirtualPORT();



/*-----------------定义虚拟端口下的写数据方式------------------*/

# define LCD12864_DataTransfer(a)VPORT &= 0x00ff;VPORT |= (a<<8); refreshVirtualPORT();         



/*------------------保持与并行模式兼容性的鸡肋宏定义--------------------*/

# define ReadDataPORT

# define SetDataPORTDirection_READ

# define SetDataPORTDirection_WRITE





/*---------说明驱动LCD12864不读取状态-----------*/

# define _LCD12864_WriteOnly                     



/*---------设置在只写状态下的延时等待周期---------*/   

# define LCD12864_WaitTime 1





# include "RD_LCD12864.h"

avrboy 发表于 2006-2-16 22:28:54

呵呵,樓主用595用上隱了!!

Gorgon_Meducer 发表于 2006-2-16 22:49:10

伤自尊了……

avrboy 发表于 2006-2-16 22:53:59

其實我也是用上了隱的

http://www.ouravr.com/bbs/bbs_upload3433344123780210/files_5/armok0192766.gif

avrboy 发表于 2006-2-16 22:58:12

還有這個

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=448564&bbs_page_no=1&bbs_id=1000

Gorgon_Meducer 发表于 2006-2-16 23:09:26

晕……原来我们一样哈。

onorg 发表于 2006-2-17 08:47:41

够详细。。支持。。。

xusp 发表于 2006-6-12 17:01:06

请问楼主,这个LCD12864的主芯片是T6963C的吗

Gorgon_Meducer 发表于 2006-6-12 23:51:27

没有注意看过,应该是吧

yxlcarter 发表于 2008-9-11 15:33:04

方法是不错,可是驱动一个1602加两个595,省了,4个IO口,成本没考虑吗?

kdtcf 发表于 2008-9-11 17:25:00

用595传输会不会减慢刷新速度,视觉上会不会受影响呢?

Gorgon_Meducer 发表于 2008-9-13 17:05:51

to 【12楼】 kdtcf 春风
    速度变慢是很明显的。在图像刷新速度要求不严格的场合可以使用。

linghu2 发表于 2011-5-9 15:15:51

用IO模拟SPI,速度肯定慢了!

pjn74a 发表于 2011-5-12 16:59:53

595传输线长了容易受到干扰

banye2010 发表于 2013-3-29 11:55:12

12864貌似本来就支持行的

sdyzxue 发表于 2013-4-1 10:14:19

谢谢分享,适用于端口紧张的情况下。{:victory:}

OYL 发表于 2013-4-23 09:22:15

其实12864不算VCC和GND只要两根线就可以驱动

YS126 发表于 2013-4-24 22:09:25

记号,留着以后找

jxchen 发表于 2019-3-15 23:50:37

棒棒棒~~~~~~~~~~~~~~~~
页: [1]
查看完整版本: [古董贴][范例]使用级联595驱动的LCD12864 —— 595驱动LCD1602的姊妹篇