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);