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

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