• 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
    }
    }

    效果图:

  • 相关阅读:
    sql server 表变量和临时表
    c# 操作excel 总结
    ifttt.com:让你的网络行为能引发连锁反应
    jQuery.tmpl.js
    [置顶]IFTTT与Google+是什么?ifttt怎么玩?
    使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
    TFS2010 取消锁定
    Android 开发简介
    Cocos2d开发系列(七)
    针对中小型网站(3000人左右/15分钟)的服务器架构
  • 原文地址:https://www.cnblogs.com/ljd4you/p/6657686.html
Copyright © 2020-2023  润新知