當前位置:首頁 » 編程軟體 » 單片機按鍵程序匯編程序

單片機按鍵程序匯編程序

發布時間: 2022-06-21 07:18:08

Ⅰ 51單片機匯編語言編程獨立按鍵

四個按鍵,定義如下:

KEY1 BIT P3.0
KEY2 BIT P3.1
KEY3 BIT P3.2
KEY4 BIT P3.3

按鍵處理程序:
;-----------------------------------
READ_KEY:

JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $

PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $

PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $

PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC

JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $

PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC

K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------

Ⅱ 單片機匯編語言鍵盤操作程序

//初始化
P1.6 = 0
P1.7 = 0

// 鍵盤掃描
P1.6 = 1
check (P2.0 - P2.7) , ouput (P16_20-P16_27 register)

P1.6 = 0
P1.7 = 1
check (P2.0 - P2.7), ouput (P17_20-P17_27 register)
P1.7 = 0

// LED顯示
check (P16_20-P16_27), set LED20-27
check (P17_20-P17_27), set LED20-27

Ⅲ 朋友們幫忙寫個51單片機的按鍵小程序匯編的

(1);P3.3小鍵盤按下P1.3亮再按0.5秒滅。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清標志
main:
mov c,p3.3 ;檢測按鍵
jc main
MOV R6,#200 ;設定延時
MOV R7,#200
TT0:
JNB 21H,TT2 ;檢測燈狀態
tt:
mov c,p3.3 ;檢測按鍵
jnc tt1

JNB 20H,MAIN ;檢測時間標志
CLR 20H
AJMP TT3
TT2:
mov c,p3.3 ;檢測按鍵
jnc tt2
TT3:
CPL 21H ;改變燈狀態
cpl p1.3
ajmp main
TT1: NOP ;延時但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)數碼管數據 p0,數碼管控制p2 獨立按鍵p1口 ,;對獨立鍵進行按鍵次數計數,三位數碼管顯示。 *
;K1按下後,進行加1計數 *
;K2按下後,進行減1計數。 *
;K3按下後,進行加5計數。 *
;K4按下後,清計數單元,數碼管顯示0。 *
;按住鍵可以快速計數。
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;顯示單元首地址
LED_DATA EQU P0 ;數碼管數據口定義
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1

KEY_PROG:
CALL K_SCAN ;鍵掃描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用顯示程序來進行鍵延時
CALL PLAY
DJNZ R4,KEY_P2

CALL K_SCAN ;再判斷鍵是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC.0,LOOP1 ;K1按下
JB ACC.1,LOOP2 ;K2按下
JB ACC.2,LOOP3 ;K3按下
JB ACC.3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;鍵計數加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;鍵計數減1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;鍵計數加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;鍵計數單元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代碼變換 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;個位存放在DISSTART
RET
;---------------------------------------------------------
; 鍵掃描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;獲得顯示單元首地址
MOV R1,#07FH ;從第一個數碼管開始
MOV R2,#03H ;共顯示3位數碼管
DISP1:
MOV A,@R0 ;獲得當前位地址
MOV DPTR,#TAB_NU ;獲得表頭
MOVC A,@A+DPTR ;查表獲得顯示數據
MOV LED_DATA,A ;顯示數據
MOV P2,R1 ;開始顯示當前位
MOV A,R1 ;准備顯示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一個單元地址
LCALL DELAY2MS ;延時 2 MS
DJNZ R2,DISP1 ;重復顯示下一個
MOV P2,#0FFH ;關閉顯示
RET ;顯示完成,返回
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代碼表
;**********************************************************
END

兩個例子我想夠你明白的了。詳細的解釋,代表性的例子,可慢慢學習

Ⅳ 求51單片機按鍵點燈匯編程序,按一下按鍵燈亮(一直亮),再按一下滅

;以下為一個按鍵控制一個燈的程序!!!
ORG 0000H
SETB P1.0
START:
JB P1.0,NEXT ;設按鍵為低電平有效。
JNB P1.0,$
CPL P3.0
NEXT:
SJMP START
END

Ⅳ 單片機 匯編語言如果要實現按鍵按下後連加或連減的效果,程序該怎麼編寫

匯編很久沒用過了,提供一下思路,供參考!
可採用計時的方式,檢測按鍵按下狀態超過2秒後,數據開始增大遞加遞減的步距(之前是每次加減1,增大後,每次加減10),松開按鍵後,計時器清零!
採用計次的方式也可以實現,按鍵後,數據遞加或遞減一次,延時300毫秒,再次檢測按鍵,未松開,繼續遞加,加滿5次後,開始增發遞加或遞減步距,松開按鍵後,計次清零!

Ⅵ 請教關於單片機按鍵掃描的匯編語言

這是一個典型的T掃電路,具體代碼我就不說了,我現在來說一下它的原理
掃描是一次把一個IO置0,其它的IO均為輸入狀態(51是准雙向IO,沒有輸入輸出概念,把輸出高當輸入即可)。比如說,現在是掃描P00,那麼把P00寫0,其它的IO寫1,然後把所有的IO讀取回來,把值賦給一個臨時變數用來判斷,eg key_buffer_temp =P0; 把掃描(寫0的相應)位強制性寫上1, 即
key_buffer_temp=key_buffer_temp|0x01;這時看這個key_buffer_temp的值,有沒有位是0的,即這個值是不是0xff,如果是0xff,則和P00接的按鍵都沒有按鍵。如果不是0xff,則有幾位是0就有幾個按鍵。這樣循環下去,一直掃到P06(不用掃P07)。
程序的注意點:
1掃描P00時,只看讀回來key_buffer_temp的位1--位7,掃描P01時,只看讀回來key_buffer_temp的位2--位7,……掃描P06時,只看讀回來key_buffer_temp的位7,不用掃描P07
2每掃描一個就判斷一次key_buffer_temp的值,一個個位來判斷,同時把計數加1,如果有按鍵則把計數的值賦給key_value0,key_value1……
3掃描結束後看key_value0,key_value1……裡面的值,有幾個就幾個按鍵
4比如說key_value0為1,key_value為10,那麼就是S1,和S10有按鍵

