当前位置: 首页 > article >正文

74HC595芯片组成测试工具_流水灯

74HC595芯片组成测试工具_流水灯PCB布局部分芯片手册说明芯片工作原理74HC595级联说明电路原理图部分代码部分595驱动核心部分全部代码使用环境是由于我公司生产的运动控制卡需要连接光电传感器PCBA出来后需要检测运动控制卡内部是由光电隔离再连接到单片机。如此需要检测电路板电路是否有无虚焊器件是否能正常工作。如果点击I/O 口就很费时间。由此就需要借助外部的测试工具快速检测。(运动控制卡光耦发光二极管端接地即可点亮)运动控制卡大概的连接关系PCB布局部分正面背面芯片手册说明灯分为三组。每一个通道使用两个595芯片运行状态是每一个通道同时亮起OUT1。按顺序逐个点亮直到OUT16结束再以OUT1开始如此的循环周而复始。旁边的接口可连接被测件。即可检测器件的好坏。芯片介绍74HC595A 是一款高速 CMOS 8 位串行移位寄存器带有存储寄存器和低电平及高阻输出。移位寄存器和存储寄存器分别采用单独的时钟。在 SCK 的上升沿数据发生移位而在 RCK 的高电平时间内数据从每个寄存器中传送到存储寄存器。移位寄存器带有一个串行输入SER端和一个串行标准输出Q7’端用于级联。74HC595A 存储寄存器带有 8 个总线驱动输出数据输出方式为低电平及高阻态。芯片工作原理由14口接单片机输入信号如00010001之后信号存入移位寄存器再通过时钟转换到锁存器中运行最终通过Q0 ~ Q700010001八个引脚进行输出第一步目的将要准备输入的位数据移入74HC595数据输入端上。 方法送位数据到_595。第二步目的将位数据逐位移入74HC595即数据串入方法SH_CP产生一上升沿将DS上的数据移入74HC595移位寄存器中先送低位后送高位。第三步目的并行输出数据。即数据并出 方法ST_CP产生一上升沿将由DS上已移入数据寄存器中的数据 送入到输出锁存器。74HC595级联说明QH’: 级联输出端。将它接下一个74HC595芯片的DS引脚。SER: 串行数据输入端,级联的话接上一级的Q7’。电路原理图部分代码部分595驱动核心部分/************************************** 函数名74HC595函数初始化 调用SerialSend; 参数传递8进制数据 返回值无 结果 备注 ***************************************/staticvoidSerialSend(unsignedcharch)//--- 串并转换函数 ---{unsignedchari;for(i8;i0;i--){if(0(ch(17)))DAT0;//--- 高位为0则输出0 ---elseDAT1;//--- 否则输出1 ---CLK1;//--- 产生一个时钟 ---_nop_();CLK0;_nop_();ch1;//--- 左移1位 ---}}staticvoidHC595_CS(void){/** 步骤3STCP产生一个上升沿移位寄存器的数据移入存储寄存器 **/LCK0;// 将STCP拉低_nop_();// _nop_(); // 适当延时LCK1;// 再将STCP拉高STCP即可产生一个上升沿// _nop_();_nop_();}staticvoidHC595_Send_Multi_Byte(u8*dat,u16 len){u8 i;for(i0;ilen;i)// len 个字节{SerialSend(dat[i]);}HC595_CS();//先把所有字节发送完再使能输出}全部代码#includereg52.h#includeintrins.h//#define unsigned char u16;//#define unsigned int u8;#defineMAIN_Fosc11059200L//定义主时钟//LED指示灯sbit LEDP3^6;/********************** 595芯片引脚别名定义 ***********************/sbit DATP1^0;sbit CLKP1^3;sbit LCKP1^2;sbit SRCLRP1^1;sbit KEYP5^4;//用户按键RES用IO口P54u8 pos;// led位置u8 Led_Pos_Buf[6]{0x00,0x00,0x00,0x00,0x00,0x00};//存储要发送的指令字节u8 LED_G;//按钮按下切换状态//第pos个led亮 1 2 3 4 5 6 7 8//u8 Led[32] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, //控制第二级74HC595// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //第一级的led全灭// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //第二级的led全灭// 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};//控制第一级74HC595//u8 Led[16] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000};//控制第一级74HC595//u8 Led[8] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};//控制第一级74HC595//u8 Led[16] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//控制第一级74HC595u8 Led[16]{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//控制第一级74HC595/************************************** 函数名74HC595函数初始化 调用SerialSend; 参数传递8进制数据 返回值无 结果 备注 ***************************************/staticvoidSerialSend(unsignedcharch)//--- 串并转换函数 ---{unsignedchari;for(i8;i0;i--){if(0(ch(17)))DAT0;//--- 高位为0则输出0 ---elseDAT1;//--- 否则输出1 ---CLK1;//--- 产生一个时钟 ---_nop_();CLK0;_nop_();ch1;//--- 左移1位 ---}}staticvoidHC595_CS(void){/** 步骤3STCP产生一个上升沿移位寄存器的数据移入存储寄存器 **/LCK0;// 将STCP拉低_nop_();// _nop_(); // 适当延时LCK1;// 再将STCP拉高STCP即可产生一个上升沿// _nop_();_nop_();}staticvoidHC595_Send_Multi_Byte(u8*dat,u16 len){u8 i;for(i0;ilen;i)// len 个字节{SerialSend(dat[i]);}HC595_CS();//先把所有字节发送完再使能输出}staticvoidDelay1000ms()//11.0592MHz{unsignedchari,j,k;_nop_();_nop_();i43;j6;k203;do{do{while(--k);}while(--j);}while(--i);}staticvoiddelay_ms(unsignedcharms){unsignedinti;do{iMAIN_Fosc/13000;while(--i);//14T per loop}while(--ms);}voidKEY_Scan(void){if(KEY0){delay_ms(10);if(KEY0)//按键按下{while(KEY0);//等待按键释放LED_G1;//熄灭绿色指示灯}}}voidmain(){P0M10x00;P0M00xFF;//设置P0.5~P0.7为准双向口P1M10x00;P1M00xFF;//设置P0.5~P0.7为准双向口P5M00x10;P5M10x10;SRCLR1;LED_G0;Led_Pos_Buf[5]0x00;//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]Led_Pos_Buf[4]0x00;//存放第二级74HC595的数据Led_Pos_Buf[3]0x00;//存放第二级74HC595的数据Led_Pos_Buf[2]0x00;//存放第二级74HC595的数据Led_Pos_Buf[1]0x00;//存放第二级74HC595的数据Led_Pos_Buf[0]0x00;//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595Delay1000ms;Delay1000ms;Delay1000ms;Delay1000ms;Led_Pos_Buf[5]0xFF;//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]delay_ms(500);Led_Pos_Buf[4]0xFF;//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[3]0xFF;//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[2]0xFF;//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[1]0xFF;//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[0]0xFF;//存放第二级74HC595的数据delay_ms(500);HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595Delay1000ms;Delay1000ms;Delay1000ms;Delay1000ms;Led_Pos_Buf[5]0x00;//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]Led_Pos_Buf[4]0x00;//存放第二级74HC595的数据Led_Pos_Buf[3]0x00;//存放第二级74HC595的数据Led_Pos_Buf[2]0x00;//存放第二级74HC595的数据Led_Pos_Buf[1]0x00;//存放第二级74HC595的数据Led_Pos_Buf[0]0x00;//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595Delay1000ms;Delay1000ms;Delay1000ms;Delay1000ms;while(1){KEY_Scan();if(LED_G0){for(pos0;pos8;pos)//第pos个灯实现流水灯效果{delay_ms(500);Led_Pos_Buf[5]Led[pos];//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]delay_ms(500);Led_Pos_Buf[4]Led[pos8];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[3]Led[pos];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[2]Led[pos8];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[1]Led[pos];//存放第二级74HC595的数据Led_Pos_Buf[0]Led[pos8];//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595}for(pos0;pos8;pos)//第pos个灯实现流水灯效果{delay_ms(500);Led_Pos_Buf[5]Led[pos8];//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]delay_ms(500);Led_Pos_Buf[4]Led[pos];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[3]Led[pos8];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[2]Led[pos];//存放第二级74HC595的数据delay_ms(500);Led_Pos_Buf[1]Led[pos8];//存放第二级74HC595的数据Led_Pos_Buf[0]Led[pos];//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595}}else{for(pos0;pos8;pos)//第pos个灯实现流水灯效果{delay_ms(500);Led_Pos_Buf[5]Led[pos];//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]Led_Pos_Buf[4]Led[pos8];//存放第二级74HC595的数据Led_Pos_Buf[3]Led[pos];//存放第二级74HC595的数据Led_Pos_Buf[2]Led[pos8];//存放第二级74HC595的数据Led_Pos_Buf[1]Led[pos];//存放第二级74HC595的数据Led_Pos_Buf[0]Led[pos8];//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595}for(pos0;pos8;pos)//第pos个灯实现流水灯效果{delay_ms(500);Led_Pos_Buf[5]Led[pos8];//存放第一级74HC595数据因为先进先出所以第一级放在Led_Pos_Buf[1]而不是Led_Pos_Buf[0]Led_Pos_Buf[4]Led[pos];//存放第二级74HC595的数据Led_Pos_Buf[3]Led[pos8];//存放第二级74HC595的数据Led_Pos_Buf[2]Led[pos];//存放第二级74HC595的数据Led_Pos_Buf[1]Led[pos8];//存放第二级74HC595的数据Led_Pos_Buf[0]Led[pos];//存放第二级74HC595的数据HC595_Send_Multi_Byte(Led_Pos_Buf,6);//将当前数据发送到595}}}}

