基于51单片机的计分器

    由于太长时间没接触51代码,写这个东西也费了不少力气。

  (本程序试用于金沙滩的STC89C52RC单片机)

    我做的这个东西主要有四个功能:

    1.查看温度(按键1)

    2.查看时间并可以按下enter键来修改时间(按键2)

    3.倒计时(按键4)

    4.计分器(按键5)

 

    因为我放在while里面,所以一直刷屏会有抖动,所以我设置了一个1秒的中断标志位,当标志位为1的时候,程序才会进行温度,时间,倒计时的刷屏。总的来说原理都比较简单,但是逻辑有绕。

下面是我的main函数代码

void main()
{    
        hardwave_Init();        //LCD初始化
    
        while (1)
    {    
                if(entering==0 && time_shezhi==1)
                {
                        time_go(); //时间查看的刷新
                }
        KeyDriver(); 
                if(see_tem==1)
                {
                        tmp_check(); //温度查看
                }
                else if(time_shezhi==1)
                {
                        time_check(); //查看时间
                }
                else if(daojishi_go==1)
                {
                        start_jishu(); //倒计时开始
                }
                else if(beep_start == 0)
                {                        
                        BUZZ = 0; //蜂鸣器响
                        if(miao_flag == 1)    //若倒计时为0,蜂鸣器响一秒
                        {
                                miao_flag = 0;
                                BUZZ = 1;
                                beep_start = 1;
                        }
                }

        }
}

 

按键的代码

void KeyAction(unsigned char keycode)
{     

    
    if  ((keycode>='0') && (keycode<='9'))  //判断按键为数字还是符号
    {
                switch(keycode)
                {
                    case '0':
                        if(daojishi_shezhi==1 && daojishi_enter == 0)
                        {
                                
                                daojishi_enter = 1;
                                shezhi_jishu();
                        }
                        else if(daojishi_enter==1)
                        {        
                                LcdCloseCursor();
                                daojishi_index = 1;
                                daojishi_enter = 0;
                                if(i[0] != 0 || i[1] != 0)
                                {
                                        if(i[0] != 0 && i[1] == 0)
                                        {
                                        i[1] = 0x60;
                                        i[0] = i[0] - 0x07;
                                        }
                                        daojishi_go=1;
                                }
                        }
                    
                    break;
                    case '1':
                        if(see_tem==0 && time_shezhi==0 && daojishi_shezhi==0 && jifen_shezhi == 0)
                        {
                                see_tem=1;
                        }
                        else if(see_tem==1)
                        {
                                see_tem=0;
                                hardwave_Init();
                        }
                    
                    break;
                    case '2':
                        if(see_tem==0 && time_shezhi==0 && daojishi_shezhi==0 && jifen_shezhi == 0)
                        {
                                time_shezhi=1;
                                time_check();
                        }
                        else if(time_shezhi==1)
                        {
                                time_shezhi=0;
                                hardwave_Init();
                        }
                    break;
                    case '4':            
                        if(see_tem==0 && time_shezhi==0 && daojishi_shezhi==0 && jifen_shezhi == 0 )
                        {
                                daojishi_shezhi=1;
                                jishu_check();
                                
                        }
                        else if(daojishi_shezhi==1)
                        {
                                daojishi_shezhi=0;
                                daojishi_go = 0;
                                hardwave_Init();
                        }
                        
                    break;                
                    case '5':
                        if(see_tem==0 && time_shezhi==0 && daojishi_shezhi==0 && jifen_shezhi == 0)
                        {
                                jifen_shezhi = 1;
                                jifen_check();
                        }
                        else if(jifen_shezhi == 1)
                        {
                                jifen_shezhi = 0;
                                hardwave_Init();
                        }
                    break;
                    
                }
    }
    else if (keycode == 0x26)  //按下向上键
                if(time_shezhi == 1)
                {
                        IncSetTime();
                }
                else if(daojishi_shezhi == 1 && daojishi_enter == 1)
                {
                        daojishi_up();
                }
                else if(jifen_shezhi == 1)
                {
                        jifen_redjian();
                }
    }
    else if (keycode == 0x28)  //按下向下键
    {
                if(time_shezhi == 1)
                {
                        DecSetTime();
                }
                else if(daojishi_shezhi == 1 && daojishi_enter == 1)
                {
                        daojishi_down();
                }
                else if(jifen_shezhi == 1)
                {
                        jifen_bluejian();
                }
    }
    else if (keycode == 0x25)  //按下向左键
    {
             if(time_shezhi == 1)
                {
                        LeftShiftTimeSet();
                }
                else if(daojishi_shezhi == 1 && daojishi_enter == 1)
                {
                        daojishi_zuoyi();
                }
                else if(jifen_shezhi == 1)
                {
                        jifen_red();
                }
    }
    else if (keycode == 0x27)  //按下向右键
    {
                if(time_shezhi == 1)
                {
                        RightShiftTimeSet();
                }     
                else if(daojishi_shezhi == 1 && daojishi_enter == 1)
                {
                        daojishi_youyi();
                }
                else if(jifen_shezhi == 1)
                {
                        jifen_blue();
                }
    }
    else if (keycode == 0x0D)  // enter键按下
    {
                if (setIndex == 0 && time_shezhi == 1)  //判断能否执行时间的设置
        {
                        entering=1;
            EnterTimeSet();
        }
        else                //退出设置
        {
                        entering=0;
            ExitTimeSet(1);
        }
    }
    else if (keycode == 0x1B)  //退出设置
    {
                if(time_shezhi == 1)
                {
                        entering=0;
                        ExitTimeSet(0);
                }
    }
}


    通过各种标志位来给程序设定走向,0、1、2、4、5、还有上下左右按键各个按键直接的操作互不干扰,但是又有逻辑的可以在LCD上准确的表现出想要的效果。

 

代码链接:https://pan.baidu.com/s/1vM-EB-0hD1NWL1rWJWotkw

密码:pbvy

有兴趣的小伙伴可以自行下载观看

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值