@第一次在這裡寫部落格呀~~我也是最近才學微控制器的
問題描述:用p2口控制8個led,實現跑馬燈程式,用軟體延時實現1秒的掃瞄週期。
按鍵k1(p3.0)、k2(p3.1)作為輸入。
k1(p3.1)作為跑馬燈的啟停控制,鬆開時跑馬燈執行,按下時跑馬燈熄滅;
k2(p3.0)作為跑馬燈的方式選擇,鬆開時跑馬燈左移,按下時跑馬燈右移。
晶體振盪器頻率為12mhz
flag equ r7 ;標誌位,用於跳過右移結束時多餘的延時org 0000h
ajmp begin
org 0100h
begin:
mov p3,#0ffh ;p3口置1
mov a,#0feh
mov r7,#0
loop:
mov p2,a ;左移
rl a
cjne flag,#0,flag2 ;k2鬆開時可以不停留一秒直接轉到下乙個燈亮
flag1:
acall delay
flag2:
mov flag,#0
mov r0,a
mov a,p3 ;讀入鍵盤狀態
cjne a,#0ffh,loop1 ;判斷是否有按鍵按下 cjne比較不等跳
mov a,r0
jmp loop ;沒有按鍵按下則等待
loop1: ;消除按鍵抖動
acall delay_20 ;延時去抖
mov a,p3 ;重新讀入鍵盤狀態
cjne a,#0ffh,loop2 ;非誤讀則跳轉
ljmp loop ; 誤讀情況,繼續等待
loop2:
mov a,r0 ;用於k1按下之後恢復原來狀態
rr a
jnb p3.1,k1 ;k1按下跳轉至k1
jnb p3.0,k2 ;k2按下跳轉至k2
ljmp begin
k1:mov p2,#0ffh
jnb p3.1,$ ;按下則保持原理狀態(即熄滅)
ljmp loop
k2:rr a ;右移一位
mov p2,a
acall delay
jnb p3.0,k2 ;按下則繼續右移
mov flag,#1
ljmp loop ;不按下時繼續左移
delay_20: ;9ms延時,去抖時用mov r1,#9
lp1:acall de1
djnz r1,lp1
retde1:
mov r5,#250
de2:
nopnop
djnz r5,de2
ret
delay: ;1秒延時mov r1,#250
de5:
acall de3
acall de3
acall de3
acall de3
djnz r1,de5
retde3:
mov r5,#250
de4:
nopnop
djnz r5,de4
ret
end
中斷 按鍵控制LED燈
xjp的資源 初始化函式 init.c 進行一些初始化 include s3c24xx.h led1,led2,led4對應gpf4 gpf5 gpf6 define gpf4 out 1 define gpf5 out 1 define gpf6 out 1 define gpf4 msk 3 d...
Mixly按鍵控制LED燈
include include rfid rfid 10,5 unsigned char rc size unsigned char blockaddr 選擇操作的塊位址0 63 unsigned char i,tmp unsigned char status unsigned char str m...
Mixly按鍵控制LED燈
mixly按鍵控制led燈 實驗條件 膝上型電腦一台,硬體 arduino開發板,軟體 mixly 1 mixly圖形化程式設計 3 實驗效果圖 按下按鈕,燈亮 開關狀態laststate初始值為high,toggle 1 按一下按鈕,讀取目前開關的狀態,b1 low,toggle 0 b1!las...