实验要求:
使用定时/记数中断控制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语言编写单片机程序,在程序中,我使用了很多宏定义,这有利于程序的再利用.
同时真正理解延迟和中断的概念!