




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计摘要本次课程设计是采用7端数码管显示结果,以AT89C51单片机为核心,由八个抢答按钮,两个锁存器,开始按钮,复位按钮组成。八位智能定时抢答器可靠性高,反应速度灵敏,抢答器具有PC接口,可以对系统进行初始化、工作方式、显示时间的集中设置,使用人机界面操作,使操作简单易行。单片机应用的重要意义在于从根本上改变了传统的控制系统设计思想和设计方法,以前必须由模拟电路或数字电路实现大部分功能,现在已能用单片机通过软件方法来实现了。
目录一、课程设计目的: 3二、课程设计内容: 3三、硬件设计: 3、硬件总原理图(见附录1) 3、主要硬件介绍 43.2.1AT89C51简介 43.2.274HC573简介 103.2.3LED数码管简介 11四、软件设计、 13主程序流程图 134.2定时器T0\T1中断服务处理 134.3抢答处理设计 14键盘扫描程序流程图 154.5抢答数码显示软件程序设计 17软件程序(见附录2) 18五、设计总结: 18参考文献: 19附录1 20附录2 21
单片机原理及接口技术课程设计(8位智能定时抢答器)一、课程设计目的:熟悉单片机仿真软件Proteus,单片机开发环境Keil的应用;增进对单片机的感性认识,加深对单片机理论方面的理解;使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。二、课程设计内容:此倒计时抢答器可容纳8组参赛的数字式抢答器,它们的编号分别是1、2、3、4、5、6、7、8,首先按下电源开关,指示灯亮,再按下启动按钮SB1,抢答器可以进行20秒倒计时,选手必须在20秒之内进行抢答,八个选手,谁先按下自己手中的按钮,LED显示器SM就会显示相对应的选手号码,如果20秒还没有人抢答,那么抢答器自锁,本次抢答无效,按下复位按钮S10后可继续抢答。声控功能:在麦克风接口MIC处插入麦克风,主持人喊一声“开始”,抢答器开始进入20秒倒计时抢答阶段。声控切换按钮SB2和启动抢答开始按钮S9具有互锁功能,当声控切换按钮SB2开启之后,开始按钮S9处于无效状态,防止主持人在没说“开始”之前就误按了启动抢答按钮,八个选手,谁先按下自己手中的按钮,LED显示器SM就会显示相对应的选手号码。三、硬件设计:3.1、硬件总原理图(见附录1)3.2、主要硬件介绍3.2.1AT89C51简介3.2.1.1AT89C51描述单片机全称为单片微型计算机(SingleChipMicrocomputer)。因为单片机主要用于控制系统中,所以又称微控制器(MicrocontrollerUnit,MCU)或嵌入式控制器(EmbeddedController)。它具有嵌入式应用系统所要求的体系结构,微处理器,指令系统,总线方式,管理模式等。他把计算机的基本部件都微型化集成到一块芯片上了,通常片内部都含有中央处理部件(CPU),数据存储器(RAM),程序存储器(ROM,EPROM,FlshROM),定时器/计数器和各种输入/输出(I/O)接口他们之间的相互连接结构如图2-1所示。AT89C51是一个低电压,高性能CMOS。8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C51单片机能够被应用到控制领域中。CPUROMCPUROMRAM定时器/计数器I/O外设接口时钟图2-1单片机结构3.2.1.2AT89C51单片机内部结构AT89C51是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:·中央处理器
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。·数据存储器(RAM)
AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 ·程序存储器(ROM)AT89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。·定时/计数器(ROM)AT89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。·并行输入输出(I/O)口AT89C51共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。·全双工串行口AT89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。·中断系统AT89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。·时钟电路AT89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。3.2.1.3AT89C51引脚功能特性图2-289C51单片机引脚图AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。图2-2AT89C51引脚示意图闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存随机存取数据存储器中的内容,但震荡器停止工作并禁止其它所有部件的工作直到下一个复位。1、VCC:电源电压2、GND:接地3、P0口:P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。作为输出口时,每一个管脚都能够驱动8个TTL电路。当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。4、P1口:P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级图2-3MCS-51系列单片机的内部结构示意图可驱动4个TTL电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。闪烁编程时和程序校验时,P1口接收低8位地址。5、P2口:P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。P3口除了作为一般的I/O口外,更重要的用途是它的第二功能(表1所示)。除此之外P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。6、RST:复位输入。当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。7、ALE/:当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。这个位置后只有一条MOVX和MOVC指令ALE才会被应用。此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。表1P3口的第二功能端口引脚第二功能RXDTXDINT0INT1T0T1WRRD8、:程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器时,这两次有效的PSEN信号不出现。9、EA/VPP:外部访问允许。欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA端状态。如EA端为高电平,CPU则执行内部程序存储器中的指令。闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。10、XTAL1:震荡器反相放大器及内部时钟发生器的输入端。11、XTAL2:震荡器反相放大器的输出端。3.2.274HC573简介74HC573(八进制3态非反转透明锁存器)跟LS/AL573的管脚一样。器件的输入是和标准CMOS输出兼容的。加上拉电阻,他们能和LS/ALSTTL输出兼容。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。图2-4SL74HC573SL74HC573使用参数:输出能直接接到CMOS,NMOS和TTL接口上操作电压范围:低输入电流:CMOS器件的高噪声抵抗特性SL74HC573功能如表2所示。表2SL74HC573功能输入输出输出使能功能使用DQLHHLHLLLLXHXXZ注:X=无Z=高阻抗3.2.3LED数码管简介LED数码管是目前最常用的数字显示器,图A、B为共阴管和共阳管的电路,图C为两种不同出线形式的引出脚功能图。一个LED数码管可用来显示一位0~9十进制数和一个小数点。小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红、绿、黄、橙色)的颜色不同略有差别,通常约为2~2.5V,每个发光二极管的点亮电流在5~10mA。LED数码管要显示BCD码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。图A共阴连接(“1”电平驱动)图B共阳连接(“0”电平驱动)图2-5LED数码管符号及引脚功能图LED显示器有静态和动态两种工作方式LED显示器工作在静态显示方式下,共阴极或共阳极连接在一起,然后接地或+5V;每位的段选线(A,B,…,G,H)与一个8位并行口相连。这样,只要在每一位的段选线上保持段选码电平,该位就能保持相应的显示字符。在多位LED显示时,为了化简电路,降低成本,将所有位的断选线并联在一起,由一个8位的I/O口控制,即控制段选码而共阴极或共阳极点分别由相应的I/O线控制即控制位选码,这就是动态显示。4位LED动态显示电路只需一个8位I/O口及一个4位I/O口,其中8个I/O控制段选码,4位I/O控制位选。进行4位字符显示时,采用扫描显示方式,即在每一瞬间只使某一位显示相应字符,在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平(共阴极送低电平,共阳极送高电平),以保证该位显示相应字符。如此轮流,使每位显示该位应显示字符,并保持延迟一段时间(1~5ms),以造成视觉暂留效果。不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。四、软件设计、此程序的及时采用定时器T0和T1中断完成,其余状态循环调用显示子程序。系统主程序流程图如图4-1所示:图4-14.2定时器T0\T1中断服务处理定时器T0用于响铃程序,定时器T1用于计时程序。当答题剩余5秒种时P3.7口不断取反使喇叭发出一定频率的声音,提示选手当有选手第一个按下抢答器按扭时数码管显示选手号码,开始倒计时,并锁定抢答。当在此选手之后再有选手按下按扭时无效,数码管不变。定时中断程序流程图如4-2所示:图4-24.3抢答处理设计通过89S51芯片的控制,从而构成了整个电路。抢答组数可以在八组以内任意使用,流程图设计如下图1-8所示:图4-3键盘扫描程序流程图本系统的键盘采用的是4×4矩阵式键盘,矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。矩阵式键盘中,行、列线分别连接到按键开关的两端,在进行键盘扫描时,首先把矩阵键盘列线的第一根线置高,然后分别再检测矩阵键盘行线是否有高电平的信号,如果有信号,那么就证明这根行线与第一根列线相交处的按键被按下了,单片机就读入这个键值。如果所有的四根行线都没有信号,那么就把第一根列线置低,把第二根列线置高,再一次检测行线有没有信号,然后依次类推。由于键盘扫描的速度很快,而人按键总会持续一定的时间,因此只要单片机处在等待输入的状态,这个键盘扫描程序基本上不会错过任何一个按键信号。由于一般人按键会有抖动,抖动信号造成键盘扫描时会出现一些错误的信号,要不就是扫描不进数据,要不就是重复输入很多次数据,因此需要有一个消除抖动的程序。让单片机不响应一些相关的抖动信号,而只响应一次确实存在的按键信号。消抖动程序是这样实现的,当检测到一个脉冲信号时,并不立即认为是一次按键,而是延时一段时间以后再进行检测,如果三次检测都有信号,那么就认为有一次按键动作发生了。延时的选择非常重要,太快了,起不到消除抖动的效果,太慢了又让键盘太不灵活,错过较多的按键信号。键盘扫描程序的流程图如图4-4示。图4-4键盘扫描程序流程抢答数码显示软件程序设计采用静态显示,显示器由9个共阳极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,了九位共阳极七段数码管,共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),七它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻,这里的限流电阻选100Ω。数码显示程序流程如图4-5:
图4-5数码显示程序流程4.6软件程序(见附录2)五、设计总结:本设计定位于本学科发展方向对单片机的编程及数字电路的应用进行研究,并且得到了一些有意义的结论。抢答器的出现已经很多年了,并且种类很多。目前抢答器的功能是比较完善的,即智能化,可靠性高,速度快,工作稳定。本设计采用了部分智能化,在抢答时间方面还须改进,而且在准确性方面也有待于改进。一个学期的单片机学习主要是课本上理论知识的学习,这些理论知识远不满足对单片机的应用的要求,这次设计给我们提供了一次很好的理论联系实际的机会,使得我们对单片机的功能以及应用有了更深的了解。另外,程序设计是本次的一个难点,由于对指令的运用不够熟练使得在编程时碰壁。特别对于一些中断程序,因涉及到一些标志位而使得编程难度更高,虽然通过查资料以及同学老师的指导解决了这些问题,但编程方面的欠缺还是很大的,这为我以后的学习敲响了警钟,在以后我应加强这方面的练习以提高自己。在此期间,其中的酸甜苦辣都尝到了,在这过程中几乎每晚12点后睡觉,遇到问题及时通过网络查找资料,就连晚上睡觉都会时常梦到做设计。很久很久没有这样的感觉了,虽然很累,但感觉很充实,很有收获,尤其是最后看到自己设计的成果成功运行后那种感觉无法用语言来描叙,感觉所有的付出都得到了回报,是那么的理所当然又是那么的出人意料。参考文献:1.李朝青.单片机原理及接口技术.北京:北京航空航天大学出版社,2009.2.张迎新.单片机初级教程.北京:北京航空航天大学出版社,2007.3.张义和protel99pcb99设计与应用技巧,北京:科学出版社2000版.附录1附录2#include<reg52.h>/*宏定义*/#defineuintunsignedint#defineucharunsignedchar/*共阳极数码管编码表0-f显示*/ucharcodetable[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};/*变量定义*/sbitstart_stop=P3^6;sbitreset=P3^7;sbitkey1=P1^0;sbitkey2=P1^1;sbitkey3=P1^2;sbitkey4=P1^3;sbitkey5=P1^4;sbitkey6=P1^5;sbitkey7=P1^6;sbitkey8=P1^7;sbitstate=P3^4;sbitkaishi=P3^1;bitstart_stop_flag=0;bitkey1_flag=0;bitkey2_flag=0;bitkey3_flag=0;bitkey4_flag=0;bitkey5_flag=0;bitkey6_flag=0;bitkey7_flag=0;bitkey8_flag=0;bitreset_flag=0;bitaction=0;bitkaishi_flag=0;ucharsecond=20;uchartimer0_count=0;ucharnumber=0;ucharnumber_display=0;/*延时函数*/voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}/*数码管显示驱动函数*/voiddisplay(ucharnumber,ucharsecond){ ucharsecond_first,second_second; second_first=second/10; second_second=second%10; P2=0x01; P0=table[number]; delay(2); P2=0x02; P0=0xbf; delay(2); P2=0x04; P0=table[second_first]; delay(2); P2=0x08; P0=table[second_second]; delay(2); }/*开始键扫描函数*/voidstart_stop_keyscan(){ if(start_stop==0) { delay(8); if((start_stop==0)&&(!start_stop_flag)) { start_stop_flag=1; action=1; TR0=1; state=0; } } else { start_stop_flag=0; } }/*八位抢答键扫描函数*/ucharkey_scan8(){ if(key1==0) { delay(8); if((key1==0)&&(!key1_flag)) { key1_flag=1; number=1; number_display=number; } } else { key1_flag=0; number=0; } if(key2==0) { delay(8); if((key2==0)&&(!key2_flag)) { key2_flag=1; number=2; number_display=number; } } else { key2_flag=0; number=0; } if(key3==0) { delay(8); if((key3==0)&&(!key3_flag)) { key3_flag=1; number=3; number_display=number; } } else { key3_flag=0; number=0; } if(key4==0) { delay(8); if((key4==0)&&(!key4_flag)) { key4_flag=1; number=4; number_display=number; } } else { key4_flag=0; number=0; } if(key5==0) { delay(8); if((key5==0)&&(!key5_flag)) { key5_flag=1; number=5; number_display=number; } } else { key5_flag=0; number=0; } if(key6==0) { delay(8); if((key6==0)&&(!key6_flag)) { key6_flag=1; number=6; number_display=number; } } else { key6_flag=0; number=0; } if(key7==0) { delay(8); if((key7==0)&&(!key7_flag)) { key7_flag=1; number=7; number_display=number; } } else { key7_flag=0; number=0; } if(key8==0) { delay(8); if((key8==0)&&(!key8_flag)) { key8_flag=1; number=8; number_display=number; } } else { key8_flag=0; number=0; } if(number_display!=0) { return1; } else { return0; } }/*复位键扫描函数*/voidreset_keyscan(){ if(reset==0) { delay(8); if((reset==0)&&(!reset_flag)) { second=20; reset_flag=1; number_display=0; state=1; } } else { reset_flag=0; } } /* 开机函数*/voidkaishi_keyscan(){ if(kaishi==0) { delay(8); if((kaishi==0)&&(!kaishi_flag)) { kaishi_flag=1; number_display=0; state=1; } } else { kaishi_flag=0; } }/*主函数*/voidmain(){ TMOD=0x01;TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=0; while(1) { while((kaishi==0)&&(!kaishi_flag)) { start_stop_keyscan(); reset_keyscan(); while(action) { while(!key_scan8()) { display(number_display,second); if(second==0) { second=20; break; } } TR0=0; second=0; display(number_display,second); action=0; break; } display(number_display,second); } }}/*中断服务函数*/voidtimer0()interrupt1{ TH0=0x3c; TL0=0xb0; timer0_count++; if(timer0_count==20) { timer0_count=0; second--; if(second==0) { TR0=0; number_display=0; state=1; action=0; } } }飞单片机八路抢答器电路图>
;============================================================
;================单片机八路抢答器程序=====================
;================51hei=======================
;================2008年5月=======================
;============================================================
OKEQU20H;抢答开始标志位
RINGEQU22H;响铃标志位
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:MOVR1,#30;初设抢答时间为30s
MOVR2,#60;初设答题时间为60s
MOVTMOD,#11H;设置未定时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;允许四个中断,T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
;=====查询程序=====
START:MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;未开始抢答时候显示FFF
JBP3.0,NEXT;ddddddd
ACALLDELAY
JBP3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALLBARK;按键发声
MOVA,R1
MOVR6,A;送R1->R6,因为R1中保存了抢答时间
SETBOK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOVR7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号
MOVR3,#0AH;抢答只显示计时,灭号数
AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面
NEXT:JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,FALSE7
JNBP1.7,FALSE8
AJMPSTART
;=====非法抢答处理程序=====
FALSE1:MOVR3,#01H
AJMPERROR
FALSE2:MOVR3,#02H
AJMPERROR
FALSE3:MOVR3,#03H
AJMPERROR
FALSE4:MOVR3,#04H
AJMPERROR
FALSE5:MOVR3,#05H
AJMPERROR
FALSE6:MOVR3,#06H
AJMPERROR
FALSE7:MOVR3,#07H
AJMPERROR
FALSE8:MOVR3,#08H
AJMPERROR;=====INT0(抢答时间R1调整程序)=====
INT0SUB:MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;先在两个时间LED上显示R1
JNBP3.4,INC0;P3.4为+1s键,如按下跳到INCO
JNBP3.5,DEC0;P3.5为-1s键,如按下跳到DECO
JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMPINT0SUB
INC0:MOVA,R1
CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOVR1,#00H
ACALLDELAY1
AJMPINT0SUB
ADD0:INCR1
ACALLDELAY1
AJMPINT0SUB
DEC0:MOVA,R1
JZSETR1;如果R1为0,R1就置99,
DECR1
ACALLDELAY1
AJMPINT0SUB
SETR1:MOVR1,#63H
ACALLDELAY1
AJMPINT0SUB
BACK0:RETI
;=====INT1(回答时间R2调整程序)=====
INT1SUB:MOVA,R2
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
AJMPINT1SUB
INC1:MOVA,R2
CJNEA,#63H,ADD1
MOVR2,#00H
ACALLDELAY1
AJMPINT1SUB
ADD1:INCR2
ACALLDELAY1
AJMPINT1SUB
DEC1:MOVA,R2
JZSETR2
DECR2
ACALLDELAY1
AJMPINT1SUB
SETR2:MOVR2,#63H
ACALLDELAY1
AJMPINT1SUB
BACK1:RETI
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
REPEAT:MOVA,R2;使用锦囊时重新计时
MOVR6,A
CLRRING
COUNT:MOVR0,#00H;重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;重置定时器
RECOUNT:MOVA,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOVB,#0AH
DIVAB;除十分出个位/十位
MOV30H,A;十位存于(30H)
MOV31H,B;个位存于(31H)
MOVR5,30H;取十位
MOVR4,31H;取个位
MOVA,R6
SUBBA,#07H
JNCLARGER;大于5s跳到LARGER,小于等于5s会提醒
MOVA,R0
CLRRING
AJMPCHECK
FULL:CJNEA,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计
SETBRING
MOVA,R6
JZQUIT;计时完毕
MOVR0,#00H
DECR6;一秒标志减1
AJMPCHECK
LARGER:MOVA,R0
CJNEA,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"
DECR6;计时一秒R6自动减1
MOVR0,#00H
CHECK:JNBP3.1,QUIT;如按下停止键退出
JNBOK,CHECKK;只在回答倒计时才有效
AJMPNEXTT
CHECKK:JNBP3.0,REPEAT;判断是否使用锦囊
NEXTT:ACALLDISPLAY
JBOK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACCOUT:
MOVA,36H
JNBACC.0,TRUE1
JNBACC.1,TRUE2
JNBACC.2,TRUE3
JNBACC.3,TRUE4
JNBACC.4,TRUE5
JNBACC.5,TRUE6
JNBACC.6,TZ1
JNBACC.7,TZ2
AJMPRECOUNT
TZ1:JMPTRUE7
TZ2:JMPTRUE8
QUIT:CLROK;如果按下了"停止键"执行的程序
CLRRING
AJMPSTART
;=====正常抢答处理程序=====
TRUE1:ACALLBARK
MOVA,R2
MOVR6,A;抢答时间R2送R6
MOVR3,#01H
CLROK;因为答题的计时不再查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPCOUNT
TRUE3:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#03H
CLROK
AJMPCOUNT
TRUE4:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#04H
CLROK
AJMPCOUNT
TRUE5:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#05H
CLROK
AJMPCOUNT
TRUE6:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#06H
CLROK
AJMPCOUNT
TRUE7:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#07H
CLROK
AJMPCOUNT
TRUE8:ACALLBARK
MOVA,R2
MOVR6,A
MOVR3,#08H
CLROK
AJMPCOUNT
;=====
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购买路灯合同协议
- 房产合同协议套路
- 菜市门面转让合同协议书
- 组织服务合同协议
- 赠与合同终止协议
- 三方协议是多久的合同
- 营口合同协议翻译成英文
- 恋爱管家合同协议
- 房屋室内拆除合同协议书
- 合同代理收费协议
- 2025年中国邮政集团江西分公司招聘笔试参考题库含答案解析
- 2025年甘肃农垦集团招聘笔试参考题库含答案解析
- 2024年01月湖南2024岳阳市农商银行系统招考员工笔试历年参考题库附带答案详解
- 弘扬法治精神构建和谐校园
- 《制冷剂基本常识》课件
- 华中农业大学《物联网工程》2022-2023学年第一学期期末试卷
- 研发物料管理制度流程
- 冻融侵蚀与冰川侵蚀终稿
- 定期安全检查制度模版(2篇)
- 水域安全教育与培训制度
- 混凝土搅拌站安全操作技术交底
评论
0/150
提交评论