改进后的跑马灯程序

来源:互联网 发布:spring书籍推荐 知乎 编辑:程序博客网 时间:2024/05/16 14:33

要求:在原来跑马灯的基础上,增加时间中断和外部中断来实现跑马灯的顺序。

#include<reg52.h>

#include <intrins.h>
sbit P32 = P3^2;
unsigned char flag=0; //设置标志位(0/1)  1为左移
unsigned char LED;
unsigned char count=0;


void delayms(unsigned char ms)
{
    unsigned char i;
    while(ms--)
    {
    for(i = 0; i < 120; i++);
    }
}


void timer0() interrupt 1
{
       TH0=(65535-50000)/256;
       TL0=(65535-50000)%256;
       
       count++;
       if(count==20)
       {
           count=0;
           flag=!flag;
        }
}


void waibu() interrupt 0
{
        flag=!flag;
}




void main()
{
    
        //时间中断打开
        TMOD=0x11;
        IE=0x83;   //EA=1; ET0=1;
        TR0=1;
         //外部中断打开
         //IE=0x81;
         //EA=1;
         //EX0=1;
         IT0=1;     //为1是边沿触发,为0是电平触发
         
         
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        
    LED = 0x01;
        
    P1 = LED;
    while(1)
    {
            if(flag==1)
        {
           while(1){
           if(P1!=0x80)
            {
                 
                 LED=LED<<1;
                 P1 = LED;
                 delayms(250);
                 //n++;
                 
            }
            else if(P1==0x80)
            {
                 //n=0;
                 LED=0x01;
                 P1=LED; 
                 delayms(250);
            }
            if(flag==0)
               break;
            }
        
         
        }
        else
        {
        while(1)
        {
        if(P1!=0x01)
            {
                 
                 LED=LED>>1;
                 P1 = LED;
                 delayms(250);
                
                 
            }
            else if(P1==0x01)
            {
                
                 LED=0x80;
                 P1=LED; 
                 delayms(250);
            }
            if(flag==1)
               break;
            }
         }
    }
}
原创粉丝点击