历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | 基于51单片机八路抢答器资料

2019-12-17 来源:51hei

(1)设计一个可供8人进行的抢答器。
(2)系统设置复位按钮,按动后,重新开始抢答。
(3)抢答器开始时数码管显示序号0,选手抢答实行优先显示,优先抢答选手的编号一直保持到主持人将系统清除为止。抢答后显示优先抢答者序号,同时发出音响。,并且不出现其他抢答者的序号。
(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为30秒,当主持人启动“开始”开关后,定时器开始减计时,同时蜂鸣器有短暂的声响。
(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。并保持到主持人按复位键。
(6)当设定的时间到,而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。定时器上显示00。

仿真原理图如下
 

制作出来的实物图如下:
 

元件型号    元件名称    元件标号    数量
SMG04_1    数码管    *1    1
蜂鸣器    蜂鸣器    B1    1
10uF    电容    C1    1
20pF    电容    C2, C3    2
9012    三极管    Q1, Q2, Q3, Q4, Q5    5
10K    电阻    R6    1
SW-PB    按键    S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11    11
sw-灰色    电源开关    SW1    1
U1    单片机    U1    1
12M    晶振    Y1    1

单片机源程序如下:


#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


//数码管段选定义      0     1    2    3    4    5         6         7          8           9        

uchar code smg_du[]={0x05,0xdd,0x46,0x54,0x9c,0x34,0x24,0x5d,0x04,0x14};         //断码


sbit smg_we1 = P3^3;          //数码管位选定义8

sbit smg_we2 = P3^4;

sbit smg_we3 = P3^5;

sbit smg_we4 = P3^6;

sbit beep    = P3^7;      //蜂鸣器IO口定义 



uchar flag_start;         //开始抢答标志位

uchar flag_weigui;        //抢答违规标志位


uchar dis_smg[4] = {0};         //数码管显示缓冲区

uchar miao,s_time = 30,s2_time = 25;        //时间

uchar flag_num;           //号码 

uchar menu_1 ;            //菜单设置变量

bit flag_200ms = 1;       //200ms的标志位

uchar flag_qd_en;          //抢答

uchar i,qd2_en;


/***************************数码管位选函数****************************/

void smg_we_switch(uchar i)

{

        switch(i)

        {

                case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;

                case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;

                case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;

                case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;

        }        

}



/********************************************************************

* 名称 : delay_1ms()

* 功能 : 延时1ms函数

* 输入 : q

* 输出 : 无

***********************************************************************/

void delay_1ms(uint q)         //延时1ms函数

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}



/********************独立按键程序*****************/

uchar key_can;         //按键值

void key()         //独立按键程序

{

        static uchar key_new;

        key_can = 0;                            //按键值还原

        if((P2 & 0xff) != 0xff)                //按键按下

        {

                delay_1ms(1);                     //按键消抖动

                if(((P2 & 0xff) != 0xff) && (key_new == 1))

                {                                                //确认是按键按下

                        key_new = 0;                        //key_new = 0   说明按键已按下

                        switch(P2 & 0xff)

                        {

                                case 0xfe:  key_can = 1;  break;         //得到按键值

                                case 0xfd:  key_can = 2;  break;         //得到按键值

                                case 0xfb:  key_can = 3;  break;         //得到按键值

                                case 0xf7:  key_can = 4;  break;         //得到按键值

                                case 0xef:  key_can = 5;  break;         //得到按键值

                                case 0xdf:  key_can = 6;  break;         //得到按键值

                                case 0xbf:  key_can = 7;  break;         //得到按键值

                                case 0x7f:  key_can = 8;  break;         //得到按键值

                        }

                }                        

        }

        else 

                key_new = 1;  //key_new = 1   说明按键已经松开了        

}



/********************独立按键程序*****************/

uchar key_can1;         //按键值

void key_1()           //主持人独立按键程序

{

        static uchar key_new;

        key_can1 = 0;

        P3 |= 0x07;

        if((P3 & 0x07) != 0x07)                //按键按下

        {

                delay_1ms(1);                     //按键消抖动

                if(((P3 & 0x07) != 0x07) && (key_new == 1))

                {                                                //确认是按键按下

                        key_new = 0;

                        switch(P3 & 0x07)

                        {

                                case 0x05:  key_can1 = 9;   break;         //得到按键值

                                case 0x06:  key_can1 = 10;  break;         //得到按键值

                                case 0x03:  key_can1 = 11;  

                                break;         //得到按键值

                        }

                        if(key_can1 == 11)    //复位

                        {

                                menu_1 = 0;

                                beep = 1;

                                flag_weigui = 0;           

                                flag_qd_en = 0;  

                                miao = s_time;

                                qd2_en = 0;

                                flag_num = 0; 

推荐阅读

史海拾趣

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

对于基本二阶段低通滤波器电路,网友可能会有多方面的问题。以下是一些常见问题及其详细回答:

1. 基本二阶段低通滤波器电路的结构是怎样的?

回答:基本二阶段低通滤波器电路通常由两个一阶低通滤波器级联而成,每个一阶低通滤波器包含一个电阻和一个电容。具体来说,电路由两个电阻(R1, R2)和两个电容(C1, C2)组成。输入信号首先经过R1和C1组成的一阶低通滤波器,然后其输出再经过R2和C2组成的第二个一阶低通滤波器。这种结构可以有效滤除输入信号中的高频分量,只保留低频部分。

2. 如何计算二阶段低通滤波器的截止频率?

回答:二阶段低通滤波器的截止频率并非简单地将两个一阶滤波器的截止频率相加或平均。实际上,其截止频率与两个电阻和两个电容的值都有关。对于RC滤波器,单个一阶低通滤波器的截止频率为f_c1 = 1/(2πR1C1)和f_c2 = 1/(2πR2C2)。然而,对于二阶RC低通滤波器,其总截止频率通常使用以下公式计算:

f_c = \frac{1}{2\pi\sqrt{R_1R_2C_1C_2}} \] 这个公式考虑了两个滤波阶段的相互作用。 ### 3. 二阶段低通滤波器相比一阶滤波器有哪些优势? **回答**:二阶段低通滤波器相比一阶滤波器在滤波效果上有显著优势。具体来说,二阶段滤波器在通带内的增益更为平坦,而在阻带内的衰减速度更快(通常为-40dB/dec,比一阶滤波器的-20dB/dec快)。这意味着二阶段滤波器能更好地滤除高频噪声,保留低频信号,从而改善信号的纯度和信噪比。 ### 4. Sallen-Key结构和多路反馈结构(MFB)有什么区别? **回答**:Sallen-Key结构和多路反馈结构(MFB)是二阶低通滤波器的两种常见拓扑结构。Sallen-Key结构通常用于单位增益、高增益精度和低Q值的应用中,其电路结构相对简单,且对运算放大器的性能依赖性较小。而多路反馈结构(MFB)则适用于需要高Q值和高增益的应用场景。MFB结构通过引入额外的反馈路径来实现更高的Q值和更灵活的增益控制,但相应地,其电路复杂度也更高。 ### 5. 在实际应用中,如何选择合适的二阶段低通滤波器参数? **回答**:在选择二阶段低通滤波器的参数时,需要根据具体的应用需求来确定。首先,需要明确滤波器的截止频率,这取决于需要滤除的高频噪声的频率范围。其次,需要考虑滤波器的增益和相位特性,以确保信号在通过滤波器后能够保持所需的幅度和相位关系。最后,还需要考虑滤波器的稳定性和实现复杂度,以确保滤波器在实际应用中能够稳定可靠地工作。 在实际设计过程中,可能需要通过仿真软件来验证所选参数的效果,并根据仿真结果进行调整和优化。此外,还需要注意选择高质量的元件来构建滤波器电路,以确保滤波器的性能和稳定性。
Harwin公司的发展小趣事

进入20世纪80年代和90年代,Harbour Industries继续深化其在电缆领域的研发。为了满足军事和国防部门对电缆的特殊需求,公司开始研发并生产Mil-Spec(军用规格)电缆。这些电缆不仅具备高度的耐用性和可靠性,还符合严格的军事标准。Harbour凭借其在技术上的不断创新和产品质量的持续提升,成功地将Mil-Spec电缆推向市场,并赢得了众多军事客户和合作伙伴的信赖。

振华(CEC)公司的发展小趣事

面对激烈的市场竞争,振华始终将技术创新作为企业发展的核心动力。公司投入大量资金进行技术研发,积极引进国内外先进技术,并与高校、科研机构建立紧密的合作关系。通过持续的技术创新,振华在电子产品领域取得了多项重要突破,推出了一系列具有自主知识产权的高新产品,引领了市场潮流。

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
用于防止非法入侵或提醒人员注意。
AKM [Asahi Kasei Microsystems]公司的发展小趣事
能够准确检测人体发出的红外线,快速触发报警。
捷茂微(GATEMODE)公司的发展小趣事
相对于其他安防设备,成本较低,适合大规模应用。

问答坊 | AI 解惑

一个串口中断方式发送的问题

最近在弄一个家庭影院系统,在MTK解码芯片里(8032核心)实现从USB种读出文件然后给另一个MCU通过UART升级。之前用查询的方式实现了基本功能,但是有小概率出现死机问题。现在想用中断方式来发送和接收。代码如下,我在调发送时,用串口助手接收发 ...…

查看全部问答>

我的远程文件查看器怎么连接不上POCKET PC模拟器了呢?

我用的是VS2005.提示错误是“错误,无法打开文件。…………”后面是一串长长的路径名.请教各位这个问题该怎么解决。…

查看全部问答>

键盘过滤驱动通过注册表加载.

有一个键盘过滤驱动,在XP下,想实现不用INF直接通过注册表加载, 现在在services下面添写了信息 [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\ltkbfiltr] \"DisplayName\"=\"keyboard filter example\" \"ErrControl\"=dword:000 ...…

查看全部问答>

有人知道arduino吗?

网上看到一篇文章, 连线:构建,共享,盈利。开源硬件能成功吗?   大家对这个东西怎么看?…

查看全部问答>

【求助】如何修改xcl文件

我想学学怎样修改xcl文件…

查看全部问答>

压控放大VCA822 调试问题

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 今天在调VCA822,按着它数据手册搭了个电路,一上电后芯片就开始发烫。有童鞋调试过这芯片吗,能否给点指导。    …

查看全部问答>

^-^运算放大器精彩分析

运放详解及比较器迟滞…

查看全部问答>

哪位大虾有RT12864-S的原理图啊

哪位大虾有RT12864-S的原理图啊,我现在想学这个液晶屏可是不知道怎么连接到单片机上去,谁有原理图啊…

查看全部问答>

朱兆祺带你一步一步学习嵌入式(连载)

《嵌入式Linux开发实用教程》视频清单:第1课:Linux基本操作指令第2课:Makefile第3课:Linux常用软件第4课:U-Boot-2013.04搭建适合OK6410模板第5课:初步编译U-Boot-2013.04第6课:U-Boot-2013.04启动分析1第7课:U-Boot-2013.04启动分析2第8课 ...…

查看全部问答>

寻求指导放大电路方面

各位好,我是今年考的研究生,到9月份去上。但是老师说让我必须先学会放大电路方面的设计 还有滤波什么的,还要学会实地操作,我这一头包,我毕业后从事的不是也不是这方面的工作,现在看着大学时读的电工学,所以有哪位大神知道我一下,给个方向或 ...…

查看全部问答>