发布网友
共1个回答
热心网友
#include"reg51.h"
sfr WDTRST = 0xA6; //定义看门狗;
void Delay(unsigned int x)
{unsigned char s;
while(x--)
{for(s=0;s<125;s++);}//延时程序,等于12MHZ的晶振,此函数延时为1毫秒
}
void main()
{
unsigned char sw=0;
char cf=1;
WDTRST=0x1E;
WDTRST=0xE1;//初始化看门狗。
P0=0xFE;
for(;;)
{
if(cf>0)
{
P0<<=1;//p0左移一位
P0|=0x01;//P0最低位置一
Delay(200);
if(P0==0xFF)
{cf=cf*(-1); P0=0x7F;}
}
else
{
P0>>=1;//P0右移一位
P0=P0|0x80;//P0最高位置一
Delay(200);
if(P0==0xFF)
{cf=cf*(-1); P0=0xFE;}
}
WDTRST=0x1E;
WDTRST=0xE1;//喂狗指令
}
}
每次一个灯亮,先左移,再右移。每200毫秒移位一次。假设晶振是12MHZ。
在Proteus上仿真通过。