标题: 我根据74hc595手册 写了个单片机程序 但是出现了问题 希望大家能给我点帮助 [打印本页]

作者: 我要51啦    时间: 2020-2-25 16:37
标题: 我根据74hc595手册 写了个单片机程序 但是出现了问题 希望大家能给我点帮助
流水灯是共阳极的 所以仿真运行的时候  实验现象:流水灯会全亮一会 然后 就变得全灭了 然后就不再变化了


问题: 我写的程序要求的是 亮灭亮灭 然后再流水 为什么 就只亮灭了一次 就不再变化了呢

各位大佬能指导下我嘛

单片机程序如下:

#include <reg52.h>
#include <intrins.h>
#include <delayms.h>

#define uchar unsigned char
#define uint unsigned int

uchar led_buff;

sbit DS1=P2^6;
sbit ST_CP1=P1^7;
sbit SH_CP1=P2^5;

void led8_Init();
void led8();

void led_sendbyte(uchar byte);
void led_595();



void main(void)
{
    led8_Init();
    while(1)
    {
        led8();
    }
}

void led8()  //流水灯
{
led_sendbyte(led_buff);
led_595();
led_buff=_crol_(led_buff,1);
delayms(500);
}

void led8_Init()  //初始化流水灯
{
led_sendbyte(0xff);
led_595();
delayms(500);
led_sendbyte(0x00);
led_595();
delayms(500);
led_sendbyte(0xff);
led_595();
delayms(500);
led_buff=0xfe;
}
void led_sendbyte(uchar byte) //传输8位数据
{
uchar i,num;
num=byte;
for(i=0;i<8;i++)
{
  if(num&0x80)
   DS1=1;
  else
   DS1=0;
  SH_CP1=0;
  _nop_();_nop_();
  SH_CP1=1;
  num=num<<1;
}
}
void led_595() // 启动传输
{
ST_CP1=0;
_nop_();_nop_();
ST_CP1=1;
}



作者: wulin    时间: 2020-2-25 21:40
程序要求的是 亮灭亮灭 然后再流水
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. //#include <delayms.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit DS1=P2^6;
  7. sbit ST_CP1=P1^7;
  8. sbit SH_CP1=P2^5;

  9. uchar code table[]={
  10.                 0xfe,0xfd,0xfb,0xf7,
  11.                 0xef,0xdf,0xbf,0x7f};

  12. void delay(uint z)
  13. {
  14.         uchar x;
  15.         while(z--)           //1ms延时程序
  16.         for(x=120;x>0;x--);
  17. }
  18. void led_sendbyte(uchar byte) //传输8位数据
  19. {
  20.         uchar i,num;
  21.         num=byte;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 if(num&0x80)
  25.                         DS1=1;
  26.                 else
  27.                         DS1=0;
  28.                 SH_CP1=0;
  29.                 _nop_();_nop_();
  30.                 SH_CP1=1;
  31.                 num=num<<1;
  32.         }
  33.         ST_CP1=0;
  34.         _nop_();_nop_();
  35.         ST_CP1=1;
  36. }

  37. void main(void)
  38. {
  39.         uchar i;
  40.         for(i=0;i<2;i++)
  41.         {       
  42.                 led_sendbyte(0x00);
  43.                 delay(500);
  44.                 led_sendbyte(0xff);
  45.                 delay(500);
  46.         }
  47.         while(1)
  48.         {
  49.                 for(i=0;i<8;i++)
  50.                 {       
  51.                         led_sendbyte(table[i]);
  52.                         delay(500);
  53.                 }
  54.         }
  55. }

复制代码

作者: csmyldl    时间: 2020-2-26 00:55
把 led8_Init();放进while循环中就会有了

void main(void)
{
  uchar k;
    while(1)
    {
        led8_Init();     //亮灭
        led8_Init();     //亮灭
       for (k=0;k<8;k++)    //流水
        led8();
    }
}
作者: haierzaifei11    时间: 2020-2-26 09:16
把 led8_Init();放进while循环中就会有了
作者: HC6800-ES-V2.0    时间: 2020-2-26 09:54
初始化595,只要一次led_sendbyte(0x00)就可以了,一定要先用。当然,如果这样led灯亮了,就要初始化led灯,再来一次led_sendbyte(0xff)就好了。
作者: 我要51啦    时间: 2020-2-26 13:49
昨天经过实验 发现是因为我把keil运行模式改成了large 我仿真时用的AT89c52而写程序用的是STC 所以出现了问题 我把能放进code里面的数组都放进去了 把运行模式调回了small 现在已经能成功运行了 谢谢大家
作者: singrain    时间: 2020-2-26 15:33
我要51啦 发表于 2020-2-26 13:49
昨天经过实验 发现是因为我把keil运行模式改成了large 我仿真时用的AT89c52而写程序用的是STC 所以出现了问 ...

发张电路原理图看看,共同学习一下。
作者: 我要51啦    时间: 2020-2-26 21:46
电路图

I@1W6FZOAD1XD@042K0]}GG.png (15.7 KB, 下载次数: 25)

595三个引脚接在io口上

595三个引脚接在io口上

作者: haierzaifei11    时间: 2020-2-27 08:37
把 led8_Init();放进while循环中就会有了
作者: singrain    时间: 2020-2-27 18:34
我要51啦 发表于 2020-2-26 21:46
电路图

temp.c(4): warning C318: can't open file 'delayms.h'

在网上看别的文档说8和13脚接地,10和16脚接VCC。但是一般原理图里都缺少2个脚。
作者: singrain    时间: 2020-2-27 19:29
楼主代码,我这缺少#include <delayms.h>文件,
自己画了个原理图做了个实物,用2楼代码通过了,先全部闪2下,然后再依次按顺序闪亮,
主要想学习控制数码管,但是现在控制led灯还是搞不太明白,还要继续努力学习啊!
在网上看好多74hc595的教学视频,好多都是用arduino单片机降解的,:(

顺便问一下,好多芯片介绍说某引脚接高或低电平有效时,如果不想用单片机控制,直接接+5V电源或负极可以么?







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1