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);//右移,选择下一行	,该数为行的模
				}
			}
		}
	}
}
posted on 2020-09-07 17:37  海鱼啊  阅读(134)  评论(0)    收藏  举报