74HC595芯片实现原理及跑马灯数码管应用程序-----day2

article/2025/11/9 14:45:54

74HC595芯片应用-----day2
1.CMOS移位寄存器–74HC595
可串行输出控制下一级级联芯片。![在这里插入图片描述](https://img-blog.csdnimg.cn/2facff61a1d948d4a7c在这里插入图片描述

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/79b3b2b43dcc4b91ae4ec2c986149990.png
基础概念:
移位寄存器:什么是移位寄存器?
移位寄存器是存储单个数据字的同步器件,可以对这些位执行逻辑移位操作。逻辑移位将字的每个位向左或向右移动。空格通常用零填充
在这里插入图片描述
74HC595内部逻辑图如下所示:
左侧8个为移位寄存器,右侧为锁存寄存器。
SRa为上升沿D触发器,每个上升沿寄存器中的数据移动一位。下一次上升沿时会把上一次Q端的数据移动到第二个寄存器中。每次移动移位在CLK电平变化时。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/1b69431e2e6c4e268d205bcb58a8a943.png](https://img-blog.csdnimg.cn/13cc0916c1444cb89e2ea75d99db554c.png
在这里插入图片描述
第一个上升沿完成后将数据输出到Q端,下一次上升沿时Q段的数据才会移动到第二个寄存器。依次进行。
MR(SCLR)是移位寄存器清零端。0时会将数据清0,发送数据时需要置高。
在这里插入图片描述
依次完成8位数据移动,Q7’级联下一级输出用原理相同,OE为数据输出使能,高电平有效。
STC为时钟控制,当8位数据或者16位数据发送完成后使能高电平完成整个数据发送流程。
级联如下图所示:
在这里插入图片描述
U17的SQH输出脚连接U13的A输入脚位上。
一次输入16位数据。
时序图如下所示:
在这里插入图片描述
级联后的HC595为最先接收发送数据的位置。占数组的第一位值即QA ,依次为QH/QG/QF/QE/QD/QC/QB/QA共8位 前一级为QH/QG/QF/QE/QD/QC/QB/QA
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0x8000表示点亮第一个D9 ----- QH的灯。
QH/QG/QF/QE/QD/QC/QB/QA共8位 前一级为QH/QG/QF/QE/QD/QC/QB/QA
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0x0100表示点亮第一个D2 ----- QA的灯。

程序如下:

sbit HC595_SCK = P0^5;
sbit HC595_RCK = P0^6;
sbit HC595_DATA = P0^7;code unsigned int Led8_One_Array[16] = {0x8000,0x4000,0x2000, 0x1000, 0x0800, 0x0400,0x0200,0x0100,0x0080,0x0040,0x0020,0x0010,0x0008,0x0004,0x0002,0x0001,};
void Send_Data(unsigned int Led8_One)
{ 	unsigned  char i;	HC595_RCK = 0;	   for(i = 0; i < 16;i ++){HC595_SCK = 0;if(0 != (Led8_One & 0x8000))  //0X80 = 0B1000 0000   二合一每个输入数据为16位数组。{HC595_DATA = 1;				   }else{HC595_DATA = 0;}Led8_One = Led8_One<<1;HC595_SCK = 1;	  }//	   for(i = 0; i < 8;i ++)
//	   {
//	      HC595_SCK = 0;
//	   	  if(0 != (Led8_Two & 0x80))  //0X80 = 0B1000 0000 
//		  {
//		     HC595_DATA = 1;
//		  }
//		  else
//		  {
//		     HC595_DATA = 0;
//		  }
//		 
//		  Led8_Two = Led8_Two<<1;
//		  HC595_SCK = 1; 
//	   }HC595_RCK = 1;              //发送一个16位数据后将数据输出到端口。
}void delay_1ms(int i)
{int j;for( ;i>0;i--){for(j = 0;j < 110;j++){}}
}void main()
{    unsigned char k; while(1){for(k = 0;k < 16;k ++){Send_Data(Led8_One_Array[k]); delay_1ms(1000);}    }  
}

上述程序可应用为数码管或者扩单片机IO扩展。数码管时需要级联。
流水灯,两边往中间跑,汇合后在往两边跑依次循环进行,纯属娱乐。
哈哈哈。有趣

unsigned  char j=0;
sbit HC595_SCK = P0^5;
sbit HC595_RCK = P0^6;
sbit HC595_DATA = P0^7;unsigned char k=0; 
code unsigned char Led8_One_Array[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code unsigned char Led8_One_Array2[8] = {0x80,0x40,0x20, 0x10, 0x08, 0x04,0x02,0x01};
void Send_Data(unsigned char Led8_One,unsigned char Led8_Two)
{ 	unsigned  char i;	HC595_RCK = 0;	   for(i = 0; i < 8;i ++){HC595_SCK = 0;if(0 != (Led8_One & 0x80))  //0X80 = 0B1000 0000 {HC595_DATA = 1;				   }else{HC595_DATA = 0;}Led8_One = Led8_One<<1;HC595_SCK = 1;	  }for(i = 0; i < 8;i ++){HC595_SCK = 0;if(0 != (Led8_Two & 0x80))  //0X80 = 0B1000 0000 {HC595_DATA = 1;}else{HC595_DATA = 0;}Led8_Two = Led8_Two<<1;HC595_SCK = 1; }HC595_RCK = 1;  
}void delay_1ms(int i)
{int j;for( ;i>0;i--){for(j = 0;j < 110;j++){}}
}void main()
{    while(1){if(k<8){for(k = 0;k < 8;k ++){Send_Data(Led8_One_Array[k],Led8_One_Array2[k]); delay_1ms(500);}j=k-1; }else{for(;j < 8;){  j --	;Send_Data(Led8_One_Array[j],Led8_One_Array2[j]); delay_1ms(100);if(j==0)break;} if(j==0) k=0;}}  
}

HC595驱动数码管:
数码管分类:数码管分为共阴极与共阳极两种。
在这里插入图片描述
在这里插入图片描述
内部原理如下图所示:
在这里插入图片描述

硬件设计部分如下:采用共阴极接法。

在这里插入图片描述
在这里插入图片描述
编码实现:
段编码:
0 1 2 3 4 5 6 7 8 9
0x3f 0x06 0x5b , 0x4f ,0x66 ,0x6d ,0x7d,0x07 0x7f 0x6f
A B C D E F 无显示 P
0x77 0x7c 0x39 0x5e 0x79 0x71 0x00 0x73
位编码:

在这里插入图片描述
数码管的工作方式有两种:
静态显示与动态显示方式。
静态显示:每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。静态显示成本高,硬件电路复杂。
动态显示方式:将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用使人感觉好像各位数码管同时都在显示。
设计思路:
1.确定位选显示的字符,编码方式。
2.确定要使能哪个段选。
3.送显示。

实现代码如下:

#include<reg52.h>code unsigned char ShU_Duan_Data[20] = {0x3f,0x06,0x5b ,0x4f ,0x66 ,0x6d ,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x73  };//0-F  无显示  P
code unsigned char ShU_Wei_Data[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};//位选择端sbit HC595_RCK = P1^0;
sbit hc595_SCK = P1^1;
sbit HC595_DATA = P1^4;void Delay_1MS(unsigned int i)
{unsigned char j;for(;i >0;i--){for(j=0;j < 110;j++);}
}void  Shu_Ma_Data(unsigned char Shu_Data_One,unsigned char Shu_Data_Two)
{unsigned char i;HC595_RCK = 0;for(i=0; i<8;i++){hc595_SCK = 0;if(0 != (Shu_Data_One & 0x80)){HC595_DATA = 1;    }else{HC595_DATA = 0;}Shu_Data_One = Shu_Data_One<<1;hc595_SCK = 1;   }for(i=0; i<8;i++){hc595_SCK = 0;if(0 != (Shu_Data_Two & 0x80)){HC595_DATA = 1;    }else{HC595_DATA = 0;}Shu_Data_Two = Shu_Data_Two << 1;hc595_SCK = 1;   }HC595_RCK = 1;}
//两路数码管分别控制显示
void display1(unsigned int data_s)
{unsigned char data_u,data_t,data_h,data_th;data_u=data_s%10;data_t = data_s/10%10;data_h = data_s/100%10;data_th = data_s/1000;Shu_Ma_Data(ShU_Duan_Data[data_u],ShU_Wei_Data[3]);	Shu_Ma_Data(ShU_Duan_Data[data_t],ShU_Wei_Data[2]);	Shu_Ma_Data(ShU_Duan_Data[data_h],ShU_Wei_Data[1]);	Shu_Ma_Data(ShU_Duan_Data[data_th],ShU_Wei_Data[0]);	
}
void display(unsigned int data_s)
{unsigned char data_u,data_t,data_h,data_th;data_u=data_s%10;data_t = data_s/10%10;data_h = data_s/100%10;data_th = data_s/1000;Shu_Ma_Data(ShU_Duan_Data[data_u],ShU_Wei_Data[7]);	Shu_Ma_Data(ShU_Duan_Data[data_t],ShU_Wei_Data[6]);	Shu_Ma_Data(ShU_Duan_Data[data_h],ShU_Wei_Data[5]);	Shu_Ma_Data(ShU_Duan_Data[data_th],ShU_Wei_Data[4]);	
}void display_none(void)
{Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[3]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[2]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[1]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[0]);Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[7]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[6]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[5]);	Shu_Ma_Data(ShU_Duan_Data[16],ShU_Wei_Data[4]);	
}void main()
{unsigned int  k=100;display_none();    //清显示。while(1){display1(k);display(k+5);	k++;if(k>9999)k=0;Delay_1MS(3);}   
}
``
哈哈哈,就到这吧595可以灵活应用的。以上都已验证

http://chatgpt.dhexx.cn/article/x5NWuWiu.shtml

相关文章

【STM32学习】(14)两个74HC595控制四个数码管显示

74HC595是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号&#xff0c;常用在各种数码管以及点阵屏的驱动芯片&#xff0c; 使用74HC595可以节约单片机mcu的io口资源&#xff0c;用3个io就可以控制8个数码管的引脚&#xff0c;他还具有一定的驱动能力&…

基于STM32单片机的流水灯控制-74HC595

基于STM32单片机的流水灯控制-74HC595 冰果派-棉花糖V1.0开发板 文章目录 基于STM32单片机的流水灯控制-74HC595冰果派-棉花糖V1.0开发板[toc] 一 任务二 硬件电路如何设计1. IO口不够用2.74HC595D 三 程序怎么编写1.单片机怎么把数据给5952.写程序&#xff08;595驱动&#x…

STM32+74HC595

74HC595功能是将串行数据&#xff08;由SHCP\CLK、DS\DATA输入串行数据&#xff09;转换并行数据&#xff08;芯片上的QA~QH八个数据输出口&#xff09;; 具体工作方式是&#xff1a;由CLK提供时钟&#xff0c;DATA输入高低电平&#xff08;数据&#xff09;&#xff0c;CLK每…

74HC595的使用

介绍 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。在SCK 的上升沿&#xff0c;串行数据由SDL输入到内部的8位位移缓存器&#xff0c;并由Q7’输出&#xff0c;而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器…

stm32驱动hc595

根据网上资料&#xff1a; 595具体使用的步骤:第一步&#xff1a;目的&#xff1a;将要准备输入的位数据移入74HC595数据输入端上。方法&#xff1a;送位数据到_595。第二步&#xff1a;目的&#xff1a;将位数据逐位移入74HC595&#xff0c;即数据串入方法&#xff1a;SH产生一…

STM32实现74HC595控制

一、前言 本文主要是实出74HC595的简单控制功能实现&#xff08;学习笔记整理&#xff09;。 二、概述 &#xff08;一&#xff09;74HC595简述 74HC595是一个8位串行输入、平行输出的位移缓存器&#xff1a;平台行输出为三态输出。 在SCHCP的上升沿输入&#xff0c;在STCP的…

STM32学习记录——74HC595四位数码管显示

数模管作为STM32的一个重要外设&#xff0c;由于其成本低、稳定&#xff0c;被用于许多场景中。本篇文章来介绍下四位数码管的使用方法。 数码管显示 一、数码管的分类二、74HC595芯片&#xff08;串入并出&#xff09;三、原理图四、代码主要操作五、代码分析1.void HC595_GPI…

【74HC595】STM32 74HC595驱动程序

以下为.h文件&#xff1a; #ifndef __74HC595_H__ #define __74HC595_H__ #include "stm32f10x.h" #define SHCP_GPIO_PORT GPIOA #define SHCP_GPIO_CLK RCC_APB2Periph_GPIOA #define SHCP_GPIO_PIN GPIO_Pin_1 #defin…

RK3588+FPGA+Cameralink高速相机解决方案

1. 视频接入&#xff0c;其中可见使用LVDS&#xff0c;红外使用cameralink 2. H264低倍率压缩编码本地存储 3. H264压缩使用同步422接口或者网口UDP协议输出实时码流 4. 使用串口进行通讯&#xff0c;进行类似于可见、红外或者激光器或者地面控制软件等之间的通讯 5. 使用网…

【芯片使用】74HCHC595

实验平台&#xff1a;普中A2开发板&#xff0c;STC89C51RC芯片&#xff0c;11.0592M晶振。 文章目录 前言一、代码1.main.c2.HC595.c2.HC595.h 总结 前言 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。在SCK 的上升沿&#xff0c;串行数据…

HC595驱动数码管

74HC595是一个8位串行输入、并行输出的位移缓存器 引脚定义 Q0~Q7&#xff1a;并行输出 Q7’&#xff1a;串行输出 SH_CP&#xff1a;移位寄存器时钟输入 ST_CP&#xff1a;存储寄存器时钟输入 DS&#xff1a;串行输入 原理图 举例 共阴极数码管控制 #define uchar unsign…

保护手机号码不被应用窃取的有力措施

在使用手机过程中&#xff0c;经常遇到很多应用软件私自获取我们的手机号码并传播出去&#xff0c;导致我们手机经常接到很多莫名其妙的电话。 我们今天分享一种能够彻底屏蔽手机号码被非法获取的有效非法&#xff0c;也就是使用琢石模拟器对手机号码进行模拟&#xff0c;让应用…

安卓app服务器地址文件夹,查看安卓app的服务器地址

查看安卓app的服务器地址 内容精选 换一换 robox脚本里的docker run命令中的镜像名称要改成本地自己注册的名称。(名称为:镜像注册中的名称,也可以通过docker images查看)设置环境变量,将容器指定到GPU卡上运行。export DISPLAY=:0robox脚本中设置的DISPLAY号要与此处设置的…

虚拟手机的服务器地址和端口是什么,如何查看服务器地址和端口号

如何查看服务器地址和端口号 内容精选 换一换 本节操作介绍如何在移动设备上连接Linux实例。以iTerminal-SSH Telnet为例介绍如何在iOS设备上连接 Linux 实例,详细操作请参考IOS设备上登录Linux云服务器。以JuiceSSH为例介绍如何在Android设备上连接 Linux 实例,详细操作请参…

互联网早报:腾讯推出“微小号”,用虚拟手机号拨打电话收发短信

行业热点 1、腾讯推出“微小号”&#xff0c;用虚拟手机号拨打电话收发短信&#xff1b; 2、得物App:误操作发出数万 520 无门槛券,不是营销,订单算数&#xff1b; 3、滴滴网约车宣布进入南非市场&#xff0c;4 月将进入厄瓜多尔&#xff1b; 4、一季度抖音日活数据&#x…

数字虚拟人metahuman,苹果手机做动作捕捉

最近看到抖音上有人在卖数字虚拟人的教程&#xff0c;799元好贵&#xff0c;于是自己玩了玩&#xff0c;下面吧教程分享给大家 1.下载EPIC game模拟器&#xff0c;中文网址如下 https://www.unrealengine.com/zh-CN/metahuman-creator 点击启动应用既可以下载&#xff0c;下载…

JavaScript手机号码格式(正则表达式验证)支持最新电信199移动198联通166

最近公司项目需要对手机号进行校验&#xff0c;于是使用了“ /^1[34578]\d{9}$/ ”这个正则进行校验&#xff0c;后来测试提出当输入199开头的手机号时校验不通过&#xff0c;于是发现原来各大运营商新增加了一些新的手机号段。 以下为截止2018年1月各大运营商已知手机号码号段…

Android类似钉钉类的APP 实现禁止用户虚拟定位

参考&#xff1a;https://blog.csdn.net/mawei7510/article/details/80250416 在应用开发中&#xff0c;如果有签到打卡之类的功能&#xff0c;我们肯定需要在项目中禁止用户开启虚拟定位&#xff0c;导致在***米之外的距离模拟定位然后进行了打卡操作&#xff01; &#xff…

uni-app 实现用户点击后自动拨打指定电话号码

uni 内部提供了一个makePhoneCall函数 那我们就直接看代码 <template><view click "phone">13510657575</view> </template><script>export default {data() {return {}},onLoad() {},methods: {phone() {uni.makePhoneCall({phoneN…

移动端uni-app拨打电话

需求&#xff1a;点击电话图标&#xff0c;手机打开拨号界面并已复制电话号码 官方API&#xff1a;uni.makePhoneCall(OBJECT) | uni-app官网 很简单的一个点击事件就可以完成了&#xff1a; <view class"base-icon phone" click"goPhone(item)">…