51单片机按键控制数码管显示时间秒表

用51单片机模拟时间秒表,数码管显示格式为00-00-00,从最低一位开始计时,当最低两位到59时上一位数码管进1,低两位重新从0开始计时。通过按键控制数码管开始计时、暂停计时、数码管清0。


具体功能如下:

1.独立按键4按下计时(一直按着就是计时)。

2.按键4松手则暂停计时,再长按 按键4可以继续计时。

3.按键3按一下,数码管显示的秒表清0。


代码:

#include <REGX52.H>

#include <intrins.h>

 

sbit button3=P3^2;

sbit button4=P3^3; //按钮进行位定义

typedef unsigned char uchar;

 

uchar code leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F};

uchar hour=0,minute=0,second=0;

uchar count=0;

 

void Timer0Init()

{

 TMOD &= 0xF0; 

 TMOD |= 0x01; 

 TL0 = 0xB0;    

 TH0 = 0x3C;  

 TF0 = 0;     

 TR0 = 1;     

 ET0=1;           

 EA=1;              

}

 

 void delay(unsigned int ms){ 

 while(ms--){

 unsigned char i, j;

 

 _nop_();

 i = 2;

 j = 199;

 do

 {

 while (--j);

 }

  while (--i);

 }

}

 

void display(uchar hour,uchar minute,uchar second){

    int i;

    for(i=1;i<=8;i++){

        switch(i){

           case 1: P2_4=0;P2_3=0;P2_2=0;P0=leddata[second%10];break;

           case 2: P2_4=0;P2_3=0;P2_2=1;P0=leddata[second/10];break;

           case 3: P2_4=0;P2_3=1;P2_2=0;P0=0x40;break;

           case 4: P2_4=0;P2_3=1;P2_2=1;P0=leddata[minute%10];break;

           case 5: P2_4=1;P2_3=0;P2_2=0;P0=leddata[minute/10];break;

           case 6: P2_4=1;P2_3=0;P2_2=1;P0=0x40;break;

           case 7: P2_4=1;P2_3=1;P2_2=0;P0=leddata[hour%10];break;

           case 8: P2_4=1;P2_3=1;P2_2=1;P0=leddata[hour/10];break;

        }

        delay(1);

        P0=0;   

    }

}

 

void jia(){

 count++;

    if(count==20){

        count=0;     

        second++;

        if(second==60){

            second=0;

            minute++;

            if(minute==60){

                minute=0;

                hour++;

                if(hour==24)

                    hour=0;               

           }

        }

    }

}

void interrupt_T0()interrupt 1

{

    TL0 = 0xB0; 

 TH0 = 0x3C;

 if(button4==0){ //按键按下确定

  jia();}

}

void main(){

    Timer0Init();

    while(1){

        display(hour,minute,second); 

  if(button3==0)

   break;

    } 

}

显示效果如图:

4aeac87320ab4f04888bd058ae47174a.png

 

 

 

 

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值