让灯循环右移亮起来程序问题

2019-07-15 18:19发布

各位好,小弟我新手一枚,打算让灯循环右移浪起来,哪里错了呢
#include<reg52.h>
#define uint unsigned int;
uint z,x,i;
void delay(uintz);
void main()
{
while(1)
  {  
P1=0x7f;
     for(i=0;i<8;i++)
     {
   delay(5000);
   P1>>=1;
      }
   }
}
void delay(uintz)
{
for(x=z;x>0;x--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
xiaodexix
1楼-- · 2019-07-15 23:13
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a;
void delay(uintz);
void main()
{
        uint i;
        a=0x7f;
while(1)
  {  
        P1=a;
     for(i=0;i<8;i++)
     {
   delay(5000);
   a>>=1;
      }
   }
}
void delay(uintz)
{
        uint x,z;
for(x=z;x>0;x--);
}
试试这个可以吗

zy2014
2楼-- · 2019-07-16 00:02
本帖最后由 zy2014 于 2014-10-15 13:27 编辑
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. void delayms(uint num)
  6. {
  7.     uint x,y;
  8.     for(x=num;x>0;x--)
  9.     for(y=110;y>0;y--);
  10. }

  11. void main()
  12. {
  13.     uint led;
  14.     led=0x7f;
  15.     while(1)
  16.     {
  17.         P1=led;
  18.         delayms(500);
  19.         led=_crol_(led,1);
  20.     }
  21. }
复制代码


1.P1>>=1;P1的值依次如下循环
0x7f 0x3f 0x1f 0x0f   0x07 0x03 0x01 0x00
2.delay的时间太短了
fun_90
3楼-- · 2019-07-16 05:10
空转5000次,貌似也没有多长吧。而且 你移位到最后基本无间隔又赋值0x7f。 主要看看你的延时吧 太多的话,灯相当于没亮的。
库特先生
4楼-- · 2019-07-16 09:39
xiaodexix 发表于 2014-10-15 13:21
#include
#define uint unsigned int
#define uchar unsigned char

en,可以,给你点赞
库特先生
5楼-- · 2019-07-16 10:36
 精彩回答 2  元偷偷看……
库特先生
6楼-- · 2019-07-16 15:44
fun_90 发表于 2014-10-15 17:54
空转5000次,貌似也没有多长吧。而且 你移位到最后基本无间隔又赋值0x7f。 主要看看你的延时吧 太多的话, ...

有道理,试试

一周热门 更多>