找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1526|回复: 0
收起左侧

51单片机基于74hc595流水灯程序与Proteus仿真

[复制链接]
ID:1031277 发表于 2022-6-1 15:29 | 显示全部楼层 |阅读模式
基于51单片机+74hc595流水灯
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
GIF 2022-6-1 15-24-01.gif

单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用

typedef unsigned char uchar;
typedef unsigned int uint;

/**********函数声明********************/
void SendTo595(uchar byteData);
/***********************************/

sbit DS = P3^4;    //p3.4串行数据输入   DS
sbit SH_CP = P3^6;    //串行输入时钟,上升沿有效
sbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效
char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay(unsigned int n)//延时函数
{
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

void main()
{
        int i;
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        ST_CP = 0;
                   SendTo595(LED[ i]);  //二进制:0101 0101
                   delay(500);
                }
        }
}

//发送一个字节数据给595再并行输出
void SendTo595(uchar Data)
{
   char i=0;
   for(i;i<8;i++)
   {
                SH_CP = 0;
                 
        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0
                 
        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期
        _nop_();

   }  

   /*位移寄存器完毕,转移到存储寄存器*/
   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
   _nop_();
   _nop_();

}

Keil代码与Proteus仿真下载:
基于74hc595流水灯.7z (61.62 KB, 下载次数: 38)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表