<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 鍵盤(pán)接口程序設(shè)計(jì)之加減運(yùn)算

          鍵盤(pán)接口程序設(shè)計(jì)之加減運(yùn)算

          作者: 時(shí)間:2012-11-10 來(lái)源:網(wǎng)絡(luò) 收藏

          /*
          程序效果:1、開(kāi)機(jī)時(shí)顯示899
          2、按鍵key0一次數(shù)字加1,按鍵key1一次數(shù)字減1。
          加到999時(shí)再加1歸零,減到000時(shí)再減1得999。
          3、按住鍵key2不放實(shí)現(xiàn)連加功能,前3s每0.2s加1,以后每0.1s加1.
          4、按住鍵key3不放實(shí)現(xiàn)連減功能,前3s每0.2s減1,以后每0.1s減1.
          5、版權(quán)所有:http://www.51hei.com/ 轉(zhuǎn)帖須保留
          */
          ORG 0000H
          LJMP START
          ORG 0013H //1
          LJMP IN1
          ORG 0030H
          START:SETB IT1 //設(shè)置為下降沿觸發(fā)
          SETB EX1 //打開(kāi)1
          SETB EA //開(kāi)總中斷
          MOV 30H,#09 //賦初值
          MOV 31H,#09
          MOV 32H,#08
          LOOP: LCALL DISPLAY //調(diào)用顯示子程序
          SJMP LOOP

          IN1: LCALL DISPLAY
          LCALL DISPLAY
          LCALL DELAY1
          JB P3.3,LA0P //其實(shí)這三條語(yǔ)句就是
          LJMP LA0P1 //JB P3.3 LOOP1
          LA0P: LJMP LOOP1 //只是跳轉(zhuǎn)距離沒(méi)有那么大
          LA0P1: JNB P3.4 ,KEY0 //KEY0按下,轉(zhuǎn)key0,

          //沒(méi)有則,執(zhí)行下面的語(yǔ)句
          JNB P3.5,KEY1
          JNB P3.6,KEY2
          JNB P3.7,KEY3
          LOOP3: JNB P3.3,LOOP2 //等待P3.3為高
          LCALL DISPLAY //為高,調(diào)用現(xiàn)實(shí)子程序
          LCALL DISPLAY
          LCALL DELAY1 //延時(shí)12ms
          JNB P3.3,LOOP3 //P3.3為低,繼續(xù)等待
          LJMP LOOP1 //P3.3為高,結(jié)束
          LOOP2: LCALL DISPLAY
          LJMP LOOP3

          KEY0: LCALL ADD1 //KEY0按下,加1
          LJMP LOOP3
          KEY1: LCALL SUB1 //KEY1按下,加1
          LJMP LOOP3

          KEY2: MOV R2,#15
          LAP2: MOV R1,#33

          LCALL ADD1
          LAP1: LCALL DISPLAY // 循環(huán)完33次約為0.2s
          JB P3.3,LAP4 // 33*6ms
          DJNZ R1,LAP1 //
          DJNZ R2,LAP2 //外循環(huán)結(jié)束,需3s
          //
          LAP5: MOV R1,#16
          LCALL ADD1
          LAP6: LCALL DISPLAY // 循環(huán)完16次,需0.1s
          JB P3.3,LAP7 // 16*6ms
          DJNZ R1, LAP6 //
          LJMP LAP5 //快速加1

          LAP7: LCALL DISPLAY //P3.3為高,調(diào)用顯示子程序
          LCALL DELAY1
          JNB P3.3,LAP6 //P3.3為低,繼續(xù)快速加1
          LJMP LOOP1 //為高,結(jié)束

          LAP4: LCALL DISPLAY
          LCALL DISPLAY
          LCALL DELAY1
          JNB P3.3,LAP1 //為低,重新循環(huán)
          LJMP LOOP1 //為高,結(jié)束

          KEY3: MOV R2,#15 //以下功能同KEY2
          LSP2: MOV R1,#33

          LCALL SUB1
          LSP1: LCALL DISPLAY
          JB P3.3,LSP4
          DJNZ R1,LSP1
          DJNZ R2,LSP2

          MOV R1,#16
          LCALL SUB1
          LSP5: LCALL DISPLAY
          JB P3.3,LSP6
          DJNZ R1, LSP5
          LJMP key3

          LSP6: LCALL DISPLAY
          LCALL DELAY1
          JNB P3.3,LSP5
          LJMP LOOP1


          LSP4: LCALL DISPLAY
          LCALL DISPLAY
          LCALL DELAY1
          JNB P3.3,LSP1

          LOOP1: NOP //空指令
          RETI //返回


          DISPLAY:MOV DPTR,#TAB //顯示沒(méi)有問(wèn)題了
          MOV A,#0FBH //賦初值
          MOV P2,A //點(diǎn)亮第四個(gè)數(shù)碼管
          XCH A,R0 //暫存A的值
          MOV A,32H
          MOVC A,@A+DPTR
          MOV P0,A //顯示個(gè)位數(shù)
          LCALL DELAY //延時(shí)
          XCH A,R0
          RL A //循環(huán)右移,為下次做準(zhǔn)備

          MOV P2,A
          XCH A,R0
          MOV A,31H
          MOVC A,@A+DPTR
          MOV P0,A
          LCALL DELAY
          XCH A,R0
          RL A

          MOV P2,A
          MOV A,30H
          MOVC A,@A+DPTR
          MOV P0,A
          LCALL DELAY
          RET

          ADD1: INC 30H //加1子程序
          MOV A,30H
          CJNE A,#10,LOP1 //判斷個(gè)位是否滿10
          MOV 30H,#00 //是,則清零
          INC 31H //同時(shí)十位加1
          MOV A,31H
          CJNE A,#10,LOP1 //判斷十位是否滿10
          MOV 31H,#00 //是,則清零
          INC 32H //同時(shí)百位加1
          MOV A,32H
          CJNE A,#10,LOP1 //判斷百位是否滿10
          MOV 32H,#00 //是,則清零
          LOP1: NOP //空指令
          RET //返回

          SUB1: DEC 30H //減1子程序
          MOV A,30H
          CJNE A,#0FFH,LOP2 //判斷是否減過(guò)0
          MOV 30H,#09 //是,則賦9
          DEC 31H
          MOV A,31H
          CJNE A,#0FFH,LOP2
          MOV 31H,#09
          DEC 32H
          MOV A,32H
          CJNE A,#0FFH,LOP2
          MOV 32H,#09
          LOP2: NOP
          RET

          TAB: DB 3FH,06H,5BH,4FH,66H ;數(shù)碼管顯示的數(shù)值
          DB 6DH,7DH,07H,7FH,6FH
          DELAY: MOV R7,#4 //延時(shí)時(shí)間約為:2MS
          DEL2: MOV R6,#250
          DEL1: DJNZ R6,DEL1
          DJNZ R7,DEL2
          RET
          DELAY1: MOV R7,#24 //延時(shí)時(shí)間約為:12MS
          DEL3: MOV R6,#250
          DEL4: DJNZ R6,DEL4
          DJNZ R7,DEL3
          RET
          END



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();