欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機按鍵連按長按匯編程序
[打印本頁]
作者:
daniu
時間:
2014-12-27 18:16
標題:
單片機按鍵連按長按匯編程序
;===============================================================
;程序編寫人:蘭建文
;編寫地點:51hei培訓機構
;時間:6月7日下午 星期日
;功能:本程序實現P0口的對2個數碼管顯示0到99,一個按鍵實現一次
;按鍵只遞加1次,到99回到0,按著不動不影響數碼管動態顯示;任何時
;刻,任何一個按鍵,若按鍵連續按鍵3次,每次間隔時間不大于1秒,循
;環顯示0到9回到0。若間隔時間大于1秒,顯示加1,低電平亮
;P2口實現對數碼管的片選功能
;===============================================================
;==========================系統程序=============================
;=========================開始初始化============================
SHUCHU EQU P0 ;定義P0口為輸出口
PIANXUAN EQU P2 ;定義P2口為片選口
SHUZI EQU 30H ;設置處理數據存放地址
JIANBIT0 BIT 20H.0 ;設置按鍵標志位
XIAN0 BIT 20H.2 ;顯示標志位
T_BIT BIT 21H.0 ;設置中斷定時器0標志位
LIANAN BIT 20H.1 ;設置連按標志位
BIT4 BIT 20H.2
MODE EQU 01H
SHU EQU 40H
;========================程序開始==============================
ORG 00H ;程序開始
LJMP START ;跳到START
ORG 0BH ;中斷定時器0入口地址
JMP T0_1 ;跳到定時器0服務程序
ORG 0030H ;入口地址
;=========================主程序===============================
START:MOV SP,#60H ;移開指針
MOV SHUZI,#00 ;數據初始化
MOV DPTR,#TAB ;查表初始化
MOV P1,#0F8H ;設置P1.0口為輸入
CALL INIT ;開中斷
CLR JIANBIT0 ;按鍵標志位清0
CLR LIANAN ;連按標志位清0
CLR BIT4
SETB T_BIT ;中斷標志位置1
MOV SHU,#0
MOV R2,#0
MOV R3,#0
MOV R4,#0
MOV R5,#200
MAIN:JNB T_BIT,MAIN ;等待中斷
CLR T_BIT ;中斷標志位清0
JB BIT4,VV
INC R3
CJNE R3,#25,XX
MOV R3,#00
MOV R2,#0
JMP DD
XX:CJNE R2,#3,VV
SETB LIANAN
MOV R2,#00
DD:CLR BIT4
VV:JB LIANAN,XUNHUAN ;判斷是否有連按
CC:CALL JISUAN ;計算分離十位和個位
CALL DISPLAY ;顯示個位和十位
JNB JIANBIT0,PANDUAN;按鍵標志位=1判斷P1.3口,若為0則判斷按鍵是否抬起
JNB P1.3,XIANSHI0 ;若沒抬起(P1.3=0)則調到XIANSHI0
SETB BIT4
INC R2
MOV R3,#0
CLR JIANBIT0 ;按鍵標志位清0
CLR XIAN0 ;顯示標志位清0
JMP MAIN ;返回MAIN
PANDUAN:
JB P1.3,MAIN ;若按鍵抬起則返回MAIN,若沒有抬起按鍵標志位清0
SETB JIANBIT0
JMP MAIN
XIANSHI0:
JB XIAN0,MAIN
SETB XIAN0 ;顯示標志位清0
CALL JIACHULI ;加處理
JMP MAIN
XUNHUAN:
MOV A,SHU
CJNE A,#10,KKK
MOV SHU,#0
CLR LIANAN
MOV A,SHU
KKK: MOVC A,@A+DPTR ;查表
MOV SHUCHU,A
MOV PIANXUAN,#05
INC R4
CJNE R4,#50,OUTT
INC SHU
MOV R4,#0
OUTT:JMP MAIN
;====================定時中斷0服務子程序========================
;輸入:無
;輸出:無
;實現的功能:實現定時20MS,影響標志位T_BIT
;===============================================================
T0_1:MOV TMOD,#MODE ;定時器1工作方式1
MOV TL0,#0E0H ;設置定時初值
MOV TH0,#0B1H
SETB T_BIT ;定時標志位清0
RETI
;========================中斷設置子程序=========================
;輸入:無
;輸出:無
;實現的功能:初始化設置定時器,設置初值
;===============================================================
INIT:MOV TMOD,#MODE ;定時器0工作方式1
MOV TL0,#0E0H
MOV TH0,#0B1H
MOV IE,#82H ;開定時器中斷0
SETB TR0 ;開定時器0
RET
;========================計算子程序=============================
;輸入:30H
;輸出:"A和B"
;實現的功能:把30H的數據的十位和個位分離出來
;===============================================================
JISUAN:MOV A,SHUZI ;數據放在A中
MOV B,#10 ;除數放在B中
DIV AB ;商放在A中,余數放在B中
RET
;========================顯示子程序=============================
;輸入:"A"
;輸出:"P0口"
;實現的功能:把A的數輸出到P0口顯示,十位和個位分開顯示
;===============================================================
DISPLAY:MOVC A,@A+DPTR ;查表
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#04H ;片選
CALL DELAY ;查表
MOV SHUCHU,#0FFH ;關閉數碼管
MOV A,B
MOVC A,@A+DPTR ;查表
MOV SHUCHU,A ;顯示個位
MOV PIANXUAN,#05H ;片選
CALL DELAY ;延時
MOV SHUCHU,#0FFH ;關閉數碼管
RET
;======================加處理子程序=============================
;輸入:無
;輸出:無
;實現的功能:把30H地址加1
;===============================================================
JIACHULI:MOV A,SHUZI
CJNE A,#99,L0 ;若A不等于9,則跳到LL
MOV A,#00
JMP L1
L0:INC A ;自加一
L1:MOV SHUZI,A
RET
;========================延時程序===============================
;輸入;無
;輸出: 無
;實現的功能:延時一段時間
;===============================================================
DELAY:
MOV R6,#80
L7:MOV R7,#80
L8:DJNZ R7,L8
DJNZ R6,L7
RET
;=====================共陽查表數據==============================
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;=======================程序結束================================
END
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1