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 }
led8x8_74hc595.c

5 实验现象

  8*8LED点阵以一行循环滚动显示。

参考资料

(1)(79条消息) 【单片机基础篇】74HC595芯片详解_liangmaoxuan的专栏-CSDN博客_595芯片

(2)74hc595的主要功能(74hc595引脚图及功能_工作原理及电压_典型应用电路) - 电子常识 - 电子发烧友网 (elecfans.com)

posted @ 2022-01-27 08:18  豌豆茶  阅读(744)  评论(0编辑  收藏  举报