相关文章:

74HC595芯片组成测试工具_流水灯

74HC595芯片组成测试工具_流水灯PCB布局部分芯片手册说明芯片工作原理74HC595级联说明电路原理图部分代码部分595驱动核心部分全部代码使用环境是由于我公司生产的运动控制卡需要连接光电传感器,PCBA出来后需要检测,运动控制卡内部是由光电隔离再连接到单…...

Qwen3-ASR-1.7B模型在MobaXterm远程会话中的语音控制应用

Qwen3-ASR-1.7B模型在MobaXterm远程会话中的语音控制应用 1. 引言 想象一下这样的场景:你正在通过MobaXterm远程连接到服务器,双手忙着敲代码的同时,突然需要执行一个复杂的系统命令。传统方式需要你停下来输入命令,但如果有种方…...

Qwen-Image-2512-Pixel-Art-LoRA 安全加固:防范针对图像生成API的网络安全攻击

Qwen-Image-2512-Pixel-Art-LoRA 安全加固:防范针对图像生成API的网络安全攻击 最近在帮一个游戏开发团队部署他们的像素艺术风格生成服务,他们把基于Qwen-Image-2512的Pixel-Art-LoRA模型封装成了API,准备开放给社区里的独立开发者使用。本…...

用KeyShot工具渲染PCB图过程

