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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机+74hc595流水灯
( e' O0 C  i' o仿真原理图如下
8 X9 Z" u/ U+ [9 R& s' y+ ~( b, w1 w3 w
+ z+ i* g5 L+ h+ j$ t9 X2 z
2 z7 s. X7 Y0 J$ S  B* {单片机源程序如下:% e6 x, i+ n5 _
#include<reg52.h>
  K- \3 f% R; E; K' h) @#include<intrins.h>. K( Q& ]- e3 `! S8 n7 @- h) E9 Q
//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用
% V$ k) ~5 S% J5 d- m( A+ w) U- R) @; p# l8 C; e1 Y
typedef unsigned char uchar;: K/ B, [3 M) [6 C. q
typedef unsigned int uint;7 G& t# F  l' _8 D0 a3 ^. M$ v$ n
3 E1 h0 c# q  F& b6 C; L
/**********函数声明********************/
$ ?+ M5 t$ L+ L6 {void SendTo595(uchar byteData);3 j$ [3 \2 ?& u+ b2 C
/***********************************// H8 Z$ J: X# W, p

/ Y3 i$ }& F4 }0 l' `9 _# qsbit DS = P3^4;    //p3.4串行数据输入   DS
) D  v( n% X, N( |sbit SH_CP = P3^6;    //串行输入时钟,上升沿有效
0 i9 E/ {' M; ~) q: q  O! x9 dsbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效. J' }- O. T! ~  c3 k
char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};4 t0 k% K5 R( |$ M& }; C' E; z
2 G; U. I0 m0 D2 v
void delay(unsigned int n)//延时函数% H( J5 L  F; y! |8 O+ {2 M
{6 c; N  n! ]) c  g6 ]. W
    unsigned int i=0,j=0;
' v$ B6 }. ^0 s, T' \# x! n    for(i=0;i<n;i++)# o5 \5 ~( y8 \7 ~
        for(j=0;j<123;j++);3 R* M# l- U) a* t% C
}
) E1 u4 f0 F1 M1 \" y& ^
; P7 v8 U2 n6 e  j1 ~void main(); @: C. D; Z1 l5 x% W
{+ g+ D  y1 G5 L4 {
        int i;/ Y) \& O" L0 G2 R% D! M
        while(1)
  x7 C% N5 N, ?0 K        {+ D0 G$ Q: f( o
                for(i=0;i<8;i++)
4 J" D" h) @: i                {1 O, _. P* [! O% i6 a& I
                        ST_CP = 0;) z9 V* C" @: `* R5 v
                   SendTo595(LED[ i]);  //二进制:0101 0101- q! K( j* x3 J: W
                   delay(500);: N7 W* r# A( Z5 e% x
                }
4 F2 L6 R5 x/ w9 m* v* K        }- l. q+ ]/ f) }$ w: r) k, a
}
2 z1 x8 Z$ T+ a5 m# i, i
- D# P4 s. q' ]//发送一个字节数据给595再并行输出
9 r" o- F  m. V) K0 A- hvoid SendTo595(uchar Data)
5 M# p. `; m) t# G. J/ {! M4 _{" g; C; q( {7 _9 P, }8 a/ A
   char i=0;$ Y$ ]: w6 {# s( c# ?9 G
   for(i;i<8;i++)$ V/ ~0 \# H  J7 w; D' a
   {! z! S1 |% j) U' B, ~
                SH_CP = 0; 8 m  J+ h  i5 z& I
                 
' b% k/ Q+ s1 ^3 @3 G# P        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0# ?- ^- A+ g1 C; @1 S4 m
                 
' j! ]' L9 G0 v; x; c3 }- [        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010
  R  j& [5 J: G6 H
. I, \% {* }" z0 ~' `( Y5 ]        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期' y8 B* _0 R! N+ W" e/ D1 J, a& O
        _nop_();
* t5 S2 g6 s' f$ `7 T, a7 B& p" ~: h8 E
   }  * Q5 r* e: G: d
* U: \/ @, ?! T/ T, u3 ]6 k
   /*位移寄存器完毕,转移到存储寄存器*/
% k3 E8 ]. d1 X# g- ^0 k: x' _/ Y, M   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
; W: l' c: c4 x9 R( o   _nop_();
. }1 m- S# E1 q( o   _nop_();
8 r$ w2 e4 i* N5 E/ G9 {+ T
5 ]2 m7 x1 c4 d$ `}
2 H: a  P1 Z' ?$ B. K

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-20 18:04 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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