51單片機最小系統(tǒng)工程訓練指導書_第1頁
51單片機最小系統(tǒng)工程訓練指導書_第2頁
51單片機最小系統(tǒng)工程訓練指導書_第3頁
51單片機最小系統(tǒng)工程訓練指導書_第4頁
51單片機最小系統(tǒng)工程訓練指導書_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機實驗板工 程 訓 練 指 導 書物理與電子工程系目 錄實驗一 led閃爍燈設計-4實驗二 模擬開關控制指示燈設計-7實驗三 多路開關狀態(tài)指示設計-10實驗四 廣告燈左、右移設計-14實驗五 查詢法設計廣告燈-18實驗六 報警產生器設計-21實驗七 i/o并行口直接驅動led顯示設計-25實驗八 單鍵識別設計-29實驗九 一鍵多功能按鍵識別設計-33實驗十 00-99計數(shù)器設計-38實驗十一 六十秒計時器設計-42實驗十二 可預置可逆4位計數(shù)器設計-46實驗十三 動態(tài)數(shù)碼顯示設計-51實驗十四 44矩陣式鍵盤識別設計-55實驗十五 定時計數(shù)器t0作定時應用設計(一)-64實驗十六 定時計數(shù)

2、器t0作定時應用設計(二)-71實驗十七 9.9秒跑馬表設計-76實驗十八 “嘀、嘀、”報警聲設計-82實驗十九 “叮咚”門鈴設計-87實驗二十 智能電子鐘設計-92實驗二十一 “新年好”音樂設計-102實驗二十二電子琴設計-108實驗二十三模擬計算器數(shù)字輸入及顯示設計-119實驗二十四數(shù)字電壓表設計-126實驗二十五ds18b20數(shù)字溫度計設計-131附錄a實驗板中模擬/數(shù)字轉換器adc0804的參數(shù)及使用說明-139附錄b 實驗板中ds18b20智能溫度控制器的參數(shù)及使用-141單片機實驗板詳細說明該單片機實驗板設計巧妙,經(jīng)過了嚴格的檢查,可放心使用。由于考慮到眾多的實驗要在此單片機實驗板

3、上完成,然而每個實驗用到的單片機的i/o口不盡相同,所以設計時采用撥動撥碼開關和替換跳線帽的位置來完成每個實驗內容。在完成各個實驗內容時,首先要看清楚實驗電路原理圖,然后按照實驗內容給出的單片機實驗板上的硬件連線、撥動撥碼開關或替換跳線帽的位置來完成系統(tǒng)設計。檢查無誤后下載程序。由于每個程序都經(jīng)過了單片機實驗板的驗證,證明程序沒有問題。所以要是調不出來,肯定是硬件沒有連好,再次檢查直到完成實驗。每做完一個實驗后,把撥動撥碼開關和跳線帽恢復到初始狀態(tài)。一、撥碼開關和跳線帽的初始化狀態(tài)介紹如下:單片機實驗板上有8聯(lián)撥動撥碼開關4個(jp1、jp2、jp3、jp4),2聯(lián)撥動撥碼開關1個(jp5),

4、跳線帽13個。 在初始化狀態(tài)下,撥動撥碼開關都處于緊靠數(shù)字的位置,此位置下的撥動撥碼開關為不用狀態(tài)。8排針接插件j3上的8個跳線帽要全部連接在標號為p0位置上。單排針接插件j4上的跳線帽要連接在oe和gnd的位置上。單排針接插件j5上的跳線帽連接在oe和gnd的位置上。單排針接插件j6上的跳線帽要連接在oe和vcc的位置。單排針接插件j7上的跳線帽要連接在cs和gnd的位置。雙排針接插件j8上的跳線帽應該和j8上排插針相連。4個8聯(lián)撥動撥碼開關(jp1、jp2、jp3、jp4)應該全部所至下方。二、實驗中具體使用介紹如下:(1)當用到發(fā)光二極管時,要把8聯(lián)撥動撥碼開關jp4撥到on狀態(tài)。(2)

