天天看點

改進後的跑馬燈程式

要求:在原來跑馬燈的基礎上,增加時間中斷和外部中斷來實作跑馬燈的順序。

#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,如需轉載請自行聯系原作者

繼續閱讀