74HC165并转串芯片使用方法及代码示例
最近在开发一款新型的微机综合测控保护装置时,由于开入数量的增加,笔者所使用的STM32F103RCT6引脚数量无法满足开发要求,故选择了74HC165这款并转串芯片来处理开入功能,最后亦成功实现了架构师提出的功能要求。在开发过程中笔者亦遇到了些小问题,因此决定记录下来并对有需要的人有所帮助。
首先先来介绍一下74HC165这款芯片,74HC165是一款高速CMOS八位并入串出移位寄存器,电压为2.0~6.0V,驱动电流为+/-5.2 mA。74HC165引脚兼容TTL(LSTTL)系列(定义于JEDEC标准№.7A)。从官方的datasheet可知74HCT165是一个8位串行或并行输入/串行输出移位寄存器。该设备具有一个串行数据输入(DS),八个并行数据输入(D0到D7)和两个互补串行输出(Q7和Q7)。当并行加载输入(PL)为低电平时,从D0到D7的数据异步加载到移位寄存器;当PL为高电平时,数据在DS处串行地进入寄存器。当时钟使能输(CE)为低电平时,数据在C的低-高转换上移位≤ 输入时,CE上的高电平将禁用CP输入。输入端包括箝位二极管,这使得限流电阻的使用接口输入电压超过Vcc。
MC74HC165A是相同的引脚到LS165。设备输入与标准CMOS输出兼容;带上拉电阻,它们与LSTL输出兼容.这个设备是8−互补输出位移位寄存器从最后阶段开始。数据可以通过以下方式加载到寄存器中:并行的或串行的。当串行移位/并行负载输入低,并行异步加载数据。当序列号移位/并行负载输入高,数据串行加载到时钟或时钟抑制的上升沿(见功能表)。2号−输入NOR时钟可以通过组合两个独立的时钟源或通过指定一个时钟输入起到时钟抑制的作用.
以下为笔者代码,因方便理解及芯片的ram和rom都十分充裕,因此笔者并没有对代码进行优化,需要的朋友可以使用循环语句或其他方式对代码进行修改。
笔者想在这里强调的重点也是在开发过程中遇到的问题便是第一位的读取,是在读取完数据后就已经可以读到的了,不需要拉低再拉高时钟线,不然会造成错位,这也是笔者在一开始阅读datasheet时不仔细造成的后果。
#include “include.h”
#define SET_KR_SH HAL_GPIO_WritePin(KR_SH_GPIO_Port, KR_SH_Pin, GPIO_PIN_SET)
#define CLR_KR_SH HAL_GPIO_WritePin(KR_SH_GPIO_Port, KR_SH_Pin, GPIO_PIN_RESET)
#define SET_KR_SCL HAL_GPIO_WritePin(KR_SCL_GPIO_Port, KR_SCL_Pin, GPIO_PIN_SET)
#define CLR_KR_SCL HAL_GPIO_WritePin(KR_SCL_GPIO_Port, KR_SCL_Pin, GPIO_PIN_RESET)
#define SET_KR_SDA HAL_GPIO_WritePin(KR_SDA_GPIO_Port, KR_SDA_Pin, GPIO_PIN_SET)
#define CLR_KR_SDA HAL_GPIO_WritePin(KR_SDA_GPIO_Port, KR_SDA_Pin, GPIO_PIN_RESET)
#define READ_KR_SDA (HAL_GPIO_ReadPin(KR_SDA_GPIO_Port,KR_SDA_Pin))
/***************************************************************************************************
功能描述: 74HC165并转串芯片读取函数
输 入:
输 出:
全局变量:
调用模块:
其 他: 读取上来后通过位处理按开入顺序排列好
***************************************************************************************************/
u16 Read_Kr(void){u16 temp = 0;u16 temp1 =0;SET_KR_SCL; //初始化SET_KR_SH; //初始化CLR_KR_SH; //读取数据delay_us(20);SET_KR_SH; //停止读取数据delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //3temp1 =1<<3;temp |=temp1;CLR_KR_SCL;delay_us(4); SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //3temp1 =1<<2;temp |=temp1;CLR_KR_SCL;delay_us(4);SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //4temp1 =1<<1;temp |=temp1;CLR_KR_SCL;delay_us(4);SET_KR_SCL; //上升沿delay_us(4); if(READ_KR_SDA == GPIO_PIN_SET) //5temp1 =1;temp |=temp1;CLR_KR_SCL;delay_us(4);SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //6temp1 =1<<7;temp |=temp1;CLR_KR_SCL;delay_us(4); SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //7temp1 =1<<6;temp |=temp1;CLR_KR_SCL;delay_us(4);SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //8 temp1 =1<<5;temp |=temp1;CLR_KR_SCL;delay_us(4);SET_KR_SCL; //上升沿delay_us(4);if(READ_KR_SDA == GPIO_PIN_SET) //9temp1 =1<<4;temp |=temp1;temp=~temp; temp<<=1;return temp;
}
74HC165并转串芯片使用方法及代码示例相关推荐
- 基于图数据库、图算法、图神经网络的 ID Resolution/ID Mapping 大数据分析方法与代码示例
本文首发于 NebulaGraph 公众号 "本文是一个基于 NebulaGraph 上的图数据库.图算法.图神经网络的 ID Resolution/ID Mapping 方法综述,除了基本 ...
- java重写的代码_java tostring方法重写代码示例
当需要将一个对象输出到显示器时,通常要调用他的toString()方法,将对象的内容转换为字符串.java中的所有类默认都有一个toString()方法 默认情况下 System.out.printl ...
- html视频海报代码,如何在网站头部添加视频海报?添加视频海报的方法(代码示例)...
本篇文章给大家带来的内容是介绍如何在网站头部添加视频海报?添加视频海报的方法(代码示例) .有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 给网站头部添加视频海报的代码: 视频海报 ...
- python怎么清除代码_Python如何清空列表?清空列表的4种方法(代码示例)
通过Python语言提供的不同构造的方法可以有许多方法来清空列表,下面本篇文章就来给带大家介绍Python中4种清空列表的方法,希望对大家有所帮助. 方法1:重新初始化列表 可以重初始化列表,初始化该 ...
- php 引入echarts路径,angular4中引入echarts的方法(代码示例)
本篇文章给大家带来的内容是关于angular4中引入echarts的方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.安装ngx-echarts npm insta ...
- 如何使用沃顿研究数据中心(WRDS,CRSP)查询美股历史交易数据(R语言的调用方法以及代码示例)
https://wrds-web.wharton.upenn.edu/wrds/ WRDS 沃顿商学院金融系列数据库是由宾夕法尼亚大学沃顿商学院开发的金融领域的跨库研究工具,同时也包含Compusta ...
- 用html实现模糊效果,css实现简单背景模糊的方法(代码示例)
本篇文章给大家带来的内容是介绍css实现简单背景模糊的方法(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 使用filter属性来设置模糊值 效果: css样式: .co ...
- php判断质数,php如何判断是否为素数?判断素数的三种方法(代码示例)
本篇文章给大家带来的内容是介绍php如何判断是否为素数?判断素数的三种方法(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 什么是素数? 质数又称素数.一个大于1的自然数 ...
- php里面的箭头怎么打出来,PHP打印左右箭头图案的实现方法(代码示例)
本篇文章我们将给大家介绍了一个有趣的PHP方法.即用PHP实现打印出由星形组成的右箭头图案和左箭头图案.如,输入奇数n,表示要打印的图案高度和宽度. 例子: PHP代码实现示例如下:<?php ...
最新文章
- Gitea——私有git服务器搭建详细教程
- 漫谈Httpclient
- 一步一步做一个linux文件传输软件(一)
- SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)
- Ubuntu自带简易录屏工具
- php system startup,opencart Warning: require_once(/system/startup.php) failed to open stream
- Java-Concurrent 线程池ThreadPoolExecutor使用
- Netty HashedWheelTimer 定时任务调用
- 1003. Parity(并查集)
- Qt中,edit窗口输出的几种格式
- AI智能与C语言pdf,AI:人工智能的本质与未来 完整版pdf 含epub+mobi+azw3
- excel锁定第一行_将Excel标题行锁定在适当的位置
- 浅谈互联网券商港股美股证券交易软件开发如何实现
- 麻省理工学院赵明民:能穿墙透视的计算机视觉
- Java将图片压缩为原来的一半
- python turtle绘制圣诞树,就一棵破松树
- echars世界地图,显示指定的国家散点图
- JavaScript define
- 第一篇:百度AI注册使用
- 中国大学mooc慕课python答案_中国大学MOOC慕课Python编程基础课后答案
热门文章
- Excel拼接单引号和逗号
- WPS文档转PDF格式的方法是什么
- 电脑蓝屏故障分析大全
- Python(matplotlib)海洋温度垂直剖面图(附完整代码)
- 资源分享:230个Proteus仿真原理图和经典案例
- Discuz2.5菜鸟解析-1
- 导弹发射各项参数计算涉及计算机应用,《计算机应用基础》复习题七(6页).doc...
- 聚观早报 | 微信也要下场做“外卖”?;《羊了个羊》营收破亿
- 俺老刘终于可以将指针传递给lua了!
- CloudFront签名URL