5、 當用到喇叭輸出時,把2聯(lián)撥動撥碼開關jp5的1號撥動開關撥上去;當用ds18b20做測溫時,把2聯(lián)撥動撥碼開關jp5的2號撥動開關撥上去。(3)當用到矩陣鍵盤輸入時,把8聯(lián)撥動撥碼開關jp3的撥動開關全部撥上去。(4) 當用到撥動開關sw1sw4時,把8聯(lián)撥動撥碼開關jp2對應的撥動開關撥上去。(5) 當用到按鍵開關s18s21時,把8聯(lián)撥動撥碼開關jp2對應的撥動開關撥上去。(6) 當用8個動態(tài)數(shù)碼管顯示時,首先應該把單排針接插件j4的oe與vcc用跳線帽相連。同時8聯(lián)撥動撥碼開關jp1對應的撥動開關撥上去。8聯(lián)撥動撥碼開關jp1的s1s8分別對應三極管q2q9。(7)當用8個動態(tài)數(shù)碼管輸

6、入ah數(shù)碼時,如果用到p0口,不用移動跳線帽;如果用到p1口,把8個跳線帽移到下面的標有p1的位置。(8) 當用p0口做數(shù)碼管靜態(tài)顯示時,把單排針接插件j5的oe與vcc用跳線帽相連。(9) 當用p2口做數(shù)碼管靜態(tài)顯示時,把單排針接插件j6的oe與gnd用跳線帽相連??傊?,在用單片機編寫簡單程序時,匯編語言編寫起來比較簡單,但復雜的程序還是用c51編寫起來比較簡單。所以c51編程是必學的。這里基本上所有的實驗程序都采用匯編和c51兩種編程方法。有的實驗還給出了兩套設計方案,便于比較學習。實驗一led閃爍燈設計一、實驗目的1、初步了解單片機i/o口的簡單控制。2、掌握單片機外圍常用電路的固定接法

7、。二、設計原理利用單片機控制一個發(fā)光二極管,使此發(fā)光二極管間隔0.2秒亮、滅一次。三、參考電路圖1.1 led閃爍燈外部電路原理圖四、電路硬件說明如圖1.1所示:在單片機的p1.0端口上通過8聯(lián)撥動撥碼開關jp4的相應撥碼開關連接一個發(fā)光二極管d1。五、程序設計內容(1) 延時程序的設計方法 :單片機指令的執(zhí)行時間是很短的,它的數(shù)量級為微秒級。在本程序設計中,要求led閃爍燈的閃爍時間間隔為0.2秒。相對于微秒來說,相差太大,所以在執(zhí)行某一指令時,需要插入延時程序,來達到的要求。然而這樣的延時程序是如何設計呢?下面具體介紹其原理:如圖1.1所示,單片機所用的石英晶體為12mhz。因此,1個機器

8、周期為1微秒。延時10ms子程序機器周期 微秒mov r6,#20 1個 1d1:mov r7,#248 1個1+120djnz r7,$2個2248+220248djnz r6,d12個 220因此,上面的延時程序時間為10.478ms。 由以上可知,當r610、r7248時,延時時間為5ms;r620、r7248時,延時時間為10ms。通常所用延時時間以此為基本的計時單位。比如本實驗要求為0.2秒200ms,所以用10msr5200ms,得到r520。延時子程序如下: delay:mov r5,#20 1d1:mov r6,#20 1+20d2:mov r7,#248 1+20+20(1+

9、20)djnz r7,$ 2248+202248+20(2248+202248)djnz r6,d2 220+22020djnz r5,d1 220ret 2上面的延時程序為0.220081s。(2)單片機的 p1.0端口的輸出控制方法:如圖1.1所示,根據(jù)發(fā)光二極管的單向導電性,當單片機的p1.0端口輸出高電平,即p1.01時,發(fā)光二極管d1熄滅;當單片機的p1.0端口輸出低電平,即p1.00時,發(fā)光二極管d1亮??梢允褂胹etbp1.0指令使單片機的p1.0端口輸出高電平,使用clrp1.0指令使單片機的p1.0端口輸出低電平。六、程序流程圖(如圖1.2所示)圖1.2 led閃爍燈設計流程

10、圖七、匯編源程序org 0000h;系統(tǒng)復位ljmp start;轉入主程序org 0003h;外部中斷0reti;中斷返回org 000bh;定時器0溢出中斷retiorg 0013h;外部中斷1retiorg 001bh;定時器1溢出中斷retiorg 0023h;外部中斷2retiorg 0100hstart: clr p1.0;和p1.0口接的二極管亮lcall delay200ms;延時0.2秒 setb p1.0;和p1.0口接的二極管滅 lcall delay200ms;延時0.2秒 ljmp start;循環(huán)delay200ms: mov r5,#20 ;延時子程序 d1: m

