您的位置 首页 IC

74hc595+4根IO口线驱动1602,带PWM调光

呵呵,不用我说你们也知道为什么只需要4根线:因为咱用了74hc595啊!因为74HC595最近我手里一抓一大把。但是STC的单片机IO口紧缺。就

呵呵,不必我说你们也知道为什么只需求4根线:由于咱用了74hc595啊!由于74HC595最近我手里一抓一大把。可是STC的单片机IO口紧缺。就算运用4线驱动形式也要8个IO(还要算上背光PWM)。这一次我简直做到了他的一半。假如不必PWM的话。大约只需求3个IO,假如需求PWM就四个罗。

MCU当然是老掉牙的死特惨89C52罗~

也能够在595后边级联相似三极管开关……继电器之类的玩意。当然友谊提示,别超越4个595.不然速度会慢的可怕。我现在1个595.写1602都能够丢掉延时函数了。
这一次硬件规划的比较简单,可是IO全反了。所以需求占用额定的CPU时刻批改,可是究竟便利洞洞板嘛。还有我们别看到我给A和B赋了好几次值而去“优化”代码。假如您“优化”的话,那么就底子驱动不起来,由于51的加法减法乘除都要通过ACC和B,假如不去从头赋值的话,那么就会产生改动的现象。不过我这种位寻址软件批改可比那种xx=xx & xx的效率高多了。假如我这么写的话。恐怕刷一个屏幕没1秒下不来啊。12T的51就这个速度……
不过这一次焊板子实在是太仓促了。对比度电位器焊在液晶下面,成果初始化成功了显现两排方块。晕了半响。调试半响仍是没用。后来捅了一下反面就好了……晕……!
上代码:

#include //STC89C52//串行驱动1602,powered by 595#define LCD1602_BACKLIGHT        P1_3//背光#define LCD1602_SDA                        P1_0//数据输入#define LCD1602_SCK                        P1_1//移位时钟,SHCP,11pin#define LCD1602_SCL                        P1_2//锁存时钟,STCP,12pin/** 硬件衔接:* 74HC595 Q7 - 1602 RS* GND - 1602 RW(595没有输入功用,所以断定忙只能*延时,别的便是MCU的速度比较的慢。所以也能够直接去掉延时。可是在STC12系列上的体现,适当的不错* 在传统51上面。PWM占空比低于50%将会呈现扫描线。12系列的,很快乐的告知我们。T0X12开了今后。不会有扫描线呈现。可是假如必定要在传统51上运用的话,请把10级调光改成4级。谢谢合作!* 74HC595 Q6 - 1602 EN* 74HC595 Q5~Q2 - 1602 D5~D7(这一次硬件规划不合理,才只能搞软件批改了。不过优点便是直接就能够洞洞板上对着联,减少了烧坏595的概率。害处便是CPU时刻耗费的多了点。可是能够撤销延时函数啦~* 1602 D1~D4 直接悬空* LCD_BACKLIGHT加一级PNP三极管射随器加到液晶的A上,假如无需调光能够去掉这一部分电路和代码* 至于595的衔接,只要不弄反SCL和SCK,就没有问题啦~*/__sbit  __at  0xE0 A_0;//便利位操作,硬件设置真的是败笔 - -__sbit  __at  0xE1 A_1;__sbit  __at  0xE2 A_2;__sbit  __at  0xE3 A_3;__sbit  __at  0xE4 A_4;__sbit  __at  0xE5 A_5;__sbit  __at  0xE6 A_6;__sbit  __at  0xE7 A_7;__sbit  __at  0xF1 B_1;__sbit  __at  0xF2 B_2;__sbit  __at  0xF3 B_3;__sbit  __at  0xF4 B_4;__sbit  __at  0xF5 B_5;__sbit  __at  0xF6 B_6;__sbit  __at  0xF7 B_7;unsigned char PWM_Cycle=0;//PWM占空比unsigned char PWM_T=0;//PWM当时所在周期unsigned char OutBuf=0xff;//输出缓冲#define        LCD_OFF         lcd_wcmd(0x08)#define        LCD_CUR         lcd_wcmd(0x0E)#define        LCD_FCUR       lcd_wcmd(0x0F)void delay(unsigned int n){unsigned int x,y;for(x=n;x>0;x--)for(y=100;y>0;y--);}void Send595(){unsigned char i,j;j=0x80;LCD1602_SCK=0;for(i=0;i<8;i++){LCD1602_SDA=OutBuf & j;j=j>>1;LCD1602_SCK=1;LCD1602_SCK=0;}LCD1602_SDA=1;LCD1602_SCL=0;LCD1602_SCL=1;}void lcd_en(){//OutBuf=OutBuf|0x40;//E=1B=OutBuf;B_6=1;OutBuf=B;Send595();//输出数据B=OutBuf;B_6=0;OutBuf=B;//E=0Send595();}/**********************************************************/void lcd_wcmd(unsigned char i){//写指令B=OutBuf;B_7=0;//RS=0,RW=0;OutBuf=B;Send595();//--------------B=OutBuf;ACC=i;B_2=A_7;//D7=D7B_3=A_6;//D6=D6B_4=A_5;//D5=D5B_5=A_4;//D4=D4OutBuf=B;Send595();lcd_en();//================ACC=i;B=OutBuf;B_2=A_3;//D7=D3B_3=A_2;//D6=D2B_4=A_1;//D5=D1B_5=A_0;//D4=D0OutBuf=B;        Send595();lcd_en();}void lcd_wdat(unsigned char i){//写数据B=OutBuf;B_7=1;//RS=0,RW=0;OutBuf=B;Send595();//--------------B=OutBuf;ACC=i;B_2=A_7;//D7=D7B_3=A_6;//D6=D6B_4=A_5;//D5=D5B_5=A_4;//D4=D4OutBuf=B;Send595();lcd_en();//================ACC=i;B=OutBuf;B_2=A_3;//D7=D3B_3=A_2;//D6=D2B_4=A_1;//D5=D1B_5=A_0;//D4=D0OutBuf=B;        Send595();lcd_en();}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/255394.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部