• 基于51单片机的羽毛球计分器设计


    硬件设计

            本设计采用单片机AT89C51作为核心元件,由控制系统,显示模块,按键驱动模块3部分组成。主要编写了主程序,中断程序,显示程序功能模块程序等。实现羽毛球计分器功能。
           整体电路主要由51单片机最小系统,LCD1602液晶显示模块,LED指示灯模块,按键模块;原理图如图:

    Protues仿真图:

    功能

    • 采用按钮开关实现功能控制,按照设计的功能模块共选用8个按钮开关,分别实现启动、A队加分、A队减分、B队加分、B队减分、暂停、停止、清零功能。
    • 选用LCD1602液晶屏作为显示器件,用于记录两队的分数。

    软件设计

    主程序源码

    1. void main()
    2. {    
    3.     EA = 1;           //开总中断
    4.     ConfigTimer0(1);  //配置T0定时1ms
    5.     InitLcd1602();    //初始化液晶
    6.     while (1)
    7.     {
    8.      KeyDriver();    //调用按键功能
    9.      if(k==1)
    10.      LcdInit();     //显示字幕
    11.     
    12.     }
    13. }
    14. /* 按键驱动函数,检测按键动作,调度相应动作函数,需在主循环中调用 */
    15. void KeyDriver()
    16. {
    17.    static bit star = 0;          //开始比赛
    18.    unsigned char but = 0;         //胜利标志
    19.    static unsigned char cnt = 0; //比赛次数
    20.    static unsigned char cnta = 0; //A胜利次数
    21.    static unsigned char cntb = 0; //B胜利次数 
    22.   if(KEY_IN_3 == 0) {   delay();  star = 1; TR0 = 1;k=1;} 
    23.     if(star == 1)
    24.     {    
    25.         LcdWriteCmd(0x0C);  //显示器开,光标关闭           
    26.        if(KEY_IN_1 ==0)  { a++; delay();}
    27.        if(KEY_IN_2 ==0)  { b++; delay();}
    28.        if(KEY_IN_4 ==0)  { TR0 = 0; star=0; delay(); }
    29.        if(KEY_IN_5 ==0)  { a--; if(a<0)a=0; delay();}
    30.        if(KEY_IN_6 ==0)  { b--; if(b<0)b=0; delay(); }         
    31.     }
    32.       if(KEY_IN_7 ==0)  { a=0; b=0; sec=0; minute=0
    33.          TR0=0;star=0;cnta=0; cntb=0; cnt=0; LcdShowStr(0, 0, "                "); delay();}
    34.       if(KEY_IN_8 ==0){ a=0;  b=0;   sec=0;   minute=0; LcdShowStr(0, 0, "                ");
    35.          k=0;cnta=0;cntb=0;cnt=0;LcdWriteCmd(0x01); delay();}    
    36.       if(a>=21 && (a-b)>=2 ) {cnt++; cnta++; but = 1; a = 0; b = 0; }    
    37.       if(b>=21 && (b-a)>=2 ) {cnt++; cntb++; but = 2; a = 0; b = 0; }
    38.       if(cnt==2&&(cnta==2||cntb==2)) {TR0 = 0; star = 0;}
    39.         switch(cnt)
    40.         {
    41.          case 1: if(but==1) LcdShowStr(0, 0, "1Awin"); if(but==2) LcdShowStr(0, 0, "1Bwin");break;
    42.          case 2: if(but==1) LcdShowStr(5, 0, "2Awin"); if(but==2) LcdShowStr(5, 0, "2Bwin");break;
    43.          case 3: if(but==1) LcdShowStr(10, 0, "3Awin"); if(but==2) LcdShowStr(10, 0, "3Bwin"); TR0=0;star=0;break;
    44.          default: break;
    45.         }
    46. }

    资料链接:https://pan.baidu.com/s/1qeSwV-szwQJUQpyVo7OiHQ?pwd=1368 
    提取码:1368

  • 相关阅读:
    电子企业如何克服实施数字工厂管理系统的难题
    java 使用documents4j将XML转为pdf文件的方式
    基于QT实现的图形学绘制系统 文档+项目源码及可执行EXE文件+系统使用说明书
    计算机毕业设计之java+ssm企业销售管理系统
    C# 开发的程序怎么默认以管理员身份运行
    Cloud Native 演进可行性研究
    述职报告写作总结
    03-node基础
    c语言输出杨辉三角
    MATLAB | 那些你不得不知道的MATLAB小技巧(二)
  • 原文地址:https://blog.csdn.net/m0_60790717/article/details/127895386