#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
void delay(void)
{
uchar i,j
for(i=0i<150i++)
for(j=0j<240j++)
}
main()
{
uchar led,i,j
while(1)
{
for(i=0i<8i++)
{
led=0xfe<<i
for(j=0j<8-ij++)
{
P0=led
led=_crol_(led,1)
delay()
}
}
}
}
请你参考:
参照上图,代码如下:
#include<reg51.h>unsigned char i
void Delayms(unsigned int x)
{
unsigned char t
while(x--)
for(t=0t<120t++)
}
void main()
{
IT1=1
IE|=0x84
P2=0xFE
i=1
while(1)
}
void EX1_INT() interrupt 2
{
ET0=0
Delayms(10)
P2=~(1<<i)
i=++i%8
ET0=1
}
//你原来的b2,b2都是死循环,这是不行的,只有主函数才可以死循环。//你的主函数结构也有问题。
//为你增加了一个按键检测的函数。
//下列程序通过了实验测试。
//b1输出的周期大约0.9s。
//b2输出的周期大约0.6s。
//K为触动开关,reg为红灯,bice为绿灯,b1、b2 各为一个方波,
//按第一次触动开关时红灯亮、b1输出,
//按第二次绿灯亮、为b2输出,
//按第三次都关闭.
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint a
void b1()
void b2()
sbit t = P1^0
sbit k = P3^5
sbit reg = P3^3
sbit bice = P3^2
void delay(uchar z)
{
uint x,y
for(x = zx >0x--) for(y = 110y >0y--)
}
bit key()
{
bit kkk
kkk = k //读入按键.
if(kkk == 1) return 0//没有按下.
delay(5)//延时.
if(k == kkk) return 1//两次相等.
return 0
}
void main()
{
while(1) {
P3 = 0xff
while(!key()) //静等按下第一次.
reg = 0
bice = 1
while(!key()) b1()//没有按下第二次就循环等待.
reg = 1
bice = 0
while(!key()) b2()//没有按下第三次就循环等待.
}
}
void b1()
{
P1 = 0xfe a = 50000 while(a--)
P1 = 0xff a = 50000 while(a--)
}
void b2()
{
P1 = 0xfe a = 30000 while(a--)
P1 = 0xff a = 30000 while(a--)
}