新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT89C2051在點鈔機外接顯示屏中的應用

        AT89C2051在點鈔機外接顯示屏中的應用

        作者: 時間:2016-11-29 來源:網絡 收藏

          SETB LED2 ;LED2十位顯示停

          MOV P1,LED01 ;讀百位段碼

          CLR LED1 ;LED1百位顯示

          MOV R31,#42

          ACALL DELAY2

          AJMP DIR0_0 ;不斷循環顯示,并等待中斷

          ;* =======================================================*

          ;計數復位時,點鈔機主程序會先給出一個復位信號,并持續一段時間,

          ;接著給出計數脈沖

          INT0_P32:

          PUSH ACC ;保護現場

          PUSH DPH

          PUSH DPL

          JB P1.0,INT0_01 ;當點鈔機

          MOV R31,#28

          ACALL DELAY2 ;延時1ms,去抖動

          JB P1.0,INT0_01

          SETB P1.0 ;清除復位信號

          MOV JSQ0,#0 ;復位信正確,計數單元清0

          MOV JSQ1,#0

          INT0_01:

          MOV A,JSQ1 ;低字節計數單元加1

          INC A

          MOV JSQ1,A

          JNZ INT0_02

          INC JSQ0 ;當有進位時,高字節單元加1

          INT0_02:

          ACALL HB2 ;將16進制數轉換為BCD碼

          ACALL THIF0 ;調用轉換顯示值子程序

          POP DPL ;恢復現場

          POP DPH

          POP ACC

          RETI ;中斷返回

          ;* =======================================================*

          ;* 雙字節十六進制整數轉換成雙字節BCD碼整數

          ;入口條件:待轉換的雙字節十六進制整數在R6、R7中。

          ;出口信息:轉換后的三字節BCD碼整數在R3、R4、R5中。

          ;影響資源:PSW、A、R2~R7堆棧需求: 2字節

          ;* =======================================================*

          HB2:

          MOV R6,JSQ0 ;高字節單元送入R6

          MOV R7,JSQ1 ;低字節單元送入R7

          CLR A ;BCD碼初始化

          MOV R3,A

          MOV R4,A

          MOV R5,A

          MOV R2,#10H ;轉換雙字節十六進制整數

          HB3:

          MOV A,R7 ;從高端移出待轉換數的一位到CY中

          RLC A

          MOV R7,A

          MOV A,R6

          RLC A

          MOV R6,A

          MOV A,R5 ;BCD碼帶進位自身相加,相當于乘2

          ADDC A,R5

          DA A ;十進制調整

          MOV R5,A

          MOV A,R4

          ADDC A,R4

          DA A

          MOV R4,A

          MOV A,R3

          ADDC A,R3

          MOV R3,A ;雙字節十六進制數的萬位數不超過6,不用調整

          DJNZ R2,HB3 ;處理完16bit

          RET

          ;* =======================================================*

          ;* 將BCD碼解壓后,轉換為十進制顯示符

          ;* =======================================================*

          THIF0: ;將壓縮BCD碼解壓(因最大數為999,所以[R3]=0)

          MOV A,R5 ;取數據

          ANL A,#0FH ;屏蔽高4位,取出低4位

          MOV 32H,A ;存個位

          MOV A,R5

          SWAP A ;交換

          ANL A,#0FH

          MOV 31H,A ;存十位

          MOV A,R4 ;取數據

          ANL A,#0FH ;屏蔽高4位,取出低4位

          MOV 30H,A ;存百位

          ;* 將BCD轉換為十進制顯示符

          MOV DPTR,#TABD ;置數碼表首址

          MOV R0,#30H ;置顯示數首址

          MOV R1,#LED01 ;置字段碼暫存器首址

          MOV R2,#03H ;置循環數

          THIF1:

          MOV A,@R0 ;取顯示數

          MOVC A,@A+DPTR ;讀字段碼

          MOV @R1,A ;存字段碼

          INC R0 ;修改顯示數地址

          INC R1 ;修改字段碼暫存器地址

          DJNZ R2,THIF1 ;判斷循環是否結束

          RET

          TABD:

          DB 81H,0EDH,43H,49H,2DH,19H ;共陽字段表,0~5顯示符

          DB 11H,0CDH,01H,09H ;6~9顯示符

          ;* =======================================================*

          ;* 延時子程序

          DELAY2:

          L2: PUSH R31

          L3: DJNZ R31,L3

          POP R31

          DJNZ R31,L2

          RET

          END

          ;* =======================================================*


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 九寨沟县| 清镇市| 鄂伦春自治旗| 陆丰市| 开封市| 玛曲县| 鄱阳县| 卓尼县| 鄂尔多斯市| 喀喇| 平远县| 建水县| 大竹县| 沽源县| 长春市| 东宁县| 曲阜市| 邵阳市| 通江县| 巩义市| 广水市| 邹城市| 启东市| 固阳县| 迭部县| 卓尼县| 金乡县| 五家渠市| 哈密市| 泰安市| 包头市| 礼泉县| 鄂尔多斯市| 东乌| 葫芦岛市| 丹巴县| 海晏县| 奈曼旗| 南汇区| 思南县| 思茅市|