51点阵屏8*8
-
彩色点阵屏:里面有三个灯RGB
-
单色:只有一个颜色的灯
-
共阳极:行处(竖直方向)为阳极,列处为阴级
-
共阴极:行处为阴极,列处为阳极
一次只能点亮一个LED灯,然后要全显示得快速切换
两片74HC595然后级联,就能达到缩小IO口
-
DS(SER)【第二级】:接到上一级的Q7'
-
Q7‘【第一级】:接到第二级的DS
-
SH_CP:为1--0(上升沿)即串行输入到移位寄存器
- 移位寄存器:级联时一共有十六位,一位一位入,但是不断下移,即低位先入第二级,高位再入第一级
- 11010011,H----L
-
ST_CP:上升沿的数据从Q0-Q7并行输出
👆这两者可以级联时连同一条线,设置相同的信号,同时输出
-
MR:低电平时数据清零,但一般接VCC,防止清零
-
OE:高电平禁止输出(高阻态),一般接GND,但是需要闪屏就可以接高电平
#include <reg52.h>
#include <intrins.h> //循环右移头文件
sbit DIO = P3^4; //串行数据口
sbit S_CLK = P3^5;//移位寄存器时钟
sbit R_CLK = P3^6;//输出锁存器时钟
/*点阵字形码*/
unsigned char code tabel[2][8]={
0xE0,0xEE,0x01,0x6D,0x01,0x6D,0x01,0xEF,//电
0xE7,0xF7,0xF7,0xF7,0x80,0xF7,0xFB,0xC3//子
};//用取模软件直接取----是列的模
/*595发送一字节*/
void Send_Byte(unsigned char dat)
{
unsigned char i; //循环次数变量
S_CLK = 0;//拉低移位寄存器时钟
R_CLK = 0;//拉低输出锁存器时钟
for(i=0; i<8; i++) //循环8次
{
if(dat & 0x01)//发送1
DIO = 1;
else //发送0
DIO = 0;
dat >>= 1;//数据右移
S_CLK = 1;//拉高移位寄存器时钟,数据移位
S_CLK = 0;//拉低移位寄存器时钟
}
}
void main()
{
unsigned char j, k, ROW;//j发送8列和8行字形码,k字符数量,ROW行值
unsigned int z; //动态扫描延时变量
while(1)
{
for(k=0; k<2; k++)//k 需要显示的字符数量
{
for(z=0; z<1000; z++)//z刷新次数----子的来回切换
{
ROW = 0x80;//行选初值
for(j=0; j<8; j++) //循环8次发送行和列值
{
Send_Byte(tabel[k][j]);//发送列选值
Send_Byte(ROW); //发送行选值
R_CLK = 1; //拉高输出锁存器,把移位寄存器中数据输出
R_CLK = 0; //拉低输出锁存器
ROW = _cror_(ROW, 1);//右移,选择下一行 ,该数为行的模
}
}
}
}
}