单片机流水灯的控制设计 第2页

单片机流水灯的控制设计 第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 ;

上一页  [1] [2] [3] [4] [5] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有