单片机开发的正确姿势

说明:

最近在做单片机万年历的时候,由于需要用到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;        //取消片选
}

其他都是不变的,就是数据传输方式不同而已。

其实大部分情况都是这样,我们很难找到和我们情况一模一样的,但是能找到类似的,我们可以在此基础上进行改进,知道适合自己的情况,而这要求自己对单片机有很深入的理解。加油吧,经验是一点点积累的。

 

posted @ 2017-10-25 00:16  Andrew_qian  阅读(708)  评论(0编辑  收藏  举报