首页 [毕业设计精品]单片机简易四路抢答器

[毕业设计精品]单片机简易四路抢答器

举报
开通vip

[毕业设计精品]单片机简易四路抢答器[毕业设计精品]单片机简易四路抢答器 目 录 1 设计任务和方案…………………………………………………………………3 1.1 设计任务……………………………………………………………………3 1.2功能要求说明………………………………………………………………3 1.3 设计总体方案及工作原理说明…………………………………………3 2 抢答器的硬件系统的设计………………………………………………………5 2.1 硬件系统各模块功能简要介绍……………………………………………5 2.2 电路原理图、PCB图和元...

[毕业设计精品]单片机简易四路抢答器
[毕业设计精品]单片机简易四路抢答器 目 录 1 设计任务和 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 …………………………………………………………………3 1.1 设计任务……………………………………………………………………3 1.2功能要求说明………………………………………………………………3 1.3 设计总体方案及工作原理说明…………………………………………3 2 抢答器的硬件系统的设计………………………………………………………5 2.1 硬件系统各模块功能简要介绍……………………………………………5 2.2 电路原理图、PCB图和元器件布局图………………………………………5 2.3 元器件清单…………………………………………………………………6 3 抢答器软件系统的设计…………………………………………………………7 3.1使用的单片机资源的情况…………………………………………………8 3.2 各模块功能简要介绍………………………………………………………8 3.3 程序的 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 框图……………………………………………………………8 3.4 程序清单……………………………………………………………………12 4 抢答器的设计结论、仿真结果和教学建议……………………………………13 4.1 设计结论和使用说明………………………………………………………13 4.2 仿真结果……………………………………………………………………13 4.3 设计体会……………………………………………………………………14 4.4 教学建议……………………………………………………………………15 参考文献……………………………………………………………………………16 致谢…………………………………………………………………………………17 附录…………………………………………………………………………………18 1 设计任务和方案 1.1设计任务 (一)设计题目:抢答器 (二)设计目的与任务: 学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。 1.2功能要求说明 该抢答器上电或按键复位后能自动显示系统提示符“P.” 。设定S2GN键、S3GN键、S4GN键、S5GN键、S6GN键、S7GN键、S8GN键分别为一号选手键、二号选手键、三号选手键、四号选手键、开始键、答完键、复位键。若在主持人按下开始键之前有人按下抢答键,则抢答违规,数码管显示器显示违规台号,违规指示灯(接在P3.2上的灯)亮,只有主持人按复位键后才能重新开始抢答。主持人按下开始键后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;若30S后依然无人抢答,蜂鸣器发出音响,违规指示灯亮。正常抢答下,从抢答键按下开始30S内,答完键没按下,则数码管显示器显示违规台号,违规指示灯亮,蜂鸣器发出音响。各台数字显示的消除、蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位键实现。 1.3设计总体方案及工作原理说明 设计中采用AT89S52芯片、LED显示器、蜂鸣器、LED灯和一些独立式按键构成一个简易四路抢答器。设计中是采用单片机的内部定时器进行定时,原理框图如图1.1所示 整个抢答器的工作原理是:在正常的供电状态下,开始抢答时利用单片机倒计时,并由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则执行相应的键功能程序。 1 单片机晶振电路8段LED显示器 单片机复位电路LED灯AT89S52 键盘输入蜂鸣器 图1.1 原理框图 2 2 抢答器的硬件系统的设计 2.1 硬件系统各模块功能设计 该抢答器主要由单片机最小系统、独立式键盘模块、LED显示电路模块、蜂鸣电路模块和LED指示灯电路模块组成。各模块的功能如下: (1)单片机最小系统 由AT89S52单片机、时钟电路和复位电路构成。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。时钟电路由一个12MHz的石英晶体振荡器和两个33pF的的电容组成振荡电路和分频电路。复位电路采用上电复位和按键复位结合的方式对电路进行复位,主要是通过RST引脚送入单片机。单片机最小系统为整个电路的核心。 (2)独立式键盘模块 采用独立式键盘接法,共有七个按键来对电路进行控制。分别通过上拉电阻接在单片机的P1口线上。其中有四个按键为抢答键(接在P1.0--P1.3口线上),开始键接在P1.4口线上,答完键接在P1.5口线上,复位键接在P1..6口线上。 (3)LED显示电路模块 采用两个四位一体共阳型数码管显示器进行显示。由于位控线的驱动电流较大,因此在P2口线上接了8个PNP型三极管提高驱动能力;在单片机的P1口线和P2口线上接了16个470Ω的电阻,这些电阻起限流的作用。将段控口a--dp接在P0.0--P0.7上,位控口接在P2口线上,实现对显示的控制。LED显示电路模块主要用来指示第一抢答者,显示倒计时和违规的台号。 (4)蜂鸣电路模块 单片机P3.1口线上接上一个1KΩ电阻然后再通过一个PNP型三极管与蜂鸣器相连接组成蜂鸣器电路,接入PNP型三极管是为了增强蜂鸣器的驱动电流。蜂鸣电路主要完成提示和违规报警功能。 (5)LED指示灯电路模块 单片机P3.2口线上经过一个470Ω的电阻与LED灯的阴极相连接,LED灯的阳极接正五伏电压。470Ω的电阻起限流的作用。LED指示灯电路模块主要用来指示用违规操作发生。 2.2 电路原理图、PCB图和元器件布局 Proteus原理图、PCB图以及元器件布局图分别见附录1附录2与附录3。 3 2.3 元器件清单 元器件清单见附录4。 4 3 抢答器软件系统的设计 3.1 使用的单片机资源的情况 该抢答器用到了单片机的定时器的功能,定时器0采用工作方式1并以中断方式工作;在数据的显示时采用的是查表的方法,因此需要将表格、数据存到单片机的程序存储器中去。 本设计采用独立式键盘,键盘直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。用到的LED显示器接到了单片机的P0口线上和P2口线上。LED指示灯和蜂鸣器接在P3口线上。 3.2 各模块功能简要介绍 该抢答器所用的软件模块有定时器模块、按键模块、LED显示模块。 (1)定时器模块 选择定时器0,设置定时器定时方式为方式1以中断方式工作,设置定时时间为50mS。 (2)按键模块 采用独立式键盘,共用七个按键对电路进行控制和操作,分别为S2GN、S3GN、S4GN、S5GN、S6GN、S7GN、S8GN来控制抢答器。S2GN、S3GN、S4GN、S5GN代表选手;S6GN为开始键、S7GN为答完键、S8GN为复位键。 (3)LED显示模块 抢答器上电显示P.,按开始键开始抢答,显示器显示倒计时,若为无效抢答则显示器显示违规台号。 3.3 程序的流程框图 (1)主程序流程框图 如图3.1所示。 5 开始 程序初始化 ? 抢答器前显示P. 调键盘扫描程序 Y执行开始键是否为开始键键功能程序 N Y执行S2GN键是否为S2GN键键功能程序 N 执行S3GN键Y是否为S3GN键键功能程序 N Y执行S4GN键是否为S4GN键键功能程序 N Y执行S5GN键是否为S5GN键键功能程序 N 执行答完键Y是否为答完键键功能程序 N YY执行复位键是否为复位键键功能程序 N 图3.1 主程序流程框图 (2)抢答键程序流程框图 抢答键程序流程框图如图3.2所示。图中的?代表主程序流程框图中的?。 6 开始 ? N显示违规台号、蜂鸣器是否为有效抢答,报警、违规指示灯亮 Y 抢答键标志位置一调键盘扫描程序 N重新倒计时是否为复位键, Y 调显示程序执行复位键键功能程序 调键盘扫描程序? Y是否答完键,执行答完键键功能程序 N Y是否为复位键,执行复位键键功能程序 N Y显示违规台号、蜂鸣器计时时间是否到,报警、违规指示灯亮 调键盘扫描程序 N是否为复位键, Y 执行复位键键功能程序 ? 图3.2 抢答键程序流程框图 (3)开始键程序流程框图 开始键程序流程框图如图3.3所示。图中的?代表主程序流程框图中的?。图 ?代表抢答键程序流程框图中的? 7 开始 开始键标志位置一 开启定时器0 调显示程序 调键盘扫描程序 Y 是否为S2GN键,执行S2GN键键功能程序N ?Y 是否为S3GN键,执行S3GN键键功能程序N Y 是否为S4GN键,执行S4GN键键功能程序N Y 是否为S5GN?执行S5GN键键功能程序N Y 是否为复位键,执行复位键键功能程序N Y 显示违规台号、蜂鸣器计时时间是否到,报警、违规指示灯亮N 调键盘扫描程序 YN 执行复位键键功能程序是否为复位键, ? 图3.3 开始键程序流程框图 (4)答完键程序流程框图 8 开始键程序流程框图如图3.4所示。图中的?代表主程序流程框图中的?。 开始 N是否为有效抢答,? Y 关定时器 调显示程序 调键盘扫描程序 Y是否为复位键,执行复位键键功能程序? N 图3.4 答完键程序流程框图 (5)复位键程序流程框图 复位键程序流程框图如图3.5所示,图中的?代表主程序流程框图中的?。 开始 所有标志位清零 熄灭违规指示灯 关定时器 ? 图3.5 复位键程序流程框图 3.4 程序清单 见附录5。 9 4 抢答器的设计结论、仿真结果和教学建议 4.1 设计结论和使用说明 (1)设计结论 通过对单片机进行外接键盘和LED数码管的操作以及加上硬件电路和软件的结合,实现了抢答器P.显示以及抢答倒计时的显示,正常抢答时显示台号,抢答违规时显示违规台号、违规指示灯亮、蜂鸣器报警。通过测试和仿真以及修改,该抢答器完成了设计任务,符合设计要求。 (2)使用说明 该抢答器采用两个四位一体八段数码管显示。当抢答器一上电即可显示“P.”,进入准备工作状态。按下S6GN(开始键)键后,抢答开始并计时30S;若10S内无人抢答,蜂鸣器发出警示音,若计时到仍无人抢答则违规指示灯亮,蜂鸣器报警。若在S6GN键按下之前有人抢答,则显示器显示违规台号,违规指示灯亮,只有按S8GN(复位键)才能重新开始抢答。正常抢答下,显示器显示台号,蜂鸣器发出音响,其它抢答键无效;正常抢答下,从抢答键按下开始30S内,S7GN键(答完键)没按下,则数码管显示器显示违规台号,违规指示灯亮,蜂鸣器发出音响。各台数字显示的消除、蜂鸣器音响及违规指示灯的关断,都要通过主持人按S8GN键实现。 4.2 仿真结果 在仿真时用到了两个软件,第一个是Keil,第二个是Proteus,本次仿真是将两个软件结合起来进行的。运用Keil软件用来编译和调试程序,运用Ptoteus软件来仿真。Ptoteus仿真电路原理图参见附录。 抢答器上电时,仿真的数码管显示器显示如图4.1所示,当按下开始键时,显示器显示倒计时,此时数码管显示器的显示如图4.2所示,若在开始键按下之前有人抢答,数码管显示违规台号,违规指示灯亮,仿真图如图4.3所示。正常抢答时,数码管显示台号仿真图如图4.4所示。抢答超时时,数码管显示违规台号,违规指示灯亮,蜂鸣器发出音响,仿真图如图4.5所示。 10 图4.1 抢答器上电显示P.图 图4.2 抢答器显示倒计时图 图4.3 抢答器正常抢答图 图4.4 抢答器抢答违规图 图4.5 抢答器超时违规图 4.3 设计体会 本次我设计的抢答器已经能够完成任务,达到了设计要求。这次设计的巧妙之处是在中断服务程序中完成了一些标志位的处理,使得编程更加容易。虽然最后我设计的抢答器能完成任务,但仍存在很多的不足。例如,我所设计的抢答器统计选手的得分情况,因此还需多加改进。 我所用的实物板子的电路虽然不是自己设计的,但是通过老师的讲解我知道了各个模块电路设计的原理。由于以前已经做过几块板子了,因此在用Ptrtel软件绘制电路原理图、画PCB图以及制版的过程中并没有遇到太大的困难。在进行程序编 11 写时,虽然遇到了一点小小的问题,但是我通过Keil软件调试,最终将编写有误的程序修正过来。在进行编程时我用汇编语言和C语言各编写了一套。通过编写程序,我进一步熟悉了指令的运用。这次课程设计让我认识到,调试程序时必须具有良好的耐性,不能急躁,否则会事倍功半。遇到问题是应当迎难而上,不能逃避,必须对自己有足够的信心~ 4.4 教学建议 王老师不仅传授了知识给我们还教会了我们不少做人的道理,对于大学教师来说这是难能可贵的,这些做人的道理对于我们经后进入社会将会有很大的帮助。在教学方面,我尤其觉得王老师的 课件 超市陈列培训课件免费下载搭石ppt课件免费下载公安保密教育课件下载病媒生物防治课件 可下载高中数学必修四课件打包下载 做的特别的好,课件重点、难点突出,讲解非常详细,而且还补充了一些很实用的知识。王老师将理论教学与实际操作相结合,让我们更深刻的掌握了知识,同时也让我们认识到 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 本上的东西不一定都全对,必须通过实践来检验它。我认为王老师的课讲得已经很好了,在此我只想提一个自己的拙见,希望在以后王老师能多启发我们的创新精神。 12 参考文献 ,1,马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计,M,.北京:北 京航空航天大学出版社,2006 Ma Zhongmei,J, Zhang Kai, MaYan. MCU C language program design [M] .beijing: Beijing aerospace university press, 2006 ,2,李广弟,朱月秀,冷祖祁.单片机基础,M,.北京:北京航空航天大学出版社, 2007 Li Guangdi, ZhuYuexiu, Leng Zuqi. Microcontroller [M] .beijing: Beijing university of aeronautics and press, 2007 ,3,李光飞.单片机课程设计实例指导,M,.北京:北京航空航天大学出版社,2004.9 Li Guangfei. This course design example guide [M] .beijing: Beijing university of aeronautics and press, 2004.9 ,4,邢增平.Protel 99 SE设计专家指导,M,.北京:中国铁道出版社,2004 Xing Zengping. Protel 99 SE design expert guidance [M] .beijing: China railway publishing house, 2004 13 P30 P31 P32 P33 P34P00P01P35附 录1 P02P03P36P04P05 P06P37P07 P27P26P25P24P00P01P23VCCP02P22P03LS1SPEAKERP21Q8P04P20P05Q9PNPPNPVCCP06P07 Q7 PNPVCCP00P01R31kP02Q6P031P04PNPP052P06P313Q5RETP0745PNPP206P21P107P22P118Q4P23P129P24P13PNPVCCP25P14GNDP26P15RETP27P16Q3P17C122000nFRB1kPNPP10P30P11P31P12P32Q2P13P33P14P34PNPP15P35P16P36Q1RA0.2kGNDP17P37PNP RP1210k R02R00R03R04R05R060.47kR070.47kR01R210.47kR220.47kR230.47kR240.47kR250.47kR260.47kR270.47k0.47k0.47kR200.47k0.47k0.47k0.47k0.47K 班1VCC08022潘艳34自本5LED-REDLED-RED6LED-REDLED-REDLED-REDLED-REDLED-REDLED-RED789D2D5D6D7D8D1D4D3 0.47k0.47k0.47k0.47k0.47k0.47k0.47k0.47k VCCRP7RP0RP1RP2RP3RP4RP5RP61939XTAL1P0.0/AD038RP1110kP0.1/AD137P0.2/AD21836XTAL2P0.3/AD3U1AT89C5135P0.4/AD434P0.5/AD5VCC33P0.6/AD6932RSTP0.7/AD721P2.0/A822 P2.1/A923P2.2/A102924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A1327P2.6/A1428P2.7/A15 14 110P1.0P3.0/RXD211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WR817P1.7P3.7/RD GND 附 录4 元器件名称 规格 数量 AT89S52 1 底座 40脚 3 晶振 12MHz 1 发光二极管 9 单排插 40脚 1 三极管 9012 9 蜂鸣器 1 小按键 9 下载口座子 十芯 1 18b20温度传感器 1 六脚开关 1 USB电源线加接口 1 电阻 200Ω 1 电阻 4.7K 1 电阻 1K 3 电阻 470Ω 24 电解电容 220µF 1 瓷片电容 33pF 2 排阻 10K 2 短路帽 3 杜邦线8p 1 PCB板子 1 电源白色插座 1 15 附 录5 (1)汇编语言 ;*********************************************************************************; ;项目名称:抢答器 ;设计者:潘艳 ;设计日期:2010年12月20日 ;项目功能要求:抢答器上电或按键复位后能自动显示系统提示符“P.”, ; 进入准备工作状态。主持人按下开始按钮后,抢答开始并 ; 限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人 ; 按下开始按钮之前有人按下抢答器,抢答违规,显示器显 ; 示违规台号,违规指示灯亮,其它按钮不起作用;正常抢 ; 答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无 ; 效;正常抢答下,从按下抢答按钮开始30S内,答完按钮 ; 没按下,则作超时处理,超时处理时,违规指示灯亮,数 ; 码管显示违规台号,蜂鸣器发出音响;各台数字显示的消 ; 除,蜂鸣器音响及违规指示灯的关断,都要通过支持人按 ; 复位按钮。 违规指示灯使用接在P3.2上的LED灯 ; ;*********************************************************************************; ;堆栈栈底7FH; ;*********************************************************************************; ;8个LED灯接至P30---P37 ;*********************************************************************************; ;LED数码管显示器设定; ;P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,a ;P2.7---P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0) ;显示缓冲区设定从右至左依次为78H,79H,7AH,7BH,7CH,7DH,7EH,7FH ;*********************************************************************************; ;独立式键盘设定; ;8个按键S2至S9分别依次接在P1.0至P1.7口线; ;*********************************************************************************; ;键功能程序; ;S2GN (S2键键功能程序) 1号选手 ;S3GN (S3键键功能程序) 2号选手 ;S4GN (S4键键功能程序)3号选手 ;S5GN (S5键键功能程序) 4号选手 ;S6GN (S6键键功能程序) 开始键 ;S7GN (S7键键功能程序) 答完键 ;S8GN (S8键键功能程序)复位键 ;*********************************************************************************; 16 ;常数表格; ;DISBH(系统提示符P.字型代码序号表) ;TAB(共阳数码管字型代码表) ;*********************************************************************************; ;子程序; ;KEY(键扫描子程序); ;KEYCHULI(P1口数据处理子程序) ;DISP(数码管显示子程序) ;DL(1毫秒延时子程序) ;*********************************************************************************; ;中断服务程序 ;TC0(50ms定时器0以中断方式1进行中断) ;*********************************************************************************; ;数据存储器变量及常量单元定义; ;40H字节单元: 十六进制数 存放定时50ms循环次数 ;20H字节单元: 十六进制数 键值 ;21H.0: 开始键按下标志位 ;21H.1: 抢答键按下标志位 ;21H.2: 超时标志位 ;78H-7FH字节单元: 显示缓存区 ;30H字节单元: 十进制数 秒个位数 非压缩BCD码 ;31H字节单元: 十进制数 秒十位数 非压缩BCD码 ;32H字节单元: 十进制数 秒值 压缩BCD码 ;*********************************************************************************; ;伪指令定义区 SECGE EQU 30H SECSHI EQU 31H SHU EQU 32H ;*********************************************************************************; ;系统起始程序区 ORG 0000H START: LJMP MAIN ORG 000BH LJMP TC0 ;*********************************************************************************; ;系统监控程序区 ORG 0030H MAIN: MOV SP, #7FH ;确立堆栈区 MOV PSW, #00H MOV R0, #20H ;RAM区首地址 MOV R7, #96 ;RAM区单元个数 ML: MOV @R0, #00H 17 INC R0 DJNZ R7, ML MOV TMOD, #01H ;定时器初始化,定时器0以工作方式1工作 MOV TH0, #3CH MOV TL0, #0B0H SETB EA ;开启总中断 SETB ET0 ;开启定时器0分中断 ;*********************************************************************************; 显示系统提示符“P.” ; TSF: MOV DPTR, #DISBH ;系统初始化后提示符“P.”字符代 MOV R5, #08H ;码表首地址 MOV R0, #78H DISPTSF: CLR A MOVC A, @A+DPTR MOV @R0, A INC R0 INC DPTR DJNZ R5, DISPTSF LCALL DISP ;*********************************************************************************; ;键盘控制指令 TT: LCALL DISP ;调用显示程序 LCALL KEY JB 20H.0, S2GN ;1号选手 JB 20H.1, S3GN1 ;2号选手 JB 20H.2, S4GN1 ;3号选手 JB 20H.3, S5GN1 ;4号选手 JB 20H.4, S6GN1 ;开始键 JB 20H.5, S7GN1 ;答完键 JB 20H.6, S8GN1 ;复位键 LJMP TT ;无键按下,则返回TT,继续调显示、扫描按键 S3GN1: LJMP S3GN S4GN1: LJMP S4GN S5GN1: LJMP S5GN S6GN1: LJMP S6GN S7GN1: LJMP S7GN S8GN1: LJMP S8GN ;*********************************************************************************; ;键功能区 ;\\S2键功能区 S2GN: JNB 21H.0, W20 ;若抢答违规则跳转到W20 18 SETB TR0 CLR P3.1 SETB 21H.1 LCALL DLL W23: MOV R2, #5 MOV R0, #78H MOV @R0, #0 INC R0 MOV @R0, #3 INC R0 W21: MOV @R0, #16 INC R0 DJNZ R2, W21 MOV @R0, #01H ;此段程序为更新显示缓冲区 SETB P3.1 W24: LCALL DISP LCALL KEY JB 20H.5, S7GN22 ;答完键 JB 20H.6, S8GN22 ;复位键 JB 21H.2, W25 LJMP W24 W20: MOV R2, #7 MOV R0, #78H W22: MOV @R0, #16 INC R0 DJNZ R2, W22 MOV @R0, #01H LJMP W26 W25: LCALL DISP CLR P3.2 CLR P3.1 LCALL KEY JB 20H.6, S8GN22 ;复位键 LJMP W25 W26: LCALL DISP CLR P3.2 LCALL KEY JB 20H.6, S8GN22 ;复位键 LJMP W26 S7GN22: LJMP S7GN S8GN22: LJMP S8GN ;\\S3键功能区 S3GN: JNB 21H.0, W30 ;若抢答违规则跳转到W30 19 SETB TR0 CLR P3.1 LCALL DLL SETB 21H.1 W33: MOV R2, #5 MOV R0, #78H MOV @R0, #0 INC R0 MOV @R0, #3 INC R0 W31: MOV @R0, #16 INC R0 DJNZ R2, W31 MOV @R0, #02H ;此段程序为更新显示缓冲区 SETB P3.1 W34: LCALL DISP LCALL KEY JB 20H.5, S7GN33 ;答完键 JB 20H.6, S8GN33 ;复位键 JB 21H.2, W35 LJMP W34 W30: MOV R2, #7 MOV R0, #78H W32: MOV @R0, #16 INC R0 DJNZ R2, W32 MOV @R0, #02H LJMP W36 W35: LCALL DISP CLR P3.2 CLR P3.1 LCALL KEY JB 20H.6, S8GN33 ;复位键 LJMP W35 W36: LCALL DISP CLR P3.2 LCALL KEY JB 20H.6, S8GN33 ;复位键 LJMP W36 S7GN33: LJMP S7GN S8GN33: LJMP S8GN ;\\S4键功能区 S4GN: JNB 21H.0, W40 ;若抢答违规则跳转到W40 SETB TR0 20 CLR P3.1 LCALL DLL SETB 21H.1 W43: MOV R2, #5 MOV R0, #78H MOV @R0, #0 INC R0 MOV @R0, #3 INC R0 W41: MOV @R0, #16 INC R0 DJNZ R2, W41 MOV @R0, #03H ;此段程序为更新显示缓冲区 SETB P3.1 W44: LCALL DISP LCALL KEY JB 20H.5, S7GN44 ;答完键 JB 20H.6, S8GN44 ;复位键 JB 21H.2, W45 LJMP W44 W40: MOV R2, #7 MOV R0, #78H W42: MOV @R0, #16 INC R0 DJNZ R2, W42 MOV @R0, #03H LJMP W46 W45: LCALL DISP CLR P3.2 CLR P3.1 LCALL KEY JB 20H.6, S8GN44 ;复位键 LJMP W45 W46: LCALL DISP CLR P3.2 LCALL KEY JB 20H.6, S8GN33 ;复位键 LJMP W46 S7GN44: LJMP S7GN S8GN44: LJMP S8GN ;\\S5键功能区 S5GN: JNB 21H.0, W50 ;若抢答违规则跳转到W50 SETB TR0 CLR P3.1 21 LCALL DLL SETB 21H.1 W53: MOV R2, #5 MOV R0, #78H MOV @R0, #0 INC R0 MOV @R0, #3 INC R0 W51: MOV @R0, #16 INC R0 DJNZ R2, W51 MOV @R0, #04H ;此段程序为更新显示缓冲区 SETB P3.1 W54: LCALL DISP LCALL KEY JB 20H.5, S7GN55 ;答完键 JB 20H.6, S8GN55 ;复位键 JB 21H.2, W55 LJMP W54 W50: MOV R2, #7 MOV R0, #78H W52: MOV @R0, #16 INC R0 DJNZ R2, W52 MOV @R0, #04H LJMP W56 W55: LCALL DISP CLR P3.2 CLR P3.1 LCALL KEY JB 20H.6, S8GN ;复位键 LJMP W55 W56: LCALL DISP CLR P3.2 LCALL KEY JB 20H.6, S8GN ;复位键 LJMP W56 S7GN55: LJMP S7GN S8GN55: LJMP S8GN ;\\S6键功能区 S6GN: SETB TR0 SETB 21H.0 W63: MOV R2, #6 MOV R0, #78H 22 MOV @R0, #0 INC R0 MOV @R0, #3 INC R0 W61: MOV @R0, #16 INC R0 DJNZ R2, W61 W64: LCALL DISP LCALL KEY JB 20H.0, S2GN66 ;1号选手 JB 20H.1, S3GN66 ;2号选手 JB 20H.2, S4GN66 ;3号选手 JB 20H.3, S5GN66 ;4号选手 JB 20H.6, S8GN ;复位键 JB 21H.2, W65 LJMP W64 W65: LCALL DISP CLR P3.2 CLR P3.1 LCALL KEY JB 20H.6, S8GN ;复位键 LJMP W65 S2GN66: LJMP S2GN S3GN66: LJMP S3GN S4GN66: LJMP S4GN S5GN66: LJMP S5GN ;\\S7键功能区 S7GN: JNB 21H.0, T7 CLR TR0 LCALL DISP LCALL KEY JB 20H.6, S8GN ;复位键 LJMP S7GN T7: LJMP TT ;\\S8键功能区 S8GN: MOV P3, #0FFH CLR 21H.0 CLR 21H.1 CLR 21H.2 MOV 40H, #00H CLR TR0 LJMP MAIN 23 ;*********************************************************************************; ;子程序区; ;(1)键扫描子程序 KEY: LCALL KEYCHULI ;调P1口数据处理子程序 JZ EXIT ;没有键按下,转返回 LCALL DISP ;调显示子程序去抖动 LCALL DISP LCALL KEYCHULI ;调P1口数据处理子程序 JZ EXIT ;没有键按下,转返回 MOV B, 20H ;保存取反后的键值 KEYSF: LCALL KEYCHULI ;调P1口数据处理子程序 JZ KEY1 ;键释放,转恢复键值 LCALL DISP ;调显示子程序延时 LJMP KEYSF ;等待释放 KEY1: MOV 20H, B ;键值送20H保存 EXIT: RET ;子程序返回 ;(2)P1口数据处理子程序 KEYCHULI: PUSH PSW ;保护现场 CLR RS1 ;改变当前寄存器组为组1 SETB RS0 MOV P1, #0FFH ;先向P1口写1 MOV A, P1 ;读P1口数据 CPL A ;P1口数据取反 MOV 20H, A ;保存取反后的键值 CLR RS1 ;恢复当前寄存器组为组0 CLR RS0 POP PSW ;恢复现场 RET ;子程序返回 ; ; ;*********************************************************************************; ;常数表格区 ;系统初始化后提示符“P.”字符代码表 DISBH: DB 10H,10H,10H,10H,10H,10H,10H,11H ;提示符“P.”字 ;符序号 ;显示字符段选码表(共阳极代码) TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-8 DB 90H, 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0BFH ;9,A,B,C,D,E, ;F,灭,p.,- ;*********************************************************************************; ;(3)数码管显示子程序DISP ;入口:7FH,7EH,7DH,7CH,7BH,7AH,79H,78H(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0) DISP: PUSH DPH PUSH DPL 24 PUSH ACC PUSH PSW CLR RS1 ;改变当前寄存器组为组1 SETB RS0 MOV R1, #78H ;显示缓冲存储单元首地址 MOV R2, #0FEH ;从右至左显示 MOV R5, #08H ;循环次数,即驱动数码管的位数 DISP1: MOV A, @R1 MOV DPTR, #TAB MOVC A, @A+DPTR MOV P2, #0FFH MOV P2, #0FFH MOV P0, A ;送段控 MOV P2, R2 ;送位控 LCALL DL ;延时1毫秒 MOV A, R2 ;位控码送A RL A ;获得新的位控码 MOV R2, A ;保存新的位控码 INC R1 ;获得新的显示缓冲单元地址 DJNZ R5, DISP1 ;循环没有结束则继续 DISP2: POP PSW ;恢复当前寄存器组的组号 POP ACC POP DPL POP DPH RET ;(4)延时1ms子程序(晶振频率12MHz)DL DL: MOV R7, #02H DL1: MOV R6, #0FFH DL2: DJNZ R6, DL2 DJNZ R7, DL1 RET ;(5)延时130ms子程序(晶振频率12MHz)DL DLL: MOV R7, #0FFH DLL1: MOV R6, #0FFH DLL2: DJNZ R6, DLL2 DJNZ R7, DLL1 RET ;(6)减一子程序 SS: MOV SECGE, 78H MOV SECSHI, 79H 25 MOV A, SECSHI SWAP A ;累加器中高低字节交换 ORL A, SECGE DEC A ;累加器自减1 MOV SHU, A ;全值暂存SHU中 ANL A, #0FH ;屏蔽十位数,取出个位数 CJNE A, #0FH, SS1 SUBB A, #6 ;对非法数据进行调整 SS1: MOV SECGE, A MOV 78H, SECGE MOV A, SHU SWAP A ;累加器中高低字节交换 ANL A, #0FH ;屏蔽个位数,取出十位数 CJNE A, #0FH, SS2 SUBB A, #6 ;对非法数据进行调整 SS2: MOV SECSHI, A MOV 79H, SECSHI MOV A, SECSHI SWAP A ;累加器中高低字节交换 ORL A, SECGE MOV SHU, A ;全值暂存SHU中 RET ;中断服务程序 ;定时器中断程序 TC0: PUSH ACC PUSH PSW PUSH DPH PUSH DPL ;保护现场、保护断点 SETB RS1 ;切换至通用寄存器第3组 SETB RS0 MOV TH0, #3CH MOV TL0, #0B0H ;送定时50ms的初值 INC 40H MOV R2, 40H CJNE R2, #20, RET1 MOV 40H, #00H LCALL SS MOV R3, SHU JNB 21H.1, LL5 LJMP LL2 LL5: CJNE R3, #20H, LL1 26 CLR P3.1 LL1: CJNE R3, #19H, LL2 SETB P3.1 LL2: CJNE R3, #00H, RET1 SETB 21H.2 CLR TR0 RET1: POP DPL POP DPH POP PSW POP ACC RETI END (2)C语言 /*********************************************************************************: 项目名称: 抢答器 设计者: 潘艳 设计日期:2010年10月01日 **********************************************************************************; 功能要求:抢答器上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。主持人按下开始按钮后,抢答开始并 限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人 按下开始按钮之前有人按下抢答器,抢答违规,显示器显 示违规台号,违规指示灯亮,其它按钮不起作用;正常抢 答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无 效;正常抢答下,从按下抢答按钮开始30S内,答完按钮 没按下,则作超时处理,超时处理时,违规指示灯亮,数 码管显示违规台号,蜂鸣器发出音响;各台数字显示的消 除,蜂鸣器音响及违规指示灯的关断,都要通过支持人按 复位按钮。 违规指示灯使用接在P3.2上的LED灯 **********************************************************************************; LED数码管显示器设定; P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,a P2.7---P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0) 27 **********************************************************************************; 独立式键盘设定; 8个按键S2至S9分别依次接在P1.0至P1.7口线 **********************************************************************************; 键功能程序; S2GN (S2键键功能程序) 1号选手 S3GN (S3键键功能程序) 2号选手 S4GN (S4键键功能程序)3号选手 S5GN (S5键键功能程序) 4号选手 开始键 S6GN (S6键键功能程序) S7GN (S7键键功能程序) 答完键 S8GN (S8键键功能程序)复位键 /********************************************************************************** 宏定义 *********************************************************************************** 数组区 共阳数码管字型码 P.显示序号 *********************************************************************************** 函数区 void DelayX1ms(uint count) 延时函数 void led_buf_auto_flush(void) 显示缓冲区更新函数 void timer0(void) 定时器t0中断服务函数 void put_on_leds(void) 显示输出函数 keychuli() 键值处理函数 key() 键盘扫描函数 void disP(void) 显示P.的显示缓冲区更新函数 void main() 主函数 *********************************************************************************** 变量定义 uchar sec 计时变量 uchar pos 段码序号数组下标 uchar dmask 位控码 uchar k 返回键值 uchar keyzhi,keyzhii 键盘按键值临时存放 uchar biaozhi 标志位 */ #include"reg52.h" #include"intrins.h" #define uchar unsigned char #define uint unsigned int #define ulong unsigned long 28 sbit P3_1=P3^1; sbit P3_2=P3^2; uchar biaozhi0; //定义超时标志位 uchar biaozhi1; //定义抢答标志位 uchar biaozhi2; //定义开始标志位 uchar sec; //定义计时变量 uchar led_buf[8]; /*共阳数码管字型码*/ /*0,1,2,3,4,5,6,7,8,9,p.,灭*/ /*定义LED显示字符段码*/ static struct{ uchar ascii; /*查代码的序号*/ uchar stroke;/*数码管显示段码*/ } codeled_strokes[13]={{'0',0xc0},{'1',0xf9},{'2',0xa4},{'3',0xb0},{'4',0x99}, {'5',0x92},{'6',0x82},{'7',0xf8},{'8',0x80},{'9',0x90}, {'-',0xbf},{'p',0x0c},{'o',0xff} }; /********************显示缓冲区更新函数*****************************/ void led_buf_auto_flush(void) { led_buf[0]=sec%10+0x30; led_buf[1]=sec/10+0x30; } /****************************段码查找函数*****************************/ uchar get_strokes(uchar c) { uchar i=0; while(led_strokes[i].ascii !=c) //根据显示信息(序号)查到相应的短控代码 i++; return (led_strokes[i].stroke); } //函数名: void DelayX1ms(uint count) //功能: 延时时间为1ms //调用函数: //输入参数:count,1ms计数 //输出参数: //说明:总共延时时间为1ms乘以count,crystal=12Mhz /*********************************************************************************/ void DelayX1ms(uint count) { uint j; while(count--!=0) 29 { for(j=0;j<80;j++); } } /*************************显示P.的显示缓冲区更新函数*****************************/ void disP(void) { led_buf[0]='o'; led_buf[1]='o'; led_buf[2]='o'; led_buf[3]='o'; led_buf[4]='o'; led_buf[5]='o'; led_buf[6]='o'; led_buf[7]='p'; } /**************************定时器t0中断服务函数**********************************/ void timer0(void) interrupt 1 using 2 //选用定时器0工作方式为1 { static uchar click=0; //定时器0定时中断次数 TH0=0x3c; //设置初始值50ms为循环20次为1s,12MHz TL0=0xb0; ++click; if(click==20) { click=0; if(--sec==0) { TR0=0; P3_1=0; P3_2=0; biaozhi0=1; } if(biaozhi1==0) { if(sec==20) P3_1=0; if(sec==19) P3_1=1; } if(biaozhi1==1) P3_1=1; } 30 led_buf_auto_flush(); //LED显示缓冲区时间值更新 } /*********************************显示输出函数**********************************/ void put_on_leds(void) { uchar dmask=0xFE; //位控码初始化 uchar pos; for(pos=0;pos<8;pos++) { P2=0xff; P2=0xff; P0=get_strokes(led_buf[pos]); //取显示段码并输出到段控口 P2=dmask; //位控码输出到位控口 DelayX1ms(2); //延时 dmask=_crol_(dmask,1); //修改位控码 } } /************************************************************************ * 函数原型:keychuli(); * 功 能:处理与键盘相连的P1口的内容,作为键值。 ************************************************************************/ uchar keychuli() { uchar k; k=P1; //P1口内容送K k=~k; //取反 return(k); //返回键值 } /************************************************************************ * 函数原型:key(); * 功 能:键盘扫描函数,函数返回值即键值。 ************************************************************************/ uchar key() { uchar keyzhi,keyzhii; //键盘按键键值临时存放 keyzhi=keychuli(); //调P1口处理函数 if(keyzhi!=0) //有键动作延时去抖动,否则函数返回 { put_on_leds(); put_on_leds(); keyzhi=keychuli(); //再次调P1口处理函数 if(keyzhi!=0) //真正有键按下,取键值并暂存 31 { keyzhii=keyzhi; 键是否释放,没有释放延时去抖动等待释放 while(keyzhi!=0) //判按 { put_on_leds(); put_on_leds(); keyzhi=keychuli(); } keyzhi=keyzhii; //按键释放后恢复按键键值 } } return(keyzhi); //返回按键键值 } /*主函数*/ void main() { uchar keyzhiii; //定义键值变量 biaozhi0=0; biaozhi1=0; biaozhi2=0; sec=30; //赋计时初值 TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=0; disP(); while(1) { put_on_leds(); keyzhiii=key(); //调键盘扫描函数得到按键键码 switch(keyzhiii) //按键功能控制 { case 0: break; //没有键按下,则返回 ww2: case 1: if(biaozhi2==0) //开始键未按下,显示违规台号,违规指示灯亮 { while(1) { led_buf[7]='1'; P3_2=0; put_on_leds(); keyzhiii=key(); 32 if(keyzhiii==64) goto ww8; } } if(biaozhi2==1) //开始键按下 { biaozhi1=1; //抢答标志位置1 P3_1=0; sec=30; led_buf[7]='1'; while(1) { if(biaozhi0==1) { P3_1=0; P3_2=0; while(1) { put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; if(keyzhiii==32) goto ww7; P3_1=1; } } ww3: case 2: if(biaozhi2==0) //开始键未按下,显示违规台号,违规指示灯亮 { while(1) { led_buf[7]='2'; P3_2=0; put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } 33 } if(biaozhi2==1) //开始键按下 位置1 { biaozhi1=1; //抢答标志 P3_1=0; sec=30; led_buf[7]='2'; while(1) { if(biaozhi0==1) { P3_1=0; P3_2=0; while(1) { put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; if(keyzhiii==32) goto ww7; P3_1=1; } } ww4: case 4: if(biaozhi2==0) //开始键未按下,显示违规台号,违规指示灯亮 { while(1) { led_buf[7]='3'; P3_2=0; put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } if(biaozhi2==1) //开始键按下 { biaozhi1=1; //抢答标志位置1 34 P3_1=0; sec=30; led_buf[7]='3'; while(1) { if(biaozhi0==1) { P3_1=0; P3_2=0; while(1) { put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; if(keyzhiii==32) goto ww7; P3_1=1; } } ww5: case 8: if(biaozhi2==0) //开始键未按下,显示违规台号,违规指示灯亮 { while(1) { led_buf[7]='4'; P3_2=0; put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } if(biaozhi2==1) //开始键按下 { biaozhi1=1; //抢答标志位置1 P3_1=0; sec=30; led_buf[7]='4'; 35 while(1) { if(biaozhi0==1) { P3_1=0; P3_2=0; while(1) { put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } } put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; if(keyzhiii==32) goto ww7; P3_1=1; } } case 16: biaozhi2=1; //开始标志位置1 TR0=1; sec=30; led_buf[7]='o'; while(1) { put_on_leds(); keyzhiii=key(); if(keyzhiii==1) goto ww2; if(keyzhiii==2) goto ww3; if(keyzhiii==4) goto ww4; if(keyzhiii==8) goto ww5; if(keyzhiii==64) goto ww8; } 36 ww7: case 32: if(biaozhi2==1) { TR0=0; put_on_leds(); keyzhiii=key(); if(keyzhiii==64) goto ww8; } if(biaozhi2==0);//若开始键未按下,则跳出 break; ww8: case 64: TR0=0; //关定时器 biaozhi0=0; //超时标志位清零 biaozhi1=0; //抢答标志位清零 biaozhi2=0; //开始标志位清零 P3=0xff; //灭LED灯 sec=30; disP(); break; default: break; } } } 37
本文档为【[毕业设计精品]单片机简易四路抢答器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_614050
暂无简介~
格式:doc
大小:131KB
软件:Word
页数:54
分类:互联网
上传时间:2017-09-18
浏览量:54