📄 20054860.txt
字号:
功能:用户键(即抢答者):p32,p33;主持人键:p34,
;用法:1.主持人按开启键,以示开始;2.用户抢答,若到了10秒还没有按键就退出;3.显示用户号
;4.等待主持人清除显示;5.清除后蜂鸣,以示庆祝
xsdat bit p1.4 ;定义驱动74164的数据脚为p1.4
xsclk bit p1.5 ;74164的时钟
gw bit p1.0 ;个位显示控制脚
sw bit p1.1 ;十位
;#############################################
org 00h
ajmp main
org 0bh
ajmp t0rup ;定时10秒钟,预防主持人已经按了开启键后无用户按键而死机
org 1bh
ajmp t1rup ;用于喇叭响0.5秒钟
org 30h
main: mov sp,#4fh
mov r3,#0 ;用于显示
mov r4,#0 ;用于定时,r2:蜂鸣
mov p0,#0ffh
mov p3,#0ffh
mov ie,#8ah
mov tmod,#11h
mov th0,#3ch
mov tl0,#0b0h ;每50ms中断一次
mov th1,#3ch
mov tl1,#0b0h ;每50ms中断一次
mov a,p3
orl a,#11110011b
cjne a,#0ffh,main ;以免有一或多个用户一直按住键
loop0:jb p3.4,loop0
mov p0,#0 ;主持开启键:p3.4,表示抢答开始
setb tr0 ;定时10秒钟,预防主持人已经按了开启键后无用户按键而死机
loop1:cjne r4,#200,ll;检测用户按键,若定时10s时间到了,即结束本次抢答
ajmp main
ll: mov a,p3
orl a, #11110011b
cjne a,#0ffh,ff
ajmp loop1 ;等待用户按键
ff:clr tr0 ;若有用户按键,就清除定时
rrc a
rrc a
loop4:rrc a
inc r3
jc loop4 ;将对应用户按键转化成用户号
nn: acall display
jb p3.4,nn ;等待主持人清除
acall delay
kk: jnb p3.4,kk ;等待主持人放开,以免主持人开启键与清除键相混淆
acall delay
acall fm ;蜂鸣,以做庆祝,同时将p0口全灭
mov p0,#0ffh
ajmp main
;#############################
fm: ;蜂鸣
setb tr1
clr p3.7
loop2:cjne r5,#20,tt
mov r5,#0 ;清零以备下次使用
setb p3.7 ;关闭扬声器,以免使它处于导通状态而不能发声
;用 cpl 反转驱动三极管的通断来发声要注意, ;在停止发声时一定要关闭三极管,不要让三极管长期处在导通状态!
;否则耗电很大,三极管发热严重,从而引起声音变小或无声。
clr tr1
ret
tt: cpl p3.7
mov r1,#122
djnz r1,$ ; 蜂鸣器都有谐振频率,一般在2kHz左右,不在这个范围声音就很小
ajmp loop2
;#############################
t0rup:mov tl0,#0b0h ;用于防死机定时
mov th0,#3ch
inc r4
reti
;###############################
t1rup: ;用于蜂鸣定时
mov tl1,#0b0h
mov th1,#3ch
inc r5
reti
;#############################
display:
MOV DPTR,#XSTAB
MOV A,r3 ;取得数据
MOVC A,@A+DPTR ;提取字模
ACALL DSOUT ;调用送出子程序
CLR GW
ACALL DS1MS ;调用显示1MS延时程序
SETB GW
MOV A,#0
MOVC A,@A+DPTR ;提取字模
ACALL DSOUT ;送出
CLR SW
ACALL DS1MS ;显示1MS
SETB SW
acall delay
ret
;#############################
delay:
mov r6,#00h
dl1: mov r7,#00h
djnz r7,$
djnz r6,dl1
ret
;---送出循环----------
DSOUT:
MOV R0,#8 ;传送一个字节8位
DSLOOP: RLC A ;左移
MOV XSDAT,C ;送数据到数据口
SETB XSCLK ;送一时钟
CLR XSCLK
DJNZ R0,DSLOOP
RET
;---显示延时----------
DS1MS: MOV R1,#10
DS1LO: MOV R2,#100
DJNZ R2,$
DJNZ R1,DS1LO
RET ;延时返回
;---------------------------------------------------------
;显示字表(共阴)
XSTAB: DB 3FH,06H,5BH,4FH ;"0","1","2","3"
DB 66H,6DH,7DH,07H ;"4","5","6","7"
DB 7FH,6FH,77H,7CH ;"8","9","A","B"
DB 39H,5EH,79H,71H ;"C","D","E","F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -