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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机+74hc595流水灯9 M5 _0 [/ h( ?
仿真原理图如下: I$ P! ^( I; B

! O  e: O( j. j
9 E8 k" \" G/ l  q单片机源程序如下:7 d! x* o9 q6 k2 E- ~
#include<reg52.h>
  `% ?$ b- P% K$ C+ l( Q#include<intrins.h>
2 m' y  q& s; A; y3 ~0 @! A//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用) X  \8 t5 U% t1 T. V* J" e8 M

% C" Z, r; C' i! j! C3 c3 R; ttypedef unsigned char uchar;
5 r: |! s0 }0 d4 X+ ^: }$ y- Rtypedef unsigned int uint;, x% n7 D' ^) B
1 t. v; W" C$ `% G+ C
/**********函数声明********************/
( p* d, \. y6 {+ evoid SendTo595(uchar byteData);
4 J0 @& a" N( i5 P, d) X/***********************************/
+ Y& p* P0 M$ Q) i8 q0 D& R$ }: u8 Z$ o1 _* g/ A: X  ^
sbit DS = P3^4;    //p3.4串行数据输入   DS7 O. Q2 r+ @$ e% S9 j: M5 B; I8 b
sbit SH_CP = P3^6;    //串行输入时钟,上升沿有效
3 L+ u  j2 {! Wsbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效
" [7 d+ X+ v* _5 F3 p char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
( Z2 @5 t2 P+ O. t  O7 ^: O% y
0 f# V( l2 I4 r# u1 ~: ]void delay(unsigned int n)//延时函数; K( r. G! Y3 L9 e! g8 a+ y
{% J  p" u5 K- o9 g1 w# e
    unsigned int i=0,j=0;2 A) A( [" \' G: v. a8 E8 g
    for(i=0;i<n;i++)
; H) ?4 w9 }2 t- v        for(j=0;j<123;j++);) k6 X# F# R8 z! G3 j3 t
}
" x/ m' H& D3 H# u; `# u, O# ^3 V
% y* l3 l# H/ l1 R  w* H& \4 Wvoid main(), Z" l% _. x& `8 ]! f
{  ^* `5 g& C1 C; K4 x8 L' K8 G9 I
        int i;
2 `! `$ r2 o: T8 I' f& v( Q, n* ]        while(1)+ Q3 ?  H: H, G' o4 B: b1 l0 _9 Y
        {2 s6 F" W0 s8 [: R" P. O
                for(i=0;i<8;i++)" C* Z- u2 P7 U9 P+ r8 I: ]
                {. N  X2 d) x0 Y& X& @8 I# H& ^
                        ST_CP = 0;
0 r& B* ?3 }5 E                   SendTo595(LED[ i]);  //二进制:0101 0101& v9 V& z& E$ ~1 s
                   delay(500);* L# @9 p$ g) v% m6 ]2 ^
                }
( W; Q5 o8 Q( _. o/ u) |7 B5 e: U9 f  \        }0 L! C) G5 w( j
}% M5 h0 _3 N* I: |) C$ U  @

) y! i4 ]: Z% Q& J, T; T% v- r3 W/ o//发送一个字节数据给595再并行输出
: F; N. ^, W7 H3 [' G5 Rvoid SendTo595(uchar Data)
# v; I; J4 s- S1 q8 t{
8 O5 y* z% Q+ Q. r- q   char i=0;# l% O0 O2 ]9 \7 U/ j$ N2 U$ c
   for(i;i<8;i++)
5 J5 I& M$ `6 H- ^. o$ F; J" n) P   {
$ |7 G1 t" ^% B! z) q2 ]                SH_CP = 0;
$ N% k3 Z& ?& g$ F, `4 K                 & ]0 e5 ~6 W0 Z) y* C
        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0
, ~  a+ H1 Q. M                 " [- P; T- L; q& D1 q
        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010  Y  u: h- g8 @4 ]$ e0 E1 W, V
1 B) K+ H2 B* }$ \4 ~. O4 b& e5 {
        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期3 x+ k+ D& l, K- T, j9 ~; l
        _nop_();( E  G1 q- k+ b" N- u. I, ]
6 m* R3 J: r" U) k# ]' s
   }  
7 t. H4 r$ R7 t2 S' E" ]; i( o. N$ L/ ^- @
   /*位移寄存器完毕,转移到存储寄存器*/: R) c  H- h7 L  q( l3 F6 o* c
   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期
3 b: O4 D4 `* l   _nop_();( B. B7 J3 |; H( J; l! G, U
   _nop_();7 [1 t$ |( T" j# ?3 P- S9 W- \

5 ~/ y# T0 ?1 E( g4 o# w/ k- ~}; `7 h2 X; G) `% x) A) ^

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 10:24 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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