技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶

此内容有一定的深度,初学者不建议看。

最近一直在研究数码管驱动芯片 74HC595 ,发现一件很好玩的事情,那就是

用74HC595做驱动调试程序时,发现它只能输出,不能输入。

查找大量资料,从某个网友制作的mylib.c(NES)中获得了一条指令:

#define bin(_a,_b,_c,_d,_e,_f,_g,_h) ((_a)<<7|(_b)<<6|(_c)<<5|(_d)<<4|(_e)<<3|(_f)<<2|(_g)<<1|(_h))

分别是8 7 6 5 4 3 2 1位

我就想既然情况是这样的,那么能不能完全用74595来控制整个1602呢?于是…就有个下面这个有趣的过程了

废话不多说,先上电路系统仿真图

技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶_第1张图片

STC单片机 型号stc89c52系列
技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶_第2张图片
实物效果图
技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶_第3张图片
技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶_第4张图片
技术研究:使用单片机3个IO口+74HC595驱动驱动控制LCD1602液晶_第5张图片
单片机C语言参考源代码如下:

#include

#include “lcd595.ini”

const uchar type_t[]={

0x1f,0x02,0x02,0x02,

    0x02,0x02,0x02,0x00

};

const uchar line1[]=“Have a nice day!”;

const uchar line2[]=“HE Wcommands”;

void main()

{

    uchar i;

    LcdInit();

    LcdWriteCGRAM(0x00,type_t);

    LcdWriteData(0x00);

    LcdWriteCom(0x81);

    LcdPrintf("HE With");

    LcdWriteCom(0xc0);

    LcdPrintf("Commands");

    Lcd1602_Delay1ms(1000);

    LcdWriteCom(0x01);

    while(1){

            for(i=0;i<16;i++){

                    LcdWriteCom(0x80+i);

                    LcdWriteData(line1[i]);

                    Lcd1602_Delay1ms(100);

            }

            Lcd1602_Delay1ms(500);

            LcdWriteCom(0xc1);

            LcdWriteData(0x00);

            Lcd1602_Delay1ms(100);

            for(i=0;i<12;i++){

                    LcdWriteCom(0xc2+i);

                    LcdWriteData(line2[i]);

                    Lcd1602_Delay1ms(100);

            }

            LcdWriteCom(0x01);

            Lcd1602_Delay1ms(100);

……………………

鉴于篇幅原因,只能写部分参考代码。

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 程序完整源代码和 设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

你可能感兴趣的:(单片机,编程,仿真)