




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TOC\o"1-5"\h\z\o"CurrentDocument"1 设计任务和方案 3\o"CurrentDocument"1.1设计任务 3\o"CurrentDocument"1.2功能要求说明 3\o"CurrentDocument"1.3设计总体方案及工作原理说明 3\o"CurrentDocument"2抢答器的硬件系统的设计 5\o"CurrentDocument"2.1硬件系统各模块功能简要介绍 5\o"CurrentDocument"2.2电路原理图、PCB图和元器件布局图 5\o"CurrentDocument"2.3元器件清单 6\o"CurrentDocument"3抢答器软件系统的设计 7\o"CurrentDocument"3.1使用的单片机资源的情况 8\o"CurrentDocument"3.2各模块功能简要介绍 8\o"CurrentDocument"3.3程序的流程框图 8\o"CurrentDocument"3.4程序清单 12\o"CurrentDocument"4抢答器的设计结论、仿真结果和教学建议 13\o"CurrentDocument"4.1设计结论和使用说明 13\o"CurrentDocument"4.2仿真结果 13\o"CurrentDocument"4.3设计体会 14\o"CurrentDocument"4.4教学建议 15\o"CurrentDocument"参考文献 16致谢 17附录 181设计任务和方案1.1设计任务(一) 设计题目:抢答器(二) 设计目的与任务:学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。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.1原理框图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显示电路模块采用两个四位一体共阳型数码管显示器进行显示。由于位控线的驱动电流较大,0文档来源为:从网络收集整理.word版本可编辑.因此在P2口线上接了8个PNP型三极管提高驱动能力;在单片机的P1口线和P2口线上接了16个470Q的电阻,这些电阻起限流的作用。将段控口a--dp接在P0.0--P0.7上,位控口接在P2口线上,实现对显示的控制。LED显示电路模块主要用来指示第一抢答者,显示倒计时和违规的台号。蜂鸣电路模块单片机P3.1口线上接上一个1KQ电阻然后再通过一个PNP型三极管与蜂鸣器相连接组成蜂鸣器电路,接入PNP型三极管是为了增强蜂鸣器的驱动电流。蜂鸣电路主要完成提示和违规报警功能。LED指示灯电路模块单片机P3.2口线上经过一个470Q的电阻与LED灯的阴极相连接,LED灯的阳极接正五伏电压°470Q的电阻起限流的作用。LED指示灯电路模块主要用来指示用违规操作发生。2.2电路原理图、PCB图和元器件布局Proteus原理图、PCB图以及元器件布局图分别见附录1附录2与附录3。2.3元器件清单元器件清单见附录4。3抢答器软件系统的设计3.1使用的单片机资源的情况该抢答器用到了单片机的定时器的功能,定时器0采用工作方式1并以中断方式工作;在数据的显示时采用的是查表的方法,因此需要将表格、数据存到单片机的程序存储器中去。本设计采用独立式键盘,键盘直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。用到的LED显示器接到了单片机的P0口线上和P2口线上°LED指示灯和蜂鸣器接在P3口线上。3.2各模块功能简要介绍该抢答器所用的软件模块有定时器模块、按键模块、LED显示模块。定时器模块选择定时器0,设置定时器定时方式为方式1以中断方式工作,设置定时时间为50mS。按键模块采用独立式键盘,共用七个按键对电路进行控制和操作,分别为S2GN、S3GN、S4GN、S5GN、S6GN、S7GN、S8GN来控制抢答器。S2GN、S3GN、S4GN、S5GN代表选手;S6GN为开始键、S7GN为答完键、S8GN为复位键。LED显示模块抢答器上电显示P.,按开始键开始抢答,显示器显示倒计时,若为无效抢答则显示器显示违规台号。3.3程序的流程框图主程序流程框图如图3.1所示。图3.1主程序流程框图抢答键程序流程框图抢答键程序流程框图如图3.2所示。图中的①代表主程序流程框图中的①。图3.2抢答键程序流程框图开始键程序流程框图开始键程序流程框图如图3.3所示。图中的①代表主程序流程框图中的①。图②代表抢答键程序流程框图中的②图3.3开始键程序流程框图答完键程序流程框图开始键程序流程框图如图3.4所示。图中的①代表主程序流程框图中的①。图3.4答完键程序流程框图复位键程序流程框图复位键程序流程框图如图3.5所示,图中的①代表主程序流程框图中的①。图3.5复位键程序流程框图3.4程序清单见附录5。4抢答器的设计结论、仿真结果和教学建议4.1设计结论和使用说明设计结论通过对单片机进行外接键盘和LED数码管的操作以及加上硬件电路和软件的结合,实现了抢答器P.显示以及抢答倒计时的显示,正常抢答时显示台号,抢答违规时显示违规台号、违规指示灯亮、蜂鸣器报警。通过测试和仿真以及修改,该抢答器完成了设计任务,符合设计要求。使用说明该抢答器采用两个四位一体八段数码管显示。当抢答器一上电即可显示“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所示。图4.1抢答器上电显示P.图图4.2抢答器显示倒计时图图4.3抢答器正常抢答图图4.4抢答器抢答违规图图4.5抢答器超时违规图4.3设计体会本次我设计的抢答器已经能够完成任务,达到了设计要求。这次设计的巧妙之处是在中断服务程序中完成了一些标志位的处理,使得编程更加容易。虽然最后我设计的抢答器能完成任务,但仍存在很多的不足。例如,我所设计的抢答器统计选手的得分情况,因此还需多加改进。我所用的实物板子的电路虽然不是自己设计的,但是通过老师的讲解我知道了各个模块电路设计的原理。由于以前已经做过几块板子了,因此在用Ptrtel软件绘制电路原理图、画PCB图以及制版的过程中并没有遇到太大的困难。在进行程序编写时,虽然遇到了一点小小的问题,但是我通过Keil软件调试,最终将编写有误的程序修正过来。在进行编程时我用汇编语言和C语言各编写了一套。通过编写程序,我进一步熟悉了指令的运用。这次课程设计让我认识到,调试程序时必须具有良好的耐性,不能急躁,否则会事倍功半。遇到问题是应当迎难而上,不能逃避,必须对自己有足够的信心!4.4教学建议王老师不仅传授了知识给我们还教会了我们不少做人的道理,对于大学教师来说这是难能可贵的,这些做人的道理对于我们经后进入社会将会有很大的帮助。在教学方面,我尤其觉得王老师的课件做的特别的好,课件重点、难点突出,讲解非常详细,而且还补充了一些很实用的知识。王老师将理论教学与实际操作相结合,让我们更深刻的掌握了知识,同时也让我们认识到书本上的东西不一定都全对,必须通过实践来检验它。我认为王老师的课讲得已经很好了,在此我只想提一个自己的拙见,希望在以后王老师能多启发我们的创新精神。参考文献马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2006MaZhongmei,J,ZhangKai,MaYan.MCUClanguageprogramdesign[M].beijing:Beijingaerospaceuniversitypress,2006李广弟,朱月秀,冷祖祁.单片机基础[M].北京:北京航空航天大学出版社,2007LiGuangdi,ZhuYuexiu,LengZuqi.Microcontroller[M].beijing:Beijinguniversityofaeronauticsandpress,2007李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.9LiGuangfei.Thiscoursedesignexampleguide[M].beijing:Beijinguniversityofaeronauticsandpress,2004.9邢增平.Protel99SE设计专家指导[M].北京:中国铁道出版社,2004XingZengping.Protel99SEdesignexpertguidance[M].beijing:Chinarailwaypublishinghouse,2004附录1附录4兀器件名称规格数量AT89S521底座40脚3
晶振12MHz1发光二极管9单排插40脚1三极管90129蜂鸣器1小按键9下载口座子十芯118b20温度传感器1六脚开关1USB电源线加接口1电阻200Q1电阻4.7K1电阻1K3电阻470Q24电解电容220呻1瓷片电容33pF2排阻10K2短路帽3杜邦线8p1PCB板子1电源白色插座1(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键键功能程序)复位键■■;;;常数表格;;DISBH(系统提示符P.字型代码序号表);TAB(共阳数码管字型代码表)■■;;;子程序;;KEY(键扫描子程序);;KEYCHULI(P1口数据处理子程序);DISP(数码管显示子程序);DL(1毫秒延时子程序)■■;;;中断服务程序;TC0(50ms定时器0以中断方式1进行中断)■■;*********************************************************************************;;数据存储器变量及常量单元定义;
;40H字节单兀:十六进制数存放定时50ms循环次数;20H字节单兀:十六进制数键值;21H.0:开始键按下标志位;21H.1:抢答键按下标志位;21H.2:超时标志位;78H-7FH字节单兀:显示缓存区;30HT单兀:十进制数 秒个位数非压缩BCD码;3^字节单兀:十进制数 秒十位数非压缩BCD码;32H^单兀:十进制数 秒值 压缩BCD码■■;*********************************************************************************;;伪指令定义区SECGE EQU 30HSECSHI EQU 31HSHU EQU 32H■■
.*********************************************************************************・;系统起始程序区ORG0000HSTART:LJMPMAINORG000BHLJMPTC0■■;;;系统监控程序区ORG0030HMAIN:MOVSP,#7FH;确立堆栈区MOVPSW,#00HMOVR0,#20H;RAM区首地址MOVR7,#96;RAM区单元个数ML:MOV@R0,#00HINCR0DJNZR7,MLMOVTMOD,#01H;定时器初始化,定时器0以工作方式1工作MOVTH0,#3CHMOVTL0,#0B0HSETBEA;开启总中断SETBET0;开启定时器0分中断■■;;;显示系统提示符'“P.”TSF:MOVDPTR,#DISBH;系统初始化后提示符“P.”字符代MOVR5,#08H;码表首地址MOVR0,#78HDISPTSF:CLRAMOVCA,@A+DPTR
MOV@R0,AINCR0INCDPTRDJNZR5,DISPTSFLCALLDISP■■
.*********************************************************************************・;键盘控制指令TTLCALLDISP;调用显示程序LCALLKEYJB20H.0,S2GN;1号选手JB20H.1,S3GN1;2号选手JB20H.2,S4GN1;3号选手JB20H.3,S5GN1;4号选手JB20H.4,S6GN1;开始键JB20H.5,S7GN1;答完键JB20H.6,S8GN1;复位键LJMPTT;无键按下,则返回TT,继续调显示、扫描按键S3GN1LJMPS3GNS4GN1LJMPS4GNS5GN1LJMPS5GNS6GN1LJMPS6GNS7GN1LJMPS7GNS8GN1LJMPS8GN■、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•、!•■
.*********************************************************************************・;键功能区;\\S2键功能区S2GN:JNB21H.0,W20;若抢答违规则跳转到W20SETBTR0CLRP3.1SETB21H.1LCALLDLLW23:MOVR2,#5MOVR0,#78HMOV@R0,#0INCR0MOV@R0,#3INCR0W21:MOV@R0,#16INCR0DJNZR2,W21MOV@R0,#01H;此段程序为更新显示缓冲区SETBP3.1W24:LCALLDISP
LCALLKEYJB20H.5,S7GN22;答完键JB20H.6,S8GN22;复位键JB21H.2,W25LJMPW24W20:MOVR2,#7MOVR0,#78HW22:MOV@R0,#16INCR0DJNZR2,W22MOV@R0,#01HLJMPW26W25:LCALLDISPCLRP3.2CLRP3.1LCALLKEYJB20H.6,S8GN22;复位键LJMPW25W26:LCALLDISPCLRP3.2LCALLKEYJB20H.6,S8GN22;复位键LJMPW26S7GN22:LJMPS7GNS8GN22:LJMPS8GN;\\S3键功能区S3GN:JNB21H.0,W30;若抢答违规则跳转到W30SETBTR0CLRP3.1LCALLDLLSETB21H.1W33:MOVR2,#5MOVR0,#78HMOV@R0,#0INCR0MOV@R0,#3INCR0W31:MOV@R0,#16INCR0DJNZR2,W31MOV@R0,#02H;此段程序为更新显示缓冲区SETBP3.1W34:LCALLDISPLCALLKEY
JB20H.5,S7GN33;答完键JB20H.6,S8GN33;复位键JB21H.2,W35LJMPW34W30:MOVR2,#7MOVR0,#78HW32:MOV@R0,#16INCR0DJNZR2,W32MOV@R0,#02HLJMPW36W35:LCALLDISPCLRP3.2CLRP3.1LCALLKEYJB20H.6,S8GN33;复位键LJMPW35W36:LCALLDISPCLRP3.2LCALLKEYJB20H.6,S8GN33;复位键LJMPW36S7GN33:LJMPS7GNS8GN33:LJMPS8GN;\\S4键功能区S4GN:JNB21H.0,W40;若抢答违规则跳转到W40SETBTR0CLRP3.1LCALLDLLSETB21H.1W43:MOVR2,#5MOVR0,#78HMOV@R0,#0INCR0MOV@R0,#3INCR0W41:MOV@R0,#16INCR0DJNZR2,W41MOV@R0,#03H;此段程序为更新显示缓冲区SETBP3.1W44:LCALLDISPLCALLKEYJB20H.5,S7GN44;答完键
JB20H.6,S8GN44;复位键JB21H.2,W45LJMPW44W40:MOVR2,#7MOVR0,#78HW42:MOV@R0,#16INCR0DJNZR2,W42MOV@R0,#03HLJMPW46W45:LCALLDISPCLRP3.2CLRP3.1LCALLKEYJB20H.6,S8GN44;复位键LJMPW45W46:LCALLDISPCLRP3.2LCALLKEYJB20H.6,S8GN33;复位键LJMPW46S7GN44:LJMPS7GNS8GN44:LJMPS8GN;\\S5键功能区S5GN:JNB21H.0,W50;若抢答违规则跳转到W50SETBTR0CLRP3.1LCALLDLLSETB21H.1W53:MOVR2,#5MOVR0,#78HMOV@R0,#0INCR0MOV@R0,#3INCR0W51:MOV@R0,#16INCR0DJNZR2,W51MOV@R0,#04H;此段程序为更新显示缓冲区SETBP3.1W54:LCALLDISPLCALLKEYJB20H.5,S7GN55;答完键JB20H.6,S8GN55;复位键JB21H.2,W55LJMPW54W50:MOVR2,#7MOVR0,#78HW52:MOV@R0,#16INCR0DJNZR2,W52MOV@R0,#04HLJMPW56W55:LCALLDISPCLRP3.2CLRP3.1LCALLKEYJB20H.6,S8GN;复位键LJMPW55W56:LCALLDISPCLRP3.2LCALLKEYJB20H.6,S8GN;复位键LJMPW56S7GN55:LJMPS7GNS8GN55:LJMPS8GN;\\S6键功能区S6GN:SETBTR0SETB21H.0W63:MOVR2,#6MOVR0,#78HMOV@R0,#0INCR0MOV@R0,#3INCR0W61:MOV@R0,#16INCR0DJNZR2,W61W64:LCALLDISPLCALLKEYJB20H.0,S2GN66;1号选手JB20H.1,S3GN66;2号选手JB20H.2,S4GN66;3号选手JB20H.3,S5GN66;4号选手JB20H.6,S8GN;复位键JB21H.2,W65LJMPW64W65:LCALLDISPCLRP3.2CLRP3.1LCALLKEYJB20H.6,S8GN;复位键LJMPW65S2GN66:LJMPS2GNS3GN66:LJMPS3GNS4GN66:LJMPS4GNS5GN66:LJMPS5GN;\\S7键功能区S7GN:JNB21H.0,T7CLRTR0LCALLDISPLCALLKEYJB20H.6,S8GN;复位键LJMPS7GNT7:LJMPTT;\\S8键功能区S8GN:MOVP3,#0FFHCLR21H.0CLR21H.1CLR21H.2MOV40H,#00HCLRTR0LJMPMAIN■■;;;子程序区;;(1)键扫描子程序KEY:LCALLKEYCHULI;调?1口数据处理子程序JZEXIT;没有键按下,转返回LCALLDISP;调显示子程序去抖动LCALLDISPLCALLKEYCHULI;调?1口数据处理子程序JZEXIT;没有键按下,转返回MOVB,20H;保存取反后的键值KEYSF:LCALLKEYCHULI;调?1口数据处理子程序JZKEY1;键释放,转恢复键值LCALLDISP;调显示子程序延时LJMPKEYSF;等待释放KEY1:MOV20H,B;键值送20H保存EXIT:RET;子程序返回;(2)P1口数据处理子程序KEYCHULI:PUSHPSW;保护现场CLRRS1;改变当前寄存器组为组1
SETBRS0MOVP1,#0FFH;先向P1口写1MOVA,P1;读?1口数据CPLA;P1口数据取反MOV20H,A;保存取反后的键值CLRRS1;恢复当前寄存器组为组0CLRRS0POPPSW;恢复现场RET;子程序返回;■■.个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个.;常数表格区;系统初始化后提示符“P.”字符代码表DISBH:DB10H,10H,10H,10H,10H,10H,10H,11H 提示符“P.”字符序号;显示字符段选码表(共阳极代码)TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-8DB 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:PUSHDPHPUSHDPLPUSHACCPUSHPSWCLRRS1;改变当前寄存器组为组1SETBRS0MOVR1,#78H;显示缓冲存储单元首地址MOVR2,#0FEH;从右至左显示MOVR5,#08H;循环次数,即驱动数码管的位数DISP1:MOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP2,#0FFHMOVP2,#0FFHMOVP0,A;送段控MOVP2,R2;送位控LCALLDL;延时1毫秒MOVA,R2;位控码送ARLA;获得新的位控码MOVR2,A;保存新的位控码INCR1;获得新的显示缓冲单元地址
DJNZR5,DISP1;循环没有结束则继续DISP2:POPPSW;恢复当前寄存器组的组号POPACCPOPDPLPOPDPHRET(4)延时1ms子程序(晶振频率12MHz)DLDL:MOVR7,#02HDL1:MOVR6,#0FFHDL2:DJNZR6,DL2DJNZR7,DL1RET(5)延时130ms子程序(晶振频率12MHz)DLDLL:MOVR7,#0FFHDLL1:MOVR6,#0FFHDLL2:DJNZR6,DLL2DJNZR7,DLL1RET(6)减一子程序SS:MOVSECGE,78HMOVSECSHI,79HMOVA,SECSHISWAPA;累加器中高低字节交换ORLA,SECGEDECA;累加器自减1MOVSHU,A;全值暂存SHU中ANLA,#0FH;屏蔽十位数,取出个位数CJNEA,#0FH,SS1SUBBA,#6;对非法数据进行调整SS1:MOVSECGE,AMOV78H,SECGEMOVA,SHUSWAPA;累加器中高低字节交换ANLA,#0FH;屏蔽个位数,取出十位数CJNEA,#0FH,SS2SUBBA,#6;对非法数据进行调整SS2:MOVSECSHI,AMOV79H,SECSHIMOVA,SECSHISWAPA;累加器中高低字节交换ORLA,SECGEMOVSHU,A;全值暂存SHU中RET;中断服务程序
;定时器中断程序TC0:PUSHACCPUSHPSWPUSHDPHPUSHDPL;保护现场、保护断点SETBRS1;切换至通用寄存器第3组SETBRS0MOVTH0,#3CHMOVTL0,#0B0H;送定时50ms的初值INC40HMOVR2,40HCJNER2,#20,RET1MOV40H,#00HLCALLSSMOVR3,SHUJNB21H.1,LL5LJMPLL2LL5:CJNER3,#20H,LL1CLRP3.1LL1:CJNER3,#19H,LL2SETBP3.1LL2:CJNER3,#00H,RET1SETB21H.2CLRTR0RET1:POPDPLPOPDPHPOPPSWPOPACCRETIEND(2)C语言/*A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**1**A**A**A**A**A**A**A**A*♦:项目名称:抢答器设计者:潘艳设计日期:2010年10月01日*1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1*■个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个;功能要求:抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号,蜂鸣器发出音响;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过支持人按复位按钮。违规指示灯使用接在P3.2上的LED灯*1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1*■个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个・LED数码管显示器设定;P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,aP2.7---P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)*1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1*■;独立式键盘设定;8个按键S2至S9分别依次接在P1.0至P1.7口线*1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1*■;键功能程序;S2GN(S2键键功能程序)1号选手S3GN(S3键键功能程序)2号选手S4GN(S4键键功能程序)3号选手S5GN(S5键键功能程序)4号选手S6GN(S6键键功能程序)开始键S7GN(S7键键功能程序)答完键S8GN(S8键键功能程序)复位键/个*********************************************************************************宏定义"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*个*个*******************************************************************************数组区共阳数码管字型码P.显示序号"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*个*个*******************************************************************************函数区voidDelayX1ms(uintcount)延时函数voidled_buf_auto_flush(void)显示缓冲区更新函数voidtimer0(void)定时器t0中断服务函数voidput_on_leds(void)显示输出函数keychuli()键值处理函数key()键盘扫描函数voiddisP(void)显示P.的显示缓冲区更新函数voidmain()主函数"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*个*个*******************************************************************************变量定义ucharsec计时变量ucharpos段码序号数组下标uchardmask位控码uchark返回键值ucharkeyzhi,keyzhii键盘按键值临时存放ucharbiaozhi标志位
*/#include"reg52.h”#include"intrins.h”#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongsbitP3_1=P3”1;sbitP3_2=P3"2;〃定义超时标志位〃定义抢答标志位〃定义超时标志位〃定义抢答标志位//定义开始标志位//定义计时变量ucharbiaozhil;ucharbiaozhi2;ucharsec;ucharled_buf[8];/*共阳数码管字型码*//*0,1,2,3,4,5,6,7,8,9,p.,灭*//*定义LED显示字符段码*/staticstruct{ucharascii;/*查代码的序号*/ucharstroke;/*数码管显示段码*/}codeled_strokes[13]={{'0',0xc0},{T',0xf9},{'2',0xa4},{'3',0xb0},{'4',0x99},{'5',0x92},{'6',0x82},{'7',0xf8},{'8',0x80},{'9',0x90},{'-',0xbf},{'p',0x0c},{'o',0xff} };/********************显示缓冲区更新函数*****************************/voidled_buf_auto_flush(void){led_buf[0]=sec%10+0x30;led_buf[1]=sec/10+0x30;}/****************************段码查找函数*****************************/ucharget_strokes(ucharc){uchari=0;while(led_strokes[i].ascii!=c)//根据显示信息(序号)查到相应的短控代码i++;return(led_strokes[i].stroke);}//函数名: voidDelayX1ms(uintcount)//功能: 延时时间为1ms〃调用函数://输入参数:count,1ms计数//输出参数://说明:总共延时时间为1ms乘以count,crystal=12Mhz/"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/*********************************************************************************voidDelayX1ms(uintcount){uintj;while(count—!=0){for(j=0;j<80;j++);}}/*************************显示p.的显示缓冲区更新函数*****************************/voiddisP(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中断服务函数**********************************/voidtimer0(void)interrupt1using2 //选用定时器0工作方式为1{staticucharclick=0; //定时器0定时中断次数TH0=0x3c; //设置初始值50ms为循环20次为1s,12MHzTL0=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;}//LED显示缓冲区时间值更新//LED显示缓冲区时间值更新}/*********************************显示输出函数**********************************/voidput_on_leds(void){//位控码初始化uchardmask=0xFE;//位控码初始化ucharpos;for(pos=0;pos<8;pos++){P2=0xff;P2=0xff;//取显示段码并输出到段控口//位控码输出到位控口//取显示段码并输出到段控口//位控码输出到位控口//延时//修改位控码P2=dmask;DelayX1ms(2);dmask=_crol_(dmask,1);}}/个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个函数原型:keychuli();功 能:处理与键盘相连的P1口的内容,作为键值。""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/************************************************************************ucharkeychuli(){uchark;//P1口内容送//P1口内容送K//取反//返回键值k=~k;return(k);}************************************************************************函数原型:key();功 能:键盘扫描函数,函数返回值即键值。""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""/个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个/ucharkey(){//键盘按键键值临时存放//调//键盘按键键值临时存放//调P1口处理函数//有键动作延时去抖动,否则函数返回keyzhi=keychuli();if(keyzhi!=0){put_on_leds();put_on_leds();//再次调P1//再次调P1口处理函数//真正有键按下,取键值并暂存if(keyzhi!=0)
{keyzhii=keyzhi;while(keyzhi!=0){put_on_leds();put_on_leds();keyzhi=keychuli();}keyzhi=keyzhii;}}return(keyzhi);}/*主函数*/voidmain(){ucharkeyzhiii;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){case0:break;ww2:case1:if(biaozhi2==0){//判按键是否释放,没有释放延时去抖动等待释放//按键释放后恢复按键键值//返回按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络模板合同履约金协议
- 肉类副产品在食品工业中的循环利用技术考核试卷
- 海洋工程装备模块化设计考核试卷
- 木材制浆与造纸化学品考核试卷
- 石棉云母矿选矿厂智能化改造与技术应用考核试卷
- 包装色彩学与视觉传达考核试卷
- 禽类产品品质认证与市场信任建立考核试卷
- 生物基纤维在环保吸附材料中的应用考核试卷
- 铁路班前安全教育
- 中学生感恩教育体系构建
- 2023-2024公需科目(数字经济与驱动发展)考试题库及答案
- 中国银联招聘笔试题库2024
- 2024安徽制造业发展报告
- 财务机器人开发与应用实战 课件 任务5 E-mail人机交互自动化-2
- 【华为】通信行业:华为下一代铁路移动通信系统白皮书2023
- Python 程序设计智慧树知到期末考试答案章节答案2024年四川师范大学
- 城乡环卫保洁投标方案(技术标)
- 充值合同范本
- MSDS中文版(锂电池电解液)
- 《职业病防治法》知识考试题库160题(含答案)
- 全国初中数学青年教师优质课一等奖《反比例函数的图象和性质》教学设计
评论
0/150
提交评论