11、ov r6,#20 d2: mov r7,#248 djnz r7,$ djnz r6,d2 djnz r5,d1 retend八、c語言源程序#include sbit l1=p10; void delay02s(void)/延時子程序/ unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); void main(void) /主程序/ while(1) /進入循環(huán)/ l1=0; /指示燈亮/ delay02s();/延時0.2秒/ l1=1; /指示燈滅/ delay02s(); /延時0.2秒/ 九、注

12、意事項(1)用keil軟件時,注意中文說明及注釋。(2) 用匯編語言編寫程序時不區(qū)分大小寫,但用c語言編寫程序時注意區(qū)分大小寫。(3)匯編語言和c語言定義口的方式不同,如匯編語言為p1.0,p2.0,p3.0,而c語言為p1_0 ,p2_0 ,p3_0。實驗二 模擬開關控制指示燈設計一、實驗目的1、掌握單片機外圍常用電路的固定接法。2、掌握單片機利用模擬開關控制指示燈的簡單設計。二、設計原理如圖2.1所示,用發(fā)光二極管監(jiān)視模擬開關的狀態(tài)。如果模擬開關合上,發(fā)光二極管點亮;如果模擬開關打開,發(fā)光二極管熄滅。三、參考電路圖2.1 模擬開關控制指示燈原理圖四、電路硬件說明如圖2.1所示,模擬開關sw

13、1通過8聯(lián)撥動撥碼開關連接在單片機的p3.0端口上,用發(fā)光二極管d1(通過8聯(lián)撥動撥碼開關接在單片機的p1.0端口上)顯示模擬開關sw1的狀態(tài)。當模擬開關sw1斷開時,單片機的p3.0端口為高電平;當模擬開關閉合時,單片機的p3.0端口為低電平。五、程序設計內容(1)開關狀態(tài)的檢測過程對于單片機來說,開關狀態(tài)的檢測是從單片機的p3.0端口輸入信號,然而輸入的信號只有高、低電平兩種。當撥動開關sw1撥上去(輸入高電平)時,撥動開關sw1斷開;當撥動開關sw1撥下來(輸入低電平)時,撥動開關sw1閉合。單片機可以采用jbbit或者jnbbit指令來完成對撥動開關狀態(tài)的檢測。(2)輸出控制如圖2.1

14、所示,當單片機的p1.0端口輸出為高電平,即p1.01時,根據(jù)發(fā)光二極管的單向導電性可知,這時發(fā)光二極管d1熄滅;當單片機的p1.0端口輸出為低電平,即p1.00時,發(fā)光二極管d1亮??梢允褂胹etbp1.0指令使單片機的p1.0端口輸出高電平,使用clrp1.0指令使單片機p1.0端口輸出低電平。六、程序流程圖(如圖2.2所示)圖2.2 模擬開關控制指示燈程序流程圖七、匯編源程序org0000h;程序復位入口地址ljmpstart;跳到主程序org0003h;外部中斷0入口地址reti;中斷返回org000bh;定時器中斷0入口地址reti;中斷返回org0013h;外部中斷1入口地址ret

15、i;中斷返回org001bh;定時器中斷1入口地址reti;中斷返回org0023h;串行口中斷入口地址reti;中斷返回org002bh;定時器中斷2入口地址reti;中斷返回org0100hstart: jb p3.0,nex;p3.0為1,則跳nex clr p1.0;p1.0亮 sjmp startnex: setb p1.0;p1.0滅 sjmp startend八、c語言源程序#includemain()if(p3_0=1)p1_0=0;/p1_0亮/elsep1_0=1; /p1_0滅/九、注意事項 如果程序下載到實驗板上后,要把8聯(lián)撥動撥碼開關jp2和jp4的相應開關合上去。實

16、驗三 多路開關狀態(tài)指示設計一、實驗目的利用多路模擬開關進行指示燈控制。二、設計原理如圖3.1所示,單片機的p1.0p1.3端口通過8聯(lián)撥動撥碼開關連接四個發(fā)光二極管d1d4。單片機的p3.0p3.3端口通過8聯(lián)撥動撥碼開關連接四個撥動開關sw1sw4。編程時將撥動開關的狀態(tài)反映到發(fā)光二極管上(開關閉合,對應的燈亮,開關斷開,對應的燈滅)。三、參考電路圖3.1 多路開關狀態(tài)指示電路原理圖四、電路硬件說明如圖3.1所示,撥動開關sw1、sw2、sw3、sw4通過8聯(lián)撥動撥碼開關jp2接連單片機的p3.0、p3.1、p3.2、p3.3端口。單片機的p1.0、p1.1、p1.2、p1.3口通過8聯(lián)撥動

