单片机 简单乒乓球游戏程序设计

如题所述

第1个回答  2012-05-31
org 0000h
sjmp main ;单片机复位后从0000H
org 0003h ;INT0中断入口
sjmp zd1 ;转中断服务程序
org 0013h ;INT1中断入口
sjmp zd2 ;转中断服务程序
org 0030h
main: mov r2,#0
mov r3,#0
mov p0,#0
setb p3^2 ;INT0(外部中断0输入线)
setb p3^3 ;INT0(外部中断0输入线)
mov dptr,#tab ;DPTR指向数据表的首地址
mov a,r2
movc a,@a+dptr ;查表
mov p1,a ;数码显示
mov a,r3
movc a,@a+dptr ;查表
mov p2,a ;数码显示
mov tcon,#0Ah ;写控制字TCON,INT0和INT1有请求
mov ie,#85h ;写控制字IE(EA=1,EX1=1,EX0=1)
sjmp $ ;等待中断信号
zd1: cpl ea ;关闭总中断
acall dianliang1 ;调用从右向左点亮程序
mov r4,#0ffh
D1: mov r5,#0ffh
pd1: jnb p3^3,fh1 ;判断是否有中断请求,没有则顺序执行
则跳转至中断程序结束
djnz r5,pd1
djnz r4,D1
acall koufen1 ;延时时间到,调用扣分程序
fh1: setb ea ;开总中断有效
reti ;中断返回
zd2: cpl ea ;关闭总中断
acall dianliang2 ;调用从左向右点亮程序
mov r4,#0ffh
D2: mov r5,#0ffh
pd2: jnb p3^2,fh2 ;判断是否有中断请求,没有则顺序执行,有
则跳转至中断程序结束
djnz r5,pd2
djnz r4,D2
acall koufen2 ;延时时间到,调用扣分程序
fh2: setb ea ;开总中断有效
reti ;中断返回
koufen1: inc r2 ;选手1扣分程序
cjne r2,#10h,song1 ;扣分到F则重新开局
mov r2,#0
mov r3,#0
song1:mov dptr,#tab ;数码显示
mov a,r2
movc a,@a+dptr
mov p0,a ;P0口输出
ret ;子程序返回
koufen2: inc r3 ;选手2扣分程序
cjne r3,#10h,song2
mov r2,#0
mov r3,#0
song2:mov dptr,#tab
mov a,r3
movc a,@a+dptr
mov p2,a ;P2口输出
ret
dianliang1:mov a,#01h ;从右向左点亮的子函数
s1:mov p0,a
acall DINGSHI ;调用延时
ss1: rl a
cjne a,#01h,s1
ret
dianliang2:mov a,#80h ;从左向右点亮的子函数
s2: mov p0,a
acall DINGSHI
ss2: rr a
cjne a,#80h,s2
ret
DINGSHI: mov tmod,#01h ;产生0.2秒的定时
mov r4,#02h
CZ:mov th0,#3ch
mov tl0,#0b0h
setb tr0
WSHM: jbc tf0,OK
sjmp WSHM
OK: djnz r4,CZ
ret
tab:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;显示0——F的数据表
end本回答被提问者采纳
相似回答