zoukankan      html  css  js  c++  java
  • 51单片机入门(四)

    用数码管实现一个二十四小时的时钟:定义三个按键K1(选择时分秒),K2(加一),K3(进入设置,再按一次则退出)。

    代码:

    //功能:用数码管二十四小时制的时钟
    //作者:刘建东
    //日期:2017.4.1
    #include<reg52.h>
    #define uchar unsigned char
    sbit K1=P3^1; //select hour /minute /second
    sbit K2=P3^0; //add one
    sbit K3=P3^2; //into clock configuration
    uchar setplace; //set which place:0,1,2
    uchar timer;
    uchar hour=0,minute=0;second=0;
    sbit LSA=P2^2;
    sbit LSB=P2^3;
    sbit LSC=P2^4;
    uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    //*****************declare functions
    void delayms(uchar);
    void TimerConfig();
    void IntConfig();
    void digiDisplay();
    //********************main()
    void main()
    {
    TimerConfig();
    IntConfig();
    while(1)
    {
    if(TR0==0)
    {
    if(K1==0)
    {
    delayms(10);
    if(K1==0)
    {
    setplace++;
    if(setplace>=3) setplace=0;
    }
    while(~K1);
    }
    if(K2==0)
    {
    delayms(10);
    if(K2==0)
    {
    if(setplace==0)
    {
    second++;
    if(second>=60) second=0;
    }else if(setplace==1)
    {
    minute++;
    if(minute>=60) minute=0;
    }else hour++;
    if(hour>=24) hour=0;
    }
    while(~K2);
    }
    }
    //timer add one
    if(timer==20)
    {
    timer=0;
    second++;
    if(second==60)
    {
    second=0;
    minute++;
    if(minute==60)
    {
    minute=0;
    hour++;
    if(hour==24)
    hour=0;
    }
    }
    }
    digiDisplay();
    }
    }
    //**********************digiDisplay()
    void digiDisplay()
    {
    LSA=1;LSB=1;LSC=1;
    P0=table[hour/10];
    delayms(1);
    P0=0x00;
    LSA=0;LSB=1;LSC=1;
    P0=table[hour%10];
    delayms(1);
    P0=0x00;
    LSA=1;LSB=0;LSC=1;
    P0=0xa0;
    delayms(1);
    P0=0xa0;
    LSA=0;LSB=0;LSC=1;
    P0=table[minute/10];
    delayms(1);
    P0=0xa0;
    LSA=1;LSB=1;LSC=0;
    P0=table[minute%10];
    delayms(1);
    P0=0xa0;
    LSA=0;LSB=1;LSC=0;
    P0=0xa0;
    delayms(1);
    P0=0xa0;
    LSA=1;LSB=0;LSC=0;
    P0=table[second/10];
    delayms(1);
    P0=0xa0;
    LSA=0;LSB=0;LSC=0;
    P0=table[second%10];
    delayms(1);
    P0=0xa0;
    }
    //********************delayms(uchar)
    void delayms(uchar x)
    {
    uchar a,b;
    for(a=x;a>0;a--)
    {
    for(b=110;b>0;b--);
    }
    }
    //****************TimerConfig()
    void TimerConfig()
    {
    TMOD=0X01;
    TH0=(65535-43539)/256;
    TL0=(65535-43539)%256;
    EA=1;
    ET0=1;
    TR0=1;
    }
    //*************Interrupt service
    void TimerService() interrupt 1
    {
    TMOD=0X01;
    TH0=(65535-43539)/256;
    TL0=(65535-43539)%256;
    timer++;
    }
    //*********************IntConfig()
    void IntConfig()
    {
    EA=1;
    EX0=1;
    IT0=1;
    }
    //****************Intrupt service
    void IntService() interrupt 0
    {
    delayms(10);
    if(K3==0)
    {
    TR0=~TR0;
    setplace=0; //FIRST IS SECOND BIT
    }
    }

    效果图:

  • 相关阅读:
    架构师的成长之路初片~ntp时间同步
    架构师的成长之路初片~水晶头的颜色排序
    架构师的成长之路初片~Python-邮件(smtplib)、requests模块、API接口调用
    架构师成长之路之~调优思维
    架构师的成长之路初片~python~调整背景及滚轮+各种快捷键
    架构师成长之路之~Node.js安装篇
    微服务技术栈
    C#资源释放(托管资源、非托管资源)
    Beyond Compare 4 密匙
    MySql批量导入 .netcore命名空间完全相同问题
  • 原文地址:https://www.cnblogs.com/ljd4you/p/6657686.html
Copyright © 2011-2022 走看看