在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>匯編編程>

獨立按鍵控制程序分享

大小:0.11 MB 人氣: 2017-09-06 需要積分:0

1、獨立按鍵控制流水燈花樣

; 使用獨立按鍵K1,K2,K4,K4實現(xiàn)流水燈花樣變化
; P1.4? 開始按此鍵則燈開始流動(由左向右)?
;P1.5? 停止按此鍵則停止流動所有燈為滅?
; P1.6? 向左按此鍵則燈反向流動由右向左?
;1.7? 向右按此鍵則燈正向流動由左向右
UpDown EQU 00H ;上下行標(biāo)志
StartEnd EQU 01H ;起動及停止標(biāo)志
LAMPCODE EQU 21H ;存放流動的數(shù)據(jù)代碼
ORG 0000H
AJMP MAIN
ORG 30H
MAIN:
MOV SP,#5FH
MOV P0,#0FFH
CLR UpDown ;啟動時處于向上的狀態(tài)
CLR StartEnd ;啟動時處于停止?fàn)顟B(tài)
MOV LAMPCODE,#0FEH ;單燈流動的代碼?
LOOP:
ACALL KEY ;調(diào)用鍵盤程序
JNB F0,LNEXT ;如果無鍵按下,則繼續(xù)
ACALL KEYPROC ;否則調(diào)用鍵盤處理程序
LNEXT:
ACALL LAMP ;調(diào)用燈顯示程序
AJMP LOOP ;反復(fù)循環(huán),主程序到此結(jié)束
;---------------------------------------
DELAY:
MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
;----------------------------------------延時程序,鍵盤處理中調(diào)用
KEYPROC:
MOV A,B ;從B寄存器中獲取鍵值
JB ACC.4,KeyStart ;分析鍵的代碼,某位被按下,則該位為1(因為在鍵盤程序中已取反)
JB ACC.5,KeyOver
JB ACC.6,KeyUp
JB ACC.7,KeyDown
AJMP KEY_RET
KeyStart:
SETB StartEnd ;第一個鍵按下后的處理
AJMP KEY_RET
KeyOver:
CLR StartEnd ;第二個鍵按下后的處理
AJMP KEY_RET
KeyUp: SETB UpDown ;第三個鍵按下后的處理
AJMP KEY_RET
KeyDown:
CLR UpDown ;第四個鍵按下后的處理
KEY_RET:RET
KEY:
CLR F0 ;清F0,表示無鍵按下。
ORL P1,#11110000B ;將P1口的接有鍵的四位置1
MOV A,P1 ;取P3的值
ORL A,#00001111B ;將其余4位置1
CPL A ;取反
JZ K_RET ;如果為0則一定無鍵按下
ACALL DELAY ;否則延時去鍵抖
ORL P1,#11110000B
MOV A,P1
ORL A,#00001111B
CPL A
JZ K_RET
MOV B,A ;確實有鍵按下,將鍵值存入B中
SETB F0 ;設(shè)置有鍵按下的標(biāo)志
K_RET:?
ORL P1,#11110000B ;此處循環(huán)等待鍵的釋放
MOV A,P1
ORL A,#00001111B
CPL A
JZ K_RET1 ;直到讀取的數(shù)據(jù)取反后為0說明鍵釋放了,才從鍵盤處理程序中返回
AJMP K_RET
K_RET1:?
RET
;-----------------------------------?
D500MS: ;流水燈的延遲時間
PUSH PSW
SETB RS0
MOV R7,#200
D51: MOV R6,#250
D52: NOP
NOP
NOP
NOP
DJNZ R6,D52
DJNZ R7,D51
POP PSW
RET?
;-----------------------------------
LAMP:
JB StartEnd,LampStart ;如果StartEnd=1,則啟動
MOV P0,#0FFH
AJMP LAMPRET ;否則關(guān)閉所有顯示,返回
LampStart:
JB UpDown,LAMPUP ;如果UpDown=1,則向上流動
MOV A,LAMPCODE
RL A ;實際就是左移位而已
MOV LAMPCODE,A?
MOV P0,A
LCALL D500MS
AJMP LAMPRET
LAMPUP:
MOV A,LAMPCODE
RR A ;向下流動實際就是右移
MOV LAMPCODE,A
MOV P0,A
LCALL D500MS
LAMPRET:?
RET
END

2、去抖動獨立按鍵實驗

;按壓(P1.4),D00交替亮滅。按壓(P1.5),D01交替亮滅,加入去抖動功能
ORG 000H
AJMP START
ORG 30H
START: MOV SP,5FH
MOV P0,#0FFH
MOV P1,#0FFH
L1: JB P1.4,L2??????? ;P1.4為1,不做處理,轉(zhuǎn)P1.5,否則說明有鍵按下
LCALL D10MS?????????? ;調(diào)用延時程序,去除抖動
JB P1.4,L1??????????? ;p1.4為0,說明此鍵被按下了
CPL P0.0????????????? ;取反P0.0
L3: JNB P1.4,L3?????? ;直到P1.4釋放后去判斷第二個鍵
L2: JB P1.5,L1??????? ;P1.5為1,返回去繼續(xù)處理P1.4
LCALL D10MS?????????? ;調(diào)用延時程序,去除抖動
? JB P1.5,L2????????? ;p1.5為0,說明此鍵被按下了
? CPL P0.1??????????? ;取反P0.1
L4: JNB P1.5,L4?????? ;直到P1.5釋放為止
LJMP L1?????????????? ;返回
D10MS: MOV R7,#50???? ;延時的時間一般為5-20ms
???? D1:MOV R6,#100
???? D2:DJNZ R6,D2
???? DJNZ R7,D1
???? RET
?END

