#include <REG52.H>//80C52特殊功能寄存器定义
#define LED_PORT1 P1 //用P1口驱动灯,低亮,高灭
#define LED_PORT2 P2 //用p2口驱动灯,低亮,高灭
#define LED_PORT0 P0 //用P3口驱动灯,低亮,高灭
void time(unsigned int ucMs);/* 延时单位:毫秒 */
void main(void)
{
unsigned char ucTimes;
#define DELAY_TIME 400 //延时
while(1)
{
LED_PORT1=0xff;//灭P1口灯
time(200);
//从左往右依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P1口灯
LED_PORT1 = LED_PORT1 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT0=0xff;//灭P0口灯
time(200);
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P0口灯
LED_PORT0 = LED_PORT0 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT2=0xff;//灭P2口灯
time(200);
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<4;ucTimes++){//循环点亮P2口灯
LED_PORT2 = LED_PORT2 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT1=0xff;//灭P1口灯
LED_PORT0=0xff;//灭p0口灯
LED_PORT2=0xff;//灭p2口灯
time(200);
//从左往右依次点亮LED
for(ucTimes=4;ucTimes<8;ucTimes++){//循环点亮P2口灯
LED_PORT2 = LED_PORT2 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
//从左往右依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P0口灯
LED_PORT0 = LED_PORT0 - (0x80>>ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
//然后从右往左依次点亮LED
for(ucTimes=0;ucTimes<8;ucTimes++){//循环点亮P1口灯
LED_PORT1 = LED_PORT1 - (0x01<<ucTimes);//亮灯需低电平驱动
time(DELAY_TIME);
}
LED_PORT1=0xff;//time(DELAY_TIME);//全灭
LED_PORT2=0xff;//time(DELAY_TIME);//全灭
LED_PORT0=0xff;//time(DELAY_TIME);//全灭
LED_PORT1=0;//time(DELAY_TIME);//全亮
LED_PORT2=0;//time(DELAY_TIME);//全亮
LED_PORT0=0;//time(DELAY_TIME);//全亮
LED_PORT1=0xff;//time(DELAY_TIME);//全灭
LED_PORT2=0xff;//time(DELAY_TIME);//全灭
LED_PORT0=0xff;//time(DELAY_TIME);//全灭
LED_PORT1=0;//time(DELAY_TIME);//全亮
LED_PORT2=0;//time(DELAY_TIME);//全亮
LED_PORT0=0;//time(DELAY_TIME);//全亮
//LED_PORT1=0x55;//time(DELAY_TIME);//隔一个点亮
//LED_PORT1=0xaa;//time(DELAY_TIME);//交换
//LED_PORT1=0x55;//time(DELAY_TIME);//隔一个点亮
//LED_PORT1=0xaa;//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的图,本人艺术水平不太好,图有点乱。这次是AT89C52,没有(.BUS的后缀,有.BUS后缀的本人技术水平较差不会连接线)主要就是芯片的线与Led灯的线要一 一对应,不然识别不了导致所有灯不会亮,给线贴标签步骤是先切换大写,然后按A,就会弹出下图的框。在String那个文本框输入net=#你给线的命名,芯片就可以识别了。
联调的步骤在我之前的一个文章里面http://t.csdnimg.cn/WPFNe。
如果有技术上的问题,欢迎指正。