IO口扩展芯片,主要是解决单片机IO口太少。

74HC165:数据从并转串

74HC595:数据从串转并

两种芯片,都是通过时序电路,加上移位功能,进行数据传输

74HC165:数据从并转串。以下实例,实现8个独立按键,控制数码管的8段

  1. #include <reg52.h>
  2. #include <intrins.h>
  3.  
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;
  6.  
  7. void delay( u16 i ){
  8. while( i-- );
  9. }
  10.  
  11. #define GPIO_DIG P0
  12.  
  13. sbit IN_SG = P1^;
  14. sbit IN_DATA = P1^;
  15. sbit IN_CLK = P3^;
  16.  
  17. u8 read_74HC165(){
  18. u8 indata;
  19. u8 i;
  20. IN_SG = ; //先置入数据
  21. _nop_(); //等待一个机器周期
  22. IN_SG = ; //芯片切入 移位功能
  23. _nop_();
  24.  
  25. indata = ;
  26. for( i = ; i < ; i++ ){ //在时序电路作用下,移动8次,得到一个字节数据
  27. indata = indata << ;
  28. IN_CLK = ;
  29. _nop_();
  30.  
  31. indata |= IN_DATA;
  32. IN_CLK = ;
  33. }
  34. return indata;
  35. }
  36.  
  37. void main (){
  38. u8 hc165_data;
  39. GPIO_DIG = 0x0;
  40. while( ) {
  41. hc165_data = read_74HC165();
  42. if( hc165_data != 0xFF ) {
  43. GPIO_DIG = ~hc165_data;
  44. }
  45. }
  46. }

74HC595:数据从串转并,以下程序,实现流水灯效果

  1. #include <reg52.h>
  2. #include <intrins.h>
  3.  
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;
  6.  
  7. void delay( u16 i ){
  8. while( i-- );
  9. }
  10.  
  11. #define GPIO_DIG P0
  12.  
  13. sbit SRCLK = P3^; //移位寄存器时钟
  14. sbit STORE_RCLK = P3^; //存储寄存器时钟
  15. sbit SER = P3^; //串口输入数据
  16.  
  17. void hc595_send_data( u8 input_data ) {
  18. u8 i;
  19. SRCLK = ;
  20. STORE_RCLK = ;
  21. for( i = ; i < ; i++ ){
  22. SER = input_data >> ; //从最高位开始传送
  23. input_data <<= ; //把次高位移到最高位
  24.  
  25. SRCLK = ; //时序脉冲
  26. _nop_();
  27. _nop_();
  28. SRCLK = ;
  29. }
  30. STORE_RCLK = ; //时序脉冲
  31. _nop_();
  32. _nop_();
  33. STORE_RCLK = ; //把寄存器的数据 送到输出口
  34. }
  35.  
  36. void main (){
  37. u8 led_num;
  38. led_num = 0x01; //先让D11点亮
  39. while( ) {
  40. hc595_send_data( led_num );
  41. led_num = _crol_( led_num, );
  42. delay( );
  43. delay( );
  44. }
  45. }

51单片机:IO口扩展芯片用法(74HC165,74HC595)的更多相关文章

  1. 如何检测 51单片机IO口的下降沿

    下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿. 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有 ...

  2. 关于51单片机P0口的结构及上拉问题

    1.P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构.高电平时,V1打开,V2截止:低电平时,V1截止,V2打开.这种情况下不用外接上拉电阻.而且,当V1打开,V2截止,输出高电平的时候, ...

  3. 51单片机GPIO口模拟串口通信

    51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于:   分类: 深入C语言(20) 作者同 ...

  4. 单片机IO口驱动能力

    以STM32的IO口为例,最大的输出电流和灌入电流在芯片手册上都有说明.单个IO口一般都是十几mA到几十mA,同时总的VDD电流也有限制,大概为150mA.所以单片机驱动外设时,如果不是信号型而是功率 ...

  5. 关于51单片机IO引脚的驱动能力与上拉电阻

    单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. 单片机的输出电流,很大程度上是取决于引脚上的外接器件. 单片机输出低电平时,将允许外部 ...

  6. 关于51单片机IO引脚的驱动能力与上拉电阻设计方案

    转载自:http://bbs.dianyuan.com/article/20312-2 单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. ...

  7. STM32系列单片机IO口模式设置

    STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和 ...

  8. 实验1 单片机IO口应用及数码管显示

    1.   单片机驱动蜂鸣器的实验: a)         说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.5 b)        基本要求:控制蜂鸣器每2秒响0.5秒. #include &l ...

  9. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...

随机推荐

  1. GitHubPopular运行记录

    运行前准备: Android SDK 23.0.3 2.gradle-2.14.1-all 网盘地址 开始运行 按照项目描述中所说 npm i ------- ok react-native run- ...

  2. JavaScript工作体系中不可或缺的函数

    一.函数的概念 日常生活中,我们要完成一件事,总是习惯先有一个计划,后期按照计划,一步一步执行,则能够完成,并且达到一定效果实现一定的功能.在编程的世界里,“功能”可称呼为“函数”,因此“函数”即一段 ...

  3. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III

    阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...

  4. 抓包工具 Fiddler 使用介绍

    简介 Fiddler是一个抓包工具,可以将网络传输发送与接收的数据包进行截获.重发.编辑等操作.也可以用来检测流量.原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口 ...

  5. lua模块demo(redis,http,mysql,cjson,本地缓存)

    1. lua模块demo(redis,http,mysql,cjson,本地缓存) 1.1. 配置 在nginx.conf中设置lua_shared_dict my_cache 128m; 开启ngi ...

  6. 10 种保护 Spring Boot 应用的绝佳方法

    原文:developer.okta.com/blog/2018/07/30/10-ways-to-secure-spring-boot 译文:www.jdon.com/49653 Spring Boo ...

  7. [原创]K8Cscan插件之多种方式系统版本探测

    [原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...

  8. .NetCore外国一些高质量博客分享

    前言 我之前看.netcore一些问题时候,用bing搜索工具搜到了一些外国人的博客.翻看以下,有学习的价值,就分享在这里了. 个人博客 andrewlock.net 最新几篇如下,一看标题就知道很有 ...

  9. Android权限大全(链接地址整理)

    版权声明:本文为博主原创文章,未经博主允许不得转载. Manifest.permission https://developer.android.google.cn/reference/android ...

  10. 在koa中想要优雅的发送响应?看这就对了

    背景 前不久把项目中用了很久的一个伪中间件撸成了一个npm包发布了出去. 为什么叫伪中间件?正常的中间件的引用方式, 就拿body-parser为例. var Koa = require('koa') ...