标题: 这个程序错哪里了 单片机上形成不了流水灯 [打印本页]

作者: zmj明    时间: 2016-10-22 14:32
标题: 这个程序错哪里了 单片机上形成不了流水灯
#include <reg51.h>
#include <intrins.h>
#define led P2
void Delate10ms(unsigned int c);
void main(void)
{
        unsigned char n;
        led=0x01;
        while (1)
        {
                for        (n=0;n<7;n++);
                {
                        led=_crol_(led,1);
                        Delate10ms(50);
               
                }
        }
        while(1)
        {
                for(n=0;n<7;n++);
                {
                       
                        led=_cror_(led,1);
                        Delate10ms(50);
                }
        }
       
        }


作者: qwopzxnm    时间: 2016-10-22 15:06
主函数里有两个死循环
作者: 刘海龙    时间: 2016-10-22 15:11
  1. #include <intrins.h>
  2. #define led P2
  3. unsigned char aa;//定义一个变量用来给P2口赋值
  4. void Delate1ms(unsigned int a)  
  5. {
  6.      unsigned int i;
  7.      while(--a !=0)
  8.    {
  9.        for(i=0;i<125;i++);//STC89或者AT89延时约1毫秒
  10.    }
  11. }
  12. void main()
  13. {
  14.         aa=0xfe;//赋初值1111 1110
  15.         while (1)
  16.         {
  17.           P2=aa;//点亮第一个灯               
  18.           Delate1ms(500);//延时500ms
  19.                   aa=_crol_(aa,1);//将aa循环左移一位后赋值给aa
  20.                
  21.                 }
  22.         }
复制代码


作者: g753388438    时间: 2016-10-22 16:58
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define led P2
  4. void Delate10ms(unsigned int c);
  5. void main(void)
  6. {
  7.         unsigned char n;
  8.         led=0x01;
  9.         while (1)
  10.         {
  11.                 for(n=0;n<7;n++);
  12.                 {
  13.                         led=_crol_(led,1);
  14.                         Delate10ms(50);
  15.                
  16.                 }
  17.                 for(n=0;n<7;n++);
  18.                 {
  19.                                
  20.                         led=_cror_(led,1);
  21.                         Delate10ms(50);
  22.                 }
  23.         }      
  24. }
复制代码

作者: zhangjinfeng62    时间: 2016-10-22 17:47
出不来
作者: 铁峰66666    时间: 2016-10-22 19:22
只能出现一个死循环
作者: LQL123    时间: 2016-10-22 20:20
你主函数里怎么能有两个WHILE语句
作者: hjw_1314    时间: 2016-10-22 21:33
两个死循环了,有一个就会执行不到,因为第一个死循环始终跳不出来
作者: 刘海龙    时间: 2016-10-22 22:10
本帖最后由 刘海龙 于 2016-10-22 22:30 编辑

与两个死循环无关,两个while里要执行的功能是一样的,程序只会在第一个while里循环。问题的关键是你只声明了10ms的延时程序,后面没有写具体的延时程序。


作者: sky_gz    时间: 2016-10-22 22:22
在运行到第一个while (1)时就不断循环,下面的就没有运行
作者: 刘海龙    时间: 2016-10-22 22:33
本帖最后由 刘海龙 于 2016-10-22 22:35 编辑
  1. void Delate10ms(unsigned int c){ // 10ms延时程序
  2.         unsigned int i;
  3.         while( --c != 0){
  4.                 for(i = 0; i < 1200; i++);}}
复制代码

把这段加到程序的后面就OK了
作者: yjf    时间: 2016-10-23 08:45
刘海龙 发表于 2016-10-22 22:33
把这段加到程序的后面就OK了

学习了
作者: 张小帅1126    时间: 2016-10-23 13:31
while (1)是大循环,第一个进去了就不会出来了,我也是新手不知道对不对,
作者: only时间煮雨点    时间: 2016-10-23 13:35
两个while,死循环,程序都蹦不出去。
作者: 曾某人    时间: 2016-10-23 14:17
#include <intrins.h>
#define led P2
unsigned char aa;//定义一个变量用来给P2口赋值
void Delate1ms(unsigned int a)  
{
     unsigned int i;
     while(--a !=0)
   {
       for(i=0;i<125;i++);//STC89或者AT89延时约1毫秒
   }
}
void main()
{
        aa=0x01;//赋初值0000 0001
        while (1)
        {
          P2=aa;//点亮后一个灯               
          Delate1ms(500);//延时500ms
                  aa=_cror_(aa,1);//将aa循环左移一位后赋值给aa
               
                }
        }
