|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教用C實現(xiàn)一個按鍵程序 |
| 作者:sukejia 欄目:單片機 |
我想請教高手,我想實現(xiàn)一個按鍵程序是這樣工作。當P1.0-P1.3上分別接4個按鍵,當我按下P1.0按鍵時為底電平時,同時對應(yīng)P0.0也為底電平,當松開P1.0按鍵時P0.0回到高電平,P1.1至P1.3同理。我的要求是不使用單片機的復(fù)位功能,用純程序方式怎么能實現(xiàn)那。那為高手能把程序?qū)懡o我看看呀。 |
| 2樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/19 21:23:00 發(fā)布:
難道沒有高手也不會嗎? 請高手幫幫忙說下思路也行 |
|
| 3樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/19 21:29:00 發(fā)布:
要是回此帖必會被定罪為灌水,自己在壇內(nèi)搜索吧 |
|
| 4樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/19 21:41:00 發(fā)布:
幫幫我! 我是初學(xué)者!不使用單片機復(fù)位功能,怎么可以實現(xiàn)呀,謝謝了。 把程序發(fā)到我油箱里也行,sukejia41@yahoo.com.cn 謝謝各位了 |
|
| 5樓: | >>參與討論 |
| 作者: jerry_21cn 于 2005/6/19 21:53:00 發(fā)布:
這兩個口賦給同一值行不行? LOW=P1^1; LOW=P0^0; 這樣行不行?試試? |
|
| 6樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/19 22:02:00 發(fā)布:
這里沒有會的嗎??? 這是我寫的程序但是當按鍵按下后就一直保持底電平了。 #include<AT89X51.H> #define uCHAR unsigned CHAR #define uint unsigned int void dlms(void); uCHAR kbscan(void); void main (void) { uCHAR key; while(1) { key=kbscan(); dlms(); } } void dlms(void) { uint i; for(i=200;i>0;i--){} } uCHAR kbscan(void) { uCHAR a,b,c,d; P1=0xf0; if((P1&0xf0)!=0xf0) { dlms(); if((P1&0xf0)!=0xf0); { a=0xfe; while((a&0x10)!=0) { P1=a; if((P1&0xf0)!=0xf0) { b=(P1&0xf0)|0x0f; c=((~a)+(~b)); SWITCH(c)///////////關(guān)鍵是這個地方怎么該別??謝謝 { case 0x11://////// P0_0=0;///////// break; default:///////// //P1_7=0;//////// break;///////// } } else a=(a<<1)|0x01; } } } return(0); } |
|
| 7樓: | >>參與討論 |
| 作者: baipengwei 于 2005/6/20 9:30:00 發(fā)布:
我也是新手、、、 if ( input1==0 ) outputtemp1 = 0x010 ; if ( input1==0 ) outputtemp2 = 0x020 ; if ( input1==0 ) outputtemp3 = 0x040 ; if ( input1==0 ) outputtemp4 = 0x080 ; temp1 = outputtemp1 + outputtemp2 + outputtemp3 +outputtemp4 ;} temp2 = temp1 & 0x0f0 ; P1= temp2 ; 把上面的修改一下。 #define uCHAR unsigned CHAR #define uint unsigned int 這兩行的干嗎的呢 |
|
| 8樓: | >>參與討論 |
| 作者: zyncn 于 2005/6/20 9:52:00 發(fā)布:
1 直接輪詢每一個鍵,(如果鍵按下就調(diào)用延時去抖), 讓P0^0=P1^0; |
|
| 9樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 13:18:00 發(fā)布:
真暈 #include <AT89X51.H> void KEYBOARD(void) { P0_0=P1_0; P0_1=P1_1; P0_2=P1_2; P0_3=P1_3; } void main(void) { while(1) { KEYBOARD(); } } |
|
| 10樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/20 20:15:00 發(fā)布:
哈哈,太精練了!!! 可這樣的程序又能用在何處??? 我建議computer00讓樓主干脆將鍵和LED連在一起---程序都不用編,按鍵就亮燈... 省得編程序鬧心... |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 21:24:00 發(fā)布:
誰說這樣就不能用了呀, #include <AT89X51.H> void KEYBOARD(void) { P0_0=P1_0; P0_1=P1_1; P0_2=P1_2; P0_3=P1_3; //可以添加其它鍵盤掃描部分。用全局變量保存按鍵 //每次掃描得到的鍵值跟上一次的比較。可利用顯示 //部分的20mS做鍵盤去抖,長按鍵處理等等了…… } void DISPLAY(void) { //顯示處理,比如動態(tài)掃描數(shù)碼管,處理時間為20mS } void deal_key(void) { //按鍵處理 } void main(void) { while(1) { KEYBOARD(); deal_key(); DISPLAY(); } } 這樣不能用嗎?而且樓主本來的要求就是那樣嘛,我是現(xiàn)實主義派, 所以他要求什么,我就給他寫什么了。 如果主程序不方便循環(huán)處理按鍵的話,我干脆給他開個定時器, 每10mS掃描一次鍵盤。 |
|
| 12樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/20 21:30:00 發(fā)布:
沒看我拍案叫絕嗎??? 不過 P0_0=P1_0; P0_1=P1_1; P0_2=P1_2; P0_3=P1_3; 就是"短連線",這個該沒錯吧... |
|
| 13樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/20 21:50:00 發(fā)布:
多謝各位的意見 呵呵 我只是一個設(shè)想但一開始沒想出來,用這個程序可以用帶鎖鍵盤控制多個設(shè)備的工作。 |
|
| 14樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 22:02:00 發(fā)布:
果然被hotpower猜中,這次真的要叫他去掉單片機了…… 呵呵 我只是一個設(shè)想但一開始沒想出來,用這個程序可以用帶鎖鍵盤控制多個設(shè)備的工作。 用帶鎖鍵盤來控制多個設(shè)備的工作,這都要用單片機來處理? 直接通不是更好?搞個單片機,到后邊還要加繼電器什么的, 麻煩得要死。 看來這個社會,單片機真的是越來越重要了…… |
|
| 15樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 22:04:00 發(fā)布:
哦……原來是個誤會^_^ 我還以為你又拍了我一磚…… * - 本貼最后修改時間:2005-6-20 22:05:23 修改者:computer00 |
|
| 16樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/20 22:43:00 發(fā)布:
疑問? P0_0=P1_0; P0_1=P1_1; P0_2=P1_2; P0_3=P1_3; 這種方式是可以實現(xiàn)我實驗了,但是這樣要用浪費兩個按鍵,假設(shè)按下KEY1為P0_0為底電平了,還需要在按KEY2鍵才能使P0_0回到高電平,如果我只用一個不帶鎖的KEY1鍵按一下為底在按一下為高,程序該如何??? |
|
| 17樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 22:54:00 發(fā)布:
怎么會浪費按扭呢? 你按下P10,那P00就輸出低。你放開P10,那么P00輸出就為高了。 如果要使用不帶鎖的,可以用取反的方法。 if(!P1_0)P0_0=!P0_0; //P0口要有上拉,且負載不重,要能讀回高電平。否則就能這樣用了,要用臨時變量 其它的以此類推。 消抖處理就你自己做了,不管用硬件或者軟件消抖。 不能再說了,再說就變成灌水王了。。。。。。 |
|
| 18樓: | >>參與討論 |
| 作者: sukejia 于 2005/6/20 23:01:00 發(fā)布:
不好意思我菜嗎 不好意思我菜嗎請computer00前輩諒解啊。 |
|
| 19樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/20 23:06:00 發(fā)布:
別怕,水王早已易主... 就算灌水,水王的罪名也該輪到我才是... 謝謝computer00繼續(xù)灌... |
|
| 20樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 23:20:00 發(fā)布:
汗顏…… 原來 水王 的位置早被 hotpower 霸了,剛剛有所冒犯,還望您老見諒哈。。。 我?guī)状味荚噲D想把hotpower翻譯成中文名,但是就是想不到一個貼切的中文名, 麻煩您能給個比較貼切的嗎?^_^ 熱的功率? |
|
| 21樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/20 23:26:00 發(fā)布:
熱水好聽些...請看本周灌水榜 21IC社區(qū) 本周灌水榜 名次 用戶 積分 1 chunyang 14240 2 hotpower 10922 3 a12345678 9259 4 maychang 8061 5 iC921 7921 6 xingyong 6616 7 zlgARM 6475 8 computer00 5946 9 HIGHWAY 5933 10 XIEYUANBIN 5876 哈哈...頭名才能稱之為"水王",我早成"水怪"了...汗顏呀...郁悶之極... |
|
| 22樓: | >>參與討論 |
| 作者: computer00 于 2005/6/20 23:31:00 發(fā)布:
不知道這個準不準的?而且也沒防偽標志?我也可以來個的 21IC社區(qū) 本周灌水榜 名次 用戶 積分 1 computer00 5946 2 chunyang 14240 3 hotpower 10922 4 a12345678 9259 5 maychang 8061 6 iC921 7921 7 xingyong 6616 8 zlgARM 6475 9 HIGHWAY 5933 10 XIEYUANBIN 5876 貨真價實,童叟無欺。 |
|
| 23樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/20 23:37:00 發(fā)布:
哈哈...21IC這些眼暈的網(wǎng)管賺錢不管事---"本周"何意??? 說實話,每帖幾分,一周灌上萬分??? 那他必是超級水王!!! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |