本帖最后由 不变的情 于 2013-5-5 09:16 编辑
单片机做的乒乓球电子记分板
前一个单片机读写PLC的成功,让自己幸福了一周.
如今脑袋里没了想头,空落落得难受.还是给自己找点动力,做个乒乓球的记分板吧.
自己喜欢打乒乓球,但每次矿上组织比赛,发给的都是手翻的记分牌,动不动就卡住翻不过来,有时连翻两张......
到最后一局的半局,还要换场地,比分换翻更是手忙心乱......
问题不止这些....因为一门心思在看球赛上,一人两次的发球,到底该谁发球了?动不动就给人家记错了......
唉,忙着看球,又得忙翻分,比赛都过两分了,号还没给人家翻过来呢,连看球的观众都有意见.
干脆,自己用单片机制作一个记分牌吧,方便,快捷,自动.按个按键就能搞定,何乐而不为呢?
呵呵,想法不错,能实现的话,可以让自己专心看比赛了........
说干就干.
1.先根据比赛的实际情况,写出要实现的功能
A:一键加分.比赛时,按一个键,给参赛的胜方加分.
B:一键换场地:按一个键,实现比分的位置左右互换
C:一键复位,重新计分
D:自动标识发球的一方
E:大局比分的显示
2.画出电路图
3.写出程序
;====R0:甲得分,R1:乙得分,R2:比分,R3:十位位码,R4:个位位码,R5/R6延时用,R7:换发球判断值;====键1:复位/RST,键2:交换换场地,同时交换发球方标识/P1.0,键3:甲得分加1/P1.1,键4:乙得分加1/P1.2ORG00HLJMPSTARTORG30HSTART:MOVR0,#00H甲比分赋初值为0MOVR1,#00H乙比分赋初值为0MOVR7,#02H换发球判断赋值MOVP1,#027H 给发/接球方赋标识值MAIN:JNBP1.0,JHCD如按下P1.0,转交换场地JNBP1.1,ADD1如按下P1.1,转甲加1JNBP1.2,ADD2如按下P1.2,转乙加1LCALLDISP LJMPMAIN;========显示甲的比分========DISP:MOVA,R0 MOVR2,A MOVR3,#01H十位的位码MOVR4,#02H个位的位码LCALLDT2D;========显示乙的比分========MOVA,R1MOVR2,A MOVR3,#04H十位的位码MOVR4,#08H个位的位码LCALLDT2D RET;========把比分拆为十/个位分别显示========DT2D:MOVA,R2 对2位数/比分进行十位/高位,个位/低位拆分MOVB,A把比分赋B,保护原数ANLA,#0F0H屏蔽低位SWAPA高低位互换位置MOVDPTR,#TAB字形码表首址赋给DPTRMOVCA,@A+DPTR查表找出数字相对应的字形码MOVP2,A;高位字形码送P1输出显示MOVP3,R3高位位码送P3LCALLDLY1SMOVP3,#00H关断P3,字符消隐MOVA,BANLA,#0FH屏蔽高位MOVDPTR,#TAB字形码表首址赋给DPTRMOVCA,@A+DPTR查表找出数字相对应的字形码MOVP2,A 低位字形码送P1显示MOVP3,R4低位位码送P3LCALLDLY1SMOVP3,#00H关断P3,字符消隐RET;========比赛中交换场地,分数左右交换显示,发球方标识同时交换========JHCD:判断键2是否按下LCALLDLY10MS按下延时消抖JBP1.0,MAIN键释放,返回JNBP1.0,$等待键释放MOVA,R0 键释放,则左右交换比分XCHA,R1 A与R1值交换MOVR0,ACPLP1.5 发球方标识转换CPLP1.6 发球方标识转换LJMPMAINRET;========甲方比分加1========ADD1:LCALLDLY10MS 按下延时消抖JBP1.1,MAIN键释放,返回JNBP1.1,$等待键释放,防止连续加1MOVA,R0 甲比分送累加器加1ADDA,#01H DAA十进制调整MOVR0,A 加1后的比分再返回R0;========换发球判断======== DJNZR7,BACK 减1后判断发球方,不为0转主程序MOVR7,#02H 为0,则表示一人已经发够两个球,随即转换发球方标识,并再赋判断初值 CPLP1.5 发球方标识转换CPLP1.6 发球方标识转换BACK:LJMPMAINADD2:LCALLDLY10MS 按下延时消抖JBP1.2,MAIN键释放,返回JNBP1.2,$等待键释放,防止连续加1MOVA,R1 乙比分送累加器加1ADDA,#01HDAA十进制调整MOVR1,A 加1后的比分再返回R1DJNZR7,BACK减1后判断发球方,不为0转主程序MOVR7,#02H为0,则转换发球方标识,并再赋发球方判断开关初值CPLP1.5 发/接球方标识转换CPLP1.6 发/接球方标识转换LJMPMAIN;========延时程序========DLY10MS:MOVR5,#14HLOOP1:MOVR6,#0FFHDJNZR6,$DJNZR5,LOOP1RETDLY1S:MOVR5,#0AHLOOP:MOVR6,#0FFHDJNZR6,$DJNZR5,LOOPRET;========字形码表========TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 共阳段码表 "0""1""2" "3""4""5""6""7" "8""9"END
计分功能实现了,又加进了交换场地功能.
交换场地实现了,又加进了发球权的自动判断.
发球权判断实现了,又想加进一局输赢比分的自动判断.
输赢判断实现了,又想加进大局比分的自动加1.
唉,这个程序,越编越复杂了.
唉,数学功底太次,没办法,为了这个程序,吃睡不香的日子,还得过一阵子了.
4. 仿真测试
终于把程序写完了.完美收工.仿真测试,一是自动,二是无误.呵呵,高兴至极.
|