ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于51单片机的抢答器设计

2021-12-07 21:32:18  阅读:235  来源: 互联网

标签:蜂鸣器 51 按下 单片机 LCD Sec 计时 include 抢答器


    我是一名单片机的初学者,写这篇文章的目的是为了记录自己的学习过程。恰好这周老师让做一个关于抢答器的作业,索性将自己的作业发布出来请大佬指正。

PS:我的单片机是跟着B站上,江科大自化协  UP主学的,所以代码风格和他很像,有些代码跟他的一样。

1、这是main文件

     该文件的功能是使KEY1,2,3为抢答功能KEY4的作用是裁判。开始裁判按下按键计时20秒开始,如果这时KEY1,2,3中有一名选手按下后蜂鸣器响一声,同时LCD显示屏中就会显示他的编号且计时暂停,其他选手按下自己的按键屏幕中也不显示。直至裁判按下KEY4后重新开始下一局。

#include <REGX52.H>
#include "LCD1602.h"
#include "Buzzer.h"
#include "Key.h"
#include "Timer0.h"
#include "Delay.h"


unsigned char KeyNum;
unsigned char Sec=0;    //定义计时器,秒
unsigned char People;
int a=1;

void main()
{
    LCD_Init();
    Timer0Init();
    LCD_ShowString(1,1,"Time:");//上电显示静态字符串
    LCD_ShowString(2,1,"People:________");
    TR0=0;                      //定时器停止    
    
    while(1)
    {
        KeyNum=Key();        //获取独立按键键码
        if(KeyNum<=3)
        {
            if(a==1)
            {
                if(KeyNum==1)            //如果K1按键按下
                    {
                        TR0=0;              //定时器停止
                        Buzzer_Time(100);
                        LCD_ShowString(2,8,"1 answer");
                        a++;
                    }
                if(KeyNum==2)//如果K2按键按下
                    {
                        TR0=0;              //定时器停止
                        Buzzer_Time(100);
                        LCD_ShowString(2,8,"2 answer");
                        a++;
                    }
                if(KeyNum==3)//如果K3按键按下
                    {
                        TR0=0;              //定时器停止
                        Buzzer_Time(100);
                        LCD_ShowString(2,8,"3 answer");
                        a++;
                    }
            }
        }
        if(KeyNum==4)//如果裁判 K4按键按下
            {
                TR0=1;          //定时器开始
                Buzzer_Time(100);
                Sec=0;    //计数器清零
                a=1;    //a复位
                LCD_ShowNum(1,6,Sec,2);
                LCD_ShowString(2,1,"People:________");
            }
            
    }
}

//60秒计时器,60s计时结束后蜂鸣器提示
void Timer0_Routine() interrupt 1
{
    static unsigned int T0Count;
    TL0 = 0x18;            //设置定时初值
    TH0 = 0xFC;            //设置定时初值
    T0Count++;
    if(T0Count>=1000)    //定时器分频,1s
    {
        T0Count=0;
        Sec++;            //1秒到,Sec自增
        LCD_ShowNum(1,6,Sec,2);
        if(Sec>=20)        //20秒计时
        {
            while(1)
            {
                Delay(10);            //使蜂鸣器顿挫
                Buzzer_Time(50);    //60秒计时,蜂鸣器响
            }
            Sec=0;        //过后Sec清零
        }
    }
}

2、文章中调用的头文件,可以在B站UP主那里看到,我就是调用他的代码,按照火良老师的话说,这叫代码的移植,嘿嘿
            

标签:蜂鸣器,51,按下,单片机,LCD,Sec,计时,include,抢答器
来源: https://blog.csdn.net/qq_56668497/article/details/121778275

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有