74HC595控制8个LED流水灯 实现不了功能

2019-07-15 18:37发布

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
uint i;
void delay(uint);
void WR_5951();
void OUT_5951();
sbit SH_CP=P0^0;
sbit ST_CP=P0^2;
sbit DS=P0^1;
uchar code TB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/*将数据输入移位寄存器*/
void WR_5951()
{ SH_CP=0;
  for(i=0;i<8;i++)
   {temp=temp<<1;
    DS=CY;
    SH_CP=1;
    SH_CP=0;
   }
}
/*将数据输入寄存器并输出*/
void OUT_5951()
{ ST_CP=0;
  ST_CP=1;
  delay(1);
  ST_CP=0;
  delay(1);
}
/*延时子程序delay(100)约延时1S*/     
void delay(uint z)
{
   uint x,y;
   for(x=1760;x>0;x--)
   for(y=z;y>0;y--);

}
/*主程序*/
void main()
{   
for(i=0;i<8;i++)
        {
            temp=TB[i];
                 WR_5951();
                 OUT_5951();
       delay(1000);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
阿信509
1楼-- · 2019-07-16 17:04
想我这样改一下
uchar code TB[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
2474344106
2楼-- · 2019-07-16 20:07
阿信509 发表于 2014-9-3 13:16
想我这样改一下
uchar code TB[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

不行 还是一样的结果  刚刚想学单片机就遇到解决不了的问题
阿信509
3楼-- · 2019-07-17 00:06
 精彩回答 2  元偷偷看……
2474344106
4楼-- · 2019-07-17 05:10
阿信509 发表于 2014-9-3 15:35
那这样,先送一个固定的值,看亮的对不对

/*主程序*/
void main()
  {
      temp=0xfe;
    WR_5951();
    OUT_5951();
    delay(1000);
}用您说的方法,我只设定第一个LED亮,但是仿真的结果是 开始8个全亮,然后7个熄灭 只有第一个亮,会不会单片机上电之后P2口默认为高电平使SHPC=H STCP=H
OE=L所以 74HC595自己输出一个0000 0000 使8个灯亮 单片机执行指令后使第一个亮。
注: 我单独的使74HC595复位 它也能点亮8个灯
2474344106
5楼-- · 2019-07-17 07:23
wang1414 发表于 2014-9-3 20:08
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 ...

谢谢帮顶 ,可以帮忙解决这个问题吗?
juncheng214
6楼-- · 2019-07-17 08:53
ds=cy   cy是什么?来自: Android客户端

一周热门 更多>