⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20054860.txt

📁 题目10 抢答器控制模拟程序设计 1 任务 模拟抢答器工作:抢答开始后
💻 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 + -