17、撥碼開關jp4分別連接四個指示燈d1、d2、d3、d4。五、程序設計內容(1)開關狀態(tài)檢測撥動開關狀態(tài)的檢測,對于單片機來說,是一種輸入關系,輪流檢測每個開關的狀態(tài),根據(jù)每個開關的狀態(tài)讓相應的發(fā)光二極管指示顯示。在編寫程序時,可以使用 jbp3.x或jnbp3.x指令來完成指示控制。(2)單片機的輸出控制根據(jù)撥動開關sw1、sw2、sw3、sw4的狀態(tài),經(jīng)由發(fā)光二極管d1d4來指示顯示。在編寫程序時,可以用setbp1.x和clrp1.x指令來完成。六、程序流程圖(如圖3.2所示)圖3.2 多路開關狀態(tài)指示流程圖七、匯編源程序org0000h;程序復位入口地址ljmpstart;跳到主程序or

18、g0003h;外部中斷0入口地址reti;中斷返回org000bh;定時器中斷0入口地址reti;中斷返回org0013h;外部中斷1入口地址reti;中斷返回org001bh;定時器中斷1入口地址reti;中斷返回org0023h;串行口中斷入口地址reti;中斷返回org0100hstart:lcallkaiguan;調用檢測開關狀態(tài)子程序ljmpstart;跳回繼續(xù)檢測kaiguan:jbp3.0,n1;判斷p3.0是否按下clrp1.0;p3.0按下則亮p1.0sjmpm1;跳到 m1n1:setbp1.0;p3.0沒有按下則滅p1.0m1:jbp3.1,n2;判斷p3.1是否按下cl

19、rp1.1;p3.1按下則亮p1.1sjmpm2;跳到 m2n2:setbp1.1;p3.1沒有按下則滅p1.1m2:jbp3.2,n3;判斷p3.2是否按下clrp1.2;p3.2按下則亮p1.2sjmpm3;跳到 m3n3:setbp1.2;p3.2沒有按下則滅p1.2m3:jbp3.3,n4;判斷p3.3是否按下clrp1.3;p3.3按下則亮p1.3sjmpm4;跳到 m4n4:setbp1.3;p3.3沒有按下則滅p1.3m4:ljmpkaiguan;跳回檢測開關狀態(tài)子程序進行循環(huán)ret;子程序返回end;結束八、c語言源程序#includemain()if(p3_0=0)p1_0=

20、0; elsep1_0=1; if(p3_1=0) p1_1=0; elsep1_1=1; if(p3_2=0)p1_2=0;elsep1_2=1; if(p3_3=0)p1_3=0; elsep1_3=1;九、注意事項(1)程序下載到實驗板上后,要把8聯(lián)撥動撥碼開關jp2和jp4的相應按鍵合上去。(2)與8聯(lián)撥動撥碼開關jp4相連的指示燈是高電平亮,低電平滅。實驗四 廣告燈左、右移設計一、實驗目的1.初步了解廣告燈的移動設計。2.掌握循環(huán)移動的原理。二、設計原理如圖4.1所示,八個發(fā)光二極管d1d8通過8聯(lián)撥動撥碼開關jp4分別連接在單片機的p1.0p1.7端口上,做單一燈的左移右移。如果單

21、片機的p1端口輸出為“0”時,發(fā)光二極管亮,依次為p1.0p1.1p1.2p1.3p1.7p1.6p1.0亮,重復循環(huán)。三、參考電路圖4.1 廣告燈左、右移設計電路原理圖四、電路硬件說明把“單片機系統(tǒng)”區(qū)域中的單片機的p1.0p1.7端口通過8聯(lián)撥動撥碼開關jp4連接到“八路發(fā)光二極管指示模塊”區(qū)域中的d1d8端口上,要求:p1.0對應著d1,p1.1對應著d2,p1.7對應著d8。五、程序設計內容運用輸出端口指令movp1,a或movp1,data,給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達到輸出控制的動作。每次送出的數(shù)據(jù)是不同的,具體的數(shù)據(jù)如下表4.2所示表4.2 8個led循環(huán)顯示真

