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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机+74hc595流水灯# `0 F% ~5 C5 v
仿真原理图如下
1 \; [+ S2 I6 O+ v: h: N9 E+ C8 h: K( \2 e+ E
9 J2 e, Z9 o% `8 C! F/ c
单片机源程序如下:( I) l; h. m8 e5 X5 L" ~, b
#include<reg52.h>/ v! Z7 X2 K! N3 N
#include<intrins.h>
0 W/ L3 q4 ?# c* G7 d//intrins.h函数,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用
1 O5 ]- Z% K) {2 W  X! c! B' a
7 ^# `- W9 L  h- G, I! e; atypedef unsigned char uchar;
% m2 L/ `: n- F) W/ V; jtypedef unsigned int uint;
5 ~# l% ]3 i& p* g/ S$ t: ~
; t% u; N( _' w9 I4 s+ [/ w8 Y: v/**********函数声明********************/7 B7 r. ]0 J9 [/ C# w
void SendTo595(uchar byteData);
+ ~' a4 P9 N& t7 D/***********************************/' @! D7 {$ R! V" F. Y  A' }
5 d) H# O4 V/ `
sbit DS = P3^4;    //p3.4串行数据输入   DS% {! S) @2 K+ ?: @$ \% t
sbit SH_CP = P3^6;    //串行输入时钟,上升沿有效3 w# D  s+ F! x" J* R7 ]3 h; \
sbit ST_CP = P3^5;    //串行寄存器时钟,上升沿有效
# X' E' N3 Q8 J  a char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
9 k+ P# m+ I! {* p" r" l( T( x
void delay(unsigned int n)//延时函数
- \8 j7 m$ f8 P" j& M' p) _2 e  B/ K{* A9 S! `8 G8 F( V* [$ I, d3 ]4 T
    unsigned int i=0,j=0;
/ a3 ~8 h. k: J    for(i=0;i<n;i++)
3 `* h4 U! T* u" P0 P+ h/ ^        for(j=0;j<123;j++);. y, V/ |* \  x; }* |* t1 i
}5 a9 o3 {  F6 \  B; A
- @! C2 ?; p3 `# @
void main()+ ?8 a$ k* U6 h/ y. m9 u& j
{# s6 I) V8 o  M% w- i! g
        int i;6 B' ^5 ~/ A9 F& {3 d8 u
        while(1)1 {& Y' l$ _; X
        {
7 x, E& M: I% n( M2 S( q) W* F                for(i=0;i<8;i++)- Y( U* d2 a- t- @" N9 e- h
                {
( s3 z4 T& F+ }, q  L0 o0 g, o                        ST_CP = 0;& Y2 Y; p$ c0 i' G- @: P8 ~
                   SendTo595(LED[ i]);  //二进制:0101 0101
% Z& g1 V3 R& v# o+ E+ `                   delay(500);/ V" |8 `; b. J; T4 ]
                }+ D1 Z$ t$ R' t4 \
        }( V* o% m5 I& `" k* c3 x
}5 f7 t9 i0 y) {5 L- p+ Q
4 h4 f+ _, d1 \
//发送一个字节数据给595再并行输出( m% k5 S1 a8 W. U3 N  c% W& `6 S& J
void SendTo595(uchar Data)6 n. w7 {, E+ e+ z( |
{
  l$ C% w9 H8 ?7 j, F7 o   char i=0;3 V3 R) c) R2 o( C  H
   for(i;i<8;i++)
) J; i5 p- P3 _# m1 M9 p. A) ]* s   {
0 Z* H0 N% m7 \5 {# d3 G" S                SH_CP = 0; 6 p$ b7 h% m+ [. p+ k
                 
4 O# U0 t" w* i+ c8 H6 Z5 U/ E        DS=0x80&Data;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0  {' B* W2 c) I" g. p2 v& ~
                 : x& t; K7 ?# S8 b& `, D& g
        Data=_crol_(Data,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010+ [; D8 h* S; G+ i! R

4 |8 Y3 a4 J  o0 ]$ I5 g& P        SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期, f+ `* U. _) Q, b2 f$ e
        _nop_();
6 I/ C( n: I0 ~8 b9 I' \# y' Z
" e. N1 K. D# w% H% W4 i% y7 d' [   }  ' [# e" h( ?; H1 r/ E
3 e' `; m/ b1 M' R
   /*位移寄存器完毕,转移到存储寄存器*/8 U: z/ T+ s; X8 N0 w
   ST_CP = 1;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期4 g- \9 k  T2 M+ o6 z, K$ `' G1 p+ W
   _nop_();
( y4 C% v3 e" g1 c& U/ c0 @# u   _nop_();
8 H8 O2 M7 t2 E( R- L# J, S
2 k* q& S2 W7 k}
8 B2 [  ]0 Y0 A' _

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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