标题: 关于单片机LED流水灯程序用crol函数的问题 [打印本页]

作者: 新人求指导啊1    时间: 2019-12-16 17:15
标题: 关于单片机LED流水灯程序用crol函数的问题
学习网上的教程做了一个流水灯,用到crol函数,用PROTUES仿真发现就一个灯闪其他都不亮,求大佬指导!!



作者: 新人求指导啊1    时间: 2019-12-16 17:15
程序如下:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;

void delay(unsigned char a)
{
unsigned char i;
while(--a!=0)
{
        for(i=0;i<125;i++);
}
}

void main(void)
{
        unsigned char b;
        unsigned char i;
        while(1)
{
        b=0x7f;
        for(i=0;i<8;i++)
        {
        P0=_crol_(b,1);
        b=P0;
        delay(250);
        }
}
}



作者: csmyldl    时间: 2019-12-16 21:52
crol是循环左移,延时太短,程序中再加3个delay(250);试试
作者: wulin    时间: 2019-12-16 22:12
本帖最后由 wulin 于 2019-12-17 10:16 编辑
新人求指导啊1 发表于 2019-12-16 17:15
程序如下:
#include
#include

程序基本可行,但写得有点啰嗦,甚至不合理。仿真异常是图画错,必须要在LED串接300Ω~1K左右限流电阻,否则实际电路IO口有烧毁的风险。程序可以简化为:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. void delay(unsigned int a)
  4. {
  5.         unsigned char i;
  6.         while(a--)
  7.         {
  8.                 for(i=0;i<125;i++);
  9.         }
  10. }

  11. void main(void)
  12. {
  13.         P0=0xfe;
  14.         while(1)
  15.         {
  16.                 delay(250);
  17.                 P0=_crol_(P0,1);
  18.         }
  19. }
复制代码

作者: fengdaokanhai    时间: 2019-12-17 00:27
烧的以前的程序??
作者: dy212300    时间: 2019-12-17 08:23
本帖最后由 dy212300 于 2019-12-17 16:09 编辑

是P0=b
作者: 940135    时间: 2019-12-17 13:32
P0口要接上拉电阻




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