22、值表p1.7 p1.6 p1.5 p1.4 p1.3 p1.2 p1.1 p1.0 說明 d8 d7 d6 d5 d4 d3 d2 d1 11111110 d1亮1111110 1d2亮111110 11d3亮11110 111d4亮1110 1111d5亮110 11111d6亮10 111111d7亮0 1111111d8亮六、程序流程圖(如圖4.3所示) 圖4.3 廣告燈左右移程序流程圖七、匯編源程序org 0000h;系統(tǒng)復位ljmp start;轉入主程序org 0003h;外部中斷0reti;中斷返回org 000bh;定時器0溢出中斷retiorg 0013h;外部中斷1reti

23、org 001bh;定時器1溢出中斷retiorg 0023h;外部中斷2retiorg 0100hstart:mov r2,#7 mov a,#0feh setb c ;給cy置1loop:mov p1,a lcall delay rlc a ;帶進位左移djnz r2,loop ;r2減1不為0轉到loopmov r2,#8 loop1:mov p1,a lcall delayrrc a ;帶進位右移djnz r2,loop1 ;r2減1不為0轉到loop1ljmp start delay:mov r5,#20;延時0.2秒子程序d1:mov r6,#20 d2:mov r7,#248 d

24、jnz r7,$ djnz r6,d2 djnz r5,d1 ret end 八、c語言源程序#include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) /延時子程序/ unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); void main(void) while(1) temp=0xfe; p1=temp; delay(); for(i=1;i8;i+) a=temp(8-i); /向右移8-i位/

25、p1=a|b; /a或b/ delay(); for(i=1;ii; b=temp(8-i); p1=a|b; delay(); 九、注意事項(1)程序下載到實驗板上后,要把8聯(lián)撥動撥碼開關jp4的相應按鍵合上去。(2)用c語言編寫程序,利用左移和右移指令時,移入單元的數(shù)為0。(3)在硬件電路中,發(fā)光二極管和電源之間必須加上合適的電阻。實驗五 查詢法設計廣告燈一、實驗目的1.熟悉廣告燈的移動設計。2.掌握查詢法在單片機編程中的使用。二、設計原理利用取表的方法,使單片機的p1端口做單一燈的變化:左移2次,右移2次,閃爍2次(間隔的時間為0.2秒)。三、參考電路圖5.1 查詢設計廣告燈電路原理圖四

26、、電路硬件說明在“單片機系統(tǒng)”區(qū)域中,把單片機的p1.0p1.7端口通過8聯(lián)撥動撥碼開關jp4連接到“八路發(fā)光二極管指示模塊”區(qū)域中的d1d8端口上。要求:p1.0對應d1,p1.1對應d2,p1.7對應d8。五、程序設計內容在利用表格進行程序設計時,要用以下的指令來完成:(1) 利用movdptr,data16指令使數(shù)據(jù)指針寄存器指到數(shù)據(jù)表格的首地址。(2) 利用movca,adptr指令,根據(jù)累加器a的值再加上dptr的值,就可以使程序計數(shù)器pc指針指到表格內所需要取出的數(shù)據(jù)。因此,只要把控制碼組建圖5.2 查詢法設計廣告燈流程圖成一個表格,利用movca,adptr做取控制碼的操作,就可

27、方便地處理一些復雜的控制動作。 六、程序流程圖(如圖5.2所示)七、匯編源程序org 0000h;系統(tǒng)復位ljmp start;轉入主程序org 0003h;外部中斷0reti;中斷返回org 000bh;定時器0溢出中斷retiorg 0013h;外部中斷1retiorg 001bh;定時器1溢出中斷retiorg 0023h;外部中斷2retiorg 0100hstart:mov dptr, #table ;把表格首地址給dptrloop:clra ;a賦0movc a,a+dptr;查表得值送給a中cjne a,#01h,loop1 ;比較a等于#01,程序結束;否則跳轉sjmp sta

28、rt loop1:mov p1,a ;把a送入p1口lcall delay1 ;調用延時inc dptr ;dptr加1sjmp loop delay1:mov r3,#20 ;延時0.2s子程序delay:mov r4,#20 d1:mov r5,#248 djnz r5,$ djnz r4,d1 djnz r3,delay ret table:db 0feh,0fdh,0fbh,0f7h ;數(shù)據(jù)表格db 0efh,0dfh,0bfh,07fh db 0feh,0fdh,0fbh,0f7h db 0efh,0dfh,0bfh,07fh db 07fh,0bfh,0dfh,0efh db 0f

29、7h,0fbh,0fdh,0feh db 07fh,0bfh,0dfh,0efh db 0f7h,0fbh,0fdh,0feh db 00h, 0ffh,00h, 0ffh db 01h end 八、c語言源程序#include unsignedchar code table=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,0xf

30、e, 0x00,0xff,0x00,0xff, 0x01;/數(shù)據(jù)數(shù)組/ unsigned char i; /定義全局變量/void delay(void) /延時子程序/ unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); void main(void) while(1) /循環(huán)/ if(tablei!=0x01) /判斷是否查完表格/ p1=tablei; i+; delay(); else i=0; 九、注意事項(1)利用c語言編寫程序時,一定要注意合局變量和局部變量的定義。(2)利用匯編語言編寫程序

