#include <REG52.H>//80C52特殊功能寄存器定义
#define LED_PORT0 P0 //用P0口驱动灯,低亮,高灭
#define LED_PORT1 P1 //用p1口驱动灯,低亮,高灭
#define LED_PORT2 P2 //用P2口驱动灯,低亮,高灭
#define LED_PORT3 P3 //用p3口驱动灯,低亮,高灭
void time(unsigned int ucMs);/* 延时单位:毫秒 */
void main(void)
{
unsigned char ucTimes;
#define DELAY_TIME 400 //延时
while(1)
{
LED_PORT0=0xff;//灭P0口灯
time(200);
//从左往右依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P1口灯
LED_PORT0 = LED_PORT0 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT1=0xff;//灭P1口灯
time(200);
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P1口灯
LED_PORT1 = LED_PORT1 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT2=0xff;//灭P2口灯
time(200);
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P2口灯
LED_PORT2 = LED_PORT2 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT3=0xff;//灭p3口灯
time(200);
for(ucTimes=0;ucTimes<1;ucTimes++){//循环点亮P2口灯
LED_PORT3 = LED_PORT3 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT0=0xff;//灭P0口灯
LED_PORT1=0xff;//灭p1口灯
LED_PORT2=0xff;//灭p2口灯
LED_PORT3=0xff;//灭p3口灯
time(200);
//从左往右依次点亮LED
for(ucTimes=7;ucTimes<8;ucTimes++){//循环点亮P3口灯
LED_PORT3 = LED_PORT3 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
//从左往右依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P2口灯
LED_PORT2 = LED_PORT2 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P1口灯
LED_PORT1 = LED_PORT1 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
//从左往右依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P0口灯
LED_PORT0 = LED_PORT0 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
time(1000);
LED_PORT0=0xff;//time(DELAY_TIME);//全灭
LED_PORT1=0xff;//time(DELAY_TIME);//全灭
LED_PORT2=0xff;//time(DELAY_TIME);//全灭
LED_PORT3=0xff;//time(DELAY_TIME);//全灭
time(1000);
LED_PORT0=0;//time(DELAY_TIME);//全亮
LED_PORT1=0;//time(DELAY_TIME);//全亮
LED_PORT2=0;//time(DELAY_TIME);//全亮
LED_PORT3=0;//time(DELAY_TIME);//全亮
time(1000);
LED_PORT0=0xff;//time(DELAY_TIME);//全灭
LED_PORT1=0xff;//time(DELAY_TIME);//全灭
LED_PORT2=0xff;//time(DELAY_TIME);//全灭
LED_PORT3=0xff;//time(DELAY_TIME);//全灭
time(1000);
LED_PORT0=0;//time(DELAY_TIME);//全亮
LED_PORT1=0;//time(DELAY_TIME);//全亮
LED_PORT2=0;//time(DELAY_TIME);//全亮
LED_PORT3=0;//time(DELAY_TIME);//全亮
}
}
/*********** time C **************/
void time(unsigned int ucMs)//延时单位:ms
{
#define DELAYTIMES 239
unsigned char ucCounter; // 延时设定的循环次数
while (ucMs!=0) {
for (ucCounter=0; ucCounter<DELAYTIMES; ucCounter++){}//延时
ucMs--;
}
}
上面的是keil部分的代码
上面两幅图是Protues的仿真图,第一个是LED的连接,第二个是芯片的连接。芯片采用AT89C52(没有.BUS的后缀)。本人艺术水平不高,摆出来的圣诞树可能不太好看。
联调的步骤在之前本人的第一个文章中http://t.csdnimg.cn/WPFNe。
如果有技术上的问题,欢迎指正。