找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5486|回复: 36
打印 上一主题 下一主题
收起左侧

这个程序错哪里了 单片机上形成不了流水灯

  [复制链接]
跳转到指定楼层
楼主
ID:143919 发表于 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);
                }
        }
       
        }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:115571 发表于 2016-10-22 15:06 | 只看该作者
主函数里有两个死循环
回复

使用道具 举报

板凳
ID:123732 发表于 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.         }
复制代码

回复

使用道具 举报

地板
ID:61002 发表于 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. }
复制代码
回复

使用道具 举报

5#
ID:143950 发表于 2016-10-22 17:47 | 只看该作者
出不来
回复

使用道具 举报

6#
ID:143113 发表于 2016-10-22 19:22 来自手机 | 只看该作者
只能出现一个死循环
回复

使用道具 举报

7#
ID:143966 发表于 2016-10-22 20:20 | 只看该作者
你主函数里怎么能有两个WHILE语句
回复

使用道具 举报

8#
ID:143975 发表于 2016-10-22 21:33 | 只看该作者
两个死循环了,有一个就会执行不到,因为第一个死循环始终跳不出来
回复

使用道具 举报

9#
ID:123732 发表于 2016-10-22 22:10 | 只看该作者
本帖最后由 刘海龙 于 2016-10-22 22:30 编辑

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

回复

使用道具 举报

10#
ID:143984 发表于 2016-10-22 22:22 | 只看该作者
在运行到第一个while (1)时就不断循环,下面的就没有运行
回复

使用道具 举报

11#
ID:123732 发表于 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了
回复

使用道具 举报

12#
ID:144007 发表于 2016-10-23 08:45 | 只看该作者
刘海龙 发表于 2016-10-22 22:33
把这段加到程序的后面就OK了

学习了
回复

使用道具 举报

13#
ID:143694 发表于 2016-10-23 13:31 | 只看该作者
while (1)是大循环,第一个进去了就不会出来了,我也是新手不知道对不对,
回复

使用道具 举报

14#
ID:130684 发表于 2016-10-23 13:35 | 只看该作者
两个while,死循环,程序都蹦不出去。
回复

使用道具 举报

15#
ID:144047 发表于 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
               
                }
        }
回复

使用道具 举报

16#
ID:144059 发表于 2016-10-23 15:42 | 只看该作者
你有两个死循环
回复

使用道具 举报

17#
ID:144059 发表于 2016-10-23 15:42 | 只看该作者
延时函数也没写
回复

使用道具 举报

18#
ID:143706 发表于 2016-10-23 18:21 | 只看该作者
程序循环死在里面了
回复

使用道具 举报

19#
ID:144058 发表于 2016-10-23 18:25 | 只看该作者
qwopzxnm 发表于 2016-10-22 15:06
主函数里有两个死循环

有点错误吧!
回复

使用道具 举报

20#
ID:144173 发表于 2016-10-24 11:45 | 只看该作者
两个while死循环,卡死在第一个
回复

使用道具 举报

21#
ID:144138 发表于 2016-10-30 20:16 | 只看该作者
因为第一个就是死循环,会一直在里面重复操作,永远不会执行到下一个循环当中,可能你需要的部分在下一个循环之中,所以会出现无法实现功能的情况。
回复

使用道具 举报

22#
ID:70330 发表于 2016-10-31 08:19 | 只看该作者
两个死循环,只能在一个死循环里,出不来,改为for条件语句,就好了,一个for退出来,进入另一个for里面
回复

使用道具 举报

23#
ID:145286 发表于 2016-10-31 10:13 | 只看该作者
void Delate10ms(unsigned int c);
子函数里没有内容
回复

使用道具 举报

24#
ID:145136 发表于 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);
               
                }
        }
回复

使用道具 举报

25#
ID:145311 发表于 2016-10-31 12:08 | 只看该作者
延时函数放错了位置,朋友
回复

使用道具 举报

26#
ID:145312 发表于 2016-10-31 12:18 | 只看该作者
延时有问题啊
回复

使用道具 举报

27#
ID:94161 发表于 2016-10-31 12:27 | 只看该作者
两个死循环,4楼应该是在楼主的思路基础上,最简单直接的改进方法。
回复

使用道具 举报

28#
ID:145325 发表于 2016-10-31 13:31 | 只看该作者
不能用两个死循环,程序只在第一个循环里运行
回复

使用道具 举报

29#
ID:148885 发表于 2016-11-20 21:06 | 只看该作者
应该把延时函数的子程序分写出来,你申明了整形c但子函数中没用啊。
回复

使用道具 举报

30#
ID:74868 发表于 2016-11-20 21:14 | 只看该作者
延时函数没具体的
回复

使用道具 举报

31#
ID:149180 发表于 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);            }         } }
回复

使用道具 举报

32#
ID:149091 发表于 2016-11-23 19:54 | 只看该作者
主函数只能有一个while循环   语法错误
回复

使用道具 举报

33#
ID:149451 发表于 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);
                }  
        }      
}
回复

使用道具 举报

34#
ID:146549 发表于 2016-11-24 21:08 | 只看该作者
死循环吧
回复

使用道具 举报

35#
ID:149853 发表于 2016-11-24 22:43 | 只看该作者
楼上都说错了,是没有延时程序,你只有延时的声明,却没写程序内容。这样导致,你看到的是流水灯高度亮灭,人眼就看成了常亮
回复

使用道具 举报

36#
ID:149853 发表于 2016-11-24 22:44 | 只看该作者
咆哮的阿杰 发表于 2016-11-24 22:43
楼上都说错了,是没有延时程序,你只有延时的声明,却没写程序内容。这样导致,你看到的是流水灯高度亮灭, ...

因为就是算死循环,只要里面如果有流水灯的程序,也能产生流水灯的效果
回复

使用道具 举报

37#
ID:166871 发表于 2017-2-27 12:31 | 只看该作者
两个while循环 第二个运行不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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