单片机实例分享,如何设计八路抢答器
单片机作为可编程器件,简化了电路的设计、方便了逻辑设计,从此再也不用使用一大堆电路做硬件逻辑了。拆开任何一件功能稍微复杂一点电子产品,里边都可以看到单片机的身影。学会单片机对找工作也很有利,而且待遇还不错,今天就从实例分享的角度和大家共享一个案例,用单片机来实现一个抢答器。
在电视节目中,经常看到抢答器出现在知识竞赛、答题竞赛节目中,如江苏卫视的《一站到底》,抢答器可以准确、公正、直观、公平的显示出抢答选手的编号,可以更好的促进各选手之间的竞争意识,营造紧张的抢答气氛,增加节目的趣味性和观赏性。
抢答器的设计框图
抢答器要实现如下功能:抢答功能、显示功能、倒计时功能、自锁功能。节目后台需要控场,拥有抢答器的绝对控制权。功能需求 如下:
开始、结束功能 :只有按下开始按键后,现场选手才可以开始抢答,否则抢答事件不被处理视为无效;自锁、互锁功能 :为了保证抢答的公平性,在开始抢答后,第一个按下抢答的视为有效抢答,产生有效抢答后其他抢答视为无效;计时、设置功能 :后台/主持人可以设置抢答时间的长短,以倒数秒的方式显示,增强紧张气氛;显示、声音功能 :用数码管显示倒计时秒数,选手抢答成功后显示抢答者编号和剩余时间;在该设计中,按键采用机械式的四腿按键来实现,按键数量10个;显示采用三位数码管来实现,两位显示时间,一位显示选手编号;声音提示用蜂鸣器来实现。核心器件采用51单片机来实现。其功能框图如下图所示。
1-抢答器功能框图
按键输入电路设计
该抢答器设计中总共有10个按键,其中8个按键用于给用户抢答用,所代表的编号为1-8,另外两个按键分别为开始键和结束键,由主持人或者后台控制。由于8路输入抢答按键具有互锁功能,所以只要有一个有效输入后,其他抢答都是无效的,这个功能可以在程序中实现,为了方便程序设计,这里采用8输入与非门来实现,所用型号为74LS30,该与非门有8路输入,1个输出,功能框图如下所示。
2-74LS30与非门框图
8个按键作为74LS30的输入,输出通过NPN三极管接入51单片机的外部中断0接口,以中断的方式实现按键功能的检测,单片机的中断资源为低电平有效,为了提高电路稳定性在三极管的集电极上加入上拉电阻,以防误动作。
3-按键输入电路设计
开始和结束两个按键采用独立式按键设计,占用掉单片机的两个IO口,程序中采用轮询来实现。
数码管显示电路设计
显示部分采用数码管来实现,根据设计要求,两位用于显示倒计时时间,最大可以显示99;一位用于显示选手编号,故需要3颗数码管,该设计中采用共阳数码管来实现,所谓共阳数码管是指公共端接高电平,段选管脚接低电平后相应的字段才会被点亮。共阴数码管正好相反,公共端接低电平,段选管脚接高电平后相应的字段才会被点亮。数码管的实物图如下所示。
4-数码管实物图
数码管的引脚比较多,除了8个段选管脚外,还有公共端/位选引脚,如果用三颗独立的数码管可能需要较多单片机引脚资源,为了解决这个问题,本例设计采用74HC595作为数码管驱动。74HC595是串入并出的移位寄存器,只需要三个引脚就可以控制8个引脚的输出,而且还可以实现级联。所以74HC595通常在数码管驱动和点阵屏中应用比较多。
这三颗数码管中,分为时间显示和编号显示两组,用到三颗74HC595,其中两颗级联用于控制时间显示的数码管,总共用到6个单片机的IO口,驱动电路如下图所示。
5-数码管驱动电路
蜂鸣器发声电路设计
需求中提到发声设计,当有效按键事件发生时,蜂鸣器发声作为提示音,当倒计时进入5秒之内后还没有人按键抢答时,蜂鸣器每隔1秒发声,制造现场紧张的气氛,提高节目的观赏性和娱乐性,增强节目效果。本例中选择了蜂鸣器,蜂鸣器驱动电路如下图所示。
6-蜂鸣器驱动电路
由于单片机的IO口驱动能力有限,所以采用三极管来驱动,这里选用了PNP三极管。三极管驱动蜂鸣器时工作于饱和状态,为了让三极管充分饱和,将蜂鸣器接在了三极管的集电极,这个地方初学者在设计电路时要注意。图中当单片机的IO口输出低电平时蜂鸣器工作发声。
抢答器程序设计
该设计使用keil5作为编程环境,涉及到数码管显示、按键检测/互锁、蜂鸣器发声、定时器等相关功能模块的程序编写。程序设计的流程图如下所示。
7-程序设计流程图
程序的功能逻辑介绍如下,上电后数码管显示FFF字样,并首先检测“开始”按键是否按下,如果没有按下开始按键则表示抢答未开始。如果按下了开始按键,抢答器启动,秒显示开始倒计时,有人按下抢答键时蜂鸣器发声、倒计时停止并显示抢答者编号,整个抢答事件结束,直到主持人/后台按下结束按键后再显示FFF。如果倒计时进入5秒内,仍未有人抢答,则每个整秒蜂鸣器响一次,直至结束。
以上为程序逻辑设计和程序的流程图讲解,下面介绍各功能模块的程序设计。
首先介绍数码管的程序编写 ,再编写程序时,都会预先定义好数码管的字段表,根据共阳数码管和共阴数码管的不同,其字段表也是不一样的,但是两者是互补的,数码管可显示的字段表如下图所示。
8-数码管字段表
程序代码如下:
/*共阳数码管的0-9数字字码表*/
uchar code seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e,0xff};
其次是按键部分 ,抢答按键采用中断来实现,开始/结束按键采用轮询实现,部分定义代码如下所示。
//定义抢答按键
sbit KEY_1=P0^0; //1
sbit KEY_2=P0^1; //2
sbit KEY_3=P0^2; //3
sbit KEY_4=P0^3; //4
sbit KEY_5=P0^4; //5
sbit KEY_6=P0^5; //6
sbit KEY_7=P0^6; //6
sbit KEY_8=P0^7; //6
//定义开始/结束按键
sbit START = P2^4;
sbit STOP = P2^5;
仿真电路的设计和验证
在做板子之前,先用Proteus仿真软件做了仿真。Proteus仿真支持51单片机并可以实现运行程序的功能,当把程序写好后加载至Proteus即可实现程序的调试,Proteus还可以与Keil软件实现联调功能。所设计的仿真电路如下图所示。
9-仿真电路-初始显示FFF字样
在上电初期,显示“FFF”字样,前两个数码管代表倒计时时间,后一个数码管代表抢答者的编号。按下开始按键后,抢答器开始工作,如下图所示。
10-抢答成功界面
上图表示,在倒计时时间还有7秒的时候,5号选手完成了有效抢答,直至主持人/后台按下结束后再显示FFF,否则一直显示该界面。
抢答器的焊接调试
为了实现功能验证,选择用万用板手工焊接实现这个设计。最终的实物图如下所示:
11-最终实物图正面
电源供电为DC5V,可以使用电池盒供电,也可以选择5V输出的手机充电器供电,导线走在了电路板正面,虽然丑了点,但是方便一点。电路板的反面如下图所示。
12-最终实物图背面
反面是用焊锡连接实现的。由于功能不是很复杂,程序写完后,调试了没几次就完成了功能,前文中所描述的功能都实现了。按键互锁的功能也实现了。下图是通电运行的界面,表示5号抢答者在倒计时28秒的时候抢答成功,这时候其他抢答者的按键无效。只有开始或者结束按键是其作用的。
13-抢答成功界面
该抢答器的设计虽然是一个很简单的练手项目,但是却涉及到了单片机中最常用的外设电路,可以帮助初学者熟悉数码管、按键、蜂鸣器的使用和控制方法。初学者可以借助这个产品熟悉单片机开发过程中所用的各种软件和产品开发的流程。
对这个电路进行PCB Layout,设计个外壳就成了一个不错的产品。还可以增加蓝牙模块或者WiFi模块,实现电子屏的控制和显示,再把功能完善一下,就可以用在舞台上了。
十字路口交通信号灯单片机控制系统设计与调试
第一章 控制要求
1.1 控制要求
(1)系统工作受开关控制,起动开关 ON 则系统工作;起动开关 OFF 则系统停止工作。
(2)控制对象有八个:
东西方向红灯两个 , 南北方向红灯两个,
东西方向黄灯两个 , 南北方向黄灯两个,
东西方向绿灯两个 , 南北方向绿灯两个,
东西方向左转弯绿灯两个,南北方向左转弯绿灯两个。
(3)另外东西方向、南北方向各设置显示两位十进制的7段显示器,用来显示倒数计数值。
1)高峰时段按时序图二(见附图)运行, 正常时段按时序图三(见附图)运行,晚上时段按提示警告方式运行,规律为: 东、南、西、北四个黄灯全部闪亮,其余灯全部熄灭。
高峰时段、正常时段及晚上时段的时序分配按时序图一运行(见附图)。
可以只选择高峰时段或正常时段进行设计,但最后评分值最高以良好评议;如果全部功能实现(需要设计一个24小时的时钟作为时段划分的基础),最高评分值以优秀评议。
时序图
第二章 系统方案设计
2.1交通灯运行状态分析
根据控制要求,系统以下图交通的运行状态来设计系统方案。
状态1南北直行;状态2南北左转; 状态3东西直行;状态4东西左转。
共有四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期。循环执行如图1.5所示:
图2.1 交通灯状态循环图
2.2系统总体方案设计
图2.2系统总体方案图
本系统采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制器,实现了正常、高峰、晚间时通过单片机的P1口设置红、绿、黄灯亮灭的功能。东西、南北两位7段显示器用来显示倒数计数值。系统分三种工作时段:正常、高峰、晚间,并且通过时间段来控制"正常"、"高峰"、"晚间"相互转化。
正常时段:南北段直行通行(绿灯)、东西段禁止(红灯)40s,同时南北段和东西段方向的数码管分别从40s和70s开始倒计时,至最后5s时南北段绿灯变成黄灯闪烁;此后南北段左转(左转绿灯亮)通行、东西段禁止(红灯)20s,同时南北段和东西段方向的数码管都从20s开始倒计时,至最后5s时南北段左转灯变成黄灯闪烁;再后东西段直行通行(绿灯)、南北段禁止(红灯)40s,同时东西段和南北段方向的数码管分别从40s和70s开始倒计时,至最后5s时东西段绿灯变成黄灯闪烁;最后东西段左转(左转绿灯亮)通行、南北段禁止(红灯)20s,同时东西段和南北段方向的数码管都从20s开始倒计时,至最后5s时东西段左转灯变成黄灯闪烁。
高峰时段:南北段、东西段的通行时间改为45s,左转的时间改为15s,其它与正常时段相同。
晚间时段:禁止左转和直行,东西南北四个方向黄灯闪亮。
第三章 系统电路设计
3.1控制芯片选择
图3.1 AT89C51引脚图
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个可编程定时计数器,2个全双工串行通信口,2个读写口线,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8051产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,可以按照常规方法对其进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
3.2状态灯选择
该系统设计红、绿、黄状态灯显示的功能,用LED灯来代替实际的交通灯,由于有四种不同的运行状态,一个十字路口需要16个LED灯,倒计时数码管显示选用两位带片选的7段数码管,需要4个。数码管显示简单,程序简单,端口用的少。普通单色发光二极管具有体积小、工作电压低、工作电流小、发光均匀稳定、响应速度快、寿命长等优点,可用各种直流、交流、等电源驱动点亮,它属于电流控制型,使用时需串接合适的限流电阻。
3.3系统硬件原理图设计
图3.2系统原理布置图
第四章 系统软件设计
4.1 程序流程图设计
图4.1主程序流程图
系统通电后,初始化定时器,进行24小时定时,在7:00到8:15或16:30到17:00时,按高峰时段运行。在6:30到7:00或8:15到16;30或18:00到19:00时,按正常时段运行。其余时段,按晚间时段运行。
图4.2 时钟及晚间时段程序流程图
本设计利用单片机的定时器T0中断来设置24小时定时,设置TH1=0x3C,TL1=0xB0.即每0.05秒中断一次。到第20次中断即过了20*0.05秒=1秒时,计60S时,满意1分钟,计满60分钟,满1小时,计满24小时,又重新开始计时。用定时器T1中断来设置数码管倒计时,每满1S时,使时间的计数值减1,便实现了倒计时的功能。
图4.3 高峰时段及正常时段流程图
4.2 系统编程
4.2.1定时器的中断设置
在单片机中,中断技术主要用于实时控制。所谓实时控制,就是要求计算机能及时地响应被控对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。由于这些控制参量的请求都是随机发出的,而且要求单片机必须做出快速响应并及时处理,对此,只有靠中断技术才能实现。
本系统中的定时时钟及倒计时的设置和相应中断服务子程序如下:
/*24小时时钟 */
void Timer0Cofig(){
TMOD=0x01; //T0定时器工作方式
TH0=0x3C; //设置初始值,定时50MS
TL0=0xB0;
ET0=1; //定时器开中断
TR0=1; //启动定时器0
EA=1; //CPU开中断总允许
}
void T0int() interrupt 1{
TH0=0x3C; //设置初始值
TL0=0xB0;
second_counter++;
if(second_counter>=20){second++;second_counter=0;}
if(second>=60){minute++;second=0;}
if(minute>=60){hour++;minute=0;}
if(hour>=24){hour=0;}
}
/********倒数显示定时器*********/
void Timer1Cofig()
{
TMOD=0x01; //T1定时器工作方式
TH1=0x3C; //定时器初值50ms中断一次
TL1=0xB0;
ET1=1; //定时器开中断
TR1=1; //启动定时器1
EA=1; //CPU开中断总允许
}
/*定时器中断函数*/
void timer1() interrupt 3{
TH1=0x3C; //重新装入初值
TL1=0xB0;
RGY_second++;
if(RGY_second==20){
RGY_second=0;
Time_EW--;//满1秒,数码管值减1
Time_SN--;
}
}
第五章 系统调试与仿真
5.1 proteus仿真结果
根据系统设计要求,进行keil调试和proteus系统仿真,不断调试程序。发光二极管,数码管都能按要求显示,符合要求。proteus总体仿真图如下。
图5.1 仿真结果
相关问答
sn 8p2501bpb的作用?1、sn8p2501bpb单片机,必须要烧写原来单片机的程序代码才可运行。2、单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处...
高电平输出怎么转低电平输出?根据提问者的意思,想高电平输出转换为低电平输出,从原理图可以看出,其输出为单片机的IO口(OUT1、OUT2、、OUT3、OUT4),默认时都是输出低电平,当遥控器按下...提...
sn 74ls164n应用于什么电路?74LS164是一个串行输入并行输出的移位寄存器;从这个功能看,就知道其会用在什么地方了;将串行数据转为并行数据,在单片机上实现就却得是那么的简单,可在不...
74ls241是什么芯片?SN74LS241TI/德州仪器封装PDIP-20批次22+集成电路IC芯片74LS241为3态8位缓冲器,一般用作总线驱动器。74LS241没有锁存的功能。地址锁存器就是一个暂存器...
工业机器人专业怎么样?工业机器人专业不俗,发展前景很辽阔,2015中国机器人市场的快速增长,对于涉及人才的市场需求也日益不断扩大,而机器人涉及人才却无法持续第一时间,造...
光电编码器如何测量角度_作业帮[回答]角度增量值:增量式光电脉冲编码器输出方波信号给控制系统,可以通过脉冲计数来精确计算位置和速度,因为不能测绝对位置,可设定上电起始时刻为0脉冲位...
请问锂电池4.2V转 单片机 3.3V用什么芯片!-ZOL问答SN33,这款稳压器在0.8V~5V输入电压下都能输出3.3V电压,最大输出电流200mA。aat3220iqy,可以试一下4条回答:【推荐答案】请问锂电池4.2V转单片机3.3V用什么芯片...
车辆识别辅助一体机如何设置?1.视频流监控:JPEG流监控:相机支持JPEG流输出。JPEG流压缩率、帧间隔可配。通过车牌识别SDK可以获取流。演示软件可以播放JPEG流。JPEG流分辨率为1...
C51 单片机 ,键盘输入有什么特点?为何要消除键盘抖动?-ZOL问答51单片机键盘一侧与地相连,一侧与单片机I/O口相连,按下键盘,I/O口即为低电平。因为键盘的制造工艺不同,在按下键盘过程中,键盘可能已经与地连接分开数次(很短的...
3t电子地磅使用注意事项[回答]电子台称内部使用的是高运算A/D和单片机电路,为使您称重准确,应远离强电磁干扰源,如(电焊机,电钻,磁铁,大型电动机)等。安放台秤的场合地面尽量平...