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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机+74hc595流水灯. H" n; X3 c9 E; {) J% q* v1 O
仿真原理图如下
3 ]7 S' d7 u% G& ^
+ W- \) z1 r+ E
( d0 I5 s7 Y/ t* y/ S0 t1 t/ C3 O单片机源程序如下:# ?9 O8 }1 Q( X% y
#include<reg52.h>7 T  P6 Z# c* I
#include<intrins.h>
* ?# j# t! {6 Z. @+ n) ?//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用
' }. i& I* G/ r6 x  L' e4 P
, _! u( L4 u8 ztypedef unsigned char uchar;
7 j+ T. @+ j: y! O/ L$ U$ [5 @typedef unsigned int uint;
+ }, D) l# }( p. e' Y- b
) h  w) B0 s. t4 B. K% o/**********函数声明********************/
- l! @6 v& f2 B/ P& O3 ^, Hvoid SendTo595(uchar byteData);4 ?6 [* |# @7 Z' L8 f) M6 O) m3 I
/***********************************/
  T2 ^# \* D0 X. S' P: M
5 c) \% R" Y+ Q$ W' Osbit DS = P3^4;    //p3.4串行数据输入   DS
4 j, C) |; L& p4 \% q, esbit SH_CP = P3^6;    //串行输入时钟,上升沿有效- @$ l" p5 u9 {( \1 e
sbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效6 J8 ~0 M( |# _0 P: p! @
char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
2 s* a( m- `; P6 l" W4 B6 \, Z; g1 I0 a/ S! Q0 e8 m
void delay(unsigned int n)//延时函数
* a. h% L( j2 e{
1 [+ U- d! t2 m1 O& F7 N    unsigned int i=0,j=0;' [% \2 }3 r( y! g: _  `; ]
    for(i=0;i<n;i++)
* t, o. L! z8 g5 t1 Q& I/ G        for(j=0;j<123;j++);5 L- l; v7 q. h( C  \' p/ P" Q+ g! v
}* A1 z# P- C- l% b* |% S
3 N) q/ y! y, A7 H: Q( W
void main()
! w) o" `5 l; I- V2 A# L* q{
  H0 H0 C- ?; P  W5 W9 Z( o6 [        int i;+ s: A) d! `# k' q: p6 s- u1 ^
        while(1)
0 N& O1 t# i0 B1 a4 Z        {
$ W6 Y: O5 U' U% I5 k6 `' n                for(i=0;i<8;i++)
1 i) ~; a; w. J7 Y% |- c' {. F* O                {
% {  {$ n* g6 s8 \6 G* N0 J                        ST_CP = 0;' L' b8 S; x% }
                   SendTo595(LED[ i]);  //二进制:0101 0101" f2 `9 I* E( a3 I- ?# C* C
                   delay(500);6 N& \9 \! I/ b. u; q
                }* x* D( m; Y; F
        }" @9 i; \! ~/ E" l  W
}6 w4 Q' o7 T( l! a, m' n
. H# v% [5 n& r9 C
//发送一个字节数据给595再并行输出
* O6 }4 c3 k7 w) H3 W8 Avoid SendTo595(uchar Data)
! ^9 i( @' i0 X1 R' K{
$ f; W* `6 E: ?( ~   char i=0;" t7 p) i# @, @
   for(i;i<8;i++)0 f8 I2 X2 Z+ X- C) v; N& [. r9 l
   {
7 v+ G, H4 y. U9 G5 X* |& B5 |                SH_CP = 0; % U. Q. C, u" p& j0 Y8 q
                 
9 l- Q( b9 O4 ?# T/ N8 J0 d/ @        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0
5 F( j2 r+ V2 ^0 U4 v0 k                 
$ p- }$ Z- d7 |9 u7 M$ T        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010- l. W/ U: h+ ^  L0 a: C5 ^

$ E# E( O; x1 y0 Y4 j        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期4 b3 ?) ]% N% ]' T0 n' m; \
        _nop_();
6 R$ `0 Z& n2 I# O
3 v, e6 w  {9 [& J3 N   }  
6 T7 d( p- ?" D& H
$ }0 c  t- U5 Y: d- {( i8 E- G   /*位移寄存器完毕,转移到存储寄存器*/1 u0 T6 G& V  P! A+ I+ v
   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期# }, d/ ^: P& g7 `) u/ s* q
   _nop_();
* f* r, E: u2 f6 T   _nop_();# S9 Y% h+ o" I) [
2 N) R- M. v/ Z9 q
}" F4 B  r' t1 W* k1 t

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 23:05 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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