8x8LED点阵驱动方法(74HC595的使用)

博主福利:100G+电子设计资料合集icon-default.png?t=N7T8https://dwz.date/fyQa

前几天学了点阵的显示,今天按自己的思路来总结一下。首先介绍一下点阵的显示原理。点阵的电路图和之前学过的矩阵按键的电路图是相似的。每个灯就相当于坐标图中的一个点,具有唯一独特的坐标位置,这样就可以通过引脚的信号来控制每个灯的关和开col管脚连接的是P0的八个引脚,row管脚连接的是595的八位并行输出端。

实验中采取的是逐列显示,通过P0控制八列每列逐列显示,其间通过595位移缓存器控制每列要亮的led灯。

74HC595是串入并出带有锁存功能移位寄存器.

如图:形象来说,14引脚是搬运工,11是进厂守门员,

12是出厂守门员,11出现上升沿时,从14引脚输入一位数据,一共重复八次12引脚上升沿时,

将之前进来的八位数据分别从1到7引脚输出

OE为使能端,低电平时使输出有效,所以实验的时候接GND就行

10为主复位,低电平时有效,实验时让它为高附74HC595真值表用笔对着点阵描摹的爱心,然后一列一列转成二进制码爱心点阵,亲测有效。

#include "reg51.h"            
#include<intrins.h>


typedef unsigned int u16;     
typedef unsigned char u8;


sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;


u8 ledduan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};
u8 ledwei[]={0x7f
,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

void delay(u16 i)
{
    while(i--);    
}


void Hc595SendByte(u8 dat)
{
    u8 a;
    SRCLK=0;
    RCLK=0;
    for(a=0;a<8;a++)
    {
        SER=dat>>7;
        dat<<=1;


        SRCLK=1;
        _nop_();
        _nop_();
        SRCLK=0;    
    }


    RCLK=1;
    _nop_();
    _nop_();
    RCLK=0;
}

void main()
{            
    u8 i;
    while(1)
    {
        P0=0x7f;
        for(i=0;i<8;i++)
        {
            P0=ledwei[i];          //位选
            Hc595SendByte(ledduan[i]);    //发送段选数据
            delay(100);           //延时
            Hc595SendByte(0x00);  //消隐
        }    
    }        
}


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值