普中51-74HC595(串转并)-控制点阵

74HC595(串转并)-控制点阵

在这里插入图片描述

74HC595 需要用到的控制管脚 SER(串行数据输入)、RCLK、SRCLK 直接连 接到 51 单片机的 P3.4-P3.6 IO 口上,输出端则是直接连接到 LED 点阵模块的行 端口上,即为 LED 发光二极管的阳极,LED 点阵的列则为发光二极管的阴极。

根据LED发光二极管导通原理,当阳极为高电平,阴极为低电平则点亮,否则熄灭。因此通过单片机 P0 口可控制 点阵列,74HC595 可控制点阵行。

15 和 1 到 7 脚 QA–QH:并行数据输出

9 脚 QH 非:串行数据输出

10 脚 SCLK 非( MR) : 低电平复位引脚

11 脚 SCK( SHCP) : 移位寄存器时钟输入 (上升沿时数据输入)

12 脚 RCK( STCP) : 存储寄存器时钟输入(上升沿时数据存入寄存器)

13 脚 G 非( OE) : 输出有效

14 脚 SER( DS) : 串行数据输入

数据在 SCK 的上升沿输入,在 RCK 的上升沿进入到存储器中。如果两个时钟连在一起,则移位寄存器总是比存储器早一个脉冲

#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;

//定义74HC595控制管脚
sbit SRCK = P3^6;//移位寄存器时钟输入
sbit RCK = P3^5;//存储寄存器时钟输入
sbit SER = P3^4;//串行数据输入

#define LEDZ_COL_PORT P0 //点阵列控制端口

u8 hc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


/*
	* 延时函数
	*当ten_us为1是延时10us
	*/
void delay_10us(u16 ten_us){
	while(ten_us--);
}
/*
*延时函数
*当ms=1时,大约延时1ms
*/
void delay_oneMs(u16 one_ms){
	u8 i;
	for(one_ms;one_ms>0;one_ms--)
		for(i=110;i>0;i--);
}

void hc595_write_data(u8 dat){
	u8 i = 0;
	for(i;i<8;i++){
		SER = dat>>7;//将高位数据移至移位寄存器
		dat <<=1;//将低位移至高位
		SRCK=0;
		delay_10us(1);
		SRCK=1;
		delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中
	}
	RCK=0;
	delay_10us(1);
	RCK=1;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出
}

/* 
* 主函数
*/
void main(){
	u8 n=0;
	LEDZ_COL_PORT = 0x00;//将LED灯点阵的列置位0,即LED灯的阴极为低电平
	while(1){
		for(n=0;n<8;n++){
			hc595_write_data(0x00);//将点阵的行置位0,即清除之前写入的寄存器的数据
			hc595_write_data(hc595_buf[n]);//写入新数据
			delay_oneMs(50);//延时500毫秒
		}
	}

}

74HC595数据传输

在这里插入图片描述
在这里插入图片描述
其余六位数据,同上过程!!!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈毓辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值