天天看点

改进后的跑马灯程序

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

#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; 

            if(flag==0)

               break;

        else

        while(1)

        if(P1!=0x01)

                 LED=LED>>1;

            else if(P1==0x01)

                 LED=0x80;

         }

本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366581,如需转载请自行联系原作者

继续阅读