你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

240*128液晶屏幕显示的驱动程序在STM32F103的移植

[复制链接]
mengyu139 发布时间:2015-1-5 19:28
240*128液晶屏幕显示的驱动程序在STM32F103的移植
首先,发此贴的原因是,这个液晶屏幕我花了3天的时间才算是完成简单的功能要求(实际上,我做的东西也只需要相对简单的显示,相信多数人也是这样),没有GUI,没有图片显示,只有文字和符号的显示,文字是16*16的,符号就是西文字符。把这个过程记录总结一下,相信自己以后还会用的到。
1. 移植准备
1.1看数据手册
我的屏幕是240*128的5V版本的显示屏幕,控制芯片是T6963,了解屏幕控制芯片的型号很重要,因为对屏幕的操作实际就是单片机与这个控制芯片的通信,对其进行读写,为不同的控制芯片读写时序,和功能都可能不一样。所以我们需要看一看6963的手册,下载连接下面会跟上,手册里主要看以下几点内容:读写时序要求,指令和数据的含义,操作方法,注意问题。
下面以读写时序的了解为例:
读写时序.JPG

0 _0 H* V" q& N( J8 |6 m* D
时序即控制引脚高低电平的顺序以及维持时间,以上图标,图形里,确定的几个控制引脚的变化顺序,表格里要求了每种变化需要维持的时间,主要是为了让单片机或者屏幕控制芯片反应过来。
首先,应了解C\D 是指令数据控制引脚, 置0,表示接下来的D0~D7是命令,置1,表示接下来的D0~D7是数据;
WR和RD是读写控制引脚,WR为0,表示接下来要写,RD为0,表示接下来要读取6963的内容,实际上,我只用到了写功能,那么应置WR为0,RD一直为1;
CE 表示片选引脚,为0,表示允许对屏幕进行操作,我一直使其为0,表示一直使能;
D0~D7 即为数据\指令总线,要发送的指令或者数据都通过这个传输过去。
下面挨个解释表格里的时间的含义:
(1)Tcds        是CD引脚和CE引脚的关系,即CD变化后,CE由0变为1(由使能到不使能)的时间,要求最小100ns,注意,由于我一直使CE为0,所以CE再也没有为1,那么这个Tcds即为无穷大;
(2)同理,Tcdh 也可以这样看,由于我把CE设为0不变,就不需要考虑这个时间,大于要求的最小时间。
(3)Tce,trd,twr  即为WR或者RD引脚由1变为0(使能读或者写操作)后,要维持的时间,这个时间要大于80ns,才能让6963反应过来。
(4)Tds        如果是对6963写数据,那么在WR引脚置0并维持大于80ns后,开始送数据,同样,这个数据也要维持一定时间不变,才能让6963真正识别出送过来的数据,大于80ns
(5)Tdh   即为写操作完成后,WR重新拉高,数据总线状态不能立即改变,可以理解为,写过一次数据后,不能立马写下一个数据,应该延迟一会,大于40ns
(6)Tacc        如果读取6963的数据,那么应该把RD线拉低,表示读使能,然后保持一段时间,6963识别出单片机要读6963的操作后,接着会把数据送到总线上让单片机读取,当然,这个识别出和送出数据之间会有延时,最大为150ns,即如果我们发送读操作后,最多等150ns后就可以把总线的数据读取进内存,也可以多延时一会,这样数据会稳定,再读取。
1.2这里只说了时序应该怎么理解,但是想要真正读写6963,还得满足读写格式要求,手册里面都有详细解释,下载附件后仔细阅读就可以明白。这里提供几个偷懒的方法
(1)直接找一个确定可用的程序,看他的底层驱动函数,写数据,写指令,读数据函数是如何操作的,虽然不同单片机所需要的延时函数不一样,但是对引脚的操作顺序是一样的
找一个显示屏的用户手册阅读。        6963只是个驱动芯片,最终面向用户的是整个显示屏,所以阅读显示屏的用户手册,能更快地了解如果操作,下面会提供一个下载连接。

