74HC595芯片的IO扩展(串转并)实验(包含硬件原理和软件编程解析和代码)

简介: 74HC595芯片的IO扩展(串转并)实验(包含硬件原理和软件编程解析和代码)
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
//特殊管脚寄存器的对应一般不可变
sbit rCLK=P3^5;//移位寄存器时钟输入---注:RCLK已被reg52.h定义使用,需要重新定义
sbit SRCLK=P3^6;//存储寄存器时钟输入
sbit SER=P3^4;//串行数据输入
#define LEDDZ_COL_PORT    P0    //点阵列控制端口
//使用矩阵控制点阵LED点亮  
//如0x01是最后一行点亮,其他不亮,则最后一行是1,其他是0,此时是00000001,十六进制是0x01
u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay_10us(u16 ten_us)//微秒级延时函数
{
    while(ten_us--);    
}
void delay_ms(u16 ms)//毫秒级延时函数
{
    u16 i,j;
    for(i=ms;i>0;i--)
        for(j=110;j>0;j--);
}
//芯片通过移位寄存器时钟和存储寄存器(函数hc595_write_data)实现0x01 0x02 0x04 0x08 0x10等(用ghc595_buf代替)点亮灯的操作
//串行数据输入:先转化为字节,并1位1位存储在SER(串行数据输入),后通过SRCLK(移位存储器)在0-1变化产生上升沿传递给RCLK(存储寄存器)
void hc595_write_data(u8 dat)
{
    u8 i=0;
    for(i=0;i<8;i++)//循环8次即可将一个字节写入寄存器中,因为1.2.3等都是1bit,8字节,需要1字节1字节的移动
    {
        SER=dat>>7;//从高位到低位存储
        dat<<=1;//将低位移动到高位
//形成0-1的变化,创造上升沿,才能传递给存储寄存器
        SRCLK=0;
        delay_10us(1);//需要延时函数给存储寄存器反应时间
        SRCLK=1;
        delay_10us(1);
    }
    rCLK=0;
    delay_10us(1);
    rCLK=1;//存储寄存器完成数据输出    
}
void main()
{    
    u8 i=0;
    LEDDZ_COL_PORT=0x00;//将LED点阵列全部设置为0,即LED阴极为低电平,形成电势差,才能点亮led
    while(1)
    {        
        for(i=0;i<8;i++)
        {    
            hc595_write_data(0x00);//消影---消除前面寄存器缓存数据,使肉眼更清晰
            hc595_write_data(ghc595_buf[i]);//写入新的数据
            delay_ms(500);//延时500ms----也可以用另一个延时函数,只是数值会比较大,u16不满足    
        }                                    
    }        
}

b5a9f50fb6e84d0cb7b37c2103c3025e.png

5e838d52085145e59a78ab620d0db974.png


相关文章
|
5天前
|
测试技术
函数式编程代码片段(无解析,代码纯享版)
函数式编程代码片段(无解析,代码纯享版)
6 0
|
4天前
|
负载均衡 算法
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
|
4天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
5天前
|
Web App开发 开发框架 前端开发
Open UI5 前端开发框架配套的 Mock Server 工作原理解析
Open UI5 前端开发框架配套的 Mock Server 工作原理解析
11 0
|
5天前
|
存储 Java Go
Go 语言切片如何扩容?(全面解析原理和过程)
Go 语言切片如何扩容?(全面解析原理和过程)
14 2
|
5天前
|
机器学习/深度学习 存储 算法
卷积神经网络(CNN)的数学原理解析
卷积神经网络(CNN)的数学原理解析
34 1
卷积神经网络(CNN)的数学原理解析
|
5天前
|
传感器 数据采集 存储
岩土工程监测仪器之一:振弦采集仪的工作原理解析
岩土工程监测仪器之一:振弦采集仪的工作原理解析
岩土工程监测仪器之一:振弦采集仪的工作原理解析
|
5天前
|
Rust 安全 程序员
使用Rust进行系统编程:安全性优势深度解析
【5月更文挑战第14天】Rust,Mozilla开发的系统编程语言,以其内存安全、并发支持和静态类型系统在系统编程中脱颖而出。所有权和借用检查机制消除内存错误,无锁并发原语提升安全性,静态类型减少运行时错误,最小权限原则降低权限风险。强大的社区支持和安全审计进一步确保了代码的安全性和稳定性,使Rust成为安全高效系统编程的理想选择。
|
3天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
4天前
HuggingFace Tranformers 源码解析(4)
HuggingFace Tranformers 源码解析
6 0

推荐镜像

更多