|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教鍵盤(pán)掃描程序,謝謝! |
| 作者:wjun 欄目:單片機(jī) |
keymark bit 00h key: mov p1,#0fh mov a,p1 anl a,#0fh cjne a,#0fh,key1 ajmp key3 key1: acall delay mov a,#0efh key3: mov p1,a mov r1,a mov a,p1 anl a,#0fh cjne a,#0fh,kvalue mov a,r1 setb c rlc a jc key2 key3: clr keymark ret ;***************鍵值計(jì)算部分******************************* ;如何得到鍵值的?請(qǐng)各位大蝦指點(diǎn) kvalue: mov b,#0fbh ;置初值11111011???為何???? key4: rrc a inc b jc key4 mov a,r1 swap a key5: rrc a inc b inc b inc b inc b jc key5 key6: mov a,p1 ;等待按鍵的釋放 anl a,#0fh cjne a,#0fh,key6 setb keymark ;本次按鍵有效 ret ;返回,(B)=鍵值 |
| 2樓: | >>參與討論 |
| 作者: fengdream 于 2006/9/12 11:26:00 發(fā)布:
沒(méi)有消抖部分。 |
|
| 3樓: | >>參與討論 |
| 作者: wangkj 于 2006/9/12 13:59:00 發(fā)布:
c程序多簡(jiǎn)單,已經(jīng)nn年不用匯編了。 |
|
| 4樓: | >>參與討論 |
| 作者: lyjian 于 2006/9/12 18:21:00 發(fā)布:
懂單片機(jī)的人用匯編,不懂的人用C. |
|
| 5樓: | >>參與討論 |
| 作者: 西安周公 于 2006/9/12 18:31:00 發(fā)布:
搞小項(xiàng)目的人用匯編,搞大項(xiàng)目用的人用C 搞一個(gè) 64*64 元素的數(shù)組,累死你! |
|
| 6樓: | >>參與討論 |
| 作者: 平常人 于 2006/9/12 18:31:00 發(fā)布:
lyjian:你懂單片機(jī)嗎?知道匯編和C的區(qū)別嗎? “懂單片機(jī)的人用匯編,不懂的人用C.” 我還是第一次聽(tīng)到這種謬論。對(duì)這種一知半解的言論,不值得與你辯。 * - 本貼最后修改時(shí)間:2006-9-12 18:33:08 修改者:平常人 |
|
| 7樓: | >>參與討論 |
| 作者: conwh 于 2006/9/12 20:49:00 發(fā)布:
LZ把程序整理好,不僅是尊重別人,更主要是尊重自己。 |
|
| 8樓: | >>參與討論 |
| 作者: lyjian 于 2006/9/12 21:02:00 發(fā)布:
懂單片機(jī)和寫(xiě)程序是兩回事。 一個(gè)對(duì)單片機(jī)內(nèi)核一點(diǎn)都不了解的人,他也能用C寫(xiě)軟件,對(duì)這些人來(lái)說(shuō)寫(xiě)軟件和寫(xiě)文章沒(méi)太大的區(qū)別。一個(gè)不了解單片機(jī)內(nèi)核的人卻不可能用匯編來(lái)寫(xiě)程序。 |
|
| 9樓: | >>參與討論 |
| 作者: conwh 于 2006/9/12 21:28:00 發(fā)布:
匯編是社會(huì)派,C是學(xué)院派。 |
|
| 10樓: | >>參與討論 |
| 作者: 平常人 于 2006/9/12 21:38:00 發(fā)布:
懂單片機(jī)和寫(xiě)程序是兩回事,部分同意這個(gè)觀點(diǎn);但是。。。。 樓上的是否知道,有人不用匯編,全部用C寫(xiě)成單片機(jī)程序,請(qǐng)問(wèn)不懂單片機(jī)內(nèi)核的人能這樣做嗎? 用C語(yǔ)言寫(xiě)程序容易,用C語(yǔ)言寫(xiě)單片機(jī)程序不容易,沒(méi)有足夠的根底是做不到的。 兩一方面,當(dāng)年IBM PC的程序多數(shù)是用匯編寫(xiě)的,可并不是所有人都懂8088的內(nèi)部結(jié)構(gòu)。 請(qǐng)不要把懂不懂匯編、C、寫(xiě)程序和單片機(jī)割裂開(kāi),他們是相輔相成的一個(gè)整體,只有做到全面掌握才能用好單片機(jī)。 |
|
| 11樓: | >>參與討論 |
| 作者: wangkj 于 2006/9/12 22:15:00 發(fā)布:
讓大家看看我用C開(kāi)發(fā)的一個(gè)好玩的東西 鏡面顯示屏,我已經(jīng)貼過(guò)兩次了。這是一個(gè)實(shí)時(shí)系統(tǒng)。 我從93年就對(duì)單片機(jī)不用asm了,最開(kāi)始是PLM,然后單片機(jī)C語(yǔ)言出來(lái)以后才用的C. ASM 確實(shí)適合高實(shí)時(shí)的場(chǎng)合,不過(guò)這種場(chǎng)合我用FPGA.速度到ns級(jí), 單片機(jī)是不可能的。我真不知道在哪些場(chǎng)合必須用ASM。 估計(jì)知道PLM的沒(méi)幾個(gè)。 ../uploadfile/200705141507259931.jpg |
|
| 12樓: | >>參與討論 |
| 作者: wangkj 于 2006/9/12 22:17:00 發(fā)布:
我玩單片機(jī)最大的體會(huì)是不好找工作 工資還特低。 所以,單片機(jī)我只是偶爾玩玩。 |
|
| 13樓: | >>參與討論 |
| 作者: wangkj 于 2006/9/12 22:22:00 發(fā)布:
看看俺寫(xiě)的keypad程序,這不是公司的,所以貼出來(lái)了。 #include <rc500.h> #include <stdio.h> #include <keypad.h> #include <sound.h> const unsigned CHAR code KEYTAB[16][2]= {{0xee,'1'},{0xed,'2'},{0xeb,'3'},{0xe7,'a'}, {0xde,'4'},{0xdd,'5'},{0xdb,'6'},{0xd7,'b'}, {0xbe,'7'},{0xbd,'8'},{0xbb,'9'},{0xb7,'c'}, {0x7e,'.'},{0x7d,'0'},{0x7b,'.'},{0x77,'d'} }; /*------------------------------------------------------------------------------ -- 調(diào)用方式:unsigned CHAR GetKeyCh(void) 函數(shù)說(shuō)明:取鍵值 getCHAR from keypad return VALUE is press key [0..9,ABCD,)#] if return 0xff,then no key was pressed. -------------------------------------------------------------------------------- */ unsigned CHAR GetKeyCh(void) { unsigned CHAR i; unsigned CHAR i1,i2,ch,ScanCode; static unsigned CHAR OldScanCode=0xff; static unsigned int count; P2=0x70; P1_7=1; i1=P1&0x80; i1=i1|P2; P2=0x0f; P1_7=0; i2=P2; if ((i1|i2)!=0xff){ ScanCode=i1|i2; if (OldScanCode==ScanCode) //same key still pressed { return (0xff); } else //diff key pressed { OldScanCode=ScanCode; } } else //no key pressed { OldScanCode=0xff; // if (count<0x7000) count++; return(0xff); } for(i=0;i<16;){ if (KEYTAB[i][0]==ScanCode) { ch=KEYTAB[i][1]; OldScanCode=ScanCode; if (count>7000) { BeepKey(); count=0; return(ch); } } i++; } return(0xff); } |
|
| 14樓: | >>參與討論 |
| 作者: xwj 于 2006/9/12 22:23:00 發(fā)布:
呵呵,又拿來(lái)顯擺了? |
|
| 15樓: | >>參與討論 |
| 作者: conwh 于 2006/9/12 22:54:00 發(fā)布:
又回到老話題了 就這個(gè)問(wèn)題我也闡述一下觀點(diǎn):首先不反對(duì)C的運(yùn)用;2)不贊同否定ASM。 C的運(yùn)用確實(shí)是簡(jiǎn)化計(jì)算的過(guò)程,但由于代碼轉(zhuǎn)換效率較低,在實(shí)時(shí)系統(tǒng)中對(duì)于高速檢測(cè)和實(shí)時(shí)檢測(cè)以及簡(jiǎn)短計(jì)算,它的效率就明顯降低。而ASM則相反,由于單片機(jī)尤其是低位機(jī)一般廣泛應(yīng)用于控制和檢測(cè),一般的代碼都很小,這樣ASM就顯得比較重要一點(diǎn)(可以非常直接面對(duì)任務(wù))。 C是一種“隱”性語(yǔ)言,很多操作是看不見(jiàn)的,所以程序看起來(lái)是簡(jiǎn)練了,這也就是都喜歡C的原因,但它的內(nèi)部轉(zhuǎn)換(編譯)都是使用通用算法,所以其代碼率是比較低下的,這也是它的缺點(diǎn)。 ASM是一種“顯”性的語(yǔ)言,所有代碼都是直接編寫(xiě)的,所以看程序是比較沉長(zhǎng)的,讀起來(lái)是比較麻煩的,所以年輕人不愿意接近它。但它的代碼轉(zhuǎn)換效率是很高的,這也是它的優(yōu)點(diǎn)。不過(guò)現(xiàn)在也有模塊結(jié)構(gòu)的,編寫(xiě)是很簡(jiǎn)單的,大量的代碼也是“隱藏”起來(lái)的。在讀的方面也是很容易的。 總而言之,各有千秋。但結(jié)合單片機(jī)的應(yīng)用我個(gè)人感覺(jué)還是使用ASM還是比較好的。如果都想搞“高級(jí)”的,我看還是叫芯片廠家搞更大的MCU,用WIN多爽呀。 |
|
| 16樓: | >>參與討論 |
| 作者: yewuyi 于 2006/9/12 23:22:00 發(fā)布:
wangkj應(yīng)該就你那狀態(tài)轉(zhuǎn)移等多講解一些 ^^ |
|
| 17樓: | >>參與討論 |
| 作者: wangkj 于 2006/9/12 23:26:00 發(fā)布:
基本同意樓上的,不過(guò)結(jié)論不同 我覺(jué)得<3K的程序可以考慮用匯編,高于3K用C.有時(shí)候編譯器的效率很高。 最好是混合編程,關(guān)鍵用asm,大部分用C. 甚至有的神人直接用機(jī)器碼!!,我真服了。 還有,樓上的樓上的的簽名圖片挺漂亮,不知道那是誰(shuí)? 以前的的那個(gè)簽名圖片咋不用了? 還有,我的那個(gè)鏡子已經(jīng)碎了 :( 。 |
|
| 18樓: | >>參與討論 |
| 作者: hotpower 于 2006/9/12 23:51:00 發(fā)布:
哈哈~~~只要速度能滿足都一樣~~~ |
|
| 19樓: | >>參與討論 |
| 作者: shyygy 于 2006/9/13 9:05:00 發(fā)布:
~~~~~~~~~~~~~ 我個(gè)人覺(jué)得,不管白貓還是黑貓,只要能抓到老鼠就是好貓. |
|
| 20樓: | >>參與討論 |
| 作者: lyjian 于 2006/9/13 9:21:00 發(fā)布:
愛(ài)用那個(gè)用那個(gè)! 其實(shí)我只是說(shuō)說(shuō)個(gè)人的觀點(diǎn)而已。愛(ài)用那個(gè)用那個(gè),這是個(gè)人行為。 |
|
| 21樓: | >>參與討論 |
| 作者: 西安周公 于 2006/9/14 12:38:00 發(fā)布:
還真有用PLM的同人 我的意見(jiàn):簡(jiǎn)單的用匯編(代碼大小、效率高低看水平),復(fù)雜的用高級(jí)語(yǔ)言(PLM、C(支持浮點(diǎn))),現(xiàn)在的硬件很便宜,長(zhǎng)度不是大問(wèn)題。 |
|
| 22樓: | >>參與討論 |
| 作者: oywwen 于 2006/9/14 13:17:00 發(fā)布:
匯編與C都用 對(duì)程序速度要求很高時(shí)才用匯編 一般還是用C方便 如果有經(jīng)驗(yàn),編得好的話,也比匯編大不了多少 效率也是非常高的 也可以同時(shí)用兩種一起編,框架由C來(lái)完成,細(xì)節(jié)用匯編也不錯(cuò)的 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |