在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 鍵盤接口程序設(shè)計之加減運算

            鍵盤接口程序設(shè)計之加減運算

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

            /*
            程序效果:1、開機時顯示899
            2、按鍵key0一次數(shù)字加1,按鍵key1一次數(shù)字減1。
            加到999時再加1歸零,減到000時再減1得999。
            3、按住鍵key2不放實現(xiàn)連加功能,前3s每0.2s加1,以后每0.1s加1.
            4、按住鍵key3不放實現(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 //打開1
            SETB EA //開總中斷
            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 //其實這三條語句就是
            LJMP LA0P1 //JB P3.3 LOOP1
            LA0P: LJMP LOOP1 //只是跳轉(zhuǎn)距離沒有那么大
            LA0P1: JNB P3.4 ,KEY0 //KEY0按下,轉(zhuǎn)key0,

            //沒有則,執(zhí)行下面的語句
            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)實子程序
            LCALL DISPLAY
            LCALL DELAY1 //延時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 //顯示沒有問題了
            MOV A,#0FBH //賦初值
            MOV P2,A //點亮第四個數(shù)碼管
            XCH A,R0 //暫存A的值
            MOV A,32H
            MOVC A,@A+DPTR
            MOV P0,A //顯示個位數(shù)
            LCALL DELAY //延時
            XCH A,R0
            RL A //循環(huá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 //判斷個位是否滿10
            MOV 30H,#00 //是,則清零
            INC 31H //同時十位加1
            MOV A,31H
            CJNE A,#10,LOP1 //判斷十位是否滿10
            MOV 31H,#00 //是,則清零
            INC 32H //同時百位加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 //判斷是否減過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 //延時時間約為:2MS
            DEL2: MOV R6,#250
            DEL1: DJNZ R6,DEL1
            DJNZ R7,DEL2
            RET
            DELAY1: MOV R7,#24 //延時時間約為:12MS
            DEL3: MOV R6,#250
            DEL4: DJNZ R6,DEL4
            DJNZ R7,DEL3
            RET
            END



            評論


            相關(guān)推薦

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

            關(guān)閉