至於消抖,這一般的做法就是多采樣幾次

Ⅶ 單片機按鍵控制LED匯編程序

一鍵多功能按鍵識別技術 1.實驗任務 開關K1接在P3.2管腳上,在AT89S51單片機的P0.0埠接有1個發光二極體,上電的時候,L1接在P1.0管腳上的發光二極體在亮,當一次按下開關K1的時候,燈滅,再按一次,燈亮,如此輪流下去。 2.系統板上硬體連線 把「單片機系統」區域中的P3.2埠連接到「獨立式鍵盤」區域中的K1埠上;把P0.0連到L1上 3.程序設計方法 (1. 設計思想由來 在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因為每個人有不同的名子,我們就很快認出,同樣,對於要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的ID號標識,這樣,每按下一次按鍵,ID的值是不相同的,所以單片機就很容易識別不同功能的身份了。 (2. 設計方法 從上面的要求我們可以看出,L1到亮滅受開關K1來控制,我們給L1亮滅定義出不同的ID號,當L1在亮時,ID=0;當L1在滅時,ID=1;分別給出不同的ID號我們就能夠完成上面的任務了 4.匯編程序: ID EQU 30H K1 BIT P3.2 L1 BIT P0.0 ORG 0000H CLR P1.7 MOV ID,#00H START: JB K1,REL ;K1沒閉合轉 LCALL DELAY10MS ;K1閉合,延時消抖動 JB K1,REL :再判斷 INC ID MOV A,ID CJNE A,#02,REL MOV ID,#00H REL: JNB K1,$ ;等待開關彈起 MOV A,ID CJNE A,#00H,IS0 ;判斷相應ID CLR L1 :ID=0,燈亮 LCALL DELAY光 ;延時 SJMP START IS0: CJNE A,#01H,START; SETB L1 LCALL DELAY SJMP START DELAY10MS: MOV R6,#20 ;延時10MS子程序 LOOP1: MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET DELAY: MOV R5,#20 ;延時20MS子程序 LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2 RET END
請採納答案,支持我一下。

Ⅷ 51單片機匯編語言按鍵如何編程

編程時,要把整個程序,分解成一個一個模塊。
一個模塊,只包括一個功能。
那麼,KEY 模塊:
讀出按鍵、消除抖動、讀取鍵值,返回鍵值。
鍵值包括:00H、08H... 20H,FFH(無鍵)。
這個 KEY 模塊,到這就完了。
按鍵如何處理,則是另外的模塊。
樓主流程圖,包羅萬象,好像是個主程序。不好弄。

Ⅸ 求AT89C51 單片機的按鈕長按2秒的匯編程序!

loop: lcall key ;無鍵按下
jz loop ;
cjne a,#16,loop_next1 ;看看是否是需要的鍵值,不是就跳走,是就繼續
setb flag_2s ;啟動定時器2秒定時開始
mov 1dh,#0 ;2秒寄存器清0
loop_2: lcall read_data ;等待期間可以做些其他的事
lcall nibtd_ymd ;等待期間可以做些其他的事
lcall nibtd_hms ;等待期間可以做些其他的事
lcall nibtd_run ;等待期間可以做些其他的事
lcall key ;掃描鍵盤
jz loop ;無鍵按下跳走
cjne a,#16,loop ;有鍵按下 看看是否是需要的鍵值
jb flag_2s,loop_2 ;還沒按住保持2秒,繼續等待
loop_1: 2秒已到,繼續

Ⅹ 單片機按鍵控制點陣顯示 匯編程序

你是說在
P1.0

P3.0
之間連上一個開關嗎?
-----------------------------
MOV
C,
P1.0
MOV
P3.0,
C
上述兩句即可把P1.0的信號傳送到P3.0。
MOV
C,
P3.0
MOV
P1.0,
C
上述兩句即可把P3.0的信號傳送到P1.0。

熱點內容
滑鼠如何編程 發布:2025-05-16 02:29:09 瀏覽:814
安卓70能用什麼軟體 發布:2025-05-16 01:45:09 瀏覽:480
編程發展史 發布:2025-05-16 01:38:52 瀏覽:528
android圖片氣泡 發布:2025-05-16 01:38:40 瀏覽:885
文件加密編輯器下載 發布:2025-05-16 01:30:41 瀏覽:343
linuxapacheyum安裝 發布:2025-05-16 01:30:31 瀏覽:476
大連賓利浴池wifi密碼是多少 發布:2025-05-16 01:25:36 瀏覽:172
緩存數據生產服務 發布:2025-05-16 01:08:58 瀏覽:585
普通電腦伺服器圖片 發布:2025-05-16 01:04:02 瀏覽:971
伺服器地址和埠如何區分 發布:2025-05-16 01:03:17 瀏覽:834