51单片机使用74HC595芯片进行IO口串转并扩展

编写程序之前,要对所使用到的芯片功能、引脚了解。据自己所需要的功能,编写程序。

单片机IO口的扩展很有必要,因为单片机的引脚数固定,当外设过多的时候,单片机引脚资源的合理利用就变得很重要。

74HC595是一块串转并的芯片,74HC595具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器有相互独立的时钟。数据在SH_CP(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_CP(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(DS),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。将串行输入的8位数字,转变为并行输出的8位数字,例如控制一个8位数码管,将不会有闪烁。

程序功能:使用74HC595扩展IO,制作流水灯


```c
#include "reg51.h"
#include "intrins.h"

typedef unsigned int u16;
typedef unsigned char u8;

//定义使用的IO
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

//延时函数
void delay(u16 i)
{
	while(i--);
}

//使用74HC595发送一个字节的数据
void HC595SendByte(u8 data)
{
	u8 a;
	SRCLK=1;
	RCLK=1;

	for(a=0;a<8;a++)
	{
		SER=data>>7;
		data<<=1;

		SRCLK=0;
		_nop_();
		_nop_();
		SRCLK=1;
	}
	RCLK=0;
	_nop_();
	_nop_();
	RCLK=1;
}

//主函数
void main()
{
	u8 ledNum;
	ledNum=~0x01;
	while(1)
	{
		HC595SendByte(ledNum);
		ledNum=_crol_(ledNum,1);
		delay(50000);
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值