微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 让灯循环右移亮起来程序问题

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

时间:10-02 整理:3721RD 点击:
各位好,小弟我新手一枚,打算让灯循环右移浪起来,哪里错了呢
#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--);
}

#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--);
}
试试这个可以吗

  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的时间太短了

空转5000次,貌似也没有多长吧。而且 你移位到最后基本无间隔又赋值0x7f。 主要看看你的延时吧 太多的话,灯相当于没亮的。

en,可以,给你点赞

可以了,给你点赞

有道理,试试

小编变量全部用的是全局变量哦!我们在进行单片机编程的时候,尽量少用这样的变量!

循环右移应该用C51库中自带的函数_cror_实现,包含头文件intrins.h               用法如:P1=_cror_(P1,-1);

void delay(uintz);改成void delay(uint z); 还有不必用到全局变量吧。

什么意思,具体点,没懂

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top