作者: 瓦啦啦啦啦啦    时间: 2016-10-23 15:42
你有两个死循环
作者: 瓦啦啦啦啦啦    时间: 2016-10-23 15:42
延时函数也没写
作者: 閬撶嫾    时间: 2016-10-23 18:21
程序循环死在里面了

作者: 123asdasd    时间: 2016-10-23 18:25
qwopzxnm 发表于 2016-10-22 15:06
主函数里有两个死循环

有点错误吧!
作者: zzssdd2    时间: 2016-10-24 11:45
两个while死循环,卡死在第一个
作者: 386115360    时间: 2016-10-30 20:16
因为第一个就是死循环,会一直在里面重复操作,永远不会执行到下一个循环当中,可能你需要的部分在下一个循环之中,所以会出现无法实现功能的情况。
作者: xsynet    时间: 2016-10-31 08:19
两个死循环,只能在一个死循环里,出不来,改为for条件语句,就好了,一个for退出来,进入另一个for里面
作者: airjazz    时间: 2016-10-31 10:13
void Delate10ms(unsigned int c);
子函数里没有内容
作者: 604415420    时间: 2016-10-31 11:57
       led=0x01;
        while (1)
        {
                for        (n=0;n<7;n++);
                {
                        led=_crol_(led,1);
                        Delate10ms(50);
               
                }
        }
这个会一直在这里循环, led=0x01;写在循环体里面试试 这样每次
      
        while (1)
        {
led=0x01;
                for        (n=0;n<7;n++);
                {
                        led=_crol_(led,1);
                        Delate10ms(50);
               
                }
        }
作者: 胡图图大人    时间: 2016-10-31 12:08
延时函数放错了位置,朋友
作者: 白圭    时间: 2016-10-31 12:18
延时有问题啊
作者: pyjsp    时间: 2016-10-31 12:27
两个死循环,4楼应该是在楼主的思路基础上,最简单直接的改进方法。
作者: yuefeng    时间: 2016-10-31 13:31
不能用两个死循环,程序只在第一个循环里运行
作者: qi_dianzikeji    时间: 2016-11-20 21:06
应该把延时函数的子程序分写出来,你申明了整形c但子函数中没用啊。
作者: lgjdqm    时间: 2016-11-20 21:14
延时函数没具体的
作者: 想爱无依    时间: 2016-11-21 11:59
//**名称:单片机c语言程序设计100例 ******** //*** 时间:2016.7.19  Saturday  Sunny ***** //**** 编写:一抹微笑^一抹阳光  *************** //*****        例4:右移8位流水灯  **********************  #include<reg52.h>   #define uint unsigned int #define uchar unsigned char   void delay_ms(uint a) {          uint i;         while(a--);                  for(i=0;i<168;i++)             { } }  void main() {        uchar k;        while(1)   {           P1=0XFF;          delay_ms(30000);          for(k=0;k<8;k++)         {           P1=P1>>1;          delay_ms(30000);            }         } }
作者: shao5874705    时间: 2016-11-23 19:54
主函数只能有一个while循环   语法错误
作者: w1179benp    时间: 2016-11-24 09:01
本帖最后由 w1179benp 于 2016-11-24 09:07 编辑

LZ的本意是流水再倒流回来,给你正解:“地板”那楼的程序需去掉两句“for(...........);”的“;” + 9楼的延时。完美了!

#include <reg51.h>
#include <intrins.h>
#define led P0
void Delate10ms(unsigned int c);


void Delate10ms(unsigned int c)
{ // 10ms延时程序
        unsigned int i;
        while( --c != 0)
  {
                for(i = 0; i < 1200; i++);
  }
}

void main(void)
{
        unsigned char n;
        led=0x01;
        while (1)
        {      
         for(n=0;n<7;n++)
                {
                       led=_crol_(led,1);
                       Delate10ms(50);
                  
                }
                for(n=0;n<7;n++)
                {
                                
                       led=_cror_(led,1);
                        Delate10ms(50);
                }  
        }      
}

作者: do337    时间: 2016-11-24 21:08
死循环吧
作者: 咆哮的阿杰    时间: 2016-11-24 22:43
楼上都说错了,是没有延时程序,你只有延时的声明,却没写程序内容。这样导致,你看到的是流水灯高度亮灭,人眼就看成了常亮
作者: 咆哮的阿杰    时间: 2016-11-24 22:44
咆哮的阿杰 发表于 2016-11-24 22:43
楼上都说错了,是没有延时程序,你只有延时的声明,却没写程序内容。这样导致,你看到的是流水灯高度亮灭, ...

因为就是算死循环,只要里面如果有流水灯的程序,也能产生流水灯的效果
作者: 毁灭魔兽    时间: 2017-2-27 12:31
两个while循环 第二个运行不了




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