; s# o( i1 [& Z3 U; q6 E3 M" h6 D1 W- N2 }* z

% m% b0 \  V9 m3 @) o* O
赞 收藏 评论14 发布时间:2015-1-5 19:28

举报

14个回答
mengyu139 回答时间:2015-1-5 19:28:47
2.有了以上准备,就可以开始移植程序了% G( r% \& ?) P7 o
这里说移植,是因为有个同学以前用430写过相关程序,当然他是移植51的,现在我来把430的移植成STM32的,感觉好乱啊!
6 c, K" b3 ]3 x移植注意问题:
8 U1 t$ Q, u0 N(1)上面说了,如果一个驱动程序可用,那么不管是什么单片机下的程序,对引脚的控制顺序是一定的,关键是看操作是否满足以上时序要求。
; e) j6 @( A  r# J- S& k举个例子:51单片机下,把WR置0,然后送数据,那么这两个操作之间不需要额外的延时,因为51运行一个指令是1us,远大于要求的150ns;而换成430单片机后,时钟快了,可能需要加一些延时,满足时序要求,而换成了STM32这样72MHZ时钟的单片机,一条指令只需要1/72 us,不能满足150n的要求,所以需要额外插入一个延时函数,满足延时时间大于150ns,这是移植的关键所在。1 }4 ~4 T5 r$ i0 I- S0 R! M
总体来说,把握好延时满足时序,移植的难度应该不大
4 b# W+ ]- V: J& l! _2 Z3 N, e8 P! R5 G2 \" r
(2)下面是一个写一个字节的函数,可以发现,我加了2us的延时,这里要说明,时序图里面只是给了最小要求时间,就是说延时要大于要求的延时,至于大多少,由实际情况而定,我开始只是延时1us,发现屏幕不稳定,换成2us后,就稳定了,所以测试的时候,可以一开始加大延时
& ]$ s7 w* J) v8 o" p8 v" |( X& G1 |2 X5 \1 F
void LCD_Writedata(uint8_t dat) 5 X* y1 j2 X! @. V
{
9 q4 ]. R4 ~& D. M  LCD_TestStaBit01(); * i4 R3 P  x, n% m/ N  {3 A
  REST_CD;
6 f2 ?0 R* l$ @. X+ m. \  D9 Q  REST_WR;
( E3 V0 q9 V9 I) z% j        5 R4 w6 r: G/ A- B/ V% ]: D* n
//设置数据口为输出方向* v; O6 E' h5 v" Y4 f- A
//读取数据( 假设这里用PB0 - PB7 )
% m5 x0 P% s9 J% [% U: U  Dirout;; q2 Z. |0 r: c
  Dataout(dat);
1 G1 M/ j! ]1 Z1 F- U/ R4 Z6 l       
# @4 _& [$ ]2 ^' w, q  delay_us(2);
1 ~& N, `; Q! T2 f& W' G6 v" g+ l% s       
7 j; M% T* c% S4 F9 ^. A  SET_WR; 8 F) i& v0 m- Y# M$ |/ x
  SET_CD; ' S! D8 J* {# x; Q
  delay_us(2);5 Y* R; _5 z/ E3 J
}
+ b( y( a: U8 o9 }$ k+ v) e; y) H: @2 b9 F
3.下面,我会把我的整个工程发上来,这里稍微解释一下里面几个我认为有必要的函数
$ n/ {( {) G0 ]! V6 N* Z) c+ e(1)位带操作,对6963的操作实际上需要5个单独的引脚负责控制时序,和8个一组引脚负责读写数据总线,由于需要对单独的位进行操作,所以希望能有51里面的操作方式:P1^0=1;                P1^0=0;: J! y7 U% h1 @# L4 j# s
在STM32里面可以通过位带操作实现,原子STM32里面讲解地很详细,这里不再叙述,有兴趣的去看一下就行。
9 a' o- H1 M9 I+ b* U( p: m
6 c, O! l9 F6 A(2)对GPIO口读写数据+ D) N! G: T$ P, {, a
库函数提供了读写端口的函数,但是这个数据端口一会要做输出,给6963数据,一会又要做输入,从6963读取数据,如果用库函数来配置,效率会很低,这里可以直接控制寄存器,具体见工程文件里面的实现
0 i3 x0 I" H( L9 P' y: V6 D& ^* j! R; }& A
9 O, z  P$ J' Z$ O, h2 ~
, ~2 o2 c# v9 {0 w
* Z1 Y. y: e0 T; O- y4 N

$ r0 H' r5 z( D4.用CGRAM实现文字输出
3 `. U) D; u' J& E3 i% H240*128的显示屏很大,足以显示很多16*16的文字,对于西文字符,如同1602一样,可以直接调用内部字符库,显示,对于汉字,就得把汉字通过取模软件编程编码,再进行输出显示。' Y3 j& v; e. Z1 Y. _- ~
显示汉字有两种方式,图片形式显示,或者文本形式显示9 B8 U" z; T0 s& u7 F! s
图片显示形式,网上有很多教程,取模后送入显示程序,采用这种方式,显示的区域就得设置成图片显示形式
1 o$ N$ ^: }2 u4 A+ O! V' c; e( u/ Q4 i4 P
我采用CGRAM文本显示文字的形式,这样显示的汉字是文本形式,可以和内部的西文字符在同一个区域显示,更方便。
1 S0 j4 W8 X, A8 Y8 S% xCGRAM即分配6963内部RAM的一部分作为字符存储区,需要显示的时候读取相应的RAM,进行显示,具体的操作方法和理论计算下面会放出我查阅的资料,很有用。
% @  t: |6 r* S0 g- @& ?3 @
7 g; g3 O" f5 a0 P# M# g+ N6 r5.后记9 Q8 U2 G0 @" Z9 e, q/ _" y* v/ f% Z
我也只是简单地使用了这个显示屏,还有更多的功能没有开发,不过,显示汉字和字符是最关键的功能,至于其他的,只能有时间再探讨了。
mengyu139 回答时间:2015-1-5 19:29:31
T6963C中文数据手册完整版(免费共享).pdf (1.37 MB, 下载次数: 50)
mengyu139 回答时间:2015-1-5 19:29:50
240128液晶显示模块使用手册[1].pdf.pdf (377.05 KB, 下载次数: 23)
mengyu139 回答时间:2015-1-5 19:30:26
PCtoLCD2002完美版_汉字字模生成软件.rar (702.54 KB, 下载次数: 19)
mengyu139 回答时间:2015-1-5 19:32:08
程序参考了很多人的,野火的,原子的。。。谢谢他们的帮助

自己写6963.rar

下载

1.45 MB, 下载次数: 85

mengyu139 回答时间:2015-1-5 19:32:55
基于T6963C的LCD实时数据显示系统设计与仿真.pdf (400.2 KB, 下载次数: 26)
mengyu139 回答时间:2015-1-5 19:34:33
一些参考资料,看起来可能方便一些。- \- v0 {& _  }/ w0 T" J

关于LCD控制器T6963C应用的几个问题.rar

下载

24.18 KB, 下载次数: 17

mengyu139 回答时间:2015-1-5 19:35:09
t6963c液晶显示驱动控制器.pdf (550.01 KB, 下载次数: 15)
mengyu139 回答时间:2015-1-5 20:12:41
1.jpg
zmh169 回答时间:2018-12-6 14:30:19
准备用的160128也是T6963C驱动的,可以参考一下
精益大爱 回答时间:2018-12-7 11:48:59
很有用的资料,广告分享。
karose 回答时间:2019-4-22 17:01:31
很有用的资料
西点钟灵毓秀 回答时间:2019-4-23 12:37:44
支持。非常不错
littlekoalo 回答时间:2020-10-1 11:27:56
挺好,谢谢。

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版