用KeyShot工具渲染PCB图过程 在文件的导出选项我们选择PDF3D然后保存为点obj格式按照以下图进行勾选。在KeyShot 11 界面–选择-导入对话框导入AD输出的OBJ文件 按照以下选择。先对PCB的顶层阻焊层进行设置点击软件左下角的云库。将下载好的PCB板材拖拽到core处,可看…...

像素心智情绪解码器:用游戏化界面轻松实现高精度情绪识别与分析

像素心智情绪解码器:用游戏化界面轻松实现高精度情绪识别与分析 1. 情绪识别的新范式 传统情绪识别工具往往给人冰冷、机械的印象,操作界面复杂且缺乏趣味性。像素心智情绪解码器(Pixel Mind Decoder)彻底改变了这一现状,将专业级情绪分析技…...

每天花2小时找文件,我的团队正在被‘版本混乱‘慢慢杀死

上周三,晚上11点,我接到甲方电话。 “为什么交付的是V2.3,但需求文档是V2.5?你们内部管理这么乱的吗?” 我当场社死。 挂掉电话,我在会议室坐了整整20分钟,一句话说不出来。不是因为委屈&#x…...

无人机航拍深度估计:LingBot-Depth处理大尺度室外场景实战

无人机航拍深度估计:LingBot-Depth处理大尺度室外场景实战 1. 为什么无人机航拍需要深度估计? 当你操控无人机飞越城市或自然景观时,获取准确的深度信息至关重要。传统方法依赖立体视觉或LiDAR,但这些方案要么计算复杂&#xff…...

