我写的是郭天祥10天征服单片机的LED课后练习5,我现在遇到的两个问题是,在流水灯结束后的闪烁那个循环里面,如果我把0xff(LED全灭)写在前面再延时300ms之后写0x00(LED全亮),LED会闪烁,但是LED非常暗;但是如果我把0x00(LED全亮),写在前面再延时300ms之后写0xff(LED全灭),LED就不闪烁了,会一直亮着,直到LED闪烁循环结束,这就相当于我闪烁部分白写了......有没有同样写过这个练习的,有遇到我这样的问题吗,感谢热心大佬解答~
以下为代码:
#include <REGX51.H>
typedef char u8;
typedef int u16;
#define LED_PORT P2//宏定义整个LED端口
void delay(u16 x)//延时函数,当ten_us传入1,大约延时10us
{
u16 y,z;
for(y=0;y<x;y++)
for(z=0;z<115;z++);
}
main()
{
u8 i=0,b=0;//定义变量i和b
while(1)
{
for(i=0;i<8;i++)
{
LED_PORT=~(0x01<<i);//从LED1亮起,i每增加一次,移位一次
delay(200); // 延时大约0.2秒
}
for(i=0;i<8;i++)
{
LED_PORT=~(0x80>>i);//从LED8亮起,i每增加一次,移位一次
delay(200);// 延时大约0.2秒
}
b++;//b自加1
if(b%2==0)//上下循环两次后进入此循环
{
for(i=0;i<5;i++)
{
LED_PORT=0xff;//LED全灭
delay(300);
LED_PORT=0x00;//LED全亮
}
}
}
}
|