51单片机:IO口扩展芯片用法(74HC165,74HC595)

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

74HC165:数据从并转串

74HC595:数据从串转并

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

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

#include <reg52.h>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

void delay( u16 i ){
    while( i-- );
}

#define GPIO_DIG    P0

sbit IN_SG = P1^6;
sbit IN_DATA = P1^7;
sbit IN_CLK = P3^6;

u8 read_74HC165(){
    u8 indata;
    u8 i;
    IN_SG = 0; //先置入数据
    _nop_(); //等待一个机器周期
    IN_SG = 1; //芯片切入 移位功能
    _nop_();

    indata = 0;
    for( i = 0; i < 8; i++ ){ //在时序电路作用下,移动8次,得到一个字节数据
        indata = indata << 1;
        IN_CLK = 0;
        _nop_();

        indata |= IN_DATA;
        IN_CLK = 1;
    }
    return indata;
}

void main (){
    u8 hc165_data;
    GPIO_DIG = 0x0;
    while( 1 ) {
        hc165_data = read_74HC165();
        if( hc165_data != 0xFF ) {
            GPIO_DIG = ~hc165_data;
        }
    }
}

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

#include <reg52.h>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

void delay( u16 i ){
    while( i-- );
}

#define GPIO_DIG    P0

sbit SRCLK = P3^6; //移位寄存器时钟
sbit STORE_RCLK = P3^5; //存储寄存器时钟
sbit SER = P3^4; //串口输入数据

void hc595_send_data( u8 input_data ) {
    u8 i;
    SRCLK = 1;
    STORE_RCLK = 1;
    for( i = 0 ; i < 8; i++ ){
        SER = input_data >> 7; //从最高位开始传送
        input_data <<= 1; //把次高位移到最高位

        SRCLK = 0; //时序脉冲
        _nop_();
        _nop_();
        SRCLK = 1;
    }
    STORE_RCLK = 0; //时序脉冲
    _nop_();
    _nop_();
    STORE_RCLK = 1; //把寄存器的数据 送到输出口
}

void main (){
    u8 led_num;
    led_num = 0x01; //先让D11点亮
    while( 1 ) {
        hc595_send_data( led_num );
        led_num = _crol_( led_num, 1 );
        delay( 50000 );
        delay( 50000 );
    }
}

原文地址:https://www.cnblogs.com/ghostwu/p/9153204.html

时间: 2024-08-01 14:06:30

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

51单片机IO口模拟UART串口通信

#include <reg52.h>#include "main.h"#include "smartcard.h"#include "stdio.h" typedef enum { false, true }bool; #if 0sbit PIN_RXD = P1^0; //接收发送同一个引脚定义sbit PIN_TXD = P1^0; //接收发送同一个发送引脚定义sbit PIN_CLK = P3^1; //智能卡时钟引脚定义sb

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

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验【原创!】

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验  十一长假在家快烂了,没事儿做,DIY技术搞起来!  [关于12C增强型单片机I/O口的工作类型实验研究] 文中动画视频效果下载: STC单片机头文件[51CTO-->单片机-->LED感应亮灭实验] 下载链接 链接:http://pan.baidu.com/s/1pJKK4w7   密码:a0re  1.用强推模式,点亮一个LED  /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C4052AD 晶振:无要

把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式

/**原理图以及各74HC595的IO口功能见上一例****/ #include "REG52.H"#define const_time_level 200 void initial_myself();void initial_peripheral();void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelayLong);void led_flicker();void hc595_dr

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

单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. 单片机的输出电流,很大程度上是取决于引脚上的外接器件. 单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”:单片机输出高电平时,则允许外部器件,从单片机的引脚,拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”. 这些电流一般是多少?最大限度是多少? 这就是常见的单片机输出驱动能力的问题. 早期的 51 系列单

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

STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和输出寄存器GPIOx_IDR和GPIOx_ODR,1个32位置位复位寄存器GPIOx_BSRR,1个32位锁定寄存器GPIOx_LCKR和2个32位复用功能选择寄存器GPIOx_AFRH和GPIOx_AFRL. GPIO的输出状态可以配置为推挽或开漏加上上拉或下拉.输出数据既可以来自输出数据寄存器,

单片机 IO口配置模式介绍

1.准双向口 2.双向口 双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错.而双向口则不需要做此动作,因为双向口有悬浮态. 准双向口就是做输入用的时候要有向锁存器写1的这个准备动作,所以叫准双向口. 真正的双向口不需要任何预操作可直接读入读出. 1>准双向一般只能用于数字输入输出,输入时为弱上拉状态(约50K上拉),端口只有两种状态:高或低. 2>双向除用于数字输入输出外还可用于模拟输入输出,模拟

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

IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比较长的篇幅介绍IO口的原理.也是查阅了不少资料,确保内容正确无误,花了很长时间写的.IO口原理原本需要涉及很多深入的知识,而这里尽最大可能做了简化方便理解.这样对于以后解决各种IO口相关的问题会有很大的帮助. IO口等效模型是本人独创的方法,通过此模型,能有效的降低对IO口内部结构理解的难度.并且经查阅资料确认,这种模型和实际工作原理基本一致. ========================================== 前面说了

单片机小白学步系列(二十二) IO口:蜂鸣器的使用/三极管的工作原理

2014-11-22更新:感谢Ireland同学的提醒,修改了PNP型三极管驱动电路,蜂鸣器从三极管的发射极改到了集电极,这样效果会更好,电路也更合理.同时增加了备注4. ====================================== 这一篇继续上一篇的内容,我们来做实验四:按键控制有源蜂鸣器,按下按键蜂鸣器响,释放按键不响. 蜂鸣器 实验四之前简单介绍下蜂鸣器.蜂鸣器有两种,无源蜂鸣器和有源蜂鸣器,一般用于发出报警的声音.声音是由震动产生的,大家都见过喇叭,喇叭里面有磁铁和线圈.