找回密码
 注册
关于网站域名变更的通知
查看: 124|回复: 2
打印 上一主题 下一主题

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

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-7 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机+74hc595流水灯+ X; m$ c. j: x2 H% _
仿真原理图如下3 \; r$ r5 R6 f9 |+ N

0 E; N% H3 f. U3 Z' z
! z: d1 V/ o6 B3 M单片机源程序如下:% i% f, l% T# U! P6 V
#include<reg52.h>
7 u# I+ E3 D0 h5 b#include<intrins.h>
' O1 @% k5 k  v' Z5 d//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用6 D* f+ z1 I: W0 z
! Y) e2 F7 Z6 R/ N& o- Y3 g
typedef unsigned char uchar;1 A5 R; }7 v/ {3 e7 {  w
typedef unsigned int uint;
& w# P+ U+ M, M7 _# q% {- s- ^3 N% [, y7 E6 F
/**********函数声明********************/
( l, W* F0 {6 y" p+ ^+ ]void SendTo595(uchar byteData);
2 U& t+ T8 ^0 z% _1 H# d7 @/***********************************/
5 l1 c4 D  x! ?' a9 p% I# J* c1 D/ y0 y3 Y8 s7 b
sbit DS = P3^4;    //p3.4串行数据输入   DS5 O  x) ^( e+ h2 O' F1 z, a
sbit SH_CP = P3^6;    //串行输入时钟,上升沿有效9 n5 V1 y$ c& {' B
sbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效# |1 \$ C( ~' T# T8 P' I4 W
char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
, T2 a; f) B2 ^$ g3 V- ?
2 t3 X  N' \3 P1 j% U% ]void delay(unsigned int n)//延时函数
; u) L9 }1 W( }/ ?! P0 w{$ @% b2 ~8 s* c
    unsigned int i=0,j=0;
6 y3 J  N" i" M: M7 P8 K    for(i=0;i<n;i++)8 }2 h6 ]# v0 s2 k" s0 V' `" A
        for(j=0;j<123;j++);& Q9 m+ B, d4 }4 _5 M8 {
}
: ?3 G. Y2 D8 ]0 R1 l* t. }
4 m* o( q) G& {1 N' w3 Yvoid main()+ A" h. w, H+ {& a# k
{0 W/ t' ]0 g+ V4 i5 c+ I; ^/ u
        int i;% T& \  f$ `" `% K; N, r/ t
        while(1)
' v+ Y' M, }& g5 |( M$ L9 e        {3 [( P' j0 \6 ~: y; w3 |/ s
                for(i=0;i<8;i++)
2 ]/ I1 h0 B3 Z8 G                {
$ A6 A' H* j+ w) u$ L! u  L                        ST_CP = 0;
" r( e. d$ ~/ t2 S! d1 E8 _  `                   SendTo595(LED[ i]);  //二进制:0101 0101) S5 z" S( ~3 I$ }5 L
                   delay(500);
5 }- s7 @4 J, P( e9 u7 F! V                }
7 e0 c0 W& J8 Q& _        }9 ^7 r6 B5 y+ {" Q1 R" `
}5 V0 i) q+ K% M! @8 z' ^( N4 U3 C
  k& @& d. _2 t7 U- d
//发送一个字节数据给595再并行输出; c9 c& X, ]7 |6 G9 T6 f% j
void SendTo595(uchar Data)1 b8 p4 X; m; x+ h
{5 C$ b/ J: }7 s5 y5 ]
   char i=0;
! {+ @; H7 p# J& ^$ G   for(i;i<8;i++): {& E" W) H8 J) i' L6 w
   {
* t  h  b1 k1 G! d1 Q+ e                SH_CP = 0; 6 r; J$ O! y; r! ^, W/ C3 M, z
                 / G9 V$ L: w0 X
        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0
, a) }. \8 |' v2 w7 x) |                 
+ F3 P7 U4 w$ j% K, d, a5 n        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010
9 n6 f; Q8 M. A3 z$ |( |: R5 ]* L6 x: {
        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期8 ^5 n9 Q+ A' D8 r# P
        _nop_();
8 x, q; c- G. _( U& P9 u: M% C4 l3 L
   }  
' Y4 t0 a) X8 R5 [$ G' g. p; {
& v( H8 R$ `/ }4 P! y) U/ [   /*位移寄存器完毕,转移到存储寄存器*/# C7 n# s# @! D/ A1 E# `1 s  A( @  ~
   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
5 T* ]: J6 D: t/ a8 L   _nop_();" G0 r4 ]! g4 y0 r1 X, p' j
   _nop_();4 Y+ K. G$ o5 @  N2 n+ l2 o

1 R! @8 L  O4 e% i. M) w# Z( p2 |}, {+ T" p* K2 a; m( n

该用户从未签到

2#
发表于 2022-6-7 11:30 | 只看该作者
来了来了,学习学习。

该用户从未签到

3#
发表于 2022-6-7 16:54 | 只看该作者
来了,学习学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-24 17:54 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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