31、時,注意16位數(shù)據(jù)指針dptr的用法。實驗六 報警產生器設計一、實驗目的掌握利用單片機產生音頻信號的方法。二、設計原理利用單片機產生1khz的信號,并且讓此信號響100ms;再利用單片機產生500hz的信號,并且讓此信號響200ms。同時讓這兩個信號交替產生。通過單片機的p1.0端口輸出1khz和500hz的音頻信號驅動揚聲器,作為報警信號。單片機的 p3.0端口通過8聯(lián)撥動撥碼開關連接一撥動開關(如sw1)進行控制。撥動開關閉合時報警器報警,斷開時報警器停止報警。三、參考電路圖6.1 報警產生器原理圖四、電路硬件說明把單片機的p1.0端口連接到“音頻放大模塊”區(qū)域中的spk in端口上;p3

32、.0端口連接到“八路撥動開關”區(qū)域中的k1端口上,并在“音頻放大模塊”區(qū)域中的spk out端口上接上一個8歐的或者是16歐的喇叭。五、程序設計內容500hz信號周期為2ms,信號電平為每1ms取反1次,1khz的信號周期為1ms,信號電平每500us取反1次,以此來產生報警信號。六、程序流程圖(如圖6.2所示)圖6.2 報警產生器流程圖七、匯編源程序flagbit00horg0000hljmpstartorg0003hretiorg000bhretiorg0013hretiorg001bhretiorg0023hretiorg002bhreti;主程序;org0100hstart:lcall

33、baojing1lcallbaojing2ljmpstart;500hz報警信號程序;baojing1:movr2,#200dv:cplp1.0lcalldelay500lcalldelay500djnzr2,dvret;1khz報警信號程序;baojing2:movr2,#200dv1:cplp1.0lcalldelay500djnzr2,dv1ret;500us延時程序;delay500:movr7,#249loop:djnzr7,loopret;結束標志;end八、c語言源程序#include #include unsigned char count; void dely500(void

34、) /延時子程序/ unsigned char i; for(i=250;i0;i-) _nop_(); void main(void) while(1) /程序循環(huán)/ if(p3_0=0) /判斷p3.0是否按下/ for(count=200;count0;count-) p1_0=p1_0; dely500(); for(count=200;count0;count-) p1_0=p1_0; dely500(); dely500(); 九、注意事項(1)程序下載后,一定要把8聯(lián)撥動撥碼開關jp5的第一個開關撥上去。(2)程序下載后,要把8聯(lián)撥動撥碼開關jp3撥下,8聯(lián)撥動撥碼開關jp2撥上

35、去。實驗七 i/o并行口直接驅動led顯示設計一、實驗目的1.了解靜態(tài)數(shù)碼管的顯示方法。2.掌握共陰極數(shù)碼管和共陽極數(shù)碼管的接法以及區(qū)別。二、設計原理如圖7.1所示,利用單片機p0端口的p0.0p0.7連接到一個共陰數(shù)碼管ds1的ah的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示09數(shù)字,顯示時間間隔為0.2秒。三、參考電路圖7.1 i/o并行口直接驅動led顯示電路原理圖四、電路硬件說明在“單片機系統(tǒng)”區(qū)域中,把單片機的p0.0p0.7端口連接到靜態(tài)數(shù)碼管ds1上的ah端口上;要求:p0.0與a相連,p0.1與b相連,p0.2與c相連,p0.7與h相連。五、程序設計內容(1)led數(shù)碼顯示

