好吧,看在你着急的份上,我就给你写了,不过我大半夜的也不容易,还请兄弟及时采纳,我做百度任务呢。
不过先声明,你的表述有问题,四个LED,怎么叫一亮一灭?应该是一亮三灭,或者两亮两灭的交替,我就按照2亮2灭来做吧。
#include
unsigned char Counter = 0; //----用于500ms计数
void main(void)
{
P1 = 0xFF;//----先将P1置FF,当然,这句可以没有,主要为了与以前兼容;
P1 = 0x05;//----P1.0,P1.2为高电平,P1.1,P1.3为低电平;不知道你电路怎么接的,
//----反正会间隔的
//----亮一个灭一个亮一个灭一个,这个要看你电路
//----我设你用的是6MHz的晶振,那么指令周期就是2us,你用500ms变化一次,那么我们
//----用定时器方式1,让定时器每100ms中断一次
TMOD = 0x01;//---定时器0工作在方式1;
TH0 = 0x3C;//----定时100ms,已知指令周期为2us,所以需要50000个指令周期
TL0 = 0xB0;//----65536 - 50000 = 15536 = 0x3cb0;
ET0 = 1;//----开定时器中断
TR0 = 1;//----启动定时器
EA = 1;//----开总中断
while(1);//---至此,主程序任务完成,亮灭工作在定时器中断函数里实现
}
void ISR_Timer0(void) interrupt 1
{
Counter ++;//---每100ms加一次,加到5时,就表示0.5秒到了
if(Counter >= 5)
{
Counter = 0;
P1 = ~P1; //---把P1取板,LED状态自然就反了.,实现亮灭交替
}
}
匆忙之中写的程序,如有小许错误,请原谅.
如果兄弟想要个花样的灯,也好办,定义几个数组,在定时器里 P1 = 数组[变量]
比如 :
code unsigned char Tab[4] = {0xFE,0xFD,0xFB,0xF7};
void ISR_Timer0(void) interrupt 1
{
static unsigned char Style = 0;
Counter ++;//---每100ms加一次,加到5时,就表示0.5秒到了
if(Counter >= 5)
{
Counter = 0;
P1 = Tab[Stytle];
Stytle &= 0x03;
}
}
以上,就能实现0.5秒一次的流水灯,总之,提供给兄弟一个思路,希望采纳,呵呵,真是不容易啊
#include
#define uchar unsigned char
uchar times;
sfr LED=P1;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times==10)
{
times=0;
LED=~LED;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0x0f;
times=0;
while(1);
}
#include "reg52.h"
#include "intrins.h"
#define uint unsigned int
uint i;
main()
{
unsigned long i;
P1=0xfe;
for(i=1;i<=5000;i++);
P1=0xfd;
for(i=1;i<=5000;i++);
P1=0xfb;
for(i=1;i<=5000;i++);
P1=0xf7;
for(i=1;i<=5000;i++);
}
简单的
推荐楼主去中国电子DIY之家找找现成的代码