注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
mengyu139的个人空间 https://home.eeworld.com.cn/space-uid-512405.html [收藏] [复制] [分享] [RSS]
日志

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

已有 1761 次阅读2015-1-5 22:12


首先,发此贴的原因是,这个液晶屏幕我花了3天的时间才算是完成简单的功能要求(实际上,我做的东西也只需要相对简单的显示,相信多数人也是这样),没有GUI,没有图片显示,只有文字和符号的显示,文字是16*16的,符号就是西文字符。把这个过程记录总结一下,相信自己以后还会用的到。
1. 移植准备
1.1看数据手册
我的屏幕是240*1285V版本的显示屏幕,控制芯片是T6963,了解屏幕控制芯片的型号很重要,因为对屏幕的操作实际就是单片机与这个控制芯片的通信,对其进行读写,为不同的控制芯片读写时序,和功能都可能不一样。所以我们需要看一看6963的手册,下载连接下面会跟上,手册里主要看以下几点内容:读写时序要求,指令和数据的含义,操作方法,注意问题。
下面以读写时序的了解为例:
时序即控制引脚高低电平的顺序以及维持时间,以上图标,图形里,确定的几个控制引脚的变化顺序,表格里要求了每种变化需要维持的时间,主要是为了让单片机或者屏幕控制芯片反应过来。
首先,应了解C\D 是指令数据控制引脚, 置0,表示接下来的D0~D7是命令,置1,表示接下来的D0~D7是数据;
WRRD是读写控制引脚,WR0,表示接下来要写,RD0,表示接下来要读取6963的内容,实际上,我只用到了写功能,那么应置WR0RD一直为1
CE 表示片选引脚,为0,表示允许对屏幕进行操作,我一直使其为0,表示一直使能;
D0~D7 即为数据\指令总线,要发送的指令或者数据都通过这个传输过去。
下面挨个解释表格里的时间的含义:
(1)Tcds        是CD引脚和CE引脚的关系,即CD变化后,CE0变为1(由使能到不使能)的时间,要求最小100ns,注意,由于我一直使CE0,所以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)直接找一个确定可用的程序,看他的底层驱动函数,写数据,写指令,读数据函数是如何操作的,虽然不同单片机所需要的延时函数不一样,但是对引脚的操作顺序是一样的
(2)找一个显示屏的用户手册阅读。        6963只是个驱动芯片,最终面向用户的是整个显示屏,所以阅读显示屏的用户手册,能更快地了解如果操作,下面会提供一个下载连接。
2.有了以上准备,就可以开始移植程序了
这里说移植,是因为有个同学以前用430写过相关程序,当然他是移植51的,现在我来把430的移植成STM32的,感觉好乱啊!
移植注意问题:
(1)上面说了,如果一个驱动程序可用,那么不管是什么单片机下的程序,对引脚的控制顺序是一定的,关键是看操作是否满足以上时序要求。
举个例子:51单片机下,把WR0,然后送数据,那么这两个操作之间不需要额外的延时,因为51运行一个指令是1us,远大于要求的150ns;而换成430单片机后,时钟快了,可能需要加一些延时,满足时序要求,而换成了STM32这样72MHZ时钟的单片机,一条指令只需要1/72 us,不能满足150n的要求,所以需要额外插入一个延时函数,满足延时时间大于150ns,这是移植的关键所在。
总体来说,把握好延时满足时序,移植的难度应该不大
2)下面是一个写一个字节的函数,可以发现,我加了2us的延时,这里要说明,时序图里面只是给了最小要求时间,就是说延时要大于要求的延时,至于大多少,由实际情况而定,我开始只是延时1us,发现屏幕不稳定,换成2us后,就稳定了,所以测试的时候,可以一开始加大延时
void LCD_Writedata(uint8_t dat)
{
  LCD_TestStaBit01();
  REST_CD;
  REST_WR;
       
//设置数据口为输出方向
//读取数据( 假设这里用PB0 - PB7 )
  Dirout;
  Dataout(dat);
       
  delay_us(2);
       
  SET_WR;
  SET_CD;
  delay_us(2;
}
3.下面,我会把我的整个工程发上来,这里稍微解释一下里面几个我认为有必要的函数
(1)位带操作,对6963的操作实际上需要5个单独的引脚负责控制时序,和8个一组引脚负责读写数据总线,由于需要对单独的位进行操作,所以希望能有51里面的操作方式:P1^0=1;                P1^0=0;
STM32里面可以通过位带操作实现,原子STM32里面讲解地很详细,这里不再叙述,有兴趣的去看一下就行。
(2)对GPIO口读写数据
库函数提供了读写端口的函数,但是这个数据端口一会要做输出,给6963数据,一会又要做输入,从6963读取数据,如果用库函数来配置,效率会很低,这里可以直接控制寄存器,具体见工程文件里面的实现
4.用CGRAM实现文字输出
240*128的显示屏很大,足以显示很多16*16的文字,对于西文字符,如同1602一样,可以直接调用内部字符库,显示,对于汉字,就得把汉字通过取模软件编程编码,再进行输出显示。
显示汉字有两种方式,图片形式显示,或者文本形式显示
图片显示形式,网上有很多教程,取模后送入显示程序,采用这种方式,显示的区域就得设置成图片显示形式
我采用CGRAM文本显示文字的形式,这样显示的汉字是文本形式,可以和内部的西文字符在同一个区域显示,更方便。
CGRAM即分配6963内部RAM的一部分作为字符存储区,需要显示的时候读取相应的RAM,进行显示,具体的操作方法和理论计算下面会放出我查阅的资料,很有用。
5.后记
我也只是简单地使用了这个显示屏,还有更多的功能没有开发,不过,显示汉字和字符是最关键的功能,至于其他的,只能有时间再探讨了。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章