74HC595点亮8个LED灯

一、原理介绍

595有两个寄存器,都是8位的,如下所示:

595是串入并出带有锁存功能移位寄存器,它的使用方法简单:

- -  在正常使用时 /SCLR接高电平,/G接低电平。

- -  从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕

- - 输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。

不同的595引脚名称会不一样,但是功能是一样的。大家看引脚序号即可。以下是595引脚图:

595具体使用的步骤:
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。(用到SER数据输入引脚)
方法:送位数据到595。

第二步:目的:将位数据逐位移入74HC595,即数据串入(用到SCK引脚,移位寄存器
方法:SCK 产生一上升沿,将595上的数据移入74HC595中的移位寄存器中,从低到高

第三步:目的:并行输出数据。即数据并出(用到RCK引脚,锁存器
方法:RCK 产生一上升沿,将由SER上已移入数据寄存器中的数据送入到输出锁存器。

二、proteus  仿真画图

由于手头上没有595的硬件,用proteus进行仿真。

接线:

单片机的P1.4接按键;

单片机的P1.5接 LED;(起初用来测试按键,可忽略)

单片机的P2.0接595的DS(即SER)

    单片机的P2.1接595的SH_CP(即SCK)

  单片机的P2.2接595的ST_CP(即RCK)

595的8个输出口,接8个LED灯的正极

功能:

按下按键,8个LED灯亮起;(长按、短按)

松开按键,8个LED灯熄灭;

三、单片机程序

1、定义io、标志位

sbit SER_595=P2^0;     // DS 串行数据输入端
sbit RCK_595=P2^2;    // ST_CP 数据:移位寄存器--To--存储寄存器 (上升沿)
sbit SCK_595=P2^1;     // SH_CP 数据移位:QA--QB--QC-- ... --QH   (上升沿)

sbit Button=P1^4;        //按键
sbit LED=P1^5;
uchar Btn_State=1;      //按键状态标志
uchar Count_Put=0xFF;   //取反标志

2、发送数据函数:

//发送数据
void HC595_Send_Data(uchar send_data)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        if((send_data<<i)&0x80)//判断最高位是否是1
            SER_595=1;          //是1,则使SER=1,
        else  SER_595=0;        //是0,则使SER=0

        SCK_595=0;//上升沿(移入数据)
        _nop_();
        _nop_();
        SCK_595=1;
    }
}

函数功能解释:

(1)一次只能发送8位数据,循环8次以下工作:

- - 将这8位数据和先向左移 i 位,再和0x80做与运算,从而判断数据的第一位是0还是1,进而使SER=0或者1

- - 接着给SCK_595一个上升沿脉冲,微妙级,将最高位数据0或者1送入595的移位寄存器

(2)i从0开始,也就是从数据的最高位开始,假如数据为01101100,则0先被送至移位寄存器,接着是1,以此类推。

3、输出数据函数:

//输出数据
void HC595_Put_Data()
{
    RCK_595=0;
        _nop_();
        _nop_();
    RCK_595=1;
}        

4、主函数:

void main()
{
      LED=1;//初始关闭
        while(1){    

            //按键控制8个LED灯
            if(Button!=Btn_State)  //按下 Button=0  Btn_State=1
            {
                    HC595_Send_Data(0xFF&Count_Put);
                    HC595_Put_Data();
                   Count_Put=~Count_Put;
                    LED=~LED;
                    Btn_State=Button;  //Button=0  Btn_State=0
            }
        }
}

四、现象

另外:看到有篇文章写的很好,大家可以去看看这个:

http://www.21ic.com/jichuzhishi/datasheet/74HC595/data/757249.html

原文地址:https://www.cnblogs.com/zeng-1995/p/11704557.html

时间: 2024-11-08 14:14:49

74HC595点亮8个LED灯的相关文章

2016.12.12 点亮第一个LED灯

一.keil编译程标准流程 注意事项: 1.建立的 工程 和 .c文件 文件名一样. 二.LED模块图 三.点亮第一个LED灯代码:    

使用keil SDK方式点亮mini2440的led灯

最近在使用mini2440做开发,网上很多教程和实际操作不太一致,导致入门花费时间长.经过整理,目前mini2440点亮led灯方法有,keil mdk,linux环境编译,使用minitools下载即可. mini2440分为nor flash和nand flash两种,一般小于4k程序可以直接运行,大于4K的程序需要预先加载引导程序,从存储位置拷贝至内存中.下面来说说mini2440究竟是如何点亮led灯的. 方法一:使用keil mdk的方式,首先下载MDK,使keil包含s3c2440这

nodejs和树莓派开发以及点亮RGB的LED灯代码

前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ssh [email protected](ip)密码:raspberry 设置显示设备 推荐选购3.5吋或者5吋的HDMI显示设备,我第一次买的3.2吋的串口显示器,占用了我20个串口的针脚. 设备链接见这里 使用3.5吋显示器 cd /boot/LCD-show/./LCD35-show使用HDMI

[MSP430DriverLib-1]使用库开发并点亮第一个LED灯

???? MSP430DriverLib库下载地址:http://www.ti.com/tool/MSPDRIVERLIB ???? 下载后进入driverlib文件夹,选择对应的型号,这里我选择的是MSP430F5xx_6xx,进入后将里面的文件都复制到你的msp430工程目录下即可.这里我将要复制的文件都放在DriverLib文件夹里. ???? 这里我用的是TI的MSP430F5529 LaunchPad Evaluation Kit的板子.首先我们来点亮第一个LED,以下为源代码: #i

GPIO接口及点亮第一个LED灯

一.GIPIO介绍 General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 1.GPIO的优点 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA). 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作.

第8课 点亮第一个LED灯

8.1 点亮LED 硬件连接图, 由硬件图可知,当175引脚GPIO[0]输出为0时,LED点亮,当GPIO[0]输出为1时,LED就熄灭,GPIO寄存器的基地址为0x8000d000,下图为用到的几个寄存器的偏移地址 首先,选中GPIO引脚, *((unsigned short *)(0x8000d000+0x00)) = 0x5555; *((unsigned short *)(0x8000d000+0x04)) = 0x5555; 然后,GPIO[0]作为输出,其余的引脚置为输入. *((

BlinkLED 点亮第一个LED灯(C#)

界面: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox Name="infoText" Text="Ready" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center&q

BlinkLED 点亮第一个LED灯

import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(25,GPIO.OUT) while True: GPIO.output(25,GPIO.HIGH) time.sleep(0.5) GPIO.output(25,GPIO.LOW) time.sleep(0.5)

1.2.第一个实验——点亮LED灯

1.2.第一个实验--点亮LED灯 预备知识: (1)位.字节.IO端口.IO口 字节是内存管理的最小单位,一个字节是八位,每一位可以存放一个二进制位(0或者1).一个IO端口包括一组IO口,一般一组是八个,一个端口就是一组IO引脚.一个IO口对应一个二进制位,一个IO端口对应一个字节. (2)二进制和十六进制的转换 一个十六进制位等于四个二进制位,比如0xff对应二进制是1111 1111 实验目的:点亮八颗LED灯 实验过程分析: (1)八颗LED分别由八位二进制位来控制,二进制位是1时LE