微控制器定時驅動led程式2--c語言實現
實驗要求:
使用定時/記數中斷控制led1亮0.1s,滅0.1s,led2亮1s,滅1s,led3亮10s,滅10s,led4亮100s,滅100s.
/////////////////////////////////////////////////////////////////////////////////////////////////////
//標頭檔案yzxled.h
#include <reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
#define ON 1
#define OFF 0
#define RELOADTH0 0x3c
#define RELOADTL0 0x0b0
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//主程式
#include "yzxled.h"
//初始化
void init(void)
{
LED1=OFF;
LED2=OFF;
LED3=OFF;
LED4=OFF;
}
//設定控制方式
void set(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TH0=RELOADTH0;
TL0=RELOADTL0;
}
//////////
void timer0(void) interrupt 1 using 1
{
static int i=1;
LED1=!LED1;
i++;
TH0=RELOADTH0;
TL0=RELOADTL0;
if(!(i%10))
LED2=!LED2;
if(!(i%100))
LED3=!LED3;
if(!(i%1000))
{
LED4=!LED4;
i=0;
}
return;
}
void main(void)
{
init();
set();
TR0=ON;
while(1) ;
}
實驗心得:
通過這次實驗,我學會了使用c語言編寫微控制器程式,在程式中,我使用了很多巨集定義,這有利於程式的再利用.
同時真正理解延遲和中斷的概念!