单片机流水灯的控制设计 第4页
void main()
{
COUNT = 0 ;
K = 0 ;
TMOD = 0x01; //16位计数器,工作方式2
TH0 = 0x15;
TL0 = 0x0A; //定时器初始化
P1 = 0xff ; //初始灯状态为关闭
TR0 = 1; //打开定时器0
ET0 = 1; //T0中断允许
while(1)
;
}
3.3外部中断方式
下面我们使用外部中断方式进行流水灯的控制。
#include <reg51.h>
#include <intrins.h>
#include <math.h>
typedef unsigned char uchar;
uchar turnon[8] = {0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f} ;
uchar COUNT ;
uchar K;
void handler1() interrupt 2
{
bit N;
COUNT++;
N = ~N ;
if(N)
P1 = (0xff<<(K+1))|turnon[K]; //灯亮
else
P1 = 0xff ; //灯灭
if(COUNT==20) //闪烁10次
{
COUNT = 0 ;
K++;
if(K==8) //8个灯循环
K = 0 ;
}
}
void main()
{
P1 = 0xff ; //初始灯状态为关闭
COUNT = 0 ;
K = 0 ;
IT1 = 1; //INIT1中断为下降沿触发
while(1)