Z-Image-Turbo-rinaiqiao-huiyewunv 开发环境配置:使用Visual Studio Code进行高效调试

Z-Image-Turbo-rinaiqiao-huiyewunv 开发环境配置:使用Visual Studio Code进行高效调试 如果你正在折腾Z-Image-Turbo-rinaiqiao-huiyewunv这个模型,想用它来生成图片,但发现代码跑起来总是不太顺手,或者想深入看看模型内部是怎么…...

测试驱动开发中的测试先行与快速反馈

测试驱动开发中的测试先行与快速反馈 在软件开发领域,测试驱动开发(TDD)因其独特的开发模式广受推崇。其核心理念是“测试先行”与“快速反馈”,通过编写测试用例驱动代码实现,确保软件质量与设计灵活性。这种开发方式…...

Selfie性能优化技巧:从基础编译到高级调优

Selfie性能优化技巧:从基础编译到高级调优 【免费下载链接】selfie An educational software system of a tiny self-compiling C compiler, a tiny self-executing RISC-V emulator, and a tiny self-hosting RISC-V hypervisor. 项目地址: https://gitcode.com/…...

小白友好!TensorFlow-v2.15镜像10步搭建标准化机器学习教学环境

小白友好!TensorFlow-v2.15镜像10步搭建标准化机器学习教学环境 1. 为什么需要标准化教学环境? 想象一下,你第一次学习机器学习时,是不是花了大量时间在环境配置上?不同操作系统、Python版本、CUDA驱动之间的兼容性问…...

如何快速提升AutoTrain Advanced文本摘要的ROUGE分数:5个实用优化技巧

如何快速提升AutoTrain Advanced文本摘要的ROUGE分数:5个实用优化技巧 【免费下载链接】autotrain-advanced 🤗 AutoTrain Advanced 项目地址: https://gitcode.com/gh_mirrors/au/autotrain-advanced AutoTrain Advanced是一款强大的文本摘要工具…...

哔哩下载姬DownKyi:如何轻松下载B站8K视频和批量管理资源

哔哩下载姬DownKyi:如何轻松下载B站8K视频和批量管理资源 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&am…...

终极指南:dots.ocr如何以0.845的布局检测F1分数超越竞品模型?

终极指南:dots.ocr如何以0.845的布局检测F1分数超越竞品模型? 【免费下载链接】dots.ocr Multilingual Document Layout Parsing in a Single Vision-Language Model 项目地址: https://gitcode.com/gh_mirrors/do/dots.ocr dots.ocr是一款革命性…...

Jitsi Meet accessibility支持:打造人人可用的无障碍视频会议体验

Jitsi Meet accessibility支持:打造人人可用的无障碍视频会议体验 Jitsi Meet 作为一款开源的视频会议解决方案,不仅提供安全、简单且可扩展的视频会议功能,更致力于通过全面的无障碍设计让所有用户都能顺畅参与在线协作。本文将详细介绍 Ji…...

Jitsi Meet录制功能全解析:本地存储与云端备份策略

Jitsi Meet录制功能全解析:本地存储与云端备份策略 Jitsi Meet作为一款开源的视频会议解决方案,提供了强大而灵活的录制功能,支持本地存储和云端备份两种策略。无论您是个人用户还是企业团队,了解这些录制选项都能帮助您更好地管…...

Jitsi Meet负载均衡:多服务器集群部署方案

Jitsi Meet负载均衡:多服务器集群部署方案 Jitsi Meet是一款安全、简单且可扩展的视频会议解决方案,支持独立应用或嵌入Web应用中使用。随着用户规模增长,单服务器部署可能面临性能瓶颈,本文将详细介绍如何通过负载均衡实现Jitsi…...

免费开源:实时手机检测-通用模型,快速搭建你的第一个检测应用

免费开源:实时手机检测-通用模型,快速搭建你的第一个检测应用 1. 实时手机检测模型简介 实时手机检测-通用模型是基于DAMOYOLO-S框架开发的高性能目标检测模型,专门用于在各种场景下快速准确地检测手机设备。该模型在精度和速度上都超越了传…...

掌握Vibe Kanban会话管理:高效管理AI编码代理对话历史的终极指南

