×
单片机 > 单片机程序设计 > 详情

中断定时器与流水灯

发布时间:2020-08-26 发布时间:
|

此程序为设置Led流水灯与数码管第0一位的0-16数字循环亮。不能将数码管程序放进主函数里,因为延迟函数delay,可能会在add自加到40时刚好在dalay里面,这时不会有数码管的闪烁。


#include

#include

#define uchar unsigned char

#define uint unsigned int


sbit wela=P2^7;          //位选

sbit dula=P2^6;          //段选

int num,add,temp=0xfe;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

                    0x66,0x6d,0x7d,0x07,

                    0x7f,0x6f,0x77,0x7c,

                    0x39,0x5e,0x79,0x71};

void delay(uchar n);

void main()

{


    TMOD=0x01;     //工作方式

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;


    EA=1;           //总中断打开

    ET0=1;          //定时器中断打开

    TR0=1;          //定时器打开


    wela=1;

    P0=0xfe;

    wela=0;

    dula=1;

    P0=table[0];

    dula=0;         //数码管初始化


    P1=temp;        //Led灯初始化


    while(1)

    {


        delay(100);

delay(500);

        temp=_crol_(temp,1);

        P1=temp; 

    }


}


void add_1() interrupt 1       //计时器中断函数

{

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;

    add++;

    if(add==40)

    {

        num++;

        add=0;          

        dula=1;

        P0=table[num];

        if(num==16)

        num=-1;

    }

                                //流水灯延迟函数

void delay(uchar n)

{

    int i=0, j=0; 

    for(i=0; i

        for(j=0; j<125; j++)

            ;

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码