打印

求助:各位大人请帮我看一下

[复制链接]
1224|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liokok119|  楼主 | 2009-4-21 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, hm, ISP, pd, HC
  哥哥些,上次问过大家的抢答器程序我已基本完成只是在时间调节显示时,显示会出现乱码,程序设定的0减1跳到99,显示的确是其他的,还有就是调节完了后,按开始抢答键计时器要经过10S左右才开始计时,程序如下:
;***********************抢答器程序*********************
;程序包含初始化模块,显示模块(等待状态,错误抢答显示,正常抢答显示,答题时间显示
;时间调整显示),键盘扫描模块(错误答题,正常抢答)
;寄存器分配:30h:抢答剩余时间暂存,31h答题剩余时间暂存,32h选手号暂存,33h抢答时间调整,34h答题时间调整
;35h鹗S嗍奔湓荽妫?6h剩余时间暂存
;单片机IO分配,p0:抢答键接口,p1:段选,p2:片选,p3.0:抢答开始,p3.1:抢答结束。
;外中断0:抢答时间调整,外中断1
;单片机晶振6M
;七段数码管为共阳3为;为高两位显示时间,低位显示选手号
;******************************************************************************************************
org 0000h
ljmp main
org  0003h
ljmp qdt;  抢答时间调节
org  000bh
ljmp timerq; 抢答时间剩余计时器
org  0013h
ljmp dtq; 答题时间调节
org  001bh
ljmp timerd; 答题剩余时间计时器
org 0040h
main: mov ie,#8fh; 初始化
mov tmod,#22h
mov ip,#01h
mov th0,#06h
mov tl0,#06h
mov tl1,#06h
mov th1,#06h
mov ip,#01h
mov 30h,#30
mov 31h,#90
mov 32h,#71h
mov 33h,#30
mov 34h,#90
;*******定时器寄存器**********
mov 35h,#0
mov 36h,#0
mov 37h,#0
mov 38h,#0
mov r0,#0; 抢答处理寄存器
mov sp,#60h
;**************调试用*********************
; mov p3,#7fh
; mov p0,#7fh
; mov p3,#0feh
;****************主程序*************************
loop: lcall display   
jnb p3.0 ,jp; 判断抢答是否开始
lcall k11
ajmp loop
jp: lcall dly
jb p3.0,loop
lcall jp1
;**********错误抢答检查************************
k1: lcall dly
jb p0.0,k22
mov 32h,#1
ljmp disp2  
k2: lcall dly
jb p0.1,k33
mov 32h,#2
ljmp disp2
k3: lcall dly
jb p0.2,k44
mov 32h,#3
ljmp disp2
k4: lcall dly
jb p0.3,k55
mov 32h,#4
ljmp disp2
k5: lcall dly
jb p0.4,k66
mov 32h,#5
ljmp disp2
k6: lcall dly
jb p0.5,k77
mov 32h,#6
ljmp disp2
k7: lcall dly
jb p0.6,k88
mov 32h,#7
ljmp disp2
k8: lcall dly
jb p0.7,loop
mov 32h,#8
ljmp disp2
k11: jnb p0.0,k1
k22: jnb p0.1,k2
k33: jnb p0.2,k3
k44: jnb p0.3,k4
k55: jnb p0.4,k5
k66: jnb p0.5,k6
k77: jnb p0.6,k7
k88: jnb p0.7,k8
ret
;**************抢答处理***************************
jp1: setb tr0
mov r2,30h
cc: lcall display2; 无人抢答显示
mov a,p0
orl a,#00h
cpl a
cjne a,#01h,jp22
mov 32h,#1
ljmp display1;正常抢答显示
jp22: cjne a,#02h,jp33
mov 32h,#2
ljmp display1
jp33: cjne a,#04h,jp44
mov 32h,#3
ljmp display1
jp44: cjne a,#08h,jp55
mov 32h,#4
ljmp display1 
jp55: cjne a,#10h,jp66
mov 32h,#5
ljmp display1
jp66: cjne a,#20h,jp77
mov 32h,#6
ljmp display1
jp77: cjne a,#40h,jp88
mov 32h,#7 
ljmp display1
jp88: cjne a,#80h,jp1
mov 32h,#8
ljmp  display1
ajmp cc
;****************正常抢答显示***************
;抢答剩余时间停止计时,答题剩余时间开始计时
display1:
clr tr0
setb tr1
mov dptr,#tab
mov r2,31h; 判断答题剩余时间
cjne r2,#0,lp1
next: mov 31h,34h
mov 30h,33h
clr tr1
ljmp loop 
lp1: jnb p3.1,wc33; 判断主持人是否按下重启键
mov a,31h
mov b,#10
div ab
movc a,@a+dptr
mov p1,a
mov p2,#01h
lcall dly
mov p1,#0ffh
mov a,b
movc a,@a+dptr
mov p1,a
mov p2,#02h
lcall dly
mov p1,#0ffh
mov a,32h
movc a,@a+dptr
mov p1,a
mov p2,#04h
lcall dly
mov p1,#0ffh
ajmp display1
wc33:  lcall dly
jb p3.1,lp1
setb p3.6
ajmp next
;***********无人抢答显示*********
;抢答剩余时间开始计时,
display2:
mov r2,30h
cjne r2,#0,wc4
CLR tr0 
mov 30h,33h
ajmp wc444
wc4: jnb p3.1,wc44
mov dptr,#tab
mov a,30h
mov b,#10
div ab
movc a,@a+dptr
mov p1,a
mov p2,#01h
lcall dly
mov p1,#0ffh
mov a,b
movc a,@a+dptr
mov p1,a
mov p2,#02h
lcall dly
mov p1,#0ffh
mov p1,#8eh
mov  p2,#04h
lcall dly
mov p1,#0ffh
ret
wc44: lcall dly
jb p3.1,display2
wc444: clr tr0
mov 30h,33h
setb p3.6
ljmp loop
;*************初始化显示***********
;数码管显示F
display:
mov p1, #8eh
mov p2,#0ffh
ret
;************错误抢答显示*********
disp2: clr p3.6
mov dptr,#tab
jnb p3.1,ww
mov p1,#8eh
mov p2,#01h
lcall dly
mov p1,#0ffh
mov p1,#8eh
mov p2,#02h
lcall dly
mov p1,#0ffh
mov a,32h
movc a,@a+dptr
mov p1,a
mov p2,#04h
lcall dly
mov p1,#0ffh
ajmp disp2
ww: lcall dly
jb p3.1,disp2
setb p3.6
ljmp loop
;********t0程序抢答剩余时间计时
timerq: inc 35h
mov r3,35h
cjne r3,#200,fh
mov 35h,#0
inc 37h
mov r3,37h
cjne r3,#20,fh
mov 37h,#0
dec 30h
mov r3,30h
cjne r3,#10,fh
clr p3.6
fh: reti
timerd: inc 36h
mov r3,36h
cjne r3,#200,fh1
mov 36h,#0
inc 38h
mov r3,38h
cjne r3,#20,fh
dec 31h 
mov 38h,#0
mov r3,31h
cjne r3,#9,fh
clr p3.6
fh1: reti
;************抢答剩余时间调节*************
qdt: push psw
push 0
push 1
push 2
push 3
push 4
push 5
push 6
push 7
push acc
clr ex0
lop11: 
jnb p3.0,ad1
jnb p3.1,sub1
jnb p3.2,fhx0
lcall dis
ajmp lop11
ad1: lcall dly
jb p3.0,lop11
jnb p3.0,$; 放键检查
inc 33h
mov 30h,33h
mov r0,30h
cjne r0,#99,lop11
mov 33h,#00h
mov 30h,33h
lcall dis
ajmp lop11
sub1: lcall dly
jb p3.1,lop11
jnb p3.1,$
dec 33h
mov 30h,33h
mov r0,30h
cjne r0,#00h,lop11
mov 33h,#99
mov 30h,33h
lcall dis
ajmp lop11
fhx0: ;lcall dly
; jb p3.2,lop11
; jnb p3.2,$
pop acc
pop 7
pop 6
pop 5
pop 4
pop 3
pop 2
pop 1
pop 0
pop psw
setb ex0
reti
;*************答题剩余时间调节********
dtq: push psw
push 0
push 1
push 2
push 3
push 4
push 5
push 6
push 7
push acc
clr ex1
lop12: jnb p3.3,fhx1
jnb p3.0,ad11
jnb p3.1,sub11
lcall dis1
ajmp lop12
ad11: lcall dly
jb p3.0,lop12
jnb p3.0,$
inc 34h
mov 31h,34h
mov r0,31h
cjne r0,#99,lop12
mov 34,#00h
mov 31h,34h
lcall dis1
ajmp lop12
sub11: lcall dly
jb p3.1,lop12
jnb p3.1,$
dec 34h
mov 31h,34h
mov r0,34h
cjne r0,#00h,lop12
mov 34h,#99
mov 31h,34h
lcall dis1
ajmp lop12
fhx1: ;lcall dly
; jb p3.3,lop12
; jnb p3.3,$
pop acc
pop 7
pop 6
pop 5
pop 4
pop 3
pop 2
pop 1
pop 0
pop psw
setb ex1
reti
;*********时间调整显示**********
dis: mov 37h,30h
lcall disp
ret
dis1: mov 37h,31h
lcall disp
ret
disp: mov dptr,#tab
mov a,37h
mov b,#10
div ab
movc a,@a+dptr
mov p1,a
mov p2,#01h
lcall dly
mov p1,#0ffh
mov a,b
movc a,@a+dptr
mov p1,a
mov p2,#02h
lcall dly
mov p1,#0ffh
mov p1,#8eh
mov p2,#04h
lcall dly
mov p1,#0ffh
ret
在线等,谢谢大家了

相关帖子

沙发
liokok119|  楼主 | 2009-4-21 17:08 | 只看该作者

不好意思哈搞了个别字

调了一下午了 始终没找到问题在哪里,所以就只有来找21IC的哥哥们

使用特权

评论回复
板凳
liokok119|  楼主 | 2009-4-22 13:00 | 只看该作者

显示的问题解决了,就是计时器还没找到原因

有条指令搞错了 34h我写成34了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

45

帖子

0

粉丝