36、原理:led數(shù)碼管內部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據(jù)發(fā)光二極管的連接形式,可分為共陰極型和共陽極型。led數(shù)碼管的a-g七個發(fā)光二極管加正向電壓導通發(fā)亮,加反向電壓截止熄滅。不同亮暗的二極管組合形成不同的字形,這種組合稱之為字形碼。見表7.2為共陰極數(shù)碼管的字形碼表。(2)由于數(shù)碼管顯示數(shù)字09的字形碼沒有規(guī)律,只能采用查表的方式來完成所需要的要求。這樣按著數(shù)字09的順序,把每個數(shù)字的筆段代碼按順序排好并建立的表格如下所示:tabledb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh表7.2 共陰極的字形碼表“0”3fh “8”7fh “1

37、”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 六、程序流程圖(如圖7.3所示)圖7.3 i/o并行口直接驅動led顯示流程圖七、匯編源程序org0000hljmpstartorg0003hretiorg000bhretiorg0013hretiorg001bhretiorg0023hretiorg002bhreti;主程序;org0100hstart:lcallxianshiljmpstart;顯示程序;xianshi:movr1,#00hnext:

38、mova,r1movdptr,#tablemovca,a+dptrmovp0,alcalldelayincr1cjner1,#10,nextret;200ms延時程序;delay:movr5,#20d1:movr6,#20d2:movr7,#248djnzr7,$djnzr6,d2djnzr5,d1ret;數(shù)碼譯碼表;table:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;結束標志;end八、c語言源程序#includeunsignedcharcodetable=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f

39、,0x6f;voiddelay200ms(void)/延時0.2秒的程序/unsignedchari,j,k;for(i=20;i0;i-)for(j=20;j0;j-)for(k=248;k0;k-);voidmain(void)unsignedchara;while(1)for(a=0;a10;a+)p0=tablea;/取表中的數(shù)給p0口/delay200ms();/每0.2秒顯示一個數(shù)碼/九、注意事項1.當數(shù)碼管顯示數(shù)碼時,一定要分清共陰極和共陽極。2.下載程序后一定要把單排針接插件j5的跳線帽加到oe/vcc端。實驗八 單鍵識別設計一、實驗目的1.了解按鍵識別方法。2.掌握按鍵的消抖

40、方法。3.了解加法計數(shù)的原理。二、設計原理每按下一次按鍵開關s18,計數(shù)值加1,然后通過和單片機的p1端口相連的“八路發(fā)光二極管指示模塊”區(qū)域中的d1d8顯示出相應的二進制計數(shù)值。三、參考電路圖8.1 單鍵識別電路原理圖四、電路硬件說明(1)在“單片機系統(tǒng)”區(qū)域中,把單片機的p3.7端口通過8聯(lián)撥動撥碼開關jp2連接到“獨立式鍵盤”區(qū)域中的s18端口上。(2)在“單片機系統(tǒng)”區(qū)域中,把單片機的p1.0p1.7端口通過8聯(lián)撥動撥碼開關jp4連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“d1d7”端口上;要求,p1.0連接發(fā)光二極管d1,p1.1連接發(fā)光二極管d2,p1.2連接發(fā)光二極管d3,p1.3

41、連接發(fā)光二極管d4,p1.4連接發(fā)光二極管d5,p1.5連接發(fā)光二極管d6,p1.6連接發(fā)光二極管d7,p1.7連接發(fā)光二極管d8。五、程序設計內容(1)作為一個按鍵,完整的過程是從沒有按下到按下再到釋放。也就是說,當按下一個按鍵時,某個命令只執(zhí)行一次,然而在按鍵按下的過程中,不允許有干擾進來。因為,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這不是所想要的。因此在按鍵按下的時候,就要把手動造成的干擾信號以及按鍵的機械接觸等干擾信號濾除掉。一般情況下,可以采用電容來濾除掉這些干擾信號,但實際上,這會增加硬件成本及硬件電路的體積,因此采用軟件濾波的方法去除這些干擾信號。一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基本上進入了穩(wěn)定的狀態(tài)。具體的一個按鍵從按下到釋放的全過程的信號圖如下圖8.2所示:圖8.2 干擾信號示意圖從圖中可以看出,在程序設計時,從按鍵被識別按下之后,延時5ms以上,從而避開了干擾信號區(qū)域。再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時肯定輸出為低電平。如果這時檢測到的是高電平,證明剛才是由干擾信號引起的誤觸發(fā),cpu就認為是誤觸發(fā)信號而舍棄這次的按鍵識別

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論