单片机流水灯的控制设计 第2页
for(i=0;i<10;i++)
{
Delay(); //延时0.5s
P1 = 0xBF; //第七个灯亮
Delay(); //延时0.5s
P1 = 0XFF ; //灯灭
}
}
else if(count==8)
{
for(i=0;i<10;i++)
{
Delay(); //延时0.5s
P1 = 0x7F; //第八个灯亮
Delay(); //延时0.5s
P1 = 0XFF ; //灯灭
count = 0 ;
}
}
}
}
3.2定时器中断方式
在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用定时器中断方式进行编程。这种编程方式简单快捷。具体编程如下所示,程序结构确实简单了很多。
#include <reg51.h>
#include <intrins.h>
#include <math.h>
typedef unsigned char uchar;
//对P1口的定义
sbit P1_0 = P1^0 ;
sbit P1_1 = P1^1 ;
sbit P1_2 = P1^2 ;
sbit P1_3 = P1^3 ;
sbit P1_4 = P1^4 ;
sbit P1_5 = P1^5 ;
sbit P1_6 = P1^6 ;
sbit P1_7 = P1^7 ;
//定义变量
uchar COUNT ;
uchar K;
void TimeIterrupt() interrupt 1
{
TH0 = 0x15;
TL0 = 0x0A;
COUNT ++;
www.751com.cn
P1_0 = ~P1_0 ; //位取反
K++;
if(K==20) //闪烁10次
{
K = 0 ;
COUNT = 10 ;
}
}
if(COUNT==20) //定时600MS
{
COUNT = 0 ;
P1_1 = ~P1_1 ; //位取反
K++;
if(K==20) //闪烁10次
{
K = 0 ;
COUNT = 20 ;
}
}
if(COUNT==30) //定时600MS
{
COUNT = 0 ;
P1_2 = ~P1_2 ; //位取反
K++;
if(K==20) //闪烁10次
{
K = 0 ;