3、獨立按鍵實驗

;按壓(P1.4),D00交替亮滅。按壓K2(P1.5),D01交替亮滅
ORG 000H
AJMP START
ORG 30H
START: MOV SP,5FH
MOV P0,#0FFH
MOV P1,#0FFH
L1: JNB P1.4,L2????? ;按下按鍵開關(guān)K1,取反一次P0.0(燈亮),再按一下滅
JNB P1.5,L3????????? ;按下按鍵開關(guān)K2,取反一次P0.1(燈亮),再按一下滅
LJMP L1
L2: CPL P0.0
LJMP L1
L3: CPL P0.1
LJMP L1
END
?

4、直控按鍵演示

;按壓P1.4直控鍵盤按鈕流水燈減1,按壓P1.5直控鍵盤按鈕流水燈加11
CODE_SEG?SEGMENT?CODE
DATA_SEG?SEGMENT?DATA
STACK_SEG?SEGMENT?IDATA
?RSEG?DATA_SEG
KEY_S:?DS?1
KEY_V:?DS?1
?RSEG?STACK_SEG
STACK:?DS?20

K1?BIT?P1.4??;?
K2?BIT?P1.5??;

?CSEG?AT?0000H
?JMP?MAIN
;===============================================================================?
?RSEG?CODE_SEG
MAIN:
?MOV?SP,#(STACK-1)??; 設(shè)置棧指針
?MOV?P0,#0FEH??; 初始點亮LED P00
?MOV?KEY_V,#03H??; 初始鍵值
KEY_CHKSW:????; 循環(huán)檢測按鍵是否按下?????
?ACALL?SCAN_KEY??; 輸入按鍵狀態(tài)
?MOV?KEY_S,A
?XRL?A,KEY_V???; 檢查按鍵值是否改變
?JZ?KEY_CHKSW??; 若無鍵被按,則跳回KEY_CHKSW
?
?MOV?R7,#10???; 延時10ms
?ACALL?DELAYMS???; 延時去抖
?ACALL?SCAN_KEY??; 再次檢查按鍵值
?MOV?KEY_S,A
?XRL?A,KEY_V
?JZ?KEY_CHKSW
?
?MOV?KEY_V,KEY_S??; 保存按鍵狀態(tài)
?ACALL?PROC_KEY??;
?SJMP?KEY_CHKSW
;===============================================================================
SCAN_KEY:????
; 掃描按鍵
; 傳入參數(shù):無
; 返回值:A --- 按鍵狀態(tài)
?CLR?A
?MOV?C,K1
?MOV?ACC.0,C
?MOV?C,K2
?MOV?ACC.1,C
?RET
;===============================================================================?
PROC_KEY:
; 按鍵處理子程序
; 傳入?yún)?shù): KEY_V --- 按鍵值
; 返回值: 無
?MOV?A,KEY_V
?JNB?ACC.0,PROC_K1
?JNB?ACC.1,PROC_K2
?RET
?
PROC_K1:????; 按鍵K1處理程序
?MOV?A,P0???; 右移
?RR?A
?MOV?P0,A
?RET
?
PROC_K2:????; 按鍵K2處理程序
?MOV?A,P0???; 左移
?RL?A
?MOV?P0,A??
?RET
;===============================================================================?
DELAYMS:
; 延時子程序
; 傳入?yún)?shù):R7 --- 延時值(MS)?
; 返回值:無
?MOV?A,R7
?JZ?END_DLYMS?
DLY_LP1:
?MOV?R6,#185
DLY_LP2:
?NOP
?NOP
?NOP
?DJNZ?R6,DLY_LP2
?DJNZ?R7,DLY_LP1
END_DLYMS:
?RET?
?
; END OF DELAYMS
?
?END

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: china3p单男精品自拍 | 四虎影视入口 | 日日爽视频 | 成人免费国产gav视频在线 | 天天干天天拍天天射天天添天天爱 | 91青草视频| 亚洲福利视频一区二区 | 午夜美女写真福利写视频 | 国产一区二区三区乱码 | 红怡院欧洲 | 精品国产污污免费网站入口 | 天天爱添天天爱添天天爱添 | 日本三级免费看 | 淫五月| 日韩xx00 | 亚洲日本欧美日韩高观看 | freesexvideo性欧美tv | 高清人人天天夜夜曰狠狠狠狠 | 色天天网 | 成色网 | tube69xxxxhd日本 | 美女三级网站 | 91精品国产91久久久久久青草 | 日日夜夜狠狠干 | 免费看又爽又黄禁片视频1000 | 九九热精品在线 | 色婷婷5月精品久久久久 | 久久狠狠第一麻豆婷婷天天 | 久久久国产在线 | 三级网站在线免费观看 | 黄网在线观看免费 | 看片久久 | 人成网站在线观看 | 国产馆精品推荐在线观看 | hd性欧美| 女人大毛片一级毛片一 | 亚洲四虎永久在线播放 | 天天爽天天爽天天片a久久网 | 人人做人人爽久久久精品 | 一级片特黄 | 午夜免费片在线观看不卡 |