前一個單片機讀寫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.仿真測試
終于把程序寫完了.完美收工.仿真測試,一是自動,二是無誤.呵呵,高興至極.
5.實際制作
|