让灯循环右移亮起来程序问题
时间: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--);
}
1.P1>>=1;P1的值依次如下循环
0x7f 0x3f 0x1f 0x0f 0x07 0x03 0x01 0x00
2.delay的时间太短了
#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--);
}
试试这个可以吗
- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- void delayms(uint num)
- {
- uint x,y;
- for(x=num;x>0;x--)
- for(y=110;y>0;y--);
- }
- void main()
- {
- uint led;
- led=0x7f;
- while(1)
- {
- P1=led;
- delayms(500);
- led=_crol_(led,1);
- }
- }
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); 还有不必用到全局变量吧。
什么意思,具体点,没懂