当前位置:   article > 正文

51-LED点阵屏_hc595驱动led点阵

hc595驱动led点阵

1.LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字,图片,视频等。

点阵屏的驱动关键:移位寄存器74HC595;

可位寻址:可以对寄存器中的某一位进行定义;例如:ET1=1;

不可位寻址:不能对寄存器中的某一位进行单独的定义,不可以控制其中某一位,不能对其中的一位进行定义;例如TMOD=0x80;

2. 74HC595原理图:

主要的三个控制接口是RCLK、SRCLK、SER;

---信号给到SER,SER接收信号,上升沿SERCLK高电位移位,每接收一个就向下移位一次,接收完置0;接收之前一定要定义初始值0电位;上升沿RCLK高电位1向右移位锁存,锁存完以后置0;接收之前也要定义初始值0电位;

  1. #include <REGX52.H>
  2. sbit RCK=P3^5;
  3. sbit SCK=P3^6;
  4. sbit SER=P3^4;
  5. void _74HC595_writebyte(unsigned char byte)
  6. {
  7. unsigned char i;
  8. for(i=0;i<8;i++)
  9. {
  10. SER=byte&(0x80>>i);
  11. SCK=1;
  12. SCK=0;
  13. }
  14. RCK=1;
  15. RCK=0;
  16. }
  17. void main()
  18. {
  19. SCK=0;
  20. RCK=0;
  21. _74HC595_writebyte(0xAA);
  22. while(1)
  23. {
  24. }
  25. }

3.  LED点阵屏---显示笑脸

sbit是重新定义的意思;库里面已经有的定义,在此基础上从新定义;例如;PCLK是库里的函数,在此定义为PCK;p3^5=P35;

首先:定义一列的情况:定义参数Byte;定义i;for循环,Byte&0x80是把0x80的最高位拿出来;移位代表分别拿出每一位;然后按照寄存器的性质进行设定;

最后定义列和每列的情况;高电位1亮灯;

SER=byte&(0x80>>i);是把一列的8个位置情况分别调出来,&--会把高电位1的那一个位置传给SER;

  1. #include <REGX52.H>
  2. #include <Delay.h>
  3. sbit RCK=P3^5;
  4. sbit SCK=P3^6;
  5. sbit SER=P3^4;
  6. void _74HC595_writebyte(unsigned char byte)
  7. {
  8. unsigned char i;
  9. for(i=0;i<8;i++)
  10. {
  11. SER=byte&(0x80>>i);
  12. SCK=1;
  13. SCK=0;
  14. }
  15. RCK=1;
  16. RCK=0;
  17. }
  18. void MatrixLED_ShowColomn(unsigned char Colomn,Date)
  19. {
  20. _74HC595_writebyte(Date);
  21. P0=~(0x80>>Colomn);
  22. Delay(1);
  23. P0=0xFF;
  24. }
  25. void main()
  26. {
  27. SCK=0;
  28. RCK=0;
  29. while(1)
  30. {
  31. MatrixLED_ShowColomn(0,0x3C);
  32. MatrixLED_ShowColomn(1,0x42);
  33. MatrixLED_ShowColomn(2,0xA9);
  34. MatrixLED_ShowColomn(3,0x85);
  35. MatrixLED_ShowColomn(4,0x85);
  36. MatrixLED_ShowColomn(5,0xA9);
  37. MatrixLED_ShowColomn(6,0x42);
  38. MatrixLED_ShowColomn(7,0x3C);
  39. }
  40. }

4.LED点阵屏显示动画:

main.c

  1. #include <REGX52.H>
  2. #include <Delay.h>
  3. #include <matri.h>
  4. unsigned char Animation[]=
  5. {
  6. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  7. 0xFF,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,
  8. 0x15,0x15,0x08,0x00,0x7E,0x01,0x02,0x00,
  9. 0x7E,0x01,0x02,0x00,0x0E,0x11,0x11,0x0E,
  10. 0x00,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,
  11. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  12. };
  13. void main()
  14. {
  15. unsigned char i,count=0,offset=0;
  16. matri_Init();
  17. while(1)
  18. {
  19. for(i=0;i<8;i++)
  20. {
  21. MatrixLED_showColomn(i,Animation[i+offset]);
  22. }
  23. count++;
  24. if(count>10)
  25. {
  26. count=0;
  27. offset++;
  28. if(offset>40)
  29. offset=0;
  30. }
  31. }
  32. }

Delay.c

  1. #include <REGX52.H>
  2. void Delay(unsigned int xms)
  3. {
  4. unsigned char i,j;
  5. while(xms)
  6. {
  7. i=2;
  8. j=256;
  9. do
  10. {
  11. while(--j);
  12. }
  13. while(--i);
  14. xms--;
  15. }
  16. }

Delay.h

  1. #ifndef _DELAY__H_
  2. #define _DELAY__H_
  3. void Delay(unsigned int xms);
  4. #endif

matri.c

  1. #include <REGX52.H>
  2. #include <Delay.h>
  3. sbit RCK=P3^5;
  4. sbit SCK=P3^6;
  5. sbit SER=P3^4;
  6. void _74HC595_writebyte(unsigned char byte)
  7. {
  8. unsigned char i;
  9. for(i=0;i<8;i++)
  10. {
  11. SER=byte&(0x80>>i);
  12. SCK=1;
  13. SCK=0;
  14. }
  15. RCK=1;
  16. RCK=0;
  17. }
  18. void matri_Init()
  19. {
  20. SCK=0;
  21. RCK=0;
  22. }
  23. void MatrixLED_showColomn(unsigned char colomn,Date)
  24. {
  25. _74HC595_writebyte(Date);
  26. P0=~(0x80>>colomn);
  27. Delay(1);
  28. P0=0xFF;
  29. }

matri.h 

  1. #ifndef _MATRI__H_
  2. #define _MATRI__H_
  3. //外部可调用---主文件要用什么--头文件就要引用什么
  4. void MatrixLED_showColomn(unsigned char colomn,Date);
  5. void matri_Init();
  6. #endif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/801798
推荐阅读
相关标签
  

闽ICP备14008679号