中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 按鍵實現(xiàn)加減運算及連續(xù)按鍵檢測

        按鍵實現(xiàn)加減運算及連續(xù)按鍵檢測

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

        *
        注意:如果無法在keil里編譯,請刪除每一行的所有前導空白
        程序效果:若0(即7EH)按下,則加1;若1(即7DH)按下,
        則減1;若2(即7BH)按下,則快加,若按鍵3(77H)按下,則快減。
        */
        ORG 0000H
        LJMP START
        ORG 0030H
        START: MOV 30H,#00 //賦初值
        MOV 31H,#00
        MOV 32H,#01

        LOOP1: MOV R2,#04 //循環(huán)四次
        MOV R1,#0FEH //分別為:0FEH ?FDH ?FBH ?F7H

        LOOP: MOV A,R1 //賦值,用于暫存A的值
        MOV P0,A //賦初值
        RL A //循環(huán)左移
        XCH A,R1 //暫存A的值
        MOV A,P0 //讀?P0口的值
        LCALL DELAY1 //延時

        CJNE A,#7EH,LOP1 //判斷是否有按鍵按下
        LCALL ADD1 //有,則加1
        LOP12: MOV A,P0 //以下語句是用于判斷按鍵是否松開
        LCALL DELAY1
        CJNE A,#7EH,LOP1
        LCALL DISPLAY
        SJMP LOP12

        LOP1: CJNE A,#7DH,LOP2
        LCALL SUB1
        LOP22: MOV A,P0
        LCALL DELAY1
        CJNE A,#7DH,LOP2
        LCALL DISPLAY
        SJMP LOP22

        LOP2: CJNE A,#7BH,LOP3 //判斷快加的按鍵按下
        MOV R3,#10 //按下了,下面的語句用于減慢數(shù)值變化速度
        LOP32: LCALL DISPLAY
        LCALL DELAY
        DJNZ R3,LOP32
        LCALL ADD1

        LOP3: CJNE A,#77H,LOP4
        MOV R4,#10
        LOP42: LCALL DISPLAY
        LCALL DELAY
        DJNZ R4,LOP42
        LCALL SUB1

        LOP4: DJNZ R2,LOOP
        LCALL DISPLAY
        LJMP LOOP1
        //顯示子程序
        DISPLAY: MOV DPTR,#TAB //賦表首地址
        MOV A,#0FFH
        MOV P1,A //點亮最右邊的數(shù)碼管
        XCH A,R0 //暫存A的值
        MOV A,30H //顯示個位數(shù)
        MOVC A,@A+DPTR
        MOV P2,A
        LCALL DELAY1 //延時
        DEC R0 //減1,用于點亮下一個數(shù)碼管,準備下次顯示
        XCH A,R0

        MOV P1,A
        XCH A,R0
        MOV A,31H
        MOVC A,@A+DPTR
        MOV P2,A
        LCALL DELAY1
        DEC R0
        XCH A,R0

        MOV P1,A
        XCH A,R0
        MOV A,32H
        MOVC A,@A+DPTR
        MOV P2,A
        LCALL DELAY1
        RET
        //加子程序
        ADD1: INC 30H //個位加1
        MOV A,30H //把30H的值賦給A
        CJNE A,#0AH,LAP //判斷個位是否加為10
        MOV 30H,#00 //是,則清零

        INC 31H
        MOV A,31H
        CJNE A,#0AH,LAP
        MOV 31H,#00

        INC 32H
        MOV A,32H
        CJNE A,#0AH,LAP
        MOV 32H,#00
        LAP: NOP //空指令
        RET //返回
        //減子程序
        SUB1: DEC 30H //個位減1
        MOV A,30H //把30H的值賦給A
        CJNE A,#0FFH,LSP //判斷30H的值為0后是否在減1
        MOV 30H,#09 //是,則給30H賦9

        DEC 31H
        MOV A,31H
        CJNE A,#0FFH,LSP
        MOV 31H,#09

        DEC 32H
        MOV A,32H
        CJNE A,#0FFH,LSP
        MOV 32H,#09

        LSP: NOP
        RET
        //延時子程序,時間大約為2us*20*200=8ms
        DELAY: MOV R6,#20
        DEL2: MOV R5,#200
        DEL3: DJNZ R5,DEL3
        DJNZ R6,DEL2
        RET
        //延時子程序,時間約為:2us*5*250=2.5ms
        DELAY1: MOV R6,#5
        DEL4: MOV R5,#250
        DEL5: DJNZ R5,DEL5
        DJNZ R6,DEL4
        RET
        TAB: DB 3FH,06H,5BH,4FH,66H ;數(shù)碼管顯示的數(shù)值
        DB 6DH,7DH,07H,7FH,6FH
        END
        注意:如果無法在keil里編譯,請刪除每一行的所有前導空白,



        評論


        相關推薦

        技術專區(qū)

        關閉