當前位置:編程學習大全網 - 編程語言 - 51單片機如何用壹個定時器當多個延時電路用, 就是按下開關壹 ,亮三秒。 按下開關二,燈泡亮五秒。

51單片機如何用壹個定時器當多個延時電路用, 就是按下開關壹 ,亮三秒。 按下開關二,燈泡亮五秒。

沒想法就不會有創新,妳的想法就很好。像這種亮燈的程序,對時間要求不是那麽嚴格(如果極其嚴格就沒法實現),那麽可以采用如下方法實現妳的要求:

//假設晶振12MHZ,按鍵輸入P1.0,P1.1,P1.2;LED控制P2.0,P2.1,P2.2,都是低電平有效

#include "reg51.h"

unsigned int YSJS1=0;

unsigned int YSJS2=0;

unsigned int YSJS3=0;

sbit KEY1=P1^0;按鍵

sbit KEY2=P1^1;按鍵

sbit KEY3=P1^2;按鍵

sbit LED1=P2^0;燈

sbit LED2=P2^1;燈

sbit LED3=P2^2;燈

void Timer1Init(void) //500微秒@12.000MHz

{

AUXR &= 0xBF; //定時器時鐘12T模式

TMOD &= 0x0F; //設置定時器模式

TMOD |= 0x10; //設置定時器模式

TL1 = 0x0C; //設置定時初值

TH1 = 0xFE; //設置定時初值

TF1 = 0; //清除TF1標誌

ET1 = 1; //使能定時器1中斷

TR1=1; //定時器1開始計時

EA =1; //開總中斷

}

void main(void)

{

LED1=1;

LED2=1;

LED3=1;

KEY1=1;

KEY2=1;

KEY3=1;

Timer1Init()

while(1)

{

if(KEY1==0)

{

YSJS=6000;

LED1=0;

}

if(KEY2==0)

{

YSJS=10000;

LED2=0;

}

if(KEY3==0)

{

YSJS=16000;

LED3=0;

}

}

}

void TIMER1(void) interrupt 3 //定時器1中斷函數使用默認寄存器組

{

TH1 = 0XFE; //定時器1定時時間=500us

TL1 = 0X0C;

if(YSJS1!=0)

{

YSJS1--;

}

else LED1=1;

if(YSJS2!=0)

{

YSJS2--;

}

else LED2=1;

if(YSJS2!=0)

{

YSJS2--;

}

else LED2=1;

}

  • 上一篇:嵌入式中的移植是什麽意思,移植系統呢
  • 下一篇:科技論文寫作格式內容及技巧
  • copyright 2024編程學習大全網