最近在做单片机万年历的时候,由于需要用到LCD-TFT液晶屏的驱动,就上网查资料,资料虽然查到了不少,但是很多都是关于在STM32上面使用的程序,由于对于频率的要求,估计大部分人都是使用32位单片机来驱动,还有就是很多资料和我使用的屏不是同一种型号,找了很久,就是没有找到一个能完美匹配我现状的资料。很是苦恼。不是屏型号不对头,就是单片机不对,还有就是同一种屏使用两种不同的设计,我的屏可能比较老的那种,我就是在一个箱子里面找到的,上电能亮 ,说明屏没有问题,剩下就是驱动的问题了。但是现在市面上都是这个屏的升级版,都是普遍采用SPI方式进行主从通信,也就需要4个IO口,但是我手里的这个屏呢。一共20个IO口,并行驱动,这就让我犯了难。不知道该怎么下手了。其实说白了还是对单片机没有理解透彻。不能举一反三。
在与TFT屏进行数据通信的时候,不同的单片机对驱动(ST7753B)写数据时,一次传输的数据是不同的。比如51系列的8位单片机,写入的时候一次只能写入8位位二进制数。所以一般并行通信都是8位的。后来我查找资料找到了一个基于8位单片的驱动,但是他是串行通信,刚开始我还有点犹豫,不行啊,这个和我的情况还是不一样啊。后来实在没有办法了,想着能不能试一下把这个串行改为并行通信呢?不就是讲多次单位发送写成并行发送吗?抱着试试看的态度,我写了自己的驱动。。。。。。。。。。恩恩。。。没想到,最后竟然成功了。
多写写底层的驱动还是有好处的,能加深对单片机的认识。
原代码是这样的:
void write_command(uchar c)
{
cs=0; //片选有效
rs=0; //选择命令寄存器
bitdata=c;//送数据
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;//片选无效
改过之后:
//************写命令********
void write_cmd(uchar cmd){ //8位二进制数
CS = 0; //片选,低电平有效
RS = 0;
DATA = cmd;
RW = 0;
RW = 1;
CS = 1; //取消片选
}
其他都是不变的,就是数据传输方式不同而已。
其实大部分情况都是这样,我们很难找到和我们情况一模一样的,但是能找到类似的,我们可以在此基础上进行改进,知道适合自己的情况,而这要求自己对单片机有很深入的理解。加油吧,经验是一点点积累的。
相关文章