赞
踩
实验平台:普中A2开发板,STC89C51RC芯片,11.0592M晶振。
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。。
引脚说明:
管脚图
时序图
引脚说明
级联图
代码如下(示例):
/************************************************************************************** 实验平台:普中A2开发板(STC89C51RC芯片) 74HC595模块 试验现象: ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include <intrins.h> #include <SelfDef.h> #include <HC595.h> void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { SHCP=0; STCP=0; SDA=0; Delay1ms(); HC595_Send_One_Byte(0xf2); }
代码如下(示例):
#include <HC595.h> #include <SelfDef.h> void Delay10us() //@11.0592MHz { unsigned char i; i = 2; while (--i); } /*** *74HC595 发送一个字节 *即往74HC595的DS引脚发送一个字节 */ void HC595_Send_Byte(u8 byte) { u8 i; for (i = 0; i < 8; i ++) //一个字节8位,传输8次,一次一位,循环8次,刚好移完8位 { /**** 步骤1:将数据传到DS引脚 ****/ if (byte & 0x80) //先传输高位,通过与运算判断第八是否为1 SDA=1; //如果第八位是1,则与 595 DS连接的引脚输出高电平 else //否则输出低电平 SDA=0; /*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/ SHCP=0; // SHCP拉低 Delay10us(); // 适当延时 SHCP=1; // SHCP拉高, SHCP产生上升沿 Delay10us(); byte <<= 1; // 左移一位,将低位往高位移,通过 if (byte & 0x80)判断低位是否为1 } } /** *74HC595输出锁存 使能 **/ void HC595_CS(void) { /** 步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器 **/ STCP=0; // 将STCP拉低 Delay10us(); // 适当延时 STCP=1; // 再将STCP拉高,STCP即可产生一个上升沿 Delay10us(); } /** *发送多个字节 *便于级联时数据的发送 *级联N级,就需要发送N个字节控制HC595 ***/ void HC595_Send_Multi_Byte(u8 *dat,u16 len) { u8 i; for (i = 0; i < len; i ++ ) // len 个字节 { HC595_Send_Byte(dat[i]); } HC595_CS(); //先把所有字节发送完,再使能输出 } /** *发送1个字节,无级联 ***/ void HC595_Send_One_Byte(u8 byte) { u8 i; for (i = 0; i < 8; i ++) //一个字节8位,传输8次,一次一位,循环8次,刚好移完8位 { /**** 步骤1:将数据传到DS引脚 ****/ if (byte & 0x80) //先传输高位,通过与运算判断第八是否为1 SDA=1; //如果第八位是1,则与 595 DS连接的引脚输出高电平 else //否则输出低电平 SDA=0; /*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/ SHCP=0; // SHCP拉低 Delay10us(); // 适当延时 SHCP=1; // SHCP拉高, SHCP产生上升沿 Delay10us(); byte <<= 1; // 右移一位,将低位往高位移,通过 if (byte & 0x80)判断低位是否为1 } HC595_CS(); }
#ifndef __HC595_H_
#define __HC595_H_
#include <reg52.h>
#include <SelfDef.h>
sbit SHCP=P1^0;
sbit STCP=P1^1;
sbit SDA=P1^2;
void HC595_Send_Multi_Byte(u8 *dat, u16 len);
void HC595_Send_One_Byte(u8 byte);
#endif
提示:这里对文章进行总结:
例如:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。