版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开放式单片机应用系统专题设计专题名称:反应速度测试仪光学与电子信息学院2014.11一、任务要求LED数码管任意显示一位0-9之间的数字,8个LED随机点亮不同的个数,测试者须将二者数字相加,并通过键盘输入到单片机中,测试一组10个数字,记录所需的时间及正确率。共测试10组数据,每组数据只给测试者10秒钟的计算和输入时间,测试者每答完一道题,判断是否正确,通过声光方式进行提示,测试完毕,给出测试成绩,成绩计算方法由设计者给出二、功能特点与使用说明功能特点1、在完成测试显示分数时可同时显示正确输入的个数。2、在用户输入数据的同时可以在数码管上显示出来,并且可以通过按下F2键对输入错误的数据进行更
2、正,减小用户按键失误的可能性。3、通过复位键可以进行复位,重新开始测试。4、增加了暂停复位功能,暂停过程中停止计时且关于随机数的信息将不会显示,用户已输入的信息会保留。使用说明1、用户给开发板上电后,开始等待测试,当按下KINT键时,开始测试,用户将数码管上显示的数字与LED灯亮的个数相加并通过键盘输入,输入的同时数码管高2位会显示用户输入的数据,若发现错误可以按下F2键进行修改,确认无误后按下F1键确认,同时单片机会判断结果是否正确而给出相应的提示,回答正确则D9亮一段时间,回答错误则蜂鸣器响,同时下一组数据也会显示出来。若用户在10秒没没有按下确认键,则会被自动视为错误,开始下一题。在最后
3、一组数据测试完成后,会立即显示分数,数码管高2位为用户得分,低2位为用户回答正确题目的个数。这是再按下KINT键则重新开始测试。若用户想中途放弃测试,可按下复位键即可退出,若想暂停,则按下F3,单片机会显示已输入数字,而生成的随机数则会消失,同时计时也会停止,此时输入任何键都不会有任何反应,待再按下F3时,重新开始定时,数码管和LED灯上的关于随机数的显示也会恢复。2、 键盘功能分布789/456/123/0确认(F1)删除(F2)暂停/复位KINT键为开始键三、方案设计设计思路1、 采用定时器T0生成随机数。2、 数码管显示部分定时器T2来实现,每隔一定时间扫描一次,只要改动缓冲区里的内容,
4、相应数码管显示就会相应出现变化。3、 用定时器T1实现10s的定时。4、 用定时器T3实现声光提示中LED与蜂鸣器工作时间的定时。5、 通过键盘扫描程序以及对键值的判断实现按键输入,删除功能以及暂停复位功能。6、 分数计算方法为,答错一题不得分,答对一题得10分,在此基础上,计算与输入的时间每用去1s则扣1分,最终得到用户的总得分。同时记录用户答对题目的个数,进行统计。分析与计算关于生成随机数,定时初值设置为0AFH,采用方式2,在生成随机数时先减去0AFH,读取从00H到50H即00D到80D的随机数,再分别把个位和十位送人50H与51H供数码管与LED灯显示则完成对随机数的生成与显示。关于
5、10s的定时,T1采用系统时钟的48分频,定时10MS,再循环100次,一方面完成10s的定时,另一方面作为计算分数用的参量。T1初值为0E713H,定时结果为9.99967ms。关于T2的定时,采用16位自动装载初值的模式,震荡频率选用系统时钟的12分频,初值为0FB03H,定时4.9998ms,即每隔5ms扫描一次数码管。关于T3的定时,震荡频率选用系统时钟的12分频,初值设为09C4FH,定时0.1s,在蜂鸣器或LED灯闪亮0.1s后触发中断,关断LED灯与蜂鸣器。关于消抖延时,供延时5.7MS供消抖。资源分配定时器与中断:外部中断1:开始测试键定时器0:生成随机数定时器1:10s定时以
6、及分数的计算定时器2:触发数码管扫描定时器3:表示声光提示中信号持续的时间寄存器R0,R1:各子程序用途不同,具体用途见程序注释R2:标志输入数据的位数R3:存储列信号R4:存储键值R5:用于计算分数与10s的定时R6,R7:用于延时子程序内存空间40H44H45H49H50H数码管片选信号正确个数分数数码管显示缓存数码管显示缓存51H52H53H54H65HLED亮的个数正确结果暂存R0暂存R1计算结果70H71H90HA0HA2H输入与数码管缓存输入与数码管缓存键盘列选信号暂停时暂存TH1暂停时暂存TL1A4A6暂停时暂存50H暂停时暂存51H四、流程图 主程序流程图外部中断1子程序键盘扫
7、描子程序键盘键值判断子程序数码管显示子程序声光控制子程序LED显示子程序五、源程序;-;- Generated Initialization File -;-$include (C8051F310.inc)public Init_DeviceINIT SEGMENT CODE rseg INITORG 0000HLJMP MAINORG 0003HLJMP ITRP0ORG 000BHLJMP T0PROORG 001BHLJMP T1PROORG 002BHLJMP T2PROORG 0073HLJMP T3PROORG 1000H MAIN:MOV SP,#0B0H LCALL CLD L
8、CALL Init_Device;初始化 SETB TR2;开始数码管扫描 SETB TR0;开始随机数的计时 CLR TR1;关闭10s定时 SJMP $;初始化存储空间及标志位CLD: CLR P3.1 SETB P0.0 MOV 45H,#00H MOV 44H,#00H MOV 40H,#00H MOV 49H,#10H MOV 71H,#11H MOV 70H,#11H CLR F0 CLR PSW.1 RET;键盘扫描子程序;KEY: ACALL ZCR MOV R0,#70H;指向输入缓冲区 MOV R2,#00H;输入数字位数 MOV 71H,#11H MOV 70H,#11H
9、KEYPRO:ACALL KEXAM;检查是否有键按下 CJNE R5,#00H,TIMEIN;判断是否用完10s AJMP ERRORTIMEIN:JZ KEYPRO MOV R0,#11H ACALL DELAY;延时 ACALL KEXAM;再次检测是否有键按下,构成消抖 JZ KEYPROK1: MOV R1,#90H;行信号 MOV R1,#01H MOV R4,#00H;存放输入键值 MOV P2,#0F0H;列量送高电平 MOV A,P2 MOV R3,A;将列信号存入R3,待之后处理K2:MOV 30H,R1;开始检测行信号 XCHD A,R1 MOV R1,30H ORL A
10、,#0F0H MOV P2,A MOV A,P2 ORL A,#0FH CPL A JZ K3 MOV A,R4 ADD A,#01H MOV R4,A;行值加1 MOV A,R1 RL A MOV R1,A JNB ACC.4,K2;4行都没测出,则继续扫描 AJMP KEYPROK3: ACALL DELAY;检测按键是否松开 ACALL KEXAM JNZ K3 MOV A,R3;送列信号 SWAP AK4: JNB ACC.0,K5 RR A INC R4 INC R4 INC R4 INC R4;列值加1即键值加4 AJMP K4K5: CJNE R4,#0CH,C5 ;根据键值进行
11、不同的处理,R4=0C即暂停操作 JB PSW.1,C6 CLR TR1 SETB RS0;调用工作寄存器组1 MOV 0A0H,TH1 MOV 0A2H,TL1 MOV 0A4H,50H MOV 0A6H,51H MOV 50H,#10H MOV 51H,#00H ACALL LED1CLR RS0;对清零时状态进行设置与存储当前状态,返回第0组工作寄存器 SETB F0 SETB PSW.1;设置标志位 AJMP KEYPROC6: SETB RS0 MOV TH1,0A0H MOV TL1,0A2H MOV 50H,0A4H MOV 51H,0A6H ACALL LED1 SETB TR
12、1;返回暂停前设置 CLR RS0 CLR F0 CLR PSW.1;设置标志位 AJMP KEYPROC5: JNB F0,C7;暂停时对任何输入不作处理 AJMP KEYPROC7:CJNE R4,#0AH,C1 ;判断是否输入完毕确认 CLR TR1;定时结束 SETB IE0 CJNE R2,#01H,C2 DEC R0 MOV A,R0 MOV 65H,A;计算输入结果,存入65H,1位数情况 AJMP DONEC2: CJNE R2,#02H,ERROR DEC R0 DEC R0 MOV A,R0 MOV B,#10D MUL AB INC R0 ADD A,R0 MOV 65H
13、,A;计算输入结果,存入65H,2位数情况DONE: CJNE A,52H,ERROR MOV A,R5 ACALL BCD ADD A,45H;计算分数 MOV 45H,A LCALL LIGHT;正确提示 AJMP OVERERROR: LCALL VOICE;错误提示OVER: ACALL ZPR;防止堆栈错误 AJMP ITEXE C1: CJNE R4,#0BH,C3 CJNE R2,#00H,C4 AJMP KEYPROC3: MOV A,R4 MOV R0,A;存放输入数字 INC R0 INC R2;准备输入下一个数 AJMP KEYPROC4: DEC R0 DEC R2 ;
14、删除功能 AJMP KEYPRO;BCD码子程序BCD: MOV B,#10D DIV AB;A中存放十位,B中存放个位 RET; ;声光显示子程序LIGHT: CLR P0.0;D9亮 ORL TMR3CN,#04H;开T3定时,待计满后熄灭D9 MOV A,44H INC A MOV 44H,A;存放正确个数 RETVOICE: SETB P3.1;蜂鸣器响 ORL TMR3CN,#04H;开T3定时,计满后关蜂鸣器 RET KEXAM: MOV P2,#0F0H;检测输入 MOV A,P2 XRL A,#0F0H RETDELAY: MOV R6,#0A1H;消抖延时DELAY2:MOV
15、 R7,#0A1HDELAY1: DJNZ R7,DELAY1 DJNZ R6,DELAY2 RET;LED子程序LED: ACALL ZCR MOV R0,#08H MOV A,51H ADD A,#11H MOVC A,A+PC;查表得数字对应LED亮的码值LOOP: CLR P3.4 MOV C,ACC.0 MOV P3.3,C CPL P3.3;送一位信号 NOP SETB P3.4 RR A;右移,准备送下一位信号 DJNZ R0,LOOP;共移动8次 ACALL ZPR RETTABLE1:DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFHDSNG: D
16、B 0FCH,060H,0DAH,0F2H,066H,0B6H,0BEH DB 0E0H,0FEH,0F6H,0EFH,03EH,06EH,06EH,06EH,06EH,02H,10H;暂停时LED操作子程序;LED1: MOV R0,#08H MOV A,51H ADD A,#0FH MOVC A,A+PCLOOP1:CLR P3.4 MOV C,ACC.0 MOV P3.3,C CPL P3.3 NOP SETB P3.4 RR A DJNZ R0,LOOP1 RETTABLE2:DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH;寄存器暂存子程序ZCR: MO
17、V 53H,R0 MOV 54H,R1 RET;寄存器返回子程序ZPR: MOV R0,53H MOV R1,54H RET;中断服务程序;KINT键外部中断0 ITRP0: LCALL DELAY JB P0.1,NONE ;消抖 MOV R0,#00H ACALL CLD ANL TMR3CN,#0FBH;关T3ITEXE: INC R0;测试组数+1 CLR TR1;关T1 MOV A,TL0;取随机数 CLR C SUBB A,#0AFH ACALL BCD MOV 50H,B MOV 51H,A ADD A,B MOV 52H,A MOV A,50H MOV A,51H;将两随机数存
18、入50H,51H显示 MOV R5,#01H LCALL LED;LED显示 CJNE R0,#0BH,COUNT1;判断是否完成10组测试 MOV A,45H ACALL BCD MOV 70H,A MOV 71H,B ;显示结果 MOV A,44H ACALL BCD MOV 49H,A MOV 50H,B ;显示正确个数 AJMP NONE COUNT1:MOV R5,#64H MOV TH1,#0E7H MOV TL1,#013H SETB TR1 ;使T1定时10sLJMP KEY ;开始键盘扫描NONE: RETI;T0中断服务程序;用于生成随机数T0PRO: SETB TR0 R
19、ETI;T1中断服务程序;用于10s定时与分数的计算T1PRO: CLR TR1 MOV TH1,#0E7H MOV TL1,#013H SETB TR1 DJNZ R5,T1 CLR TR1 CLR P0.0 ;用完10s,LED灯亮T1: RETI;T2数码管显示部分T2PRO: SETB RS1 ;调用第2组工作寄存器 MOV R1,40H ;查片选信号 MOV DPTR,#DSNGS0:CJNE R1,#00H,S1 ;判断是否显示第1位数码管 CLR P0.6 CLR P0.7 ;选中第1位 MOV A,50H MOVC A,A+DPTR MOV P1,A ;送数据,显示 INC R
20、1 ;位选信号+1 MOV 40H,R1 ;存位选信号 AJMP T2DONES1: CJNER1,#01H,S2 ;同上 SETB P0.6 CLR P0.7 MOV A,49H MOVC A,A+DPTR MOV P1,A INC R1 MOV 40H,R1 AJMP T2DONES2:CJNE R1,#02H,S3 ;同上 CLR P0.6 SETB P0.7 MOV A,71H MOVC A,A+DPTR MOV P1,A INC R1 MOV 40H,R1 AJMP T2DONES3: CJNE R1,#03H,S4 ;同上 SETB P0.6 SETB P0.7 MOV A,70H
21、 MOVC A,A+DPTR MOV P1,A INC R1 MOV 40H,R1 AJMP T2DONES4: MOV R1,#00H ;R1中数大于3时使之位0,跳至S0 AJMP S0T2DONE:CLR RS1 ;返回工作寄存器组0 CLR TF2H SETB TR2 RETI;声光提示定时部分T3PRO: ANL TMR3CN,#07BH ;关中断 SETB P0.0 ;关D9 CLR P3.1 ;关蜂鸣器 RETI; Peripheral specific initialization functions,; Called from the Init_Device labelTim
22、er_Init: mov TCON, #050h mov TMOD, #012h mov CKCON, #002h mov TL0, #0AFh mov TL1, #013h mov TH0, #0AFh mov TH1, #0E7h mov TMR2CN, #004h mov TMR2RLH, #0FBhmov TMR2RLL, #003h mov TMR2H, #0FBhmov TMR2L, #003h mov TMR3CN, #004hmov TMR3RLL, #04Fh mov TMR3RLH, #09Ch mov TMR3L, #04Fh mov TMR3H, #09Ch retPo
23、rt_IO_Init: ; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ;
24、 P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unass
25、igned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040h retInterrupts_Init: mov IP, #028h mov IE, #0ABhMOV E
26、IE1,#80HMOV EIP1,#80H retPCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h ret; Initialization function for device,; Call Init_Device from your main programInit_Device: lcall Timer_Init lcall Port_IO_Init lcall Interrupts_InitLCALL PCA_Init retend六、程序测试方法与结果测试方法:将程序下载到开发板上,并按照事先预想的需求逐一测试,看是否满足要求。1、 开始测试后,可以显示随机数,输入数字,数码管高2位也会显示输入的数据。2、 若输入错误
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗单位防火门专项管理制度
- 把盐析出来说课稿
- 餐厨垃圾处理可行性报告
- 21直线的倾斜角与斜率-2022-2023学年高二数学教材学案(人教A版2019选择性)
- 陈列设计岗位招聘面试题及回答建议
- 企业战略管理经典案例
- 2024年度知识产权质押贷款合同
- 资源、经验与制度:新世纪以来高校工程实践教学改革隐忧及其破解
- 2024年度五个股东就网络游戏开发的合作协议书
- 2023年北京市西城初三一模物理试卷及答案
- 正余弦定理知识点权威总结18页
- 国企纪检监察嵌入式监督的探索与实践
- 浅议小升初数学教学衔接
- 设备安装应急救援预案
- 深基坑工程降水技术及现阶段发展
- 暂堵压裂技术服务方案
- 《孔乙己》公开课一等奖PPT优秀课件
- 美的中央空调故障代码H系列家庭中央空调(第一部分多联机)
- 业主委员会成立流程图
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析练习(带答案)
- 广联达办公大厦工程施工组织设计
评论
0/150
提交评论