zoukankan      html  css  js  c++  java
  • 单片机开发的正确姿势

    说明:

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

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

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

  • 相关阅读:
    [bzoj3038/3211]上帝造题的七分钟2/花神游历各国_线段树
    [bzoj1002][FJOI2007]轮状病毒_递推_高精度
    UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)
    UNIX环境高级编程——线程与进程区别
    UNIX环境高级编程——死锁
    UNIX环境高级编程——线程同步之条件变量以及属性
    UNIX环境高级编程——线程同步之读写锁以及属性
    UNIX环境高级编程——线程同步之互斥量
    UNIX环境高级编程——pthread_create的问题
    UNIX环境高级编程——主线程与子线程的退出关系
  • 原文地址:https://www.cnblogs.com/qsyll0916/p/7726589.html
Copyright © 2011-2022 走看看