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 );
    }     
}
复制代码

 

posted @   ghostwu  阅读(13789)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
Copyright ©2017 ghostwu
点击右上角即可分享
微信分享提示