LED及点阵,有原理图和595的驱动编程

1. 基本介绍
LED点阵
LED点阵是由发光二极管排列组成的显示器件,通常应用较多的是88点阵,然后通过多个88点阵组成不同分辨率的LED点阵显示屏,如4个88组成的1616点阵

8*8点阵由64个LED组成,每个LED是放置在行线和列线的交叉点上

,因此通过横纵坐标就可以实现对任何一个LED亮和灭。

74CH595芯片
74HC595芯片是串转并移位锁存器,即芯片通过一个IO口串行接收8bit的数据,然后将8bit数据转为并行输出的移位缓存器。
单片机可以只通过1个IO口串行的输出8bit数据,通过这个芯片转为并行的8bit数据,就可以控制led点阵中的8条阳极,此时在加一个相同的芯片控制阴极,就可以实现两个IO口控制8*8的led点阵,节省了IO口的数量。


QA~QH:并行数据输出,即将串行输入的数据通过8个引脚并行输出出去
SER:串行数据输入,芯片通过这个引脚逐位接收数据
SCK:移位寄存器时钟输入,芯片在每个SCK上升沿时,通过SER读取1bit数据
RCK:存储寄存器时钟输入,芯片在每个RCK上升沿时,将SER读取到的数据通过QA-QH并行端口输出
Q‘H:串行数据输出,在芯片中存满8位数据后,再输入数据时,就会将原来存的8bit数据通过该引脚逐位挤出去
^G:输出有效
^SCLR:低电平复位引脚
2. 电路原理图
16*16LED点阵

74HC595模块

由原理图可知,74HC595的C和D是直接与LED点阵的阴极连接在一起的,因此只要将LED点阵的阳极(J28、J34)与74HC595的A和B输出(J27、J32)连接在一起即可。同时将J24与单片机上的引脚连接。

3. 软件编程
单独显示

sbit SER = p1^0;
sbit SCK = p1^1;
sbit RCK = p1^2;

/*传入4个595模块的值*/
void SendLedData(u8 Neg9to16, u8 Neg1to8, u8 Pos9to16, u8 Pos1to8)
{
    int i = 0;
    SCK = 0;
    RCK = 0;
    /*第一个595芯片工作,数据为Negative 9-16引脚*/
    for(i = 0; i < 8; i++)
    {
        SER = Neg9to16 >> 7;    //数据最高位
        SCK = 0;
        SCK = 1;                //制造上升沿读取数据
        Neg9to16 = Neg9to16 << 1;//移到下一位
    }
    for(i = 0; i < 8; i++)
    {
        SER = Neg1to8>> 7;
        SCK = 0;
        SCK = 1;
        Neg1to8 = Neg1to8<< 1;
    }
    /*第三个595芯片工作,数据为Positive9-16引脚*/
    for(i = 0; i < 8; i++)
    {
        SER = Pos9to16>> 7;
        SCK = 0;
        SCK = 1;
        Pos9to16= Pos9to16<< 1;
    }
    for(i = 0; i < 8; i++)
    {
        SER = Pos1to8>> 7;
        SCK = 0;
        SCK = 1;
        Pos1to8= Pos1to8<< 1;
    }

    RCK = 0;            //制造上升沿,595芯片并行输出
    RCK = 1;
}

void main()
{
    SendLedData(0x00, 0x00, 0x00, 0x01);    //只亮第一行
    SendLedData(0xff, 0xfe, 0xff, 0xff);    //只亮第一列
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
字模显示

/*“姜”字横向取模*/
u8 colData[] = {
    0x10,0x04,0x20,0x02,0xFE,0x3F,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFF,0x7F,0x40,0x00,
    0x20,0x00,0xFF,0x7F,0x10,0x04,0x08,0x04,0x38,0x02,0xC0,0x01,0x30,0x0E,0x0E,0x10,
};
u8 rowData[32] = 
{
     0x01,0x00, 0x02,0x00, 0x04,0x00, 0x08,0x00, 
     0x10,0x00, 0x20,0x00, 0x40,0x00, 0x80,0x00, 
     0x00,0x01, 0x00,0x02, 0x00,0x04, 0x00,0x08, 
     0x00,0x10, 0x00,0x20, 0x00,0x40, 0x00,0x80,  
};
sbit SER = P3^4;
sbit RCK = P3^5;
sbit SCK = P3^6;

void sendLedData(u8 n1, u8 n0, u8 p1, u8 p0)
{
    int i;
    RCK = 0;
    SCK = 0;
    for(i = 0; i < 8; i++)
    {
        SER = n1>>7;
        SCK = 0;
        SCK = 1;
        n1= n1 << 1;
    }        
    for(i = 0; i < 8; i++)
    {
        SER = n0>>7;
        SCK = 0;
        SCK = 1;
        n0= n0 << 1;
    }            
    for(i = 0; i < 8; i++)
    {
        SER = p1>>7;
        SCK = 0;
        SCK = 1;
        p1= p1 << 1;
    }            
    for(i = 0; i < 8; i++)
    {
        SER =p0>>7;
        SCK = 0;
        SCK = 1;
        p0= p0 << 1;
    }
          RCK = 0;
        RCK = 1;
}

void displayLedData(u8 row[], u8 col[])
{
    int i;
    //按行显示,共显示16行
    for(i = 0; i < 16; i++)
    {
        sendLedData(~colData[2*i+1], ~colData[2*i], rowData[2*i+1], rowData[2*i]);    
    }
}

void main(void)      
{
    displayLedData(rowData, colData);    
}        

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_45093118/article/details/128420479

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值