版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
51系列微控制器實(shí)驗(yàn)及實(shí)踐教程PAGEPAGE351系列微控制器實(shí)驗(yàn)及實(shí)踐教程目錄實(shí)驗(yàn)及實(shí)踐課題┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅281.閃爍燈┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅282.模擬開(kāi)關(guān)燈┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅313.多路開(kāi)關(guān)狀態(tài)指示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅334.廣告燈的左移右移┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅375.廣告燈(利用取表方式)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅406.報(bào)警產(chǎn)生器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅437.I/O并行口直接驅(qū)動(dòng)LED顯示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅468.按鍵識(shí)別方法之一┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅499.一鍵多功能按鍵識(shí)別技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅5310.00-99計(jì)數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅5711.00-59秒計(jì)時(shí)器(利用軟件延時(shí))┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6012.可預(yù)置可逆4位計(jì)數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6313.動(dòng)態(tài)數(shù)碼顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6714.4×4矩陣式鍵盤(pán)識(shí)別技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅7015.定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(一)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅7916.定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(二)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅8417.99秒馬表設(shè)計(jì)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅8918.“嘀、嘀、……”報(bào)警聲┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅9519.“叮咚”門(mén)鈴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅9920.數(shù)字鐘(★)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅10521.拉幕式數(shù)碼顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅11422.電子琴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅12123.模擬計(jì)算器數(shù)字輸入及顯示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅13424.8×8LED點(diǎn)陣顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅14125.點(diǎn)陣LED“0-9”數(shù)字顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅26.點(diǎn)陣式LED簡(jiǎn)單圖形顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅15327.ADC0809A/D轉(zhuǎn)換器基本應(yīng)用技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅15728.數(shù)字電壓表┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅16329.兩點(diǎn)間溫度控制┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅16730.四位數(shù)數(shù)字溫度計(jì)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅17231.6位數(shù)顯頻率計(jì)數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅17732.電子密碼鎖設(shè)計(jì)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅18033.4×4鍵盤(pán)及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖┅┅┅┅┅┅┅┅┅┅┅18634.帶有存儲(chǔ)器功能的數(shù)字溫度計(jì)-DS1624技術(shù)應(yīng)用┅┅┅┅┅┅┅┅┅┅19935.DS18B20數(shù)字溫度計(jì)使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅211單片機(jī)學(xué)習(xí)準(zhǔn)備工作在你決定學(xué)習(xí)單片機(jī)之前,請(qǐng)做好如下準(zhǔn)備工作:硬件準(zhǔn)備:計(jì)算機(jī)一臺(tái)。編程器一只、89C51一片,實(shí)驗(yàn)板一塊,再準(zhǔn)備一只仿真機(jī),其它常規(guī)工具。如果你想學(xué)單片機(jī),而又不愿做這些投資,我勸你最好還是放棄,否則可能只會(huì)挫傷你學(xué)習(xí)的積極性和浪費(fèi)你的時(shí)間。好在這些投資并不算多。
學(xué)習(xí)方案:編程器+仿真器+試驗(yàn)板編程器:商品化的一般至少伍、六百以上。但現(xiàn)在網(wǎng)上有好多朋友都提供編程器的資料,如果你身邊有高手,不妨請(qǐng)他們幫助你做一個(gè)吧!不過(guò)幾十元的代價(jià)。如果沒(méi)有這個(gè)條件,我推薦你用可以串行燒寫(xiě)芯片(即芯片具有ISP功能),如STC系列的單片機(jī),價(jià)格便宜(不大于10元)。前言:?jiǎn)纹瑱C(jī)以其高可靠性、高性價(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn),近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng),數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表,及通訊設(shè)備、日常消費(fèi)類產(chǎn)品、玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個(gè)環(huán)節(jié)以及人民生活的各層次中,如車間流水線控制、自動(dòng)化系統(tǒng)等、智能型家用電器(冰箱、空調(diào)、彩電)等,無(wú)不含有CPU控制器,即單片機(jī)。為適應(yīng)目前人才緊缺的狀態(tài)、各大、中專院校、高職、技校等紛紛增加及擴(kuò)大的單片機(jī)教學(xué)的需要,著眼于培養(yǎng)單片機(jī)人才、單片機(jī)工程師。傳統(tǒng)的單片機(jī)教學(xué),均是以單片機(jī)的結(jié)構(gòu)為主線,先講單片機(jī)的硬件結(jié)構(gòu),然后是指令,然后是軟件編程,然后是單片機(jī)系統(tǒng)的擴(kuò)展和各種外圍器件的應(yīng)用,最后再講一些實(shí)例。按照此種教學(xué)結(jié)構(gòu),按照這種結(jié)構(gòu),學(xué)生普遍感到難學(xué)。試想,一個(gè)從未接觸過(guò)計(jì)算機(jī)結(jié)構(gòu)的人,甚至數(shù)字電路也是剛剛接觸的人,要他去理解單片機(jī)內(nèi)部結(jié)構(gòu),這實(shí)在不是個(gè)容易的事,至于很多書(shū)一開(kāi)始就提出的總線、地址等概念,更是初學(xué)者難以理解的——不管用什么巧妙的比方都不容易理解。于是糊里糊涂地學(xué)完了第一部份,第二部份一開(kāi)始就是尋址方式,更抽象,好多人直到學(xué)完單片機(jī)還不能理解尋址方式究竟是什么意思,為什么需要這么多尋址方式,剛開(kāi)始學(xué)當(dāng)然更不懂了。然后是指令,111條指令,又不分個(gè)重點(diǎn),反正全是要記住的,等到指令全部學(xué)完,大部份人已對(duì)單片機(jī)望爾生畏,開(kāi)始打退堂鼓了。第三部份是編程,如果說(shuō)前面的東西不能理解,還能靠記憶來(lái)獲得知識(shí)的話,這部份就純是理解和掌握了,如果以前沒(méi)學(xué)過(guò)編程,短時(shí)間內(nèi)很難掌握編程的有關(guān)知識(shí),更不必說(shuō)編程技巧了??墒墙滩纳厦髅饕?guī)定,要編出這樣、那樣的程序,學(xué)的人編不出來(lái),當(dāng)然只會(huì)認(rèn)為,教材的要求當(dāng)然是合理的,應(yīng)該做到的,我做不到就是我沒(méi)學(xué)好,于是很多人長(zhǎng)嘆一聲:?jiǎn)纹瑱C(jī)太難學(xué)了!放棄吧。可是到這里還根本不知道一個(gè)單片機(jī)開(kāi)發(fā)的完整過(guò)程是什么,什么是編程器還不知道。后面的就不說(shuō)了,總之,現(xiàn)在教材,基本都是以單片機(jī)為藍(lán)本來(lái)學(xué)習(xí)計(jì)算機(jī)原理,而不純?yōu)閷W(xué)習(xí)單片機(jī)技術(shù),在教材、教學(xué)過(guò)程的安排上又沒(méi)有考慮人的接受能力,使得學(xué)習(xí)的過(guò)程是一個(gè)充滿不斷挫折的過(guò)程,于是很多人認(rèn)為單片機(jī)入門(mén)難?;谝陨锨闆r,以任務(wù)為教學(xué)單元,打破原有界限,不管硬件結(jié)構(gòu)、指令、編程的先后順序,將各部份知識(shí)分解成一個(gè)個(gè)知識(shí)點(diǎn),為了完成一個(gè)任務(wù)抽取每個(gè)部份的不同知識(shí)點(diǎn),加以組合,完成第一個(gè)任務(wù)就能清楚單片機(jī)的開(kāi)發(fā)過(guò)程,完成第二、三個(gè)任務(wù),就能自已模仿性地編出自已的程序,使得學(xué)習(xí)過(guò)程是一個(gè)不斷成功地完成任務(wù)的過(guò)程。當(dāng)所有任務(wù)全部完成,知識(shí)點(diǎn)就全學(xué)完了。即便只完成部份任務(wù),也可以去做一些程序了。事實(shí)并沒(méi)有必要學(xué)完全部知識(shí)才可以去做開(kāi)發(fā)的,我在大三時(shí)找了一個(gè)家電子產(chǎn)品開(kāi)發(fā)公司,當(dāng)時(shí)我還不知道如何將編好的程序?qū)懙絾纹瑱C(jī)中,對(duì)51單片機(jī)的定時(shí)器怎么用,中斷到底在什么時(shí)候用都不清楚。51單片機(jī)的編程器是什么樣,仿真器還是馬老師借給我一臺(tái)啟東單片機(jī)公司開(kāi)發(fā)的很老的仿真器,程序要自己轉(zhuǎn)成機(jī)器碼,通過(guò)手動(dòng)輸入到仿真器的RAM中,然后運(yùn)行,太難玩了!對(duì)51還不是很了解,公司就要好在1 5天內(nèi)把MSP430相關(guān)的資料看明白!如果能開(kāi)發(fā)就留下,否則就離開(kāi)!在這種壓力下我開(kāi)始了我的單片機(jī)開(kāi)發(fā)之路!第一章常用的電子元件介紹電阻的分類和作用一.電阻的種類:1、線繞電阻器:通用線繞電阻器、精密線繞電阻器、大功率線繞電阻器、高頻線繞電阻器。
2、薄膜電阻器:碳膜電阻器、合成碳膜電阻器、金屬膜電阻器、金屬氧化膜電阻器、化學(xué)沉積膜電阻器、玻璃釉膜電阻器、金屬氮化膜電阻器。
3、實(shí)心電阻器:無(wú)機(jī)合成實(shí)心碳質(zhì)電阻器、有機(jī)合成實(shí)心碳質(zhì)電阻器。
4、敏感電阻器:壓敏電阻器、熱敏電阻器、光敏電阻器、力敏電阻器、氣敏電阻器、濕敏電阻器。
二、主要特性參數(shù)
1、標(biāo)稱阻值:電阻器上面所標(biāo)示的阻值。
2、允許誤差:標(biāo)稱阻值與實(shí)際阻值的差值跟標(biāo)稱阻值之比的百分?jǐn)?shù)稱阻值偏差,它表示電阻器的精度。允許誤差與精度等級(jí)對(duì)應(yīng)關(guān)系如下:±0.5%-0.05、±1%-0.1(或00)、±2%-0.2(或0)、±5%-Ⅰ級(jí)、±10%-Ⅱ級(jí)、±20%-Ⅲ級(jí)
3、額定功率:在正常的大氣壓力90-106.6KPa及環(huán)境溫度為-55℃~+70℃的條件下,電阻器長(zhǎng)期工作所允許耗散的最大功率。
線繞電阻器額定功率系列為(W):1/20、1/8、1/4、1/2、1、2、4、8、10、16、25、40、50、75、100、150、250、500
非線繞電阻器額定功率系列為(W):1/20、1/8、1/4、1/2、1、2、5、10、25、50、100
4、額定電壓:由阻值和額定功率換算出的電壓。
5、最高工作電壓:允許的最大連續(xù)工作電壓。在低氣壓工作時(shí),最高工作電壓較低。
6、溫度系數(shù):溫度每變化1℃電容的分類和作用
一.電容的分類
電容,由兩個(gè)金屬極,中間夾有絕緣材料(介質(zhì))構(gòu)成。由于絕緣材料的不同,所構(gòu)成的電容器的種類也有所不同:
按結(jié)構(gòu)可分為:固定電容,可變電容
按介質(zhì)材料可分為:空氣電容、液體電容、無(wú)機(jī)固體電容、有機(jī)固體電容、電解電容。
按極性分為:有極性電容和無(wú)極性電容。
電容在電路中具有隔斷直流電,通過(guò)交流電的作用,因此常用于級(jí)間耦合、濾波、去耦、旁路及信號(hào)調(diào)諧
二、電容的符號(hào)
電容的符號(hào)同樣分為國(guó)內(nèi)標(biāo)表示法和國(guó)際電子符號(hào)表示法,但電容符號(hào)在國(guó)內(nèi)和國(guó)際表示都差不多,唯一的區(qū)別就是在有極性電容上,國(guó)內(nèi)的是一個(gè)空筐下面一根橫線,而國(guó)際的就是普通電容加一個(gè)"+"符號(hào)代表正極。(見(jiàn)下圖)
三、電容的單位
電阻的基本單位是:F(法),此外還有μF(微法)、pF(皮法),另外還有一個(gè)用的比較少的單位,那就是:nF(納法)。電容F的容量很大,我們看到的一般都是μF、nF、pF的單位,而不是F的單位。
它們之間的具體換算關(guān)系如下:
1F=1000000μF
1μF=1000nF
1nF=1000pF
四、電容的耐壓?jiǎn)挝唬篤(伏特)
每一個(gè)電容都有它的耐壓值,這是電容的重要參數(shù)之一。普通無(wú)極性電容的標(biāo)稱耐壓值有:63V、100V、160V、250V、400V、600V、1000V等,有極性電容的耐壓值相對(duì)要比無(wú)極性電容的耐壓要低,一般的標(biāo)稱耐壓值有:4V、6.3V、10V、16V、25V、35V、50V、63V、80V、100V、220V、400V等。
五、電容的種類
電容的種類可以從原理上分為:無(wú)極性可變電容、無(wú)極性固定電容、有極性電容等,從材料上可以分為:CBB電容(聚乙烯),滌綸電容、瓷片電容、云母電容、獨(dú)石電容、電解電容、鉭電容等。
各種電容的優(yōu)缺點(diǎn)及用途
無(wú)極性可變電容
制作工藝:1、可旋轉(zhuǎn)動(dòng)片為陶瓷片表面鍍金屬薄膜,定片為鍍有金屬膜的陶瓷底座;動(dòng)片為同軸金屬片,定片為有機(jī)薄膜片作介質(zhì)
優(yōu)點(diǎn):容易生產(chǎn),技術(shù)含量低。
缺點(diǎn):體積大,容量小
用途:改變震蕩及諧振頻率電路。調(diào)頻、調(diào)幅、發(fā)射/接收電路
無(wú)極性無(wú)感CBB電容
制作工藝:2層聚丙乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。
優(yōu)點(diǎn):無(wú)感,高頻特性好,體積較小
缺點(diǎn):不適合做大容量,價(jià)格比較高,耐熱性能較差。
用途:耦合/震蕩,音響,模擬/數(shù)字電路,高頻電源濾波/退耦
無(wú)極性CBB電容
制作工藝:2層聚乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。
優(yōu)點(diǎn):有感,高頻特性好,體積較小
缺點(diǎn):不適合做大容量,價(jià)格比較高,耐熱性能較差。
用途:耦合/震蕩,模擬/數(shù)字電路,電源濾波/退耦
無(wú)極性瓷片電容
制作工藝:薄瓷片兩面渡金屬膜銀而成。
優(yōu)點(diǎn):體積小,耐壓高,價(jià)格低,頻率高(有一種是高頻電容)
缺點(diǎn):易碎!容量低
用途:高頻震蕩、諧振、退耦、音響
無(wú)極性云母電容
制作工藝:云母片上鍍兩層金屬薄膜
優(yōu)點(diǎn):容易生產(chǎn),技術(shù)含量低。
缺點(diǎn):體積大,容量小
用途:震蕩、諧振、退耦及要求不高的電路
無(wú)極性獨(dú)石電容
體積比CBB更小,其他同CBB,有感
用途:模擬/數(shù)字電路信號(hào)旁路/濾波,音響
有極性電解電容
制作工藝:兩片鋁帶和兩層絕緣膜相互層疊,轉(zhuǎn)捆后浸在電解液中。
優(yōu)點(diǎn):容量大。
缺點(diǎn):高頻特性不好。
用途:低頻級(jí)間耦合、旁路、退耦、電源濾波、音響
鉭電容
制作工藝:用金屬鉭作為正極,在電解質(zhì)外噴上金屬作為負(fù)極。
優(yōu)點(diǎn):穩(wěn)定性好,容量大,高頻特性好。
缺點(diǎn):造價(jià)高。
用途:高精度電源濾波、信號(hào)級(jí)間耦合、高頻電路、音響電路
六、電容的標(biāo)稱及識(shí)別方法
1.由于電容體積要比電阻大,所以一般都使用直接標(biāo)稱法。如果數(shù)字是0.001,那它代表的是0.001uF=1nF,如果是10n,那么就是10nF,同樣100p就是100pF。
2.不標(biāo)單位的直接表示法:用1~4位數(shù)字表示,容量單位為pF,如350為350pF,3為3pF,0.5為0.5pF
3.色碼表示法:沿電容引線方向,用不同的顏色表示不同的數(shù)字,第一,
二種環(huán)表示電容量,第三種顏色表示有效數(shù)字后零的個(gè)數(shù)(單位為pF)
顏色意義:黑=0、棕=1、紅=2、橙=3、黃=4、綠=5、藍(lán)=6、紫=7、灰=8、白=9。
有極性電容的識(shí)別:看它上面的標(biāo)稱,一般有標(biāo)出容量和正負(fù)極,也有用引腳長(zhǎng)短來(lái)區(qū)別正負(fù)極長(zhǎng)腳為正,短腳為負(fù)。七、電容特點(diǎn)列表極性名稱制作優(yōu)點(diǎn)缺點(diǎn)無(wú)無(wú)感CBB電容2層聚丙乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。無(wú)感,高頻特性好,體積較小不適合做大容量,價(jià)格比較高,耐熱性能較差。無(wú)CBB電容2層聚乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。有感,其他同上。無(wú)瓷片電容薄瓷片兩面渡金屬膜銀而成。體積小,耐壓高,價(jià)格低,頻率高(有一種是高頻電容)易碎!容量低無(wú)云母電容云母片上鍍兩層金屬薄膜容易生產(chǎn),技術(shù)含量低。體積大,容量小,(幾乎沒(méi)有用了)無(wú)獨(dú)石電容體積比CBB更小,其他同CBB,有感有電解電容兩片鋁帶和兩層絕緣膜相互層疊,轉(zhuǎn)捆后浸泡在電解液(含酸性的合成溶液)中。容量大。高頻特性不好。有鉭電容用金屬鉭作為正極,在電解質(zhì)外噴上金屬作為負(fù)極。穩(wěn)定性好,容量大,高頻特性好。造價(jià)高。(一般用于關(guān)鍵地方)第二章烙鐵正確的使用使用可調(diào)式的衡溫烙鐵較好;1.助焊劑,用25%的松香溶解在75%的酒精(重量比)中作為助焊劑。2.電烙鐵使用前要上錫,必須讓烙鐵嘴“吃錫”,具體方法是:將電烙鐵燒熱,待剛剛能熔化焊錫時(shí),涂上助焊劑,再用焊錫均勻地涂在烙鐵頭上,使烙鐵頭均勻的吃上一層錫。;3.平時(shí)不用烙鐵的時(shí)候,要讓烙鐵嘴上保持有一定量的錫,不可把烙鐵嘴在海棉上清潔后存放于烙鐵架上;4.海棉需保持有一定量水份,至使海棉一整天濕潤(rùn);5.拿起烙鐵開(kāi)始使用時(shí),需清潔烙鐵嘴,但在使用過(guò)程中無(wú)需將烙鐵嘴拿到海棉上清潔,只需將烙鐵嘴上的錫擱入集錫硬紙盒內(nèi),這樣保持烙鐵嘴之溫度不會(huì)急速下降,若IC上尚有錫提取困難,再加一些錫上去(因錫絲中含有助焊劑),就可以輕松地提取多的錫下來(lái)了;6.烙鐵溫度在340~380度之間為正常情況,若部分敏感元件只可接受240~280度的焊接溫度;7.烙鐵嘴發(fā)赫,不可用刀片之類的金屬器件處理,而是要用松香或錫絲來(lái)解決;8.每天用完后,先清潔,再加足錫,然后馬上切斷電源9.焊接方法,用烙鐵頭沾取適量焊錫,接觸焊點(diǎn),待焊點(diǎn)上的焊錫全部熔化并浸沒(méi)元件引線頭后,電烙鐵頭沿著元器件的引腳輕輕往上一提離開(kāi)焊點(diǎn)。如果把焊盤(pán)和元件的引腳用細(xì)砂紙打磨干凈,涂上助焊劑。
10、焊接時(shí)間不宜過(guò)長(zhǎng),否則容易燙壞元件,必要時(shí)可用鑷子夾住管腳幫助散熱。
11、焊點(diǎn)應(yīng)呈正弦波峰形狀,表面應(yīng)光亮圓滑,無(wú)錫刺,錫量適中。
12、焊接完成后,要用酒精把線路板上殘余的助焊劑清洗干凈,以防炭化后的助焊劑影響電路正常工作。
13、集成電路應(yīng)最后焊接,電烙鐵要可靠接地,或斷電后利用余熱焊接?;蛘呤褂眉呻娐穼S貌遄负貌遄笤侔鸭呻娐凡迳先?。
14、電烙鐵應(yīng)放在烙鐵架上。第二章KeilC軟件使用KeilC51軟件是眾多單片機(jī)應(yīng)用開(kāi)發(fā)的優(yōu)秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM語(yǔ)言和C語(yǔ)言的程序設(shè)計(jì),界面友好,易學(xué)易用。下面介紹KeilC51軟件的使用方法進(jìn)入KeilC51后,屏幕如下圖所示。幾秒鐘后出現(xiàn)編輯界啟動(dòng)KeilC51時(shí)的屏幕進(jìn)入KeilC51后的編輯界面簡(jiǎn)單程序的調(diào)試學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言、學(xué)習(xí)某種程序軟件,最好的方法是直接操作實(shí)踐。下面通過(guò)簡(jiǎn)單的編程、調(diào)試,引導(dǎo)大家學(xué)習(xí)KeilC51軟件的基本使用方法和基本的調(diào)試技巧。1)建立一個(gè)新工程單擊Project菜單,在彈出的下拉菜單中選中NewProject選項(xiàng)2)然后選擇你要保存的路徑,輸入工程文件的名字,比如保存到C51目錄里,工程文件的名字為C51如下圖所示,然后點(diǎn)擊保存.3)這時(shí)會(huì)彈出一個(gè)對(duì)話框,要求你選擇單片機(jī)的型號(hào),你可以根據(jù)你使用的單片機(jī)來(lái)選擇,keilc51幾乎支持所有的51核的單片機(jī),我這里還是以大家用的比較多的Atmel的89C51來(lái)說(shuō)明,如下圖所示,選擇89C51之后,右邊欄是對(duì)這個(gè)單片機(jī)的基本的說(shuō)明,然后點(diǎn)擊確定.4)完成上一步驟后,屏幕如下圖所示到現(xiàn)在為止,我們還沒(méi)有編寫(xiě)一句程序,下面開(kāi)始編寫(xiě)我們的第一個(gè)程序。5)在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項(xiàng)新建文件后屏幕如下圖所示此時(shí)光標(biāo)在編輯窗口里閃爍,這時(shí)可以鍵入用戶的應(yīng)用程序了,建議首先保存該空白的文件,單擊菜單上的“File”,在下拉菜單中選中“SaveAs”選項(xiàng)單擊,屏幕如下圖所示,在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名,同時(shí),必須鍵入正確的擴(kuò)展名。注意,如果用C語(yǔ)言編寫(xiě)程序,則擴(kuò)展名為(.c);如果用匯編語(yǔ)言編寫(xiě)程序,則擴(kuò)展名必須為(.asm)。然后,單擊“保存”按鈕。6)回到編輯界面后,單擊“Target1”前面的“+”號(hào),然后在“SourceGroup1”上單擊右鍵,彈出如下菜單然后單擊“AddFiletoGroup‘SourceGroup1’”屏幕如下圖所示選中Test.c,然后單擊“Add”屏幕好下圖所示注意到“SourceGroup1”文件夾中多了一個(gè)子項(xiàng)“Text1.c”了嗎?子項(xiàng)的多少與所增加的源程序的多少相同7)現(xiàn)在,請(qǐng)輸入如下的C語(yǔ)言源程序:#include<reg52.h>//包含文件#include<stdio.h>voidmain(void)//主函數(shù){SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;//此行及以上3行為PRINTF函數(shù)所必須printf(“HelloIamKEIL.\n”);//打印程序執(zhí)行的信息printf(“Iwillbeyourfriend.\n”);while(1);}在輸入上述程序時(shí),讀者已經(jīng)看到了事先保存待編輯的文件的好處了吧,即Keilc51會(huì)自動(dòng)識(shí)別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會(huì)使用戶少犯錯(cuò)誤,有利于提高編程效率。程序輸入完畢后,如下圖所示8)在上圖中,單擊“Project”菜單,再在下拉菜單中單擊“BuiltTarget”選項(xiàng)(或者使用快捷鍵F7),編譯成功后,再單擊“Project”菜單,在下拉菜單中單擊“Start/StopDebugSession”(或者使用快捷鍵Ctrl+F5),屏幕如下所示9)調(diào)試程序:在上圖中,單擊“Debug”菜單,在下拉菜單中單擊“Go”選項(xiàng),(或者使用快捷鍵F5),然后再單擊“Debug”菜單,在下拉菜單中單擊“StopRunning”選項(xiàng)(或者使用快捷鍵Esc);再單擊“View”菜單,再在下拉菜單中單擊“SerialWindows#1”選項(xiàng),就可以看到程序運(yùn)行后的結(jié)果,其結(jié)果如下圖所示至此,我們?cè)贙eilC51上做了一個(gè)完整工程的全過(guò)程。但這只是純軟件的開(kāi)發(fā)過(guò)程,如何使用程序下載器看一看程序運(yùn)行的結(jié)果呢?10)單擊“Project”菜單,再在下拉菜單中單擊“”在下圖中,單擊“Output”中單擊“CreateHEXFile”選項(xiàng),使程序編譯后產(chǎn)生HEX代碼,供下載器軟件使用。把程序下載到AT89S51單片機(jī)中。第四章實(shí)驗(yàn)及實(shí)踐課題1.閃爍燈1.實(shí)驗(yàn)任務(wù)如圖4.1.1所示:在P1.0端口上接一個(gè)發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒。2.電路原理圖圖4.1.13.硬件連線4.程序設(shè)計(jì)內(nèi)容(1).延時(shí)程序的設(shè)計(jì)方法作為單片機(jī)的指令的執(zhí)行的時(shí)間是很短,數(shù)量大微秒級(jí),因此,我們要求的閃爍時(shí)間間隔為0.2秒,相對(duì)于微秒來(lái)說(shuō),相差太大,所以我們?cè)趫?zhí)行某一指令時(shí),插入延時(shí)程序,來(lái)達(dá)到我們的要求,但這樣的延時(shí)程序是如何設(shè)計(jì)呢?下面具體介紹其原理:如圖4.1.1所示的石英晶體為12MHz,因此,1個(gè)機(jī)器周期為1微秒因此,上面的延時(shí)程序時(shí)間為10.002ms。由以上可知,當(dāng)R6=10、R7=248時(shí),延時(shí)5ms,R6=20、R7=248時(shí),延時(shí)10ms,以此為基本的計(jì)時(shí)單位。如本實(shí)驗(yàn)要求0.2秒=200ms,10ms×R5=200ms,則R5=20,延時(shí)子程序如下:DELAY:MOVR5,#20D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET(2).輸出控制如圖1所示,當(dāng)P1.0端口輸出高電平,即P1.0=1時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.0=0時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5.程序框圖如圖4.1.2所示圖4.1.26.匯編源程序ORG0START:CLRP1.0LCALLDELAYSETBP1.0LCALLDELAYLJMPSTARTDELAY:MOVR5,#20;延時(shí)子程序,延時(shí)0.2秒D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND7.C語(yǔ)言源程序#include<AT89X51.H>sbitL1=P1^0;voiddelay02s(void)//延時(shí)0.2秒子程序{unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}voidmain(void){while(1){L1=0;delay02s();L1=1;delay02s();}}2.模擬開(kāi)關(guān)燈1.實(shí)驗(yàn)任務(wù)如圖4.2.1所示,監(jiān)視開(kāi)關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機(jī)P1.0端口上)顯示開(kāi)關(guān)狀態(tài),如果開(kāi)關(guān)合上,L1亮,開(kāi)關(guān)打開(kāi),L1熄滅。2.電路原理圖3.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1).開(kāi)關(guān)狀態(tài)的檢測(cè)過(guò)程單片機(jī)對(duì)開(kāi)關(guān)狀態(tài)的檢測(cè)相對(duì)于單片機(jī)來(lái)說(shuō),是從單片機(jī)的P3.0端口輸入信號(hào),而輸入的信號(hào)只有高電平和低電平兩種,當(dāng)撥開(kāi)開(kāi)關(guān)K1撥上去,即輸入高電平,相當(dāng)開(kāi)關(guān)斷開(kāi),當(dāng)撥動(dòng)開(kāi)關(guān)K1撥下去,即輸入低電平,相當(dāng)開(kāi)關(guān)閉合。單片機(jī)可以采用JBBIT,REL或者是JNBBIT,REL指令來(lái)完成對(duì)開(kāi)關(guān)狀態(tài)的檢測(cè)即可。(2).輸出控制如圖3所示,當(dāng)P1.0端口輸出高電平,即P1.0=1時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.0=0時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5.程序框圖開(kāi)始K1開(kāi)關(guān)閉合了嗎?L1亮L1滅圖4.2.26.匯編源程序ORG00HSTART:JBP3.0,LIGCLRP1.0SJMPSTARTLIG:SETBP1.0SJMPSTARTEND7.C語(yǔ)言源程序#include<AT89X51.H>sbitK1=P3^0;sbitL1=P1^0;voidmain(void){while(1){if(K1==0){L1=0;//燈亮}else{L1=1;//燈滅}}}3.多路開(kāi)關(guān)狀態(tài)指示1.實(shí)驗(yàn)任務(wù)如圖4.3.1所示,AT89S51單片機(jī)的P1.0-P1.3接四個(gè)發(fā)光二極管L1-L4,P1.4-P1.7接了四個(gè)開(kāi)關(guān)K1-K4,編程將開(kāi)關(guān)的狀態(tài)反映到發(fā)光二極管上。(開(kāi)關(guān)閉合,對(duì)應(yīng)的燈亮,開(kāi)關(guān)斷開(kāi),對(duì)應(yīng)的燈滅)。2.電路原理圖圖4.3.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.開(kāi)關(guān)狀態(tài)檢測(cè)對(duì)于開(kāi)關(guān)狀態(tài)檢測(cè),相對(duì)單片機(jī)來(lái)說(shuō),是輸入關(guān)系,我們可輪流檢測(cè)每個(gè)開(kāi)關(guān)狀態(tài),根據(jù)每個(gè)開(kāi)關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令來(lái)完成;也可以一次性檢測(cè)四路開(kāi)關(guān)狀態(tài),然后讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來(lái)指示。(2.輸出控制根據(jù)開(kāi)關(guān)的狀態(tài),由發(fā)光二極管L1-L4來(lái)指示,我們可以用SETBP1.X和CLRP1.X指令來(lái)完成,也可以采用MOVP1,#1111XXXXB方法一次指示。5.程序框圖6.方法一(匯編源程序)ORG00HSTART:MOVA,P1ANLA,#0F0HRRARRARRARRAXORA,#0F0HMOVP1,ASJMPSTARTEND7.方法一(C語(yǔ)言源程序)#include<AT89X51.H>unsignedchartemp;voidmain(void){while(1){temp=P1>>4;temp=temp|0xf0;P1=temp;}}8.方法二(匯編源程序)ORG00HSTART:JBP1.4,NEXT1CLRP1.0SJMPNEX1NEXT1:SETBP1.0NEX1:JBP1.5,NEXT2CLRP1.1SJMPNEX2NEXT2:SETBP1.1NEX2:JBP1.6,NEXT3CLRP1.2SJMPNEX3開(kāi)始讀P1口數(shù)據(jù)到ACCACC內(nèi)容右移4次ACC內(nèi)容與F0H相或ACC內(nèi)容送入P1口NEXT3:SETBP1.2NEX3:JBP1.7,NEXT4CLRP1.3SJMPNEX4NEXT4:SETBP1.3NEX4:SJMPSTARTEND9.方法二(C語(yǔ)言源程序)#include<AT89X51.H>voidmain(void){while(1){if(P1_4==0){P1_0=0;}else{P1_0=1;}if(P1_5==0){P1_1=0;}else{P1_1=1;}if(P1_6==0){P1_2=0;}else{P1_2=1;}if(P1_7==0){P1_3=0;}else{P1_3=1;}}}4.廣告燈的左移右移1.實(shí)驗(yàn)任務(wù)做單一燈的左移右移,硬件電路如圖4.4.1所示,八個(gè)發(fā)光二極管L1-L8分別接在單片機(jī)的P1.0-P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開(kāi)始時(shí)P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重復(fù)循環(huán)。2.電路原理圖圖4.4.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容我們可以運(yùn)用輸出端口指令MOVP1,A或MOVP1,#DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達(dá)到輸出控制的動(dòng)作。每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示5.程序框圖圖4.4.26.匯編源程序ORG0START:MOVR2,#8MOVA,#0FEHSETBCLOOP:MOVP1,ALCALLDELAYRLCADJNZR2,LOOPMOVR2,#8LOOP1:MOVP1,ALCALLDELAYRRCADJNZR2,LOOP1LJMPSTARTDELAY:MOVR5,#20;D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void){unsignedcharm,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}voidmain(void){while(1){temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++){a=temp>>i;b=temp<<(8-i);P1=a|b;delay();}}}5.廣告燈(利用取表方式)1.實(shí)驗(yàn)任務(wù)利用取表的方法,使端口P1做單一燈的變化:左移2次,右移2次,閃爍2次(延時(shí)的時(shí)間0.2秒)。2.電路原理圖圖4.5.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容在用表格進(jìn)行程序設(shè)計(jì)的時(shí)候,要用以下的指令來(lái)完成(1).利用MOVDPTR,#DATA16的指令來(lái)使數(shù)據(jù)指針寄存器指到表的開(kāi)頭。(2).利用MOVCA,@A+DPTR的指令,根據(jù)累加器的值再加上DPTR的值,就可以使程序計(jì)數(shù)器PC指到表格內(nèi)所要取出的數(shù)據(jù)。因此,只要把控制碼建成一個(gè)表,而利用MOVC工,@A+DPTR做取碼的操作,就可方便地處理一些復(fù)雜的控制動(dòng)作,取表過(guò)程如下圖所示:5.程序框圖圖4.5.26.匯編源程序ORG0START:MOVDPTR,#TABLELOOP:CLRAMOVCA,@A+DPTRCJNEA,#01H,LOOP1JMPSTARTLOOP1:MOVP1,AMOVR3,#20LCALLDELAYINCDPTRJMPLOOPDELAY:MOVR4,#20D1:MOVR5,#248DJNZR5,$DJNZR4,D1DJNZR3,DELAYRETTABLE:DB0FEH,0FDH,0FBH,0FDB0EFH,0DFH,0BFH,07FHDB0FEH,0FDH,0FBH,0F7HDB0EFH,0DFH,0BFH,07FHDB07FH,0BFH,0DFH,0EFHDB0F7H,0FBH,0FDH,0FEHDB07FH,0BFH,0DFH,0EFHDB0F7H,0FBH,0FDH,0FEHDB00H,0FFH,00H,0FFHDB01HEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xff,0x00,0xff,0x01};unsignedchari;voiddelay(void){unsignedcharm,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}voidmain(void){while(1){if(table[i]!=0x01){P1=table[i];i++;delay();}else{i=0;}}}6.報(bào)警產(chǎn)生器1.實(shí)驗(yàn)任務(wù)用P1.0輸出1KHz和500Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms,500Hz信號(hào)響200ms,交替進(jìn)行,P1.7接一開(kāi)關(guān)進(jìn)行控制,當(dāng)開(kāi)關(guān)合上響報(bào)警信號(hào),當(dāng)開(kāi)關(guān)斷開(kāi)告警信號(hào)停止,編出程序。2.電路原理圖圖4.6.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.信號(hào)產(chǎn)生的方法500Hz信號(hào)周期為2ms,信號(hào)電平為每1ms變反1次,1KHz的信號(hào)周期為1ms,信號(hào)電平每500us變反1次;5.程序框圖圖4.6.26.匯編源程序FLAGBIT00HORG00HSTART:JBP1.7,STARTJNBFLAG,NEXTMOVR2,#200DV:CPLP1.0LCALLDELY500LCALLDELY500DJNZR2,DVCPLFLAGNEXT:MOVR2,#200DV1:CPLP1.0LCALLDELY500DJNZR2,DV1CPLFLAGSJMPSTARTDELY500:MOVR7,#250LOOP:NOPDJNZR7,LOOPRETEND7.C語(yǔ)言源程序#include<AT89X51.H>#include<INTRINS.H>bitflag;unsignedcharcount;voiddely500(void){unsignedchari;for(i=250;i>0;i--){_nop_();}}voidmain(void){while(1){if(P1_7==0){for(count=200;count>0;count--){P1_0=~P1_0;dely500();}for(count=200;count>0;count--){P1_0=~P1_0;dely500();dely500();}}}}7.I/O并行口直接驅(qū)動(dòng)LED顯示1.實(shí)驗(yàn)任務(wù)如圖13所示,利用AT89S51單片機(jī)的P0端口的P0.0-P0.7連接到一個(gè)共陰數(shù)碼管的a-h(huán)的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示0-9數(shù)字,時(shí)間間隔0.2秒。2.電路原理圖圖4.7.13.系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)數(shù)碼管的a-h(huán)端口上;要求:P0.0/AD0與a相連,P0.1/AD1與b相連,P0.2/AD2與c相連,……,P0.7/AD7與h相連。4.程序設(shè)計(jì)內(nèi)容(1.LED數(shù)碼顯示原理七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽(yáng)極型。LED數(shù)碼管的g~a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見(jiàn)表2“0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7CH“4”66H“C”39H“5”6DH“d”5EH“6”7DH“E”79H“7”07H“F”71H(2.由于顯示的數(shù)字0-9的字形碼沒(méi)有規(guī)律可循,只能采用查表的方式來(lái)完成我們所需的要求了。這樣我們按著數(shù)字0-9的順序,把每個(gè)數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH5.程序框圖圖4.7.26.匯編源程序ORG0START:MOVR1,#00HNEXT:MOVA,R1MOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ALCALLDELAYINCR1CJNER1,#10,NEXTLJMPSTARTDELAY:MOVR5,#20D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardispcount;voiddelay02s(void){unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}voidmain(void){while(1){for(dispcount=0;dispcount<10;dispcount++){P0=table[dispcount];delay02s();}}}8.按鍵識(shí)別方法之一1.實(shí)驗(yàn)任務(wù)每按下一次開(kāi)關(guān)SP1,計(jì)數(shù)值加1,通過(guò)AT89S51單片機(jī)的P1端口的P1.0到P1.3顯示出其的二進(jìn)制計(jì)數(shù)值。2.電路原理圖圖4.8.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)方法(1.其實(shí),作為一個(gè)按鍵從沒(méi)有按下到按下以及釋放是一個(gè)完整的過(guò)程,也就是說(shuō),當(dāng)我們按下一個(gè)按鍵時(shí),總希望某個(gè)命令只執(zhí)行一次,而在按鍵按下的過(guò)程中,不要有干擾進(jìn)來(lái),因?yàn)椋诎聪碌倪^(guò)程中,一旦有干擾過(guò)來(lái),可能造成誤觸發(fā)過(guò)程,這并不是我們所想要的。因此在按鍵按下的時(shí)候,圖4.8.2要把我們手上的干擾信號(hào)以及按鍵的機(jī)械接觸等干擾信號(hào)給濾除掉,一般情況下,我們可以采用電容來(lái)濾除掉這些干擾信號(hào),但實(shí)際上,會(huì)增加硬件成本及硬件電路的體積,這是我們不希望,總得有個(gè)辦法解決這個(gè)問(wèn)題,因此我們可以采用軟件濾波的方法去除這些干擾信號(hào),一般情況下,一個(gè)按鍵按下的時(shí)候,總是在按下的時(shí)刻存在著一定的干擾信號(hào),按下之后就基本上進(jìn)入了穩(wěn)定的狀態(tài)。具體的一個(gè)按鍵從按下到釋放的全過(guò)程的信號(hào)圖如上圖所示:從圖中可以看出,我們?cè)诔绦蛟O(shè)計(jì)時(shí),從按鍵被識(shí)別按下之后,延時(shí)5ms以上,從而避開(kāi)了干擾信號(hào)區(qū)域,我們?cè)賮?lái)檢測(cè)一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時(shí)肯定輸出為低電平,若這時(shí)檢測(cè)到的是高電平,證明剛才是由于干擾信號(hào)引起的誤觸發(fā),CPU就認(rèn)為是誤觸發(fā)信號(hào)而舍棄這次的按鍵識(shí)別過(guò)程。從而提高了系統(tǒng)的可靠性。由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時(shí)候,再執(zhí)行一次命令,因此從按鍵被識(shí)別出來(lái)之后,我們就可以執(zhí)行這次的命令,所以要有一個(gè)等待按鍵釋放的過(guò)程,顯然釋放的過(guò)程,就是使其恢復(fù)成高電平狀態(tài)。(2.對(duì)于按鍵識(shí)別的指令,我們依然選擇如下指令JBBIT,REL指令是用來(lái)檢測(cè)BIT是否為高電平,若BIT=1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤荍NBBIT,REL指令是用來(lái)檢測(cè)BIT是否為低電平,若BIT=0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。(3.但對(duì)程序設(shè)計(jì)過(guò)程中按鍵識(shí)別過(guò)程的框圖如右圖所示:圖4.8.35.程序框圖圖4.8.46.匯編源程序ORG0START:MOVR1,#00H;初始化R7為0,表示從0開(kāi)始計(jì)數(shù)MOVA,R1;CPLA;取反指令MOVP1,A;送出P1端口由發(fā)光二極管顯示REL:JNBP3.7,REL;判斷SP1是否按下LCALLDELAY10MS;若按下,則延時(shí)10ms左右JNBP3.7,REL;再判斷SP1是否真得按下INCR7;若真得按下,則進(jìn)行按鍵處理,使MOVA,R7;計(jì)數(shù)內(nèi)容加1,并送出P1端口由CPLA;發(fā)光二極管顯示MOVP1,A;JNBP3.7,$;等待SP1釋放SJMPREL;繼續(xù)對(duì)K1按鍵掃描DELAY10MS:MOVR6,#20;延時(shí)10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcount;voiddelay10ms(void){unsignedchari,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}voidmain(void){while(1){if(P3_7==0){delay10ms();if(P3_7==0){count++;if(count==16){count=0;}P1=~count;while(P3_7==0);}}9.一鍵多功能按鍵識(shí)別技術(shù)1.實(shí)驗(yàn)任務(wù)如圖4.9.1所示,開(kāi)關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機(jī)的P1端口接有四個(gè)發(fā)光二極管,上電的時(shí)候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開(kāi)關(guān)SP1的時(shí)候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,又輪到L1在閃爍了,如此輪流下去。2.電路原理圖圖4.9.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)方法(1.設(shè)計(jì)思想由來(lái)在我們生活中,我們很容易通過(guò)這個(gè)叫張三,那個(gè)叫李四,另外一個(gè)是王五;那是因?yàn)槊總€(gè)人有不同的名子,我們就很快認(rèn)出,同樣,對(duì)于要通過(guò)一個(gè)按鍵來(lái)識(shí)別每種不同的功能,我們給每個(gè)不同的功能模塊用不同的ID號(hào)標(biāo)識(shí),這樣,每按下一次按鍵,ID的值是不相同的,所以單片機(jī)就很容易識(shí)別不同功能的身份了。(2.設(shè)計(jì)方法從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個(gè)時(shí)刻的閃爍的時(shí)間是受開(kāi)關(guān)SP1來(lái)控制,我們給L1到L4閃爍的時(shí)段定義出不同的ID號(hào),當(dāng)L1在閃爍時(shí),ID=0;當(dāng)L2在閃爍時(shí),ID=1;當(dāng)L3在閃爍時(shí),ID=2;當(dāng)L4在閃爍時(shí),ID=3;很顯然,只要每次按下開(kāi)關(guān)K1時(shí),分別給出不同的ID號(hào)我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計(jì)的框圖。5.程序框圖圖4.9.26.匯編源程序IDEQU30HSP1BITP3.7L1BITP1.0L2BITP1.1L3BITP1.2L4BITP1.3ORG0MOVID,#00HSTART:JBK1,RELLCALLDELAY10MSJBK1,RELINCIDMOVA,IDCJNEA,#04,RELMOVID,#00HREL:JNBK1,$MOVA,IDCJNEA,#00H,IS0CPLL1LCALLDELAYSJMPSTARTIS0:CJNEA,#01H,IS1CPLL2LCALLDELAYSJMPSTARTIS1:CJNEA,#02H,IS2CPLL3LCALLDELAYSJMPSTARTIS2:CJNEA,#03H,IS3CPLL4LCALLDELAYSJMPSTARTIS3:LJMPSTARTDELAY10MS:MOVR6,#20LOOP1:MOVR7,#248DJNZR7,$DJNZR6,LOOP1RETDELAY:MOVR5,#20LOOP2:LCALLDELAY10MSDJNZR5,LOOP2RETEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharID;voiddelay10ms(void){unsignedchari,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}voiddelay02s(void){unsignedchari;for(i=20;i>0;i--){delay10ms();}}voidmain(void){while(1){if(P3_7==0){delay10ms();if(P3_7==0){ID++;if(ID==4){ID=0;}while(P3_7==0);}}switch(ID){case0:P1_0=~P1_0;delay02s();break;case1:P1_1=~P1_1;delay02s();break;case2:P1_2=~P1_2;delay02s();break;case3:P1_3=~P1_3;delay02s();break;}}}10.00-99計(jì)數(shù)器1.實(shí)驗(yàn)任務(wù)利用AT89S51單片機(jī)來(lái)制作一個(gè)手動(dòng)計(jì)數(shù)器,在AT89S51單片機(jī)的P3.7管腳接一個(gè)輕觸開(kāi)關(guān),作為手動(dòng)計(jì)數(shù)的按鈕,用單片機(jī)的P2.0-P2.7接一個(gè)共陰數(shù)碼管,作為00-99計(jì)數(shù)的個(gè)位數(shù)顯示,用單片機(jī)的P0.0-P0.7接一個(gè)共陰數(shù)碼管,作為00-99計(jì)數(shù)的十位數(shù)顯示;硬件電路圖如圖19所示。2.電路原理圖圖4.10.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.單片機(jī)對(duì)按鍵的識(shí)別的過(guò)程處理(2.單片機(jī)對(duì)正確識(shí)別的按鍵進(jìn)行計(jì)數(shù),計(jì)數(shù)滿時(shí),又從零開(kāi)始計(jì)數(shù);(3.單片機(jī)對(duì)計(jì)的數(shù)值要進(jìn)行數(shù)碼顯示,計(jì)得的數(shù)是十進(jìn)數(shù),含有十位和個(gè)位,我們要把十位和個(gè)位拆開(kāi)分別送出這樣的十位和個(gè)位數(shù)值到對(duì)應(yīng)的數(shù)碼管上顯示。如何拆開(kāi)十位和個(gè)位我們可以把所計(jì)得的數(shù)值對(duì)10求余,即可個(gè)位數(shù)字,對(duì)10整除,即可得到十位數(shù)字了。(4.通過(guò)查表方式,分別顯示出個(gè)位和十位數(shù)字。5.程序框圖圖4.10.26.匯編源程序CountEQU30HSP1BITP3.7ORG0START:MOVCount,#00HNEXT:MOVA,CountMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,AWT:JNBSP1,WTWAIT:JBSP1,WAITLCALLDELY10MSJBSP1,WAITINCCountMOVA,CountCJNEA,#100,NEXTLJMPSTARTDELY10MS:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharCount;voiddelay10ms(void){unsignedchari,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}voidmain(void){Count=0;P0=table[Count/10];P2=table[Count%10];while(1){if(P3_7==0){delay10ms();if(P3_7==0){Count++;if(Count==100){Count=0;}P0=table[Count/10];P2=table[Count%10];while(P3_7==0);}}}}11.00-59秒計(jì)時(shí)器(利用軟件延時(shí))1.實(shí)驗(yàn)任務(wù)如下圖所示,在AT89S51單片機(jī)的P0和P2端口分別接有兩個(gè)共陰數(shù)碼管,P0口驅(qū)動(dòng)顯示秒時(shí)間的十位,而P2口驅(qū)動(dòng)顯示秒時(shí)間的個(gè)位。2.電路原理圖圖4.11.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.在設(shè)計(jì)過(guò)程中我們用一個(gè)存儲(chǔ)單元作為秒計(jì)數(shù)單元,當(dāng)一秒鐘到來(lái)時(shí),就讓秒計(jì)數(shù)單元加1,當(dāng)秒計(jì)數(shù)達(dá)到60時(shí),就自動(dòng)返回到0,從新秒計(jì)數(shù)。(2.對(duì)于秒計(jì)數(shù)單元中的數(shù)據(jù)要把它十位數(shù)和個(gè)數(shù)分開(kāi),方法仍采用對(duì)10整除和對(duì)10求余。(3.在數(shù)碼上顯示,仍通過(guò)查表的方式完成。(4.一秒時(shí)間的產(chǎn)生在這里我們采用軟件精確延時(shí)的方法來(lái)完成,經(jīng)過(guò)精確計(jì)算得到1秒時(shí)間為1.002秒。DELY1S:MOVR5,#100D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RET5.程序框圖圖4.11.26.匯編源程序SecondEQU30HORG0START:MOVSecond,#00HNEXT:MOVA,SecondMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,ALCALLDELY1SINCSecondMOVA,SecondCJNEA,#60,NEXTLJMPSTARTDELY1S:MOVR5,#100D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharSecond;voiddelay1s(void){unsignedchari,j,k;for(k=100;k>0;k--)for(i=20;i>0;i--)for(j=248;j>0;j--);}voidmain(void){Second=0;P0=table[Second/10];P2=table[Second%10];while(1){delay1s();Second++;if(Second==60){Second=0;}P0=table[Second/10];P2=table[Second%10];}}12.可預(yù)置可逆4位計(jì)數(shù)器1.實(shí)驗(yàn)任務(wù)利用AT89S51單片機(jī)的P1.0-P1.3接四個(gè)發(fā)光二極管L1-L4,用來(lái)指示當(dāng)前計(jì)數(shù)的數(shù)據(jù);用P1.4-P1.7作為預(yù)置數(shù)據(jù)的輸入端,接四個(gè)撥動(dòng)開(kāi)關(guān)K1-K4,用P3.6/WR和P3.7/RD端口接兩個(gè)輕觸開(kāi)關(guān),用來(lái)作加計(jì)數(shù)和減計(jì)數(shù)開(kāi)關(guān)。具體的電路原理圖如下圖所示2.電路原理圖圖4.12.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.兩個(gè)獨(dú)立式按鍵識(shí)別的處理過(guò)程;(2.預(yù)置初值讀取的問(wèn)題(3.LED輸出指示5.程序框圖圖4.12.26.匯編源程序COUNTEQU30HORG00HSTART:MOVA,P3ANLA,#0FHMOVCOUNT,AMOVP1,ASK2:JBP3.6,SK1LCALLDELY10MSJBP3.6,SK1INCCOUNTMOVA,COUNTCJNEA,#16,NEXTMOVA,P3ANLA,#0FHMOVCOUNT,ANEXT:MOVP1,AWAIT:JNBP3.6,WAITLJMPSK2SK1:JBP3.7,SK2LCALLDELY10MSJBP3.7,SK2DECCOUNTMOVA,COUNTCJNEA,#0FFH,NEXMOVA,P3ANLA,#0FHMOVCOUNT,ANEX:MOVP1,AWAIT2:JNBP3.7,WAIT2LJMPSK2DELY10MS:MOVR6,#20MOVR7,#248D1:DJNZR7,$DJNZR6,D1RETEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcurcount;voiddelay10ms(void){unsignedchari,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}voidmain(void){curcount=P3&0x0f;P1=~curcount;while(1){if(P3_6==0){delay10ms();if(P3_6==0){if(curcount>=15){curcount=15;}else{curcount++;}P1=~curcount;while(P3_6==0);}}if(P3_7==0){delay10ms();if(P3_7==0){if(curcount<=0){curcount=0;}else{curcount--;}P1=~curcount;while(P3_7==0);}}}}13.動(dòng)態(tài)數(shù)碼顯示技術(shù)1.實(shí)驗(yàn)任務(wù)如圖4.13.1所示,P0端口接動(dòng)態(tài)數(shù)碼管的字形碼筆段,P2端口接動(dòng)態(tài)數(shù)碼管的數(shù)位選擇端,P1.7接一個(gè)開(kāi)關(guān),當(dāng)開(kāi)關(guān)接高電平時(shí),顯示“12345”字樣;當(dāng)開(kāi)關(guān)接低電平時(shí),顯示“HELLO”字樣。2.電路原理圖圖4.13.13.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.動(dòng)態(tài)掃描方法動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示頻率較高時(shí),利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個(gè)接口完成字形碼的輸出(字形選擇),另一接口完成各數(shù)碼管的輪流點(diǎn)亮(數(shù)位選擇)。(2.在進(jìn)行數(shù)碼顯示的時(shí)候,要對(duì)顯示單元開(kāi)辟8個(gè)顯示緩沖區(qū),每個(gè)顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。(3.對(duì)于顯示的字形碼數(shù)據(jù)我們采用查表方法來(lái)完成。5.程序框圖圖4.13.26.匯編源程序ORG00HSTART:JBP1.7,DIR1MOVDPTR,#TABLE1SJMPDIRDIR1:MOVDPTR,#TABLE2DIR:MOVR0,#00HMOVR1,#01HNEXT:MOVA,R0MOVCA,@A+DPTRMOVP0,AMOVA,R1開(kāi)始K1按鍵識(shí)別成功否?置顯示“12345”字形碼首地址置顯示“HELLO”字形碼首地址置字形碼偏移量和位選代碼查表并送出顯示延時(shí)2ms,并指向下一個(gè)偏移量5個(gè)數(shù)碼管顯示完否?MOVP2,ALCALLDAYINCR0RLAMOVR1,ACJNER1,#0DFH,NEXTSJMPSTARTDAY:MOVR6,#4D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE1:DB06H,5BH,4FH,66H,6DHTABLE2:DB78H,79H,38H,38H,3FHEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable1[]={0x06,0x5b,0x4f,0x66,0x6d};unsignedcharcodetable2[]={0x78,0x79,0x38,0x38,0x3f};unsignedchari;unsignedchara,b;unsignedchartemp;voidmain(void){while(1){temp=0xfe;for(i=0;i<5;i++){if(P1_7==1){P0=table1[i];}else{P0=table2[i];}P2=temp;a=temp<<(i+1);b=temp>>(7-i);temp=a|b;for(a=4;a>0;a--)for(b=248;b>0;b--);}}}14.4×4矩陣式鍵盤(pán)識(shí)別技術(shù)1.實(shí)驗(yàn)任務(wù)如圖4.14.2所示,用AT89S51的并行口P1接4×4矩陣鍵盤(pán),以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數(shù)碼管上顯示每個(gè)按鍵的“0-F”序號(hào)。對(duì)應(yīng)的按鍵的序號(hào)排列如圖4.14.1所示圖4.14.12.硬件電路原理圖圖4.14.23.系統(tǒng)板上硬件連線4.程序設(shè)計(jì)內(nèi)容(1.4×4矩陣鍵盤(pán)識(shí)別處理(2.每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開(kāi)關(guān)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。5.程序框圖圖4.14.36.匯編源程序KEYBUFEQU30HORG00HSTART:MOVKEYBUF,#2WAIT:MOVP3,#0FFHCLRP3.4MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY1LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY1MOVA,P3ANLA,#0FHCJNEA,#0EH,NK1MOVKEYBUF,#0LJMPDK1NK1:CJNEA,#0DH,NK2MOVKEYBUF,#1LJMPDK1NK2:CJNEA,#0BH,NK3MOVKEYBUF,#2LJMPDK1NK3:CJNEA,#07H,NK4MOVKEYBUF,#3LJMPDK1NK4:NOPDK1:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ADK1A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK1ANOKEY1:MOVP3,#0FFHCLRP3.5MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY2LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY2MOVA,P3ANLA,#0FHCJNEA,#0EH,NK5MOVKEYBUF,#4LJMPDK2NK5:CJNEA,#0DH,NK6MOVKEYBUF,#5LJMPDK2NK6:CJNEA,#0BH,NK7MOVKEYBUF,#6LJMPDK2NK7:CJNEA,#07H,NK8MOVKEYBUF,#7LJMPDK2NK8:NOPDK2:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ADK2A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK2ANOKEY2:MOVP3,#0FFHCLRP3.6MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY3LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY3MOVA,P3ANLA,#0FHCJNEA,#0EH,NK9MOVKEYBUF,#8LJMPDK3NK9:CJNEA,#0DH,NK10MOVKEYBUF,#9LJMPDK3NK10:CJNEA,#0BH,NK11MOVKEYBUF,#10LJMPDK3NK11:CJNEA,#07H,NK12MOVKEYBUF,#11LJMPDK3NK12:NOPDK3:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ADK3A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK3ANOKEY3:MOVP3,#0FFHCLRP3.7MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY4LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY4MOVA,P3ANLA,#0FHCJNEA,#0EH,NK13MOVKEYBUF,#12LJMPDK4NK13:CJNEA,#0DH,NK14MOVKEYBUF,#13LJMPDK4NK14:CJNEA,#0BH,NK15MOVKEYBUF,#14LJMPDK4NK15:CJNEA,#07H,NK16MOVKEYBUF,#15LJMPDK4NK16:NOPDK4:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ADK4A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK4ANOKEY4:LJMPWAITDELY10MS:MOVR6,#10D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HEND7.C語(yǔ)言源程序#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsignedchartemp;unsignedcharkey;unsignedchari,j;voidmain(void){while(1){P3=0xff;P3_4=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=7;break;case0x0d:key=8;break;case0x0b:key=9;break;case0x07:key=10;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_5=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=4;break;case0x0d:key=5;break;case0x0b:key=6;break;case0x07:key=11;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_6=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=1;break;case0x0d:key=2;break;case0x0b:key=3;break;case0x07:key=12;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_7=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case0x0e:key=0;break;case0x0d:key=13;break;case0x0b:key=14;break;case0x07:key=15;break;}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 情感電臺(tái)廣播稿15篇
- 感恩節(jié)感恩父母演講稿資料15篇
- 幼兒消防國(guó)旗下講話稿范文(8篇)
- 快樂(lè)的七夕節(jié)隨筆6篇
- 安全第一課大班
- 青春夢(mèng)想未來(lái)可及
- 爐膛燃燒動(dòng)態(tài)過(guò)程預(yù)測(cè)
- 基于毫米波信號(hào)的抗干擾感知與成像技術(shù)研究
- 二零二五年度金融創(chuàng)新協(xié)議存款合同范本2篇
- 聚焦“一帶一路”關(guān)注新疆及兵團(tuán)經(jīng)濟(jì)
- 開(kāi)展課外讀物負(fù)面清單管理的具體實(shí)施舉措方案
- 《中國(guó)心力衰竭診斷和治療指南(2024)》解讀完整版
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國(guó)洗衣液市場(chǎng)未來(lái)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 北京市房屋租賃合同自行成交版北京市房屋租賃合同自行成交版
- 《AM聚丙烯酰胺》課件
- 系統(tǒng)動(dòng)力學(xué)課件與案例分析
- 《智能網(wǎng)聯(lián)汽車智能傳感器測(cè)試與裝調(diào)》電子教案
- 客戶分級(jí)管理(標(biāo)準(zhǔn)版)課件
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
評(píng)論
0/150
提交評(píng)論