数字钟


数字钟

功能要求:

1、 使用8为动态数码管作为显示,4个独立按键用于输入;

2、 初始化:开机显示00-00-001、2位表示小时,45位表示分钟、78位表示秒

3、 初始化后立刻开始走时。采用24小时制显示时间。

4、 1、2号按键负责小时的加减,3、4号按键负责分钟的加减。


代码:

#include<reg51.h>
//连接74ls138模块
sbit A1=P1^0;
sbit B1=P1^1;
sbit C1=P1^2;
//按键***************************
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit k4=P2^3;
//***************************
#define    C 50000     //t0工作方式1的计数值,也就是50ms,计算20次就是1s
#define TH_M1 (65536-C)/256
#define TL_M1 (65536-C)/256
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
void delay(int i); //延时函数i * 1ms
void show(int s,int m,int h);
int c_t0=0;      //t0中断计算次数
int i=0,s=0,m=0,h=0;
main()
{
    k1=1,k2=1,k3=1,k4=1;
    IE=0X82;
    TMOD=0X01;
    TH0=TH_M1;TL0=TL_M1;
    TR0=1;
    while(1)
    {    
        {//调节 时 
            if(k1==0)//k1 +
            {
                delay(200);h++;
                if(h>=24) h=0;
            }
            if(k2==0)//k2 -
            {
                delay(200);h--;
                if(h<0) h=23;
            }    
        }
        {//调节 分          
            if(k3==0)//k3 +
            {
                delay(200);m++;
                if(m>=60)
                {
                    m=0,h++;
                    if(h==24)
                    {
                        h=0;
                    }
                } 
            }
            if(k4==0)//k4 -
            {
                delay(200);m--;
                if(m<=0)
                {
                    m=59;
                    if(h==0)
                    {
                        h=24;    
                    }
                     h--;
                } 
            }    
        }
        show(s,m,h);
    }
}
void t0(void)interrupt 1  //t0定时器中断 
{
    TH0=TH_M1;TL0=TL_M1;
    if(++c_t0==20)         //计算20次就是1s
    {
        c_t0=0;s++;
        if(s==60)
        {
            m++;s=0;
            if(m==60)
            {
                h++;m=0;
            }
            if(h==24)
            {
                h=0;
            }
        } 
    }
}
void show(int s,int m,int h)
{
    A1=0;B1=0;C1=0;P0=tab[h/10];delay(1);P0=0x00;
        
    A1=1;B1=0;C1=0;P0=tab[h%10];delay(1);P0=0x00;
    
    A1=0;B1=1;C1=0;P0=0x40;delay(1);P0=0x00;

    A1=1;B1=1;C1=0;P0=tab[m/10];delay(1);P0=0x00;

    A1=0;B1=0;C1=1;P0=tab[m%10];delay(1);P0=0x00;
    
    A1=1;B1=0;C1=1;P0=0x40;delay(1);P0=0x00;
    
    A1=0;B1=1;C1=1;P0=tab[s/10];delay(1);P0=0x00;    
    
    A1=1;B1=1;C1=1;P0=tab[s%10];delay(1);P0=0x00;
}

void delay(int i) //i * 1ms
{
    int x,y;
    for(x=0;x<i;x++)
    for(y=0;y<120;y++); //1ms  
}

 


protues仿真:


 

 

 

posted @ 2020-10-28 19:02  小公主的麦兜  阅读(422)  评论(0)    收藏  举报