51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序

奇数灯亮3秒 偶数灯亮8秒 全部灯亮12秒 按照此方法循环
2024-12-03 15:04:13
推荐回答(1个)
回答1:

一、利用定时器实现:
/*****************************预处理命令*****************************/
#include
#define OUT P0
//晶振:12MHZ
/********************重新定义数据类型*******************************/
typedef unsigned char unit8;
typedef unsigned short unit_16;

/*
函数名:main()
函数功能: 主函数
输入:无
输出:无
*/
void main()
{
TMOD = 0x01;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1);
}
/*
函数名:Timer0_Rountine() interrupt 1
函数功能:帆码内部中断T0 服务函数
输入: 无
输出:无
*/
void Timer0_Rountine() interrupt 1
{
static unit_16 Count=0;
static unit8 Count_Sign=0;
static bit Sign=0;
TH0 = 0xfc;
TL0 = 0x18;
Count++;
if(!Sign)
OUT = 0xaa; //奇数 (1秒)
if(Count>=1000)
{
Sign=1;
Count=0;
if(Count_Sign<3) //2秒
OUT = 0xaa; //奇数
else if(Count_Sign>=3&&Count_Sign<=10) //8秒
OUT = 0x55; //偶数
else if(Count_Sign>10&&Count_Sign<=22) //12秒
OUT = 0x00; //全部
else if(Count_Sign>22)Count_Sign=Sign=0;
Count_Sign++;
}
}

二、利用软件延时实现:
#include
#define OUT P0

typedef unsigned char unit8;
typedef unsigned int unit16;

/*
函数名态敬哪:delay_ms(unit16 x)
函数功能: 延时函数1MS
输入:x
输出:无
*/稿稿
void delay_ms(unit16 x)
{
unit8 a,b;
while(x--)
{
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
}
/*
函数名:main()
函数功能: 主函数
输入:无
输出:无
*/
void main()
{
while(1)
{
OUT = 0xaa; //奇数
delay_ms(3000); //3秒

OUT = 0x55; //偶数
delay_ms(8000); //8秒

OUT = 0x00; //全部
delay_ms(12000);//12秒
}
}