移位寄存器74HC164多用于扩展IO口,下面是我使用时的心得:

74HC164的几点说明:

1.74HC164是串行输入,并行输出的;

2.它的并行输出其实是有延时的,只是延时时间小,可以认为是并行输出;

74hc164封装和真值表:

真值表中文解释说明

H-高电平 L

-低电平 X -任意电平

↑-低到高电平跳变(上升沿有效)

QA0,QB0,QH0 -规定的稳态条件建立前的电平

QAn,QGn -时钟最近的↑前的电平

看真值表的第三条和第五条:就可以知道,在保持clear为 H,

clock为↑状态下,AB都为H时,移位寄存器移入H,而当移位寄存器移入L时,必须令B为L,而A不受约束。所以可以把AB断相连再接入单片机数据端口。还有一种是A脚直接接高电平,B脚连入单片机数据端(P2_7)

时序图:

1. 首先区分输入输出信号。这里CLEAR、A、B、CLOCK是输入信号,Qa~Qh是输出信号;

2. 拿尺子开始扫描……

2.1.

首先可以看到CLEAR的下降沿后输出全部置低电平。结合后面的一个CLEAR下降沿,可以得出结论:当CLEAR输入下降沿时,无论A、B、CLOCK状态为何,输出全部拉低;

2.2.

尺子向右移动……找到Qa的第一个上升沿,可以看到这个上升沿是与CLOCK的上升沿对齐的,可以得出结论:输出在逻辑上与上升沿同步。此时将会注意到在此之前已经有3个上升沿但输出始终为低电平,尺子移动分别比较这3个上升沿,其A、B输入分别为10、01,于是可以得出结论:Qa

= A · B。

2.3.

尺子继续向右移动……可以分别看出在随后的CLOCK上升沿处,Qa全部按照A与B进行输出,从而验证以上结论。此外Qb~Qh的波形为Qa波形依次移位得到。

使用它的通用驱动C语言源代码:

//在每一个上升沿输出脚SDO状态移一位,CLK为时钟输入脚,CLK为输入脚,

//一般同连一脚,保持相同电平状态,与运算之后仍为该状态

void ind_light_disp(uint ind_num)//点亮哪一位,就置1

{

uint i,j;

i = 0x80;

for(j=0; j<8; j++)

{

if((i&ind_num) == i)

{

CLK = 0; //此处与下面的CLK = 1结合产生一个上升沿

SDO = 0;

CLK = 1;

}

else

{

CLK = 0;

SDO = 1;

CLK = 1;

}

i >>= 1;

}

delay(10000);//此处延时很重要,不延时可能会出现闪烁现象

}

一个使用电路图(点亮一些灯):

c语言循环移位寄存器,[转载]关于移位寄存器74HC164的使用相关推荐

  1. 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

    移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...

  2. STM32 | C语言对寄存器的封装

    说明:这里以GPIO外设为例,介绍C语言对寄存器的封装.以此类推其他外设同样可以用这种方法来封装.本文有两部分构成: 1.介绍宏定义. 2.使用结构体封装寄存器列表. 1.宏定义 以封装STM32 G ...

  3. 设计一个8位双向循环移位寄存器vhdl

    设计一个8位双向循环移位寄存器vhdl 状态表如下: CLK RESET LOAD M 工作状态 × 0 × × 复位 ↑ 1 1 × 置数 ↑ 1 0 1 左移 ↑ 1 0 0 右移 (4)不考虑串 ...

  4. educode寄存器设计与应用之循环移位寄存器的设计、并行存取的移位寄存器的设计(在Logisim上实现)

    欢迎来到数电专题

  5. 16道嵌入式C语言面试题(转载)

    转自:http://blog.chinaunix.net/uid-26495963-id-3165021.html 预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常 ...

  6. 生信软件c语言,科学网—[转载]没有docker我真的不想动这样的生信软件 - 张成岗的博文...

    没有docker我真的不想动这样的生信软件 2020-03-26阅读 2620 C语言源代码需要编译的软件 最开始开发者都是C语言流派, 所以标准的源代码安装三部曲即可,即使 configure+ma ...

  7. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)

    [朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...

  8. 51单片机c语言定义寄存器r,c51特殊功能寄存器定义及作用

    单片机C51语言是由C语言继承而来的.和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台.C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力.对于具 ...

  9. GNU C 对标准C语言的扩展(转载 懵懵懂懂)

    GNU C 对标准C语言的扩展 为了方便使用,GNU C在标准C语言的基础上进行了部分方便开发的扩展.这里讲解一些开发中可能会用到的,或者使用频率比较高的内容. 1 零长度数组和变量长度数组 GNU ...

最新文章

  1. 图像处理之基础---周末戏说卷积
  2. linux下创建新用户以及删除
  3. vue 打印出git提交信息_规范git项目提交并自动生成项目commit log
  4. hadoop(一) 基本介绍
  5. 教小学妹学算法:搜索算法解决迷宫问题
  6. vscode pyqt 环境搭建
  7. 为Java应用程序提供了空前的代码保护控件DashO-Pro
  8. c语言求区间内素数个数_C语言题目
  9. opta球员大数据预测胜负_大数据预测4个特征,10个典型行业
  10. 2019各个省会城市全新DNS大全一
  11. 图片与mat文件的转换
  12. 【SVAC1】SVAC1与H.264支持特性比较
  13. 如何了解舆情传播的平台及路径?
  14. DDLMS-DFE算法
  15. Android如何在账户设置中添加App的账户
  16. Docker基本管理:上篇(Docker理论概述和基础命令)
  17. 计算机如何安装无线网络适配器,无线网络适配器是什么,无线网络适配器如何设置...
  18. c语言实现二分查找法
  19. uniapp接入萤石云 webview
  20. ls 如何给文件名中数字排序

热门文章

  1. 基于Kinect体感器控制的机械臂项目记录
  2. Android开发读取通讯录信息
  3. future cancel失败一例
  4. 应用在hiapk安卓市场分类排行榜中不显示的原因
  5. 在南方读研和在北方读研有多大差异?
  6. 0324的学习笔记----里面最重要的就是一个tom猫的动画,和涉及到的内存问题(创建imageview的两种方式,imagenamed就会形成缓存,占用很多内
  7. mysql的时区_MySQL时区支持
  8. ncs java 成都 面试_成都java工程师面试一般都是哪些问题,基础难不难!
  9. 献给减肥族的四例菜谱
  10. 上海东华计算机分数线,2020年东华大学上海分专业录取分数线