掌握Vibe Kanban会话管理:高效管理AI编码代理对话历史的终极指南 【免费下载链接】vibe-kanban Get 10X more out of Claude Code, Codex or any coding agent 项目地址: https://gitcode.com/GitHub_Trending/vi/vibe-kanban 在AI驱动开发的时代&#xff0c…...

从按键消抖到多任务通信:手把手教你用STM32CubeMX和FreeRTOS搭建一个‘智能’按键响应系统

从按键消抖到多任务通信:手把手教你用STM32CubeMX和FreeRTOS搭建一个‘智能’按键响应系统 在嵌入式开发中,按键处理看似简单,实则暗藏玄机。当你的项目从简单的单任务裸机系统升级到多任务实时操作系统时,按键处理会面临全新的挑…...

Chandra OCR效果对比:领先GPT-4o,实测识别精度展示

Chandra OCR效果对比:领先GPT-4o,实测识别精度展示 1. 为什么选择Chandra OCR:布局感知的革命性突破 在文档数字化领域,传统OCR技术长期面临一个核心痛点:它们只能识别文字内容,却丢失了文档的排版结构信…...

OFA模型企业级部署方案:基于Docker和Kubernetes的高可用架构

OFA模型企业级部署方案:基于Docker和Kubernetes的高可用架构 1. 引言 想象一下这样的场景:你的电商平台每天需要处理数百万张商品图片和对应的英文描述,人工审核图文一致性几乎是不可能完成的任务。这时候,OFA(One-F…...

XUnity.AutoTranslator技术深度解析:Unity游戏实时翻译引擎的架构设计与实现原理

XUnity.AutoTranslator技术深度解析:Unity游戏实时翻译引擎的架构设计与实现原理 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款基于运行时hook技术的Unity游戏实…...

百度网盘提取码智能获取:3秒解锁资源的完整指南

百度网盘提取码智能获取:3秒解锁资源的完整指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要密码的资源,都要花费大量时间在各种网…...

Python的__init__方法调用父类初始化与多重继承中的参数传递问题

Python作为一门灵活且强大的编程语言,其面向对象特性中的继承机制尤为关键。其中,__init__方法的初始化调用以及多重继承中的参数传递问题,常常让开发者感到困惑。理解这些细节不仅能避免潜在的错误,还能提升代码的可维护性。本文…...

别再只跑demo了!用Python实战CWRU轴承数据集,从数据清洗到模型部署的完整避坑指南

从数据到部署:Python实战CWRU轴承故障诊断全流程指南 如果你已经跑过几个轴承故障诊断的demo,却对如何将CWRU数据集真正应用到自己的项目中感到迷茫,这篇文章正是为你准备的。我们将从原始数据解压开始,一步步构建一个健壮的数据处…...

毫米波雷达中CAPON算法的性能优化与实现

1. CAPON算法在毫米波雷达中的核心原理 第一次接触CAPON算法时,我也被那些数学公式吓到过。但后来发现,它的核心思想其实特别像我们用手电筒找东西——普通DBF算法就像打开手电筒直接照射,而CAPON算法则是能自动调节光圈,让想找的…...

Open Images数据集工具包完全指南:分类器、下载器与瓶颈计算深度剖析

Open Images数据集工具包完全指南:分类器、下载器与瓶颈计算深度剖析 【免费下载链接】dataset The Open Images dataset 项目地址: https://gitcode.com/gh_mirrors/dat/dataset Open Images数据集是一个广泛使用的计算机视觉资源,包含数百万张带…...

通义千问2.5-7B-Instruct部署优化:量化模型仅4GB显存占用

通义千问2.5-7B-Instruct部署优化:量化模型仅4GB显存占用 1. 引言 在本地部署大语言模型时,显存占用一直是开发者面临的主要挑战之一。传统70亿参数模型通常需要12GB以上显存,而通义千问2.5-7B-Instruct通过量化技术实现了突破性优化&#…...

Multibit技术解析:从低功耗设计到面积优化的实践指南

1. Multibit技术入门:为什么我们需要它? 第一次接触Multibit技术时,我和很多工程师一样充满疑问:为什么要在设计中引入这种看似复杂的结构?直到在实际项目中遇到面积和功耗的双重挑战,才真正体会到它的价值…...