赞
踩
1.LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字,图片,视频等。
点阵屏的驱动关键:移位寄存器74HC595;
可位寻址:可以对寄存器中的某一位进行定义;例如:ET1=1;
不可位寻址:不能对寄存器中的某一位进行单独的定义,不可以控制其中某一位,不能对其中的一位进行定义;例如TMOD=0x80;
2. 74HC595原理图:
主要的三个控制接口是RCLK、SRCLK、SER;
---信号给到SER,SER接收信号,上升沿SERCLK高电位移位,每接收一个就向下移位一次,接收完置0;接收之前一定要定义初始值0电位;上升沿RCLK高电位1向右移位锁存,锁存完以后置0;接收之前也要定义初始值0电位;
- #include <REGX52.H>
-
- sbit RCK=P3^5;
- sbit SCK=P3^6;
- sbit SER=P3^4;
- void _74HC595_writebyte(unsigned char byte)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- SER=byte&(0x80>>i);
- SCK=1;
- SCK=0;
- }
- RCK=1;
- RCK=0;
- }
- void main()
- {
- SCK=0;
- RCK=0;
- _74HC595_writebyte(0xAA);
- while(1)
- {
-
- }
- }
3. LED点阵屏---显示笑脸
sbit是重新定义的意思;库里面已经有的定义,在此基础上从新定义;例如;PCLK是库里的函数,在此定义为PCK;p3^5=P35;
首先:定义一列的情况:定义参数Byte;定义i;for循环,Byte&0x80是把0x80的最高位拿出来;移位代表分别拿出每一位;然后按照寄存器的性质进行设定;
最后定义列和每列的情况;高电位1亮灯;
SER=byte&(0x80>>i);是把一列的8个位置情况分别调出来,&--会把高电位1的那一个位置传给SER;
- #include <REGX52.H>
- #include <Delay.h>
-
- sbit RCK=P3^5;
- sbit SCK=P3^6;
- sbit SER=P3^4;
- void _74HC595_writebyte(unsigned char byte)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- SER=byte&(0x80>>i);
- SCK=1;
- SCK=0;
- }
- RCK=1;
- RCK=0;
- }
- void MatrixLED_ShowColomn(unsigned char Colomn,Date)
- {
- _74HC595_writebyte(Date);
- P0=~(0x80>>Colomn);
- Delay(1);
- P0=0xFF;
- }
- void main()
- {
- SCK=0;
- RCK=0;
-
- while(1)
- {
- MatrixLED_ShowColomn(0,0x3C);
- MatrixLED_ShowColomn(1,0x42);
- MatrixLED_ShowColomn(2,0xA9);
- MatrixLED_ShowColomn(3,0x85);
- MatrixLED_ShowColomn(4,0x85);
- MatrixLED_ShowColomn(5,0xA9);
- MatrixLED_ShowColomn(6,0x42);
- MatrixLED_ShowColomn(7,0x3C);
- }
- }
4.LED点阵屏显示动画:
main.c
- #include <REGX52.H>
- #include <Delay.h>
- #include <matri.h>
-
- unsigned char Animation[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0x08,0x08,0x08,0xFF,0x00,0x0E,0x15,
- 0x15,0x15,0x08,0x00,0x7E,0x01,0x02,0x00,
- 0x7E,0x01,0x02,0x00,0x0E,0x11,0x11,0x0E,
- 0x00,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- void main()
- {
- unsigned char i,count=0,offset=0;
- matri_Init();
- while(1)
- {
- for(i=0;i<8;i++)
- {
- MatrixLED_showColomn(i,Animation[i+offset]);
- }
- count++;
- if(count>10)
- {
- count=0;
- offset++;
- if(offset>40)
- offset=0;
- }
- }
- }
Delay.c
- #include <REGX52.H>
-
- void Delay(unsigned int xms)
- {
- unsigned char i,j;
- while(xms)
- {
- i=2;
- j=256;
- do
- {
- while(--j);
- }
- while(--i);
- xms--;
- }
- }
Delay.h
- #ifndef _DELAY__H_
- #define _DELAY__H_
-
- void Delay(unsigned int xms);
-
- #endif
matri.c
- #include <REGX52.H>
- #include <Delay.h>
-
- sbit RCK=P3^5;
- sbit SCK=P3^6;
- sbit SER=P3^4;
-
- void _74HC595_writebyte(unsigned char byte)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- SER=byte&(0x80>>i);
- SCK=1;
- SCK=0;
- }
- RCK=1;
- RCK=0;
- }
- void matri_Init()
- {
- SCK=0;
- RCK=0;
- }
- void MatrixLED_showColomn(unsigned char colomn,Date)
- {
- _74HC595_writebyte(Date);
- P0=~(0x80>>colomn);
- Delay(1);
- P0=0xFF;
- }
matri.h
- #ifndef _MATRI__H_
- #define _MATRI__H_
- //外部可调用---主文件要用什么--头文件就要引用什么
- void MatrixLED_showColomn(unsigned char colomn,Date);
- void matri_Init();
- #endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。