Re: [問題] 8051 按鈕控制問題
#define CRYSTALFREQ 12000000
#define INSFREQ (CRYSTALFREQ/12)
#define TIMERFREQ (CRYSTALFREQ/12)
#define _BASETICK 1000
#define __FREQBASE__ (65536-((TIMERFREQ/_BASETICK)-10))
#define __VTH (__FREQBASE__/256)
#define __VTL (__FREQBASE__%256)
#define intINT0 0
#define intT0 1
#define intINT1 2
#define intT1 3
#define intUART1 4
#define intUART 4
#define intINT2 6
sbit out=P0^0;
sbit Key1=P1^0;
sbit Key2=P2^1;
unsigned long acttimer;
unsigned char key1cnt;
unsigned char key2cnt;
bit hold;
bit vout;
void _T0ISR(void) interrupt intT0{
TR0=0;TH0=__VTH;TL0=__VTL;TR0=1;TF0=0;
if(acttimer>0){acttimer--;vout=1;} else {
vout=0;
}
out=~(vout|hold);//Inv Logic Fan Out
// out=vout|hold);//Fan Out
if((Key1==0)&&(key1cnt<250)){key1cnt++;}
if((Key2==0)&&(key2cnt<250)){key2cnt++;}
}
void main(void){
PCON|=0x80;TMOD=0x21;TCON=0;TH0=__VTH;TL0=__VTL;IE=0x82;TCON=0x50;
acttimer=0;key1cnt=0;key2cnt0=;hold=0;vout=0;
do{
if(Key1){
if(key1cnt>50){
if((acttimer>0)||hold){acttimer=0;hold=0;}else{
if((Key2==0)&&(key2cnt>20)){hold=1;}else{
acttimer=200;
}
}
}
key1cnt=0;
}
if(Key2){
// if(key2cnt>50){
// }
key2cnt=0;
}
}while(1);
}
※ 引述《victim0130 (Maxwell)》之銘言:
: 各位版大們好,小弟最近在自學8051,
: 有一些地方不太知道該怎麼寫,
: 目前小弟想要做到的功能是:
: 有兩個按鍵,按鍵1按下去後,輸出1會ON(停滯200ms),
: 然後這時候偵測按鍵二是否有按下去,
: 如果按鍵二也按下去,則輸出1會一直ON的狀態,
: 假設按鍵二沒按下去,則輸出1就會off。
: 上面的功能都算是有寫出來,
: 不過,小弟還差一個功能沒寫出來,
: 如果在輸出1一直ON的狀態的時候,按鍵1又按下去,
: 則輸出1會變成off的狀態,若此時再按按鍵1,
: 又會回復到上面的狀態,偵測按鍵二是否有按下去,
: 若有則呈現on的狀態,若沒有則off。
--
~~於是,銀河的歷史又被海賊抹黑了好幾百頁。
- A23203 -
BM4GRM Harlock WolfLord
★ <<上站通知>> -- 我來啦!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.253.163.98
推
08/23 23:36, , 1F
08/23 23:36, 1F
→
08/23 23:37, , 2F
08/23 23:37, 2F
→
08/24 01:18, , 3F
08/24 01:18, 3F
(自刪破碎推文)還是不要用推的好了...
我討厭捲頁,相同區段功能的東西寫一行也無損可讀性。這篇我是故意不寫註釋的,
這樣收碼的人真的想懂才會讀碼。不讀碼就只能得到功能,老師一問必倒無疑。
To ksmrt:
1.自1995之後一向都是我面試別人....:P
2.我很喜歡大量使用Macro,這樣移轉硬體平台時比較好改。
3.我的CODEING STYLE是BASE ON 80COL/65LINE,用方格紙寫作時代養成的,請多多包
涵(逃)
==
補充一下剛剛忘記貼上來的Base Define
※ 編輯: WolfLord 來自: 111.246.234.74 (08/24 01:51)
→
08/24 02:14, , 4F
08/24 02:14, 4F
→
08/24 02:15, , 5F
08/24 02:15, 5F
→
08/24 02:27, , 6F
08/24 02:27, 6F
→
08/24 02:28, , 7F
08/24 02:28, 7F
→
08/24 02:32, , 8F
08/24 02:32, 8F
→
08/24 02:33, , 9F
08/24 02:33, 9F
→
08/24 02:33, , 10F
08/24 02:33, 10F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章