物联网自用mark-计时器

两段代码分别展示了51单片机使用reg52.h库的定时器中断功能。第一段代码用于实现LED的闪烁,通过T1中断控制P1口的状态;第二段代码则设计了一个简单的秒表应用,通过P0和P2口显示LED数值,按键控制启动、停止和重置计时器。
摘要由CSDN通过智能技术生成

1.

#include<reg52.h>
void delay(unsigned int i){
    unsigned int j;
    for(;i>0;i--){
        for(j=0;j<125;j++);
    }
}
void main(){
    TMOD=0x50;
    TH1=0xff;
    TL1=0xfe;
    EA=1;
    ET1=1;
    TR1=1;
    while(1);
}
void T1_int(void) interrupt 3 using 1{
    while(1){
        P1=0xff;
        delay(500);
        P1=0x00;
        delay(500);
    }
}

 2.

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar led1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};        
uchar second;
uchar key=0;
uint t;
void delay(){
    uchar i,j;
    for(i=0;i<255;i--){
        for(j=0;j<100;j++);
    }
}
void init(void){
    TMOD=0x02;
    EA=1;
    ET0=1;
    key=0;
    t=0;
}
void main(){
    init();
    P0=led1[second/10];
    P2=led[second%10];
    while(1){
        if((P3&0x80)==0x00){
            delay();
            key++;
            switch(key){
                case 1:            //注意空格!
                    TH0=0x38;
                    TL0=0x38;
                    TR0=1;
                    break;
                case 2:                    //关闭
                    t=0;
                    TR0=0;
                    break;
                case 3:                    //重置
                    key=0;
                    second=0;
                    P0=led1[0];
                    P2=led[0];
                    break;
            }
            while((P3&0x80)==0x00);
        }    
    }
}
void timer() interrupt 1 using 1{
    TR0=0;
    t++;
    if(t==500){
        second++;
        P0=led1[second/10];
        P2=led[second%10];
        t=0;
    }
    if(second==99){
        second=0;
        key=1;
    }
    TR0=1;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值