Re: [問題] 8051 按鈕控制問題

看板ASM作者 (呆呆小狼)時間10年前 (2013/08/23 21:59), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串2/3 (看更多)
#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
W大程式功力實在令人佩服...小弟還得思考箇中邏輯
08/23 23:36, 1F

08/23 23:37, , 2F
原本今天有用goto寫出來,但goto似乎不要常用比較好!?
08/23 23:37, 2F

08/24 01:18, , 3F
真是恐怖的coding style... 面試八成被打槍吧
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
謝謝W大提供code...但的確要自己想過才會變成自己的!
08/24 02:14, 4F

08/24 02:15, , 5F
另想請問那寫法讓我感覺像是PIC的語法!?(疑惑中)
08/24 02:15, 5F

08/24 02:27, , 6F
這不是PIC語法,這是ANSI C的STYTLE
08/24 02:27, 6F

08/24 02:28, , 7F
不過那個bit 跟 sbit是Keil獨有的
08/24 02:28, 7F

08/24 02:32, , 8F
瞭解!因為之前看蠻多PIC範例程式有用W大Stytle
08/24 02:32, 8F

08/24 02:33, , 9F
原來是ANSI C...受教了!! bit & sbit部分是知道的
08/24 02:33, 9F

08/24 02:33, , 10F
謝W大解惑... !!
08/24 02:33, 10F
文章代碼(AID): #1I5shPV1 (ASM)
文章代碼(AID): #1I5shPV1 (ASM)