一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁,怎么用c语言写,谢谢各位了~~

这样写对不对啊?求指导啊
#include<reg52.h>
sbit led=P0^0;
int count;
void main()
{
TMOD=0x01; //定时器0,工作方式1
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void time0() interrupt 1
{
count++;
if(Pre count != count)
{
Pre counts=counts;
P0^0 = !P0^0;
}
if((Pre counts/1000) != (counts/1000))
{
Pre counts=counts;
P0^1 = !P0^1;
}
if(Pre counts == 5000)
{
Pre counts=0;
P0^2 = !P0^2;
}
}

LED1 1ms闪烁人眼分辨不出来 定时器设定为16位定时50ms 另设一变量作定时器中断计数,到10(0.5S)的倍数时LED2取反,到50(2.5S)的倍数时LED3取反
#include<reg52.h>
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
unsigned int count;

void main()
{
TMOD=0x01; //定时器0,工作方式1
TH0=(65536-500)/256; /////////0.5ms
TL0=(65536-500)%256;
EA=1;
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void time0() interrupt 1
{
led1=~led1;
count++;
if (!(count%1000)) {led2=~led2;}
if (count==5000) {led3=~led3;count=0;}
}

led1是看不出闪烁的 太快了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-18
用定时器0或1设置你要的初值,譬如你可以设置定时器装的初值为1ms进入一次中断函数,把led1点亮,然后熄灭,设置一个变量,因为1ms进入一次中断函数,当此变量累加到1000次时,条件成立就点亮led2,然后又把此变量清0,第三个如此类推。
第2个回答  2012-09-18
其实很简单啊,你可以再定时器里设置,如果达到您的条件就亮下就OK了哦。
第3个回答  2012-09-18
提供一个电子技术导航网站给你吧:电子世家导航网站,它里面分类收录了很多优秀的电子技术网站,在其所收录的那些网站论坛里面就有很多大侠分享资料的。这个电子技术导航网站挺不错的,希望对你有帮助啦!本回答被网友采纳
相似回答