看板 ASM 關於我們 聯絡資訊
#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
victim0130:W大程式功力實在令人佩服...小弟還得思考箇中邏輯 08/23 23:36
victim0130:原本今天有用goto寫出來,但goto似乎不要常用比較好!? 08/23 23:37
ksmrt0123:真是恐怖的coding style... 面試八成被打槍吧 08/24 01:18
(自刪破碎推文)還是不要用推的好了... 我討厭捲頁,相同區段功能的東西寫一行也無損可讀性。這篇我是故意不寫註釋的, 這樣收碼的人真的想懂才會讀碼。不讀碼就只能得到功能,老師一問必倒無疑。 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)
victim0130:謝謝W大提供code...但的確要自己想過才會變成自己的! 08/24 02:14
victim0130:另想請問那寫法讓我感覺像是PIC的語法!?(疑惑中) 08/24 02:15
WolfLord:這不是PIC語法,這是ANSI C的STYTLE 08/24 02:27
WolfLord:不過那個bit 跟 sbit是Keil獨有的 08/24 02:28
victim0130:瞭解!因為之前看蠻多PIC範例程式有用W大Stytle 08/24 02:32
victim0130:原來是ANSI C...受教了!! bit & sbit部分是知道的 08/24 02:33
victim0130:謝W大解惑... !! 08/24 02:33