AVRWARE++开发笔记7:74HC595串行控制LED灯实验

本文介绍如何使用单片机通过74HC595芯片控制24个LED,实现从全亮状态开始,按秒间隔逐列熄灭的效果。文中详细解释了74HC595的工作原理及其在实验中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


          本文只针对于初学者,高手请绕过!

    1、
实验目的

利用单片机的IO口模拟SPI总线时序逻辑,通过74HC595控制24LED,学会74HC595串行控制的使用方法。
 


    2、
实验内容
     编写一段程序,使24LED先全亮,然后以一秒为间隔从左至右的一列接一列的熄灭。

    
3、硬件原理
74HC595串行 控制LED灯硬件原理图如下图所示, 使用排线与端子P3相连,则单片机相应端口的0-2引脚与端子P3的CS_595_1、CLK_595_1、Data_595_1引脚相连接(例如,使用排线将P9与P3端子相连接,则PC0引脚接 CS_595_1 ,PC1引脚接 CLK_595_1 ,PC2引脚接 Data_595_1 )。 CS_595_1为74HC595的片选引脚用于控制 74HC595内部移位寄存器与引脚之间的锁存器, CLK_595_1为 74HC595的时钟引脚,该引脚每一个周期变化,都将向 74HC595内部移位寄存器输入1位数据, Data_595_1为数据引脚,其高低值将在 CLK_595_1变化的一个周期内送入 74HC595内部移位寄存器。
    对于1个
74HC595 其工作过程为,使用 CS_595_1 关闭 74HC595内部移位寄存器与引脚之间的锁存器,在 Data_595_1引脚上准备数据,操作 CLK_595_1使其变化1个周期,则 Data_595_1相应的 高低值送入了 74HC595 内部移位寄存器的第0位,如此循环8次,则向 74HC595的内部移位寄存器输入了8位数据,最先输入的在 74HC595的内部移位寄存器第7位上,最后输入的在 74HC595的内部移位寄存器的第0位上。数据输入完毕后,操作 CS_595_1打开 74HC595内部移位寄存器与引脚之间的锁存器,使得 74HC595内部移位寄存器的数值呈现在引脚上,然后关闭 锁存器继续后续操作。
    对于多个
74HC595的控制,仍然使用 CS_595_1、CLK_595_1、Data_595_1三个引脚,从原理图中可以看到,第1片 74HC595的Q7引脚接第2片 74HC595的Data引脚, 第2片 74HC595的Q7引脚接第3片 74HC595的Data引脚,如此连接可控制多个 74HC595。以3片 74HC595为例,操作前准备3个字节的数据,按照操做1片 74HC595的方法分3次将 3个字节的数据送入 第1片 74HC595,则最先进去的字节将传入第3片 74HC595,最后进去的字节传入 第1片 74HC595。传入完毕后,和上述方法一样, 操作 CS_595_1打开 74HC595内部移位寄存器与引脚之间的锁存器,使得 74HC595内部移位寄存器的数值呈现在引脚上,然后关闭 锁存器继续后续操作。  
图片 
    4、 实验参考程序及注解  
    更改映射层 0_logiclayer_config.h文件,下列程序是使能HC595,使其驱动程序能够加入到编译过程,并提示用户,还应在HC595相应的config文件中对595进行配置。
#define EXTERNAL_MODULE_HC595_MODE 1 //0:没有使用HC595芯片
//1:使用HC595芯片,其引脚配置相应的config文件中进行设置

     
更改映射层 3_ExternalModulelayer_HC595_config.h文件,下列程序的更改应根据原理图完成,当使P9与P3端子相连接后,则使用PORTC端口控制HC595,所以相应的HC595_PORT和HC595_DDR分别定义为PORTC和DDRC,HC595_CLOCK、HC595_CS和HC595_MOSI是具体的引脚号,查看原理图写入即可。
#define HC595_PORT PORTC
#define HC595_DDR DDRC
#define HC595_CLOCK BIT1
#define HC595_CS BIT0
#define HC595_MOSI BIT2

    更改逻辑层 0_logiclayer_main.c文件
 
//主程序
int main(void)
{
    //目标板初始化,该函数会自动初始化相应外设文件
    TARGET_Init();
    //后台主循环
    while(1)
    {
        //在这里完成自己的项目逻辑
HC595_WriteByte(0x00);    //向HC595写入1个字节数据,整体操作完成后,该数据被写入到第3片HC595中
HC595_WriteByte(0x00);     //向HC595写入1个字节数据,整体操作完成后,该数据被写入到第2片HC595中
HC595_WriteByte(0x00);     //向HC595写入1个字节数据,整体操作完成后,该数据被写入到第1片HC595中
HC595_SELECT;             //打开 HC595内部移位寄存器与引脚之间的锁存器
                                  //
使得 74HC595内部移位寄存器的数值呈现在引脚上,然后关闭 锁存器
TARGET_Delayms(1000,1);
HC595_WriteByte(0x01);    //第1列灭,0x01的二进制为00000001,注意电路中LED低电平点亮
HC595_WriteByte(0x01);
HC595_WriteByte(0x01);
HC595_SELECT;
TARGET_Delayms(1000,1);
HC595_WriteByte(0x03);     //第1-2列灭,0x03的二进制为00000011, 注意电路中LED低电平点亮
HC595_WriteByte(0x03);
HC595_WriteByte(0x03);
HC595_SELECT;
TARGET_Delayms(1000,1);    
HC595_WriteByte(0x07);     //第1-3列灭,0x07的二进制为00000111, 注意电路中LED低电平点亮
HC595_WriteByte(0x07);
HC595_WriteByte(0x07);
HC595_SELECT;
TARGET_Delayms(1000,1);   
HC595_WriteByte(0x0f);     //第1-4列灭,0x0f的二进制为00001111, 注意电路中LED低电平点亮
HC595_WriteByte(0x0f);
HC595_WriteByte(0x0f);
HC595_SELECT;
TARGET_Delayms(1000,1);
HC595_WriteByte(0x1f);     //第1-5列灭,0x1f的二进制为00011111, 注意电路中LED低电平点亮
HC595_WriteByte(0x1f);
HC595_WriteByte(0x1f);
HC595_SELECT;
TARGET_Delayms(1000,1);
HC595_WriteByte(0x3f);     //第1-6列灭,0x3f的二进制为00111111, 注意电路中LED低电平点亮
HC595_WriteByte(0x3f);
HC595_WriteByte(0x3f);
HC595_SELECT;
TARGET_Delayms(1000,1);
HC595_WriteByte(0x7f);     //第1-7列灭,0x7f的二进制为01111111, 注意电路中LED低电平点亮
HC595_WriteByte(0x7f);
HC595_WriteByte(0x7f);
HC595_SELECT;
TARGET_Delayms(1000,1);
HC595_WriteByte(0xff);     //第1-8列灭,0xff的二进制为11111111, 注意电路中LED低电平点亮
HC595_WriteByte(0xff);
HC595_WriteByte(0xff);
HC595_SELECT;
TARGET_Delayms(1000,1);
/*
********************************************************************************
喂狗语句,大部分工程项目都不应去除
********************************************************************************
*/
        #if WDT_MODE!=0
    TARGET_WatchDogReset();
        #endif
    }
    return 0; //永不执行
}


原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163 
 CSDN:http://blog.csdn.net/qingwufeiyang12346
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

snmplink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值