版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
51系列微控制器實驗及實踐教程PAGEPAGE351系列微控制器實驗及實踐教程目錄實驗及實踐課題┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅281.閃爍燈┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅282.模擬開關(guān)燈┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅313.多路開關(guān)狀態(tài)指示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅334.廣告燈的左移右移┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅375.廣告燈(利用取表方式)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅406.報警產(chǎn)生器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅437.I/O并行口直接驅(qū)動LED顯示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅468.按鍵識別方法之一┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅499.一鍵多功能按鍵識別技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅5310.00-99計數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅5711.00-59秒計時器(利用軟件延時)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6012.可預置可逆4位計數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6313.動態(tài)數(shù)碼顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅6714.4×4矩陣式鍵盤識別技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅7015.定時計數(shù)器T0作定時應(yīng)用技術(shù)(一)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅7916.定時計數(shù)器T0作定時應(yīng)用技術(shù)(二)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅8417.99秒馬表設(shè)計┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅8918.“嘀、嘀、……”報警聲┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅9519.“叮咚”門鈴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅9920.數(shù)字鐘(★)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅10521.拉幕式數(shù)碼顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅11422.電子琴┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅12123.模擬計算器數(shù)字輸入及顯示┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅13424.8×8LED點陣顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅14125.點陣LED“0-9”數(shù)字顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅26.點陣式LED簡單圖形顯示技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅15327.ADC0809A/D轉(zhuǎn)換器基本應(yīng)用技術(shù)┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅15728.數(shù)字電壓表┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅16329.兩點間溫度控制┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅16730.四位數(shù)數(shù)字溫度計┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅17231.6位數(shù)顯頻率計數(shù)器┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅17732.電子密碼鎖設(shè)計┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅18033.4×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖┅┅┅┅┅┅┅┅┅┅┅18634.帶有存儲器功能的數(shù)字溫度計-DS1624技術(shù)應(yīng)用┅┅┅┅┅┅┅┅┅┅19935.DS18B20數(shù)字溫度計使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅211單片機學習準備工作在你決定學習單片機之前,請做好如下準備工作:硬件準備:計算機一臺。編程器一只、89C51一片,實驗板一塊,再準備一只仿真機,其它常規(guī)工具。如果你想學單片機,而又不愿做這些投資,我勸你最好還是放棄,否則可能只會挫傷你學習的積極性和浪費你的時間。好在這些投資并不算多。
學習方案:編程器+仿真器+試驗板編程器:商品化的一般至少伍、六百以上。但現(xiàn)在網(wǎng)上有好多朋友都提供編程器的資料,如果你身邊有高手,不妨請他們幫助你做一個吧!不過幾十元的代價。如果沒有這個條件,我推薦你用可以串行燒寫芯片(即芯片具有ISP功能),如STC系列的單片機,價格便宜(不大于10元)。前言:單片機以其高可靠性、高性價比、低電壓、低功耗等一系列優(yōu)點,近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng),數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表,及通訊設(shè)備、日常消費類產(chǎn)品、玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個環(huán)節(jié)以及人民生活的各層次中,如車間流水線控制、自動化系統(tǒng)等、智能型家用電器(冰箱、空調(diào)、彩電)等,無不含有CPU控制器,即單片機。為適應(yīng)目前人才緊缺的狀態(tài)、各大、中專院校、高職、技校等紛紛增加及擴大的單片機教學的需要,著眼于培養(yǎng)單片機人才、單片機工程師。傳統(tǒng)的單片機教學,均是以單片機的結(jié)構(gòu)為主線,先講單片機的硬件結(jié)構(gòu),然后是指令,然后是軟件編程,然后是單片機系統(tǒng)的擴展和各種外圍器件的應(yīng)用,最后再講一些實例。按照此種教學結(jié)構(gòu),按照這種結(jié)構(gòu),學生普遍感到難學。試想,一個從未接觸過計算機結(jié)構(gòu)的人,甚至數(shù)字電路也是剛剛接觸的人,要他去理解單片機內(nèi)部結(jié)構(gòu),這實在不是個容易的事,至于很多書一開始就提出的總線、地址等概念,更是初學者難以理解的——不管用什么巧妙的比方都不容易理解。于是糊里糊涂地學完了第一部份,第二部份一開始就是尋址方式,更抽象,好多人直到學完單片機還不能理解尋址方式究竟是什么意思,為什么需要這么多尋址方式,剛開始學當然更不懂了。然后是指令,111條指令,又不分個重點,反正全是要記住的,等到指令全部學完,大部份人已對單片機望爾生畏,開始打退堂鼓了。第三部份是編程,如果說前面的東西不能理解,還能靠記憶來獲得知識的話,這部份就純是理解和掌握了,如果以前沒學過編程,短時間內(nèi)很難掌握編程的有關(guān)知識,更不必說編程技巧了??墒墙滩纳厦髅饕?guī)定,要編出這樣、那樣的程序,學的人編不出來,當然只會認為,教材的要求當然是合理的,應(yīng)該做到的,我做不到就是我沒學好,于是很多人長嘆一聲:單片機太難學了!放棄吧。可是到這里還根本不知道一個單片機開發(fā)的完整過程是什么,什么是編程器還不知道。后面的就不說了,總之,現(xiàn)在教材,基本都是以單片機為藍本來學習計算機原理,而不純?yōu)閷W習單片機技術(shù),在教材、教學過程的安排上又沒有考慮人的接受能力,使得學習的過程是一個充滿不斷挫折的過程,于是很多人認為單片機入門難?;谝陨锨闆r,以任務(wù)為教學單元,打破原有界限,不管硬件結(jié)構(gòu)、指令、編程的先后順序,將各部份知識分解成一個個知識點,為了完成一個任務(wù)抽取每個部份的不同知識點,加以組合,完成第一個任務(wù)就能清楚單片機的開發(fā)過程,完成第二、三個任務(wù),就能自已模仿性地編出自已的程序,使得學習過程是一個不斷成功地完成任務(wù)的過程。當所有任務(wù)全部完成,知識點就全學完了。即便只完成部份任務(wù),也可以去做一些程序了。事實并沒有必要學完全部知識才可以去做開發(fā)的,我在大三時找了一個家電子產(chǎn)品開發(fā)公司,當時我還不知道如何將編好的程序?qū)懙絾纹瑱C中,對51單片機的定時器怎么用,中斷到底在什么時候用都不清楚。51單片機的編程器是什么樣,仿真器還是馬老師借給我一臺啟東單片機公司開發(fā)的很老的仿真器,程序要自己轉(zhuǎn)成機器碼,通過手動輸入到仿真器的RAM中,然后運行,太難玩了!對51還不是很了解,公司就要好在1 5天內(nèi)把MSP430相關(guān)的資料看明白!如果能開發(fā)就留下,否則就離開!在這種壓力下我開始了我的單片機開發(fā)之路!第一章常用的電子元件介紹電阻的分類和作用一.電阻的種類:1、線繞電阻器:通用線繞電阻器、精密線繞電阻器、大功率線繞電阻器、高頻線繞電阻器。
2、薄膜電阻器:碳膜電阻器、合成碳膜電阻器、金屬膜電阻器、金屬氧化膜電阻器、化學沉積膜電阻器、玻璃釉膜電阻器、金屬氮化膜電阻器。
3、實心電阻器:無機合成實心碳質(zhì)電阻器、有機合成實心碳質(zhì)電阻器。
4、敏感電阻器:壓敏電阻器、熱敏電阻器、光敏電阻器、力敏電阻器、氣敏電阻器、濕敏電阻器。
二、主要特性參數(shù)
1、標稱阻值:電阻器上面所標示的阻值。
2、允許誤差:標稱阻值與實際阻值的差值跟標稱阻值之比的百分數(shù)稱阻值偏差,它表示電阻器的精度。允許誤差與精度等級對應(yīng)關(guān)系如下:±0.5%-0.05、±1%-0.1(或00)、±2%-0.2(或0)、±5%-Ⅰ級、±10%-Ⅱ級、±20%-Ⅲ級
3、額定功率:在正常的大氣壓力90-106.6KPa及環(huán)境溫度為-55℃~+70℃的條件下,電阻器長期工作所允許耗散的最大功率。
線繞電阻器額定功率系列為(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ù)工作電壓。在低氣壓工作時,最高工作電壓較低。
6、溫度系數(shù):溫度每變化1℃電容的分類和作用
一.電容的分類
電容,由兩個金屬極,中間夾有絕緣材料(介質(zhì))構(gòu)成。由于絕緣材料的不同,所構(gòu)成的電容器的種類也有所不同:
按結(jié)構(gòu)可分為:固定電容,可變電容
按介質(zhì)材料可分為:空氣電容、液體電容、無機固體電容、有機固體電容、電解電容。
按極性分為:有極性電容和無極性電容。
電容在電路中具有隔斷直流電,通過交流電的作用,因此常用于級間耦合、濾波、去耦、旁路及信號調(diào)諧
二、電容的符號
電容的符號同樣分為國內(nèi)標表示法和國際電子符號表示法,但電容符號在國內(nèi)和國際表示都差不多,唯一的區(qū)別就是在有極性電容上,國內(nèi)的是一個空筐下面一根橫線,而國際的就是普通電容加一個"+"符號代表正極。(見下圖)
三、電容的單位
電阻的基本單位是:F(法),此外還有μF(微法)、pF(皮法),另外還有一個用的比較少的單位,那就是:nF(納法)。電容F的容量很大,我們看到的一般都是μF、nF、pF的單位,而不是F的單位。
它們之間的具體換算關(guān)系如下:
1F=1000000μF
1μF=1000nF
1nF=1000pF
四、電容的耐壓單位:V(伏特)
每一個電容都有它的耐壓值,這是電容的重要參數(shù)之一。普通無極性電容的標稱耐壓值有:63V、100V、160V、250V、400V、600V、1000V等,有極性電容的耐壓值相對要比無極性電容的耐壓要低,一般的標稱耐壓值有:4V、6.3V、10V、16V、25V、35V、50V、63V、80V、100V、220V、400V等。
五、電容的種類
電容的種類可以從原理上分為:無極性可變電容、無極性固定電容、有極性電容等,從材料上可以分為:CBB電容(聚乙烯),滌綸電容、瓷片電容、云母電容、獨石電容、電解電容、鉭電容等。
各種電容的優(yōu)缺點及用途
無極性可變電容
制作工藝:1、可旋轉(zhuǎn)動片為陶瓷片表面鍍金屬薄膜,定片為鍍有金屬膜的陶瓷底座;動片為同軸金屬片,定片為有機薄膜片作介質(zhì)
優(yōu)點:容易生產(chǎn),技術(shù)含量低。
缺點:體積大,容量小
用途:改變震蕩及諧振頻率電路。調(diào)頻、調(diào)幅、發(fā)射/接收電路
無極性無感CBB電容
制作工藝:2層聚丙乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。
優(yōu)點:無感,高頻特性好,體積較小
缺點:不適合做大容量,價格比較高,耐熱性能較差。
用途:耦合/震蕩,音響,模擬/數(shù)字電路,高頻電源濾波/退耦
無極性CBB電容
制作工藝:2層聚乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。
優(yōu)點:有感,高頻特性好,體積較小
缺點:不適合做大容量,價格比較高,耐熱性能較差。
用途:耦合/震蕩,模擬/數(shù)字電路,電源濾波/退耦
無極性瓷片電容
制作工藝:薄瓷片兩面渡金屬膜銀而成。
優(yōu)點:體積小,耐壓高,價格低,頻率高(有一種是高頻電容)
缺點:易碎!容量低
用途:高頻震蕩、諧振、退耦、音響
無極性云母電容
制作工藝:云母片上鍍兩層金屬薄膜
優(yōu)點:容易生產(chǎn),技術(shù)含量低。
缺點:體積大,容量小
用途:震蕩、諧振、退耦及要求不高的電路
無極性獨石電容
體積比CBB更小,其他同CBB,有感
用途:模擬/數(shù)字電路信號旁路/濾波,音響
有極性電解電容
制作工藝:兩片鋁帶和兩層絕緣膜相互層疊,轉(zhuǎn)捆后浸在電解液中。
優(yōu)點:容量大。
缺點:高頻特性不好。
用途:低頻級間耦合、旁路、退耦、電源濾波、音響
鉭電容
制作工藝:用金屬鉭作為正極,在電解質(zhì)外噴上金屬作為負極。
優(yōu)點:穩(wěn)定性好,容量大,高頻特性好。
缺點:造價高。
用途:高精度電源濾波、信號級間耦合、高頻電路、音響電路
六、電容的標稱及識別方法
1.由于電容體積要比電阻大,所以一般都使用直接標稱法。如果數(shù)字是0.001,那它代表的是0.001uF=1nF,如果是10n,那么就是10nF,同樣100p就是100pF。
2.不標單位的直接表示法:用1~4位數(shù)字表示,容量單位為pF,如350為350pF,3為3pF,0.5為0.5pF
3.色碼表示法:沿電容引線方向,用不同的顏色表示不同的數(shù)字,第一,
二種環(huán)表示電容量,第三種顏色表示有效數(shù)字后零的個數(shù)(單位為pF)
顏色意義:黑=0、棕=1、紅=2、橙=3、黃=4、綠=5、藍=6、紫=7、灰=8、白=9。
有極性電容的識別:看它上面的標稱,一般有標出容量和正負極,也有用引腳長短來區(qū)別正負極長腳為正,短腳為負。七、電容特點列表極性名稱制作優(yōu)點缺點無無感CBB電容2層聚丙乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。無感,高頻特性好,體積較小不適合做大容量,價格比較高,耐熱性能較差。無CBB電容2層聚乙烯塑料和2層金屬箔交替夾雜然后捆綁而成。有感,其他同上。無瓷片電容薄瓷片兩面渡金屬膜銀而成。體積小,耐壓高,價格低,頻率高(有一種是高頻電容)易碎!容量低無云母電容云母片上鍍兩層金屬薄膜容易生產(chǎn),技術(shù)含量低。體積大,容量小,(幾乎沒有用了)無獨石電容體積比CBB更小,其他同CBB,有感有電解電容兩片鋁帶和兩層絕緣膜相互層疊,轉(zhuǎn)捆后浸泡在電解液(含酸性的合成溶液)中。容量大。高頻特性不好。有鉭電容用金屬鉭作為正極,在電解質(zhì)外噴上金屬作為負極。穩(wěn)定性好,容量大,高頻特性好。造價高。(一般用于關(guān)鍵地方)第二章烙鐵正確的使用使用可調(diào)式的衡溫烙鐵較好;1.助焊劑,用25%的松香溶解在75%的酒精(重量比)中作為助焊劑。2.電烙鐵使用前要上錫,必須讓烙鐵嘴“吃錫”,具體方法是:將電烙鐵燒熱,待剛剛能熔化焊錫時,涂上助焊劑,再用焊錫均勻地涂在烙鐵頭上,使烙鐵頭均勻的吃上一層錫。;3.平時不用烙鐵的時候,要讓烙鐵嘴上保持有一定量的錫,不可把烙鐵嘴在海棉上清潔后存放于烙鐵架上;4.海棉需保持有一定量水份,至使海棉一整天濕潤;5.拿起烙鐵開始使用時,需清潔烙鐵嘴,但在使用過程中無需將烙鐵嘴拿到海棉上清潔,只需將烙鐵嘴上的錫擱入集錫硬紙盒內(nèi),這樣保持烙鐵嘴之溫度不會急速下降,若IC上尚有錫提取困難,再加一些錫上去(因錫絲中含有助焊劑),就可以輕松地提取多的錫下來了;6.烙鐵溫度在340~380度之間為正常情況,若部分敏感元件只可接受240~280度的焊接溫度;7.烙鐵嘴發(fā)赫,不可用刀片之類的金屬器件處理,而是要用松香或錫絲來解決;8.每天用完后,先清潔,再加足錫,然后馬上切斷電源9.焊接方法,用烙鐵頭沾取適量焊錫,接觸焊點,待焊點上的焊錫全部熔化并浸沒元件引線頭后,電烙鐵頭沿著元器件的引腳輕輕往上一提離開焊點。如果把焊盤和元件的引腳用細砂紙打磨干凈,涂上助焊劑。
10、焊接時間不宜過長,否則容易燙壞元件,必要時可用鑷子夾住管腳幫助散熱。
11、焊點應(yīng)呈正弦波峰形狀,表面應(yīng)光亮圓滑,無錫刺,錫量適中。
12、焊接完成后,要用酒精把線路板上殘余的助焊劑清洗干凈,以防炭化后的助焊劑影響電路正常工作。
13、集成電路應(yīng)最后焊接,電烙鐵要可靠接地,或斷電后利用余熱焊接?;蛘呤褂眉呻娐穼S貌遄?,焊好插座后再把集成電路插上去。
14、電烙鐵應(yīng)放在烙鐵架上。第二章KeilC軟件使用KeilC51軟件是眾多單片機應(yīng)用開發(fā)的優(yōu)秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM語言和C語言的程序設(shè)計,界面友好,易學易用。下面介紹KeilC51軟件的使用方法進入KeilC51后,屏幕如下圖所示。幾秒鐘后出現(xiàn)編輯界啟動KeilC51時的屏幕進入KeilC51后的編輯界面簡單程序的調(diào)試學習程序設(shè)計語言、學習某種程序軟件,最好的方法是直接操作實踐。下面通過簡單的編程、調(diào)試,引導大家學習KeilC51軟件的基本使用方法和基本的調(diào)試技巧。1)建立一個新工程單擊Project菜單,在彈出的下拉菜單中選中NewProject選項2)然后選擇你要保存的路徑,輸入工程文件的名字,比如保存到C51目錄里,工程文件的名字為C51如下圖所示,然后點擊保存.3)這時會彈出一個對話框,要求你選擇單片機的型號,你可以根據(jù)你使用的單片機來選擇,keilc51幾乎支持所有的51核的單片機,我這里還是以大家用的比較多的Atmel的89C51來說明,如下圖所示,選擇89C51之后,右邊欄是對這個單片機的基本的說明,然后點擊確定.4)完成上一步驟后,屏幕如下圖所示到現(xiàn)在為止,我們還沒有編寫一句程序,下面開始編寫我們的第一個程序。5)在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項新建文件后屏幕如下圖所示此時光標在編輯窗口里閃爍,這時可以鍵入用戶的應(yīng)用程序了,建議首先保存該空白的文件,單擊菜單上的“File”,在下拉菜單中選中“SaveAs”選項單擊,屏幕如下圖所示,在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名,同時,必須鍵入正確的擴展名。注意,如果用C語言編寫程序,則擴展名為(.c);如果用匯編語言編寫程序,則擴展名必須為(.asm)。然后,單擊“保存”按鈕。6)回到編輯界面后,單擊“Target1”前面的“+”號,然后在“SourceGroup1”上單擊右鍵,彈出如下菜單然后單擊“AddFiletoGroup‘SourceGroup1’”屏幕如下圖所示選中Test.c,然后單擊“Add”屏幕好下圖所示注意到“SourceGroup1”文件夾中多了一個子項“Text1.c”了嗎?子項的多少與所增加的源程序的多少相同7)現(xiàn)在,請輸入如下的C語言源程序:#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);}在輸入上述程序時,讀者已經(jīng)看到了事先保存待編輯的文件的好處了吧,即Keilc51會自動識別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會使用戶少犯錯誤,有利于提高編程效率。程序輸入完畢后,如下圖所示8)在上圖中,單擊“Project”菜單,再在下拉菜單中單擊“BuiltTarget”選項(或者使用快捷鍵F7),編譯成功后,再單擊“Project”菜單,在下拉菜單中單擊“Start/StopDebugSession”(或者使用快捷鍵Ctrl+F5),屏幕如下所示9)調(diào)試程序:在上圖中,單擊“Debug”菜單,在下拉菜單中單擊“Go”選項,(或者使用快捷鍵F5),然后再單擊“Debug”菜單,在下拉菜單中單擊“StopRunning”選項(或者使用快捷鍵Esc);再單擊“View”菜單,再在下拉菜單中單擊“SerialWindows#1”選項,就可以看到程序運行后的結(jié)果,其結(jié)果如下圖所示至此,我們在KeilC51上做了一個完整工程的全過程。但這只是純軟件的開發(fā)過程,如何使用程序下載器看一看程序運行的結(jié)果呢?10)單擊“Project”菜單,再在下拉菜單中單擊“”在下圖中,單擊“Output”中單擊“CreateHEXFile”選項,使程序編譯后產(chǎn)生HEX代碼,供下載器軟件使用。把程序下載到AT89S51單片機中。第四章實驗及實踐課題1.閃爍燈1.實驗任務(wù)如圖4.1.1所示:在P1.0端口上接一個發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時間間隔為0.2秒。2.電路原理圖圖4.1.13.硬件連線4.程序設(shè)計內(nèi)容(1).延時程序的設(shè)計方法作為單片機的指令的執(zhí)行的時間是很短,數(shù)量大微秒級,因此,我們要求的閃爍時間間隔為0.2秒,相對于微秒來說,相差太大,所以我們在執(zhí)行某一指令時,插入延時程序,來達到我們的要求,但這樣的延時程序是如何設(shè)計呢?下面具體介紹其原理:如圖4.1.1所示的石英晶體為12MHz,因此,1個機器周期為1微秒因此,上面的延時程序時間為10.002ms。由以上可知,當R6=10、R7=248時,延時5ms,R6=20、R7=248時,延時10ms,以此為基本的計時單位。如本實驗要求0.2秒=200ms,10ms×R5=200ms,則R5=20,延時子程序如下:DELAY:MOVR5,#20D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET(2).輸出控制如圖1所示,當P1.0端口輸出高電平,即P1.0=1時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍@時發(fā)光二極管L1熄滅;當P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5.程序框圖如圖4.1.2所示圖4.1.26.匯編源程序ORG0START:CLRP1.0LCALLDELAYSETBP1.0LCALLDELAYLJMPSTARTDELAY:MOVR5,#20;延時子程序,延時0.2秒D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND7.C語言源程序#include<AT89X51.H>sbitL1=P1^0;voiddelay02s(void)//延時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.模擬開關(guān)燈1.實驗任務(wù)如圖4.2.1所示,監(jiān)視開關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機P1.0端口上)顯示開關(guān)狀態(tài),如果開關(guān)合上,L1亮,開關(guān)打開,L1熄滅。2.電路原理圖3.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1).開關(guān)狀態(tài)的檢測過程單片機對開關(guān)狀態(tài)的檢測相對于單片機來說,是從單片機的P3.0端口輸入信號,而輸入的信號只有高電平和低電平兩種,當撥開開關(guān)K1撥上去,即輸入高電平,相當開關(guān)斷開,當撥動開關(guān)K1撥下去,即輸入低電平,相當開關(guān)閉合。單片機可以采用JBBIT,REL或者是JNBBIT,REL指令來完成對開關(guān)狀態(tài)的檢測即可。(2).輸出控制如圖3所示,當P1.0端口輸出高電平,即P1.0=1時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時發(fā)光二極管L1熄滅;當P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5.程序框圖開始K1開關(guān)閉合了嗎?L1亮L1滅圖4.2.26.匯編源程序ORG00HSTART:JBP3.0,LIGCLRP1.0SJMPSTARTLIG:SETBP1.0SJMPSTARTEND7.C語言源程序#include<AT89X51.H>sbitK1=P3^0;sbitL1=P1^0;voidmain(void){while(1){if(K1==0){L1=0;//燈亮}else{L1=1;//燈滅}}}3.多路開關(guān)狀態(tài)指示1.實驗任務(wù)如圖4.3.1所示,AT89S51單片機的P1.0-P1.3接四個發(fā)光二極管L1-L4,P1.4-P1.7接了四個開關(guān)K1-K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對應(yīng)的燈亮,開關(guān)斷開,對應(yīng)的燈滅)。2.電路原理圖圖4.3.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.開關(guān)狀態(tài)檢測對于開關(guān)狀態(tài)檢測,相對單片機來說,是輸入關(guān)系,我們可輪流檢測每個開關(guān)狀態(tài),根據(jù)每個開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令來完成;也可以一次性檢測四路開關(guān)狀態(tài),然后讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。(2.輸出控制根據(jù)開關(guān)的狀態(tài),由發(fā)光二極管L1-L4來指示,我們可以用SETBP1.X和CLRP1.X指令來完成,也可以采用MOVP1,#1111XXXXB方法一次指示。5.程序框圖6.方法一(匯編源程序)ORG00HSTART:MOVA,P1ANLA,#0F0HRRARRARRARRAXORA,#0F0HMOVP1,ASJMPSTARTEND7.方法一(C語言源程序)#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開始讀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語言源程序)#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.實驗任務(wù)做單一燈的左移右移,硬件電路如圖4.4.1所示,八個發(fā)光二極管L1-L8分別接在單片機的P1.0-P1.7接口上,輸出“0”時,發(fā)光二極管亮,開始時P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重復循環(huán)。2.電路原理圖圖4.4.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容我們可以運用輸出端口指令MOVP1,A或MOVP1,#DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達到輸出控制的動作。每次送出的數(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語言源程序#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.實驗任務(wù)利用取表的方法,使端口P1做單一燈的變化:左移2次,右移2次,閃爍2次(延時的時間0.2秒)。2.電路原理圖圖4.5.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容在用表格進行程序設(shè)計的時候,要用以下的指令來完成(1).利用MOVDPTR,#DATA16的指令來使數(shù)據(jù)指針寄存器指到表的開頭。(2).利用MOVCA,@A+DPTR的指令,根據(jù)累加器的值再加上DPTR的值,就可以使程序計數(shù)器PC指到表格內(nèi)所要取出的數(shù)據(jù)。因此,只要把控制碼建成一個表,而利用MOVC工,@A+DPTR做取碼的操作,就可方便地處理一些復雜的控制動作,取表過程如下圖所示: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語言源程序#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.報警產(chǎn)生器1.實驗任務(wù)用P1.0輸出1KHz和500Hz的音頻信號驅(qū)動揚聲器,作報警信號,要求1KHz信號響100ms,500Hz信號響200ms,交替進行,P1.7接一開關(guān)進行控制,當開關(guān)合上響報警信號,當開關(guān)斷開告警信號停止,編出程序。2.電路原理圖圖4.6.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.信號產(chǎn)生的方法500Hz信號周期為2ms,信號電平為每1ms變反1次,1KHz的信號周期為1ms,信號電平每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語言源程序#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ū)動LED顯示1.實驗任務(wù)如圖13所示,利用AT89S51單片機的P0端口的P0.0-P0.7連接到一個共陰數(shù)碼管的a-h(huán)的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示0-9數(shù)字,時間間隔0.2秒。2.電路原理圖圖4.7.13.系統(tǒng)板上硬件連線把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個數(shù)碼管的a-h(huán)端口上;要求:P0.0/AD0與a相連,P0.1/AD1與b相連,P0.2/AD2與c相連,……,P0.7/AD7與h相連。4.程序設(shè)計內(nèi)容(1.LED數(shù)碼顯示原理七段LED顯示器內(nèi)部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽極型。LED數(shù)碼管的g~a七個發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表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的字形碼沒有規(guī)律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數(shù)字0-9的順序,把每個數(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語言源程序#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.按鍵識別方法之一1.實驗任務(wù)每按下一次開關(guān)SP1,計數(shù)值加1,通過AT89S51單片機的P1端口的P1.0到P1.3顯示出其的二進制計數(shù)值。2.電路原理圖圖4.8.13.系統(tǒng)板上硬件連線4.程序設(shè)計方法(1.其實,作為一個按鍵從沒有按下到按下以及釋放是一個完整的過程,也就是說,當我們按下一個按鍵時,總希望某個命令只執(zhí)行一次,而在按鍵按下的過程中,不要有干擾進來,因為,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時候,圖4.8.2要把我們手上的干擾信號以及按鍵的機械接觸等干擾信號給濾除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號,但實際上,會增加硬件成本及硬件電路的體積,這是我們不希望,總得有個辦法解決這個問題,因此我們可以采用軟件濾波的方法去除這些干擾信號,一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基本上進入了穩(wěn)定的狀態(tài)。具體的一個按鍵從按下到釋放的全過程的信號圖如上圖所示:從圖中可以看出,我們在程序設(shè)計時,從按鍵被識別按下之后,延時5ms以上,從而避開了干擾信號區(qū)域,我們再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時肯定輸出為低電平,若這時檢測到的是高電平,證明剛才是由于干擾信號引起的誤觸發(fā),CPU就認為是誤觸發(fā)信號而舍棄這次的按鍵識別過程。從而提高了系統(tǒng)的可靠性。由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時候,再執(zhí)行一次命令,因此從按鍵被識別出來之后,我們就可以執(zhí)行這次的命令,所以要有一個等待按鍵釋放的過程,顯然釋放的過程,就是使其恢復成高電平狀態(tài)。(2.對于按鍵識別的指令,我們依然選擇如下指令JBBIT,REL指令是用來檢測BIT是否為高電平,若BIT=1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤荍NBBIT,REL指令是用來檢測BIT是否為低電平,若BIT=0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。(3.但對程序設(shè)計過程中按鍵識別過程的框圖如右圖所示:圖4.8.35.程序框圖圖4.8.46.匯編源程序ORG0START:MOVR1,#00H;初始化R7為0,表示從0開始計數(shù)MOVA,R1;CPLA;取反指令MOVP1,A;送出P1端口由發(fā)光二極管顯示REL:JNBP3.7,REL;判斷SP1是否按下LCALLDELAY10MS;若按下,則延時10ms左右JNBP3.7,REL;再判斷SP1是否真得按下INCR7;若真得按下,則進行按鍵處理,使MOVA,R7;計數(shù)內(nèi)容加1,并送出P1端口由CPLA;發(fā)光二極管顯示MOVP1,A;JNBP3.7,$;等待SP1釋放SJMPREL;繼續(xù)對K1按鍵掃描DELAY10MS:MOVR6,#20;延時10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETEND7.C語言源程序#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ù)1.實驗任務(wù)如圖4.9.1所示,開關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機的P1端口接有四個發(fā)光二極管,上電的時候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當每一次按下開關(guān)SP1的時候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,又輪到L1在閃爍了,如此輪流下去。2.電路原理圖圖4.9.13.系統(tǒng)板上硬件連線4.程序設(shè)計方法(1.設(shè)計思想由來在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因為每個人有不同的名子,我們就很快認出,同樣,對于要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的ID號標識,這樣,每按下一次按鍵,ID的值是不相同的,所以單片機就很容易識別不同功能的身份了。(2.設(shè)計方法從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個時刻的閃爍的時間是受開關(guān)SP1來控制,我們給L1到L4閃爍的時段定義出不同的ID號,當L1在閃爍時,ID=0;當L2在閃爍時,ID=1;當L3在閃爍時,ID=2;當L4在閃爍時,ID=3;很顯然,只要每次按下開關(guān)K1時,分別給出不同的ID號我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計的框圖。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語言源程序#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計數(shù)器1.實驗任務(wù)利用AT89S51單片機來制作一個手動計數(shù)器,在AT89S51單片機的P3.7管腳接一個輕觸開關(guān),作為手動計數(shù)的按鈕,用單片機的P2.0-P2.7接一個共陰數(shù)碼管,作為00-99計數(shù)的個位數(shù)顯示,用單片機的P0.0-P0.7接一個共陰數(shù)碼管,作為00-99計數(shù)的十位數(shù)顯示;硬件電路圖如圖19所示。2.電路原理圖圖4.10.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.單片機對按鍵的識別的過程處理(2.單片機對正確識別的按鍵進行計數(shù),計數(shù)滿時,又從零開始計數(shù);(3.單片機對計的數(shù)值要進行數(shù)碼顯示,計得的數(shù)是十進數(shù),含有十位和個位,我們要把十位和個位拆開分別送出這樣的十位和個位數(shù)值到對應(yīng)的數(shù)碼管上顯示。如何拆開十位和個位我們可以把所計得的數(shù)值對10求余,即可個位數(shù)字,對10整除,即可得到十位數(shù)字了。(4.通過查表方式,分別顯示出個位和十位數(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語言源程序#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秒計時器(利用軟件延時)1.實驗任務(wù)如下圖所示,在AT89S51單片機的P0和P2端口分別接有兩個共陰數(shù)碼管,P0口驅(qū)動顯示秒時間的十位,而P2口驅(qū)動顯示秒時間的個位。2.電路原理圖圖4.11.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.在設(shè)計過程中我們用一個存儲單元作為秒計數(shù)單元,當一秒鐘到來時,就讓秒計數(shù)單元加1,當秒計數(shù)達到60時,就自動返回到0,從新秒計數(shù)。(2.對于秒計數(shù)單元中的數(shù)據(jù)要把它十位數(shù)和個數(shù)分開,方法仍采用對10整除和對10求余。(3.在數(shù)碼上顯示,仍通過查表的方式完成。(4.一秒時間的產(chǎn)生在這里我們采用軟件精確延時的方法來完成,經(jīng)過精確計算得到1秒時間為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語言源程序#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.可預置可逆4位計數(shù)器1.實驗任務(wù)利用AT89S51單片機的P1.0-P1.3接四個發(fā)光二極管L1-L4,用來指示當前計數(shù)的數(shù)據(jù);用P1.4-P1.7作為預置數(shù)據(jù)的輸入端,接四個撥動開關(guān)K1-K4,用P3.6/WR和P3.7/RD端口接兩個輕觸開關(guān),用來作加計數(shù)和減計數(shù)開關(guān)。具體的電路原理圖如下圖所示2.電路原理圖圖4.12.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.兩個獨立式按鍵識別的處理過程;(2.預置初值讀取的問題(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語言源程序#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.動態(tài)數(shù)碼顯示技術(shù)1.實驗任務(wù)如圖4.13.1所示,P0端口接動態(tài)數(shù)碼管的字形碼筆段,P2端口接動態(tài)數(shù)碼管的數(shù)位選擇端,P1.7接一個開關(guān),當開關(guān)接高電平時,顯示“12345”字樣;當開關(guān)接低電平時,顯示“HELLO”字樣。2.電路原理圖圖4.13.13.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.動態(tài)掃描方法動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當循環(huán)顯示頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出(字形選擇),另一接口完成各數(shù)碼管的輪流點亮(數(shù)位選擇)。(2.在進行數(shù)碼顯示的時候,要對顯示單元開辟8個顯示緩沖區(qū),每個顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。(3.對于顯示的字形碼數(shù)據(jù)我們采用查表方法來完成。5.程序框圖圖4.13.26.匯編源程序ORG00HSTART:JBP1.7,DIR1MOVDPTR,#TABLE1SJMPDIRDIR1:MOVDPTR,#TABLE2DIR:MOVR0,#00HMOVR1,#01HNEXT:MOVA,R0MOVCA,@A+DPTRMOVP0,AMOVA,R1開始K1按鍵識別成功否?置顯示“12345”字形碼首地址置顯示“HELLO”字形碼首地址置字形碼偏移量和位選代碼查表并送出顯示延時2ms,并指向下一個偏移量5個數(shù)碼管顯示完否?MOVP2,ALCALLDAYINCR0RLAMOVR1,ACJNER1,#0DFH,NEXTSJMPSTARTDAY:MOVR6,#4D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE1:DB06H,5BH,4FH,66H,6DHTABLE2:DB78H,79H,38H,38H,3FHEND7.C語言源程序#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矩陣式鍵盤識別技術(shù)1.實驗任務(wù)如圖4.14.2所示,用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數(shù)碼管上顯示每個按鍵的“0-F”序號。對應(yīng)的按鍵的序號排列如圖4.14.1所示圖4.14.12.硬件電路原理圖圖4.14.23.系統(tǒng)板上硬件連線4.程序設(shè)計內(nèi)容(1.4×4矩陣鍵盤識別處理(2.每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。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語言源程序#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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 省級產(chǎn)業(yè)園區(qū)基礎(chǔ)設(shè)施項目概述
- 2024年精煉煤炭購銷標準協(xié)議模版版
- 物流教育機器人課程設(shè)計
- 2024年石油行業(yè)安全生產(chǎn)與應(yīng)急管理服務(wù)合同3篇
- 2024年版建筑水電安裝工程勞務(wù)合作合同樣本版
- 2024年版商業(yè)場地合作經(jīng)營協(xié)議3篇
- 2024年環(huán)保監(jiān)測系統(tǒng)軟件升級與技術(shù)支持合同3篇
- 2024年度虛擬現(xiàn)實企業(yè)員工聘用協(xié)議范本3篇
- 2024年版城市綠化項目外包合同
- 制冷工藝課程設(shè)計小結(jié)
- 電力增容改造技術(shù)標模板
- 血培養(yǎng)采集的方法及注意事項
- 梁靜茹《勇氣》的歌詞
- 國家開放大學02150-計算機網(wǎng)絡(luò)(本)期末復習題及參考答案
- 國開2023年春《理工英語3》機考網(wǎng)考期末復習資料參考答案
- 員工安全培訓教育制度
- 深圳證券交易所
- 譯林版一年級英語上冊期末試卷
- 阿爾瓦·阿爾托
- 非煤礦山安全風險分級管控與安全隱患排查治理u000b雙重預防機制建設(shè)知識
- 山東2022青島農(nóng)商銀行萊西支行行長社會招聘上岸提分題庫3套【500題帶答案含詳解】
評論
0/150
提交評論