IO扩展(74HC595)_单片机_普中
1 介绍
1.1 74HC595芯片简述
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SER输入到内部的8位位移缓存器,并由QA~QH'输出,而并行输出则是在SCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
芯片主要功能多用为:扩展端口,减小单片机芯片端口的压力。
2 功能要求:通过 74HC595 模块控制 LED 点阵以一行循环滚动显示。
3 硬件设计:
3.1 系统框图
3.2 74HC595原理图和LED8x8原理图
4 软件设计
1 #include "reg52.h" 2 3 typedef unsigned int u16; //取值范围0-65535 4 typedef unsigned char u8; //取值范围0-255 5 6 //定义74HC595控制管脚,采用SPI通信 7 sbit SH_CP = P3^6; //移位寄存器时钟输入 8 sbit ST_CP = P3^5; //存储寄存器时钟输入 9 sbit DS = P3^4; //串行数据输入 10 // OE = 0; //输出使能控制端,低电平有效 11 12 #define LED8X8_COL_PORT P0 //LED点阵列控制端口 13 u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //显示条纹设置 14 15 //延时函数,ten_us=1时,大约延时10us 16 void delay_10us(u16 ten_us) 17 { 18 while(ten_us--); 19 } 20 21 //延时函数,ms=1时,大约延时1ms 22 void delay_ms(u16 ms) 23 { 24 u16 i,j; 25 for(i=ms;i>0;i--) 26 { 27 for(j=110;j>0;j--); 28 } 29 } 30 31 void hc595_wr(u8 dat) 32 { 33 u8 i=0; 34 for(i=0;i<8;i++) //循环8次即可将一个字节写入寄存器中 35 { 36 DS=dat>>7; //优先传输一个字节中的高位,先传高位 37 dat=dat<<1; //将低位移动到高位 38 SH_CP=0; 39 delay_10us(1); 40 SH_CP=1; 41 delay_10us(1);//移位寄存器在时钟SH_CP上升沿将端口数据送入寄存器中 42 } 43 ST_CP=0; 44 delay_10us(1); 45 ST_CP=1; //存储寄存器在时钟ST_CP上升沿将前面写入到寄存器的数据输出 46 } 47 48 void main() 49 { 50 u8 i=0; 51 LED8X8_COL_PORT=0x00; 52 while(1) 53 { 54 for(i=0;i<8;i++) 55 { 56 hc595_wr(0x00); //消除前面寄存器缓存数据 57 hc595_wr(ghc595_buf[i]); //写入新的数据 58 delay_ms(500); //延时500ms 59 } 60 } 61 }
5 实验现象
8*8LED点阵以一行循环滚动显示。
参考资料
(1)(79条消息) 【单片机基础篇】74HC595芯片详解_liangmaoxuan的专栏-CSDN博客_595芯片;
(2)74hc595的主要功能(74hc595引脚图及功能_工作原理及电压_典型应用电路) - 电子常识 - 电子发烧友网 (elecfans.com);