【51单片机】IO 扩展(串转并)--74HC595

发布时间:2024年01月21日

0、前言

参考:
普中 51 单片机开发攻略 第12章

【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】 https://www.bilibili.com/video/BV1Mb411e7re/?p=21&share_source=copy_web&vd_source=77e36f24add8dc77c362748ffb980148

nop()是什么语句?
在这里插入图片描述
<< and >> 位运算操作符
在这里插入图片描述

1、74HC595芯片介绍

【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】 https://www.bilibili.com/video/BV1Mb411e7re/?p=21&share_source=copy_web&vd_source=77e36f24add8dc77c362748ffb980148
从18:30—— 结尾
在这里插入图片描述

2、硬件

在这里插入图片描述

3、软件

在这里插入图片描述
目前解决不了模块化编程,很难受。只能全部放在main.c里面了
main.c

#include <reg52.h>
#include <intrins.h>
#include "delayms.h"

typedef unsigned char u8;
typedef unsigned int u16;

//定义相应的IO口
#define LED_M P0//LED点阵,取0启动,取1关闭,0x00全亮
sbit RCLK_PIN = P3^5;  //存储寄存器时钟输入
sbit SRCLK = P3^6;  //移位寄存器时钟输入
sbit SER = P3^4;  //串行数据输入

void LedMatrix(u8 dat); //LED点阵实现整行流水灯函数

void main() 
{ 
	while(1)
	{
		u8 LedNum = 0x01;
		u8 i;
		for(i=0;i<8;i++)
		{
			LedMatrix(LedNum);
			LedNum <<= 1;
			delayms(1000);  //延时,产生流水灯效果,防止视觉停留过短
		}
	} 
}

void LedMatrix(u8 dat) //LED点阵实现整行流水灯函数
{
	u8 i;
	LED_M = 0x00;  //将LED点阵的整行点亮
	SRCLK = 1;
	RCLK_PIN = 1;
	
	for(i=0;i<8;i++)
	{
		SER = dat>>7;  //将dat的最高位传给SER
		dat <<= 1;  //将dat的数据右移一位
		
		SRCLK = 0;  //发送时序
		_nop_();  //空函数,保证有时间发送时序
		_nop_();
		SRCLK = 1;
	}
	RCLK_PIN = 0;  //
	_nop_();  //空函数,保证有时间发送时序
	_nop_();
	RCLK_PIN = 1;	
}
文章来源:https://blog.csdn.net/m0_48808835/article/details/135723494
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。