1、P3口除了一般I/O线的功能外,还具有更为重要的第二功能,p3.0p3.4口接五个按钮,p3.6口(外部数据存储器写选通)接一个报警器。3.2显示模块设计显示模块用的是7SEG-MPX4CC,1、3、4口是用来控制数码管显示数的。本数码管采用的是动态显示。 图3.2 7SEG-MPX4CC图4软件流程设计4.1系统流程图图4.1 系统流程图4.2倒计时程序流程图 图4.2 倒计时流程图4.3显示程序流程图图4.3 显示程序流程图4.4 四路抢答器程序org 0ok equ 20hrequ 22hljmp startorg 0003hljmp interruptedorg 000bhljmp t
2、0intorg 0013h ljmp int1sub org 001bh ljmp t1int org 0040hstart: mov r1,#10 mov r2,#30 mov tmod,#11h mov th0,#0f0h mov tl0,#0ffh mov th1,#3ch mov tl1,#0b0h setb ea setb et0 setb et1 setb ex0 setb ex1 clr ok clr r setb tr1setb tr0inquire: mov r5,#0bh;查询 mov r4,#0bh mov r3,#0bh acall display;未开始抢答时候显示F
3、FF jb p3.0,key acall delay jb p3.0,key;去抖动,如果开始键按下就向下执行,否者跳到非法抢答查询 acall bark mov a,r1mov r6,a setb ok mov r7,#01h ;读抢答键数据信号标志,这里表示只读一次有用信号 mov r3,#0ah;抢答只显示计时,灭号数 ljmp countkey: jnb p1.0,f1jnb p1.1,f2jnb p1.2,f3jnb p1.3,f4ljmp inquiref1: mov r3,#01h;非法抢答 ljmp errorf2: mov r3,#02hf3: mov r3,#03h ljm
4、p errorf4: mov r3,#04h ljmp errorinterrupted:mov a,r1;抢答时间R1调整 mov b,#0ah div a mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc0 jnb p3.5,dec0 jnb p3.1,back0 ljmp interruptedinc0: mov a,r1 cjne a,#63h,add0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。 mov r1,#00h acall delay1add0: inc r1 ljmp interruptedd
5、ec0: jz setr1;如果R1为r, R1就置99, dec r1 acall delay1setr1: mov r1,#63hback0: reti int1sub: mov a,r2;回答时间R2调整 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc1 jnb p3.5,dec1 jnb p3.1,back1 ljmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h ljmp int1subadd1: inc r2dec1: jz
6、setr2 dec r2setr2: mov r2,#63hback1:repeat: mov a,r2;倒计时 mov r6,a clr r count: mov r0,#00h mov th1,#3ch mov tl1,#0b0hrecount: mov a,r6;r6保存了倒计时的时间,之前先将抢答时间或回答时间给R6 mov 30h,a mov 31h,b mov r5,30h mov r4,31h mov a,r6 subb a,#07h jnc larger;大于5s跳到larger,小于等于5s会提醒 mov a,r0 cjne a,#0ah,full;1s中0.5s向下运行 c
7、lr r ljmp checkfull: cjne a,#14h,check;下面是1s的情况,响并显示号数并清R0,重新计 setb r mov a,r6 jz quit;计时完毕 mov r0,#00h dec r6;一秒标志减1larger: mov a,r0如果1s向下运行,否者跳到查停/显示计时一秒R6自动减1check: jnb p3.1,quit;如按下停止键退出 jnb ok,checkk;只在回答倒计时才有效 ljmp keytcheckk: jnb p3.0,repeat;判断是否使用锦囊keyt: jb ok,accout;如果是抢答倒计时,如是则查询抢答,否者跳过查询继
8、续倒数 ljmp recountaccout: mov a,36h jnb acc.0,true1 jnb acc.1,true2 jnb acc.2,true3 jnb acc.3,true4 tz1: jmp true3tz2: jmp true4quit: clr ok;如果按下了停止键执行的程序 clr r ljmp inquiretrue1: acall bark;开始抢答 mov r6,a mov r3,#01h因为答题的计时不再查询抢答,所以就锁了抢答 ljmp counttrue2: acall bark mov r6,a mov r3,#02h clr ok ljmp cou
9、nttrue3: mov r3,#03htrue4: clr okerror: mov r0,#00h;犯规抢答 mov 34h,r3here: cjne a,#06h,flash;0.3s向下运行-灭并停响 mov r4,#0ah mov r5,#0ah;三灯全灭 ljmp check1flash: cjne a,#0ch,check1;下面是0.8s的情况,响并显示号数并清R0,重新计 mov r3,34h;取回号数 mov r5,#0bh mov r4,#0bh;显示FF和号数check1: jnb p3.1,quit1 acall display ljmp herequit1: clr ok ljmp startdisplay: mov dptr,#dat1;显示程序 mov a,r3 movc a,a+dptr mov p2,#0feh mov p0,a acall delay2 mov dptr,#dat2 mov a,r5 movc a,a+dptr mov p2,#0fdh mov p0,a acall delay2 mov a,r4 mov p2,#0fbh ret
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1