單片機(jī)實(shí)驗(yàn)報(bào)告山東大學(xué)_第1頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告山東大學(xué)_第2頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告山東大學(xué)_第3頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告山東大學(xué)_第4頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告山東大學(xué)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 第三單元Proteus 系統(tǒng)仿真實(shí)驗(yàn)實(shí)驗(yàn)一 基本并行口I/O口實(shí)驗(yàn) 自我完成實(shí)驗(yàn)1、 實(shí)驗(yàn)要求當(dāng)按鍵 SW1 按下之后,D1-D8 輪流點(diǎn)亮,點(diǎn)亮?xí)r間為 100ms,當(dāng)按鍵停下后,停止輪換,再次按下后繼續(xù)輪換。2、編程思路進(jìn)行初始化工作,包括設(shè)置堆棧指針 SP,將 P2 口所有位設(shè)置為 1,使 P2 口所接發(fā)光二極管全部熄滅。將顯示緩沖單元(設(shè)為 20H 單元)初始化為 FEH。 從 P1 口讀數(shù)據(jù),查看 P1.0 位,如果 P1.0 位為 0,則執(zhí)行如下循環(huán):將顯示緩沖單元的值送給 P2 口,調(diào)用 100ms 延時(shí)程序,將顯示緩沖單元的值循環(huán)左移 1 位,再送回顯示緩沖單元。如果 P1.0

2、 位不為 0 則不執(zhí)行上述循環(huán)。重復(fù)上面的操作3、實(shí)驗(yàn)步驟 根據(jù)上述實(shí)驗(yàn)內(nèi)容,參考 1.2.2,在 Proteus 環(huán)境下建立圖 3.5 所示原理圖,并將其保 存為 basicIO_self.DSN 文件。 根據(jù)(2)和(3)編寫控制源程序,將其保存為 basicIO_self.asm。 將源程序添加到 U1 中,并構(gòu)造(build)該程序。 執(zhí)行仿真過(guò)程觀察 D1-D8 的指示,查看程序功能是否正確。 修改延時(shí)程序延時(shí)參數(shù),重新執(zhí)行和。4、源程序ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60HMOV P2,#0FFHMOV A,#0FEHMOV 20H,

3、A;緩沖單元LOOP:JNB P1.0,LOOP1; ;如果P1.0=0,跳轉(zhuǎn)SJMP LOOP ;否則循環(huán)不斷檢測(cè)LOOP1:MOV P2,20H ;將緩沖單元內(nèi)的值給P2口LCALL DELAY100MS ;延時(shí)100ms;MOV A,20HRL A ;左移一位MOV 20H,AJB P1.0,LOOP;如果P1.0=1,跳轉(zhuǎn)到LOOP處LJMP LOOP1;否則循環(huán)DELAY100MS:MOV R7,#200;1usDL:MOV R6,#248 ;1us DJNZ R6,$;248*2=496us NOP;1us DJNZ R7,DL;2us RET;(496+1+1+2)*200+1=

4、100.001msEND5、電路圖6、仿真結(jié)果當(dāng)按鍵 SW1 按下之后,D1-D8 輪流點(diǎn)亮,點(diǎn)亮?xí)r間為 100ms,當(dāng)按鍵停下后,停止輪換,再次按下后繼續(xù)輪換。實(shí)驗(yàn)二 擴(kuò)展并行I/O口實(shí)驗(yàn) 自我完成實(shí)驗(yàn)1、實(shí)驗(yàn)要求仿真實(shí)現(xiàn)交通信號(hào)燈控制功能??刂祈樞?yàn)椋?南北綠燈亮,同時(shí)東西紅燈亮 10s; 南北黃燈亮,同時(shí)東西紅燈亮 2s; 南北紅燈亮,同時(shí)東西綠燈亮 10s; 東西黃燈亮,同時(shí)南北紅燈亮 2s; 重復(fù)。2、編程思路進(jìn)行初始化工作,包括設(shè)置堆棧指針 SP,將兩個(gè) 373 的輸出口所有位均設(shè)置為 1,使所有發(fā)光二極管全部熄滅。分析兩個(gè) 373 的地址:假定所有無(wú)關(guān)地址均定義為 1,那么 U4

5、 的鎖存地址為:#0FE00H,U5 的鎖存地址為:#0FD00H。分析 4 個(gè)狀態(tài)下兩個(gè) 373 的輸出數(shù)據(jù)值:假定“南北綠燈亮,同時(shí)東西紅燈亮”為狀態(tài) 1,即:Stat1;“南北黃燈亮,同時(shí)東西紅燈亮”為狀態(tài) 2,即:Stat2;“南北紅燈亮,同時(shí)東西綠燈亮”為狀態(tài) 3,即:Stat3;“東西黃燈亮,同時(shí)南北紅燈亮”為狀態(tài) 4,即:Stat4。3、實(shí)驗(yàn)步驟 根據(jù)上述實(shí)驗(yàn)內(nèi)容,參考 1.2.2,在 Proteus 環(huán)境下建立圖 3.7 所示原理圖,并將其保存為 expandIO_self.DSN 文件。 根據(jù)(2)和(3)編寫控制源程序,將其保存為 expandIO_self.asm。 將源

6、程序添加到 U1 中,并構(gòu)造(build)該程序。 執(zhí)行仿真過(guò)程觀察各個(gè)方向的交通信號(hào)燈指示,查看程序功能是否正確。4、源程序ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60HMOV A,#0FFHMOV DPTR,#0FE00HMOVX DPTR,AMOV DPTR,#0FD00HMOVX DPTR,ASTAT1:MOV A,#0F3HMOV DPTR,#0FE00HMOVX DPTR,AMOV A,#0CHMOV DPTR,#0FD00HMOVX DPTR,ALCALL DELAY10SSTAT2:MOV A,#0C3HMOV DPTR,#0FE00HM

7、OVX DPTR,AMOV A,#0FHMOV DPTR,#0FD00HMOVX DPTR,ALCALL DELAY2SSTAT3:MOV A,#0FCHMOV DPTR,#0FE00HMOVX DPTR,AMOV A,#03HMOV DPTR,#0FD00HMOVX DPTR,ALCALL DELAY10SSTAT4:MOV A,#3CHMOV DPTR,#0FE00HMOVX DPTR,AMOV A,#0FHMOV DPTR,#0FD00HMOVX DPTR,ALCALL DELAY2SLJMP STAT1DELAY2S:MOV R7,#20DL2:MOV R6,#200DL1:MOV R

8、5,#250DJNZ R5,$DJNZ R6,DL1DJNZ R7,DL2RETDELAY10S:MOV R7,#100DL3:MOV R6,#200DL4:MOV R5,#250DJNZ R5,$DJNZ R6,DL4DJNZ R7,DL3RETEND 5、電路圖6、實(shí)驗(yàn)結(jié)果 南北綠燈亮,同時(shí)東西紅燈亮 10s; 南北黃燈亮,同時(shí)東西紅燈亮 2s; 南北紅燈亮,同時(shí)東西綠燈亮 10s; 東西黃燈亮,同時(shí)南北紅燈亮 2s;實(shí)驗(yàn)三 靜態(tài)LED顯示實(shí)驗(yàn) 自我完成實(shí)驗(yàn)1、實(shí)驗(yàn)要求圖中 7SEG2 為十位顯示數(shù)碼管,7SEG1 為個(gè)位顯示數(shù)碼管,KEY_LOAD 為倒計(jì)時(shí)初值按鈕,KEY_START

9、為倒計(jì)時(shí)啟動(dòng)按鈕。要求實(shí)現(xiàn)的功能是:當(dāng) KEY_LOAD 按鈕按下時(shí)加載倒計(jì)時(shí)初值(如:10s),當(dāng)按下 KEY_START 按鈕時(shí),開(kāi)始倒計(jì)時(shí),每過(guò) 1s,計(jì)時(shí)器減 1,直到減到“00”為止。減到“00”時(shí)使 P3.0 引腳上的 LED 按 10Hz 頻率進(jìn)行閃爍,直到再次按下 KEY_LOAD 按鈕才重新加載初值,并熄滅 LED。再次按下 KEY_START 按鈕又一次開(kāi)始倒計(jì)時(shí),如此反復(fù)。2、編程思路分析兩個(gè) 373 的地址:假定所有無(wú)關(guān)地址均定義為 1,那么 U2 的鎖存地址為:#0FE00H,U3 的鎖存地址為:#0FD00H。程序流程圖:3、實(shí)驗(yàn)步驟 根據(jù)上述實(shí)驗(yàn)內(nèi)容,參考 1.2

10、.2,在 Proteus 環(huán)境下建立圖 3.9 所示原理圖,并將其保存為 staticLED_self.DSN 文件。 根據(jù)(2)和(3)編寫控制源程序,將其保存為 staticLED_self.asm。 將源程序添加到 U1 中,并構(gòu)造(build)該程序。 執(zhí)行仿真過(guò)程觀察秒表程序功能是否正確。4、源程序ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60H;堆棧初始化MOV R0,#0;各位MOV R1,#1;十位SETB P3.0;關(guān)掉LED1CLR F0LOOP:JB P1.1,LOOP2;如果P1.1=1,跳轉(zhuǎn)到LOOP2,LOOP1:CLR F0M

11、OV 30H,R0MOV 31H,R1;裝載初值SETB P3.0;關(guān)閉LED1LCALL DISPLAY;顯示LOOP2:JB P1.0,LOOP;如果P1.0=1,跳回LOOP,否則繼續(xù)執(zhí)行LOOP3:LCALL DISPLAY;刷新顯示LCALL DELAY1S;延時(shí)1sLCALL ADJUST2;調(diào)整計(jì)時(shí)器寄存器JB F0,LOOP4LJMP LOOP3LOOP4:CLR P3.0 ;LED閃爍程序LCALL DELAY100MSSETB P3.0LCALL DELAY100MSJB P1.1,LOOP4LJMP LOOP1DISPLAY: ;顯示子程序 MOV A,30HMOV DP

12、TR,#TABLEMOVC A,A+DPTRMOV DPTR,#D1ADDMOVX DPTR,AMOV A,31HMOV DPTR,#TABLEMOVC A,A+DPTRMOV DPTR,#D10ADDMOVX DPTR,ARETADJUST2:DEC 30HMOV A,30HCJNE A,#-1,GOTORETMOV 30H,#9DEC 31HMOV A,31HCJNE A,#-1,GOTORETSETB F0RETGOTORET:RETDELAY1S:MOV R7,#10DL2:MOV R6,#200DL1:MOV R5,#250DJNZ R5,$DJNZ R6,DL1DJNZ R7,DL

13、2RETDELAY100MS:MOV R7,#200DL:MOV R6,#248 DJNZ R6,$ NOP DJNZ R7,DL RETTABLE: DB 0C0H,0f9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HD1ADD EQU 0FE00H ;U3的鎖存地址D10ADD EQU 0FD00HEND5、電路圖6、仿真結(jié)果當(dāng) KEY_LOAD 按鈕按下時(shí)加載倒計(jì)時(shí)初值(如:10s),當(dāng)按下 KEY_START 按鈕時(shí),開(kāi)始倒計(jì)時(shí),每過(guò) 1s,計(jì)時(shí)器減 1,直到減到“00”為止。減到“00”時(shí)使 P3.0 引腳上的 LED 按 10Hz 頻率進(jìn)行閃爍,直到再次按

14、下 KEY_LOAD 按鈕才重新加載初值,并熄滅 LED。再次按下 KEY_START 按鈕又一次開(kāi)始倒計(jì)時(shí),如此反復(fù)。實(shí)驗(yàn)四 矩陣鍵盤掃描實(shí)驗(yàn) 自我完成實(shí)驗(yàn)1、實(shí)驗(yàn)要求 D1D8 八個(gè)發(fā)光二極管構(gòu)成彩色旋轉(zhuǎn)燈,D9D13 為檔位指示燈,一檔旋轉(zhuǎn)速度最慢(周期 1s,D13 亮),二檔較快(周期 0.8s,D12 亮),三檔更快(周期 0.6s,D11 亮),四檔再快(周期 0.4s,D10 亮),五檔最快(周期 0.2s,D10 亮)。四個(gè)按鍵 KEY0-KEY1于設(shè)定旋轉(zhuǎn)方向?yàn)轫槙r(shí)針旋轉(zhuǎn)或者逆時(shí)針旋轉(zhuǎn),KEY2-KEY3 用于增快或則減慢旋轉(zhuǎn)速度。2、編程思路按鍵掃描的方式可以采用前面示例

15、程序中的方法:線反轉(zhuǎn)法或行掃描法??梢杂脜R編語(yǔ)言實(shí)現(xiàn),也可以用 C 語(yǔ)言實(shí)現(xiàn)。建議如前面示例所示,匯編采用行掃描法,C 語(yǔ)言用線反法。程序控制流程是:首先初始化設(shè)置默認(rèn)運(yùn)行參數(shù),然后讀取按鍵,識(shí)別鍵碼,并根據(jù)鍵碼的不同執(zhí)行運(yùn)行參數(shù)調(diào)整,最后根據(jù)當(dāng)前的運(yùn)行參數(shù)執(zhí)行發(fā)光二極管 D1-D8 的輪流旋轉(zhuǎn)。速度的控制通過(guò)控制調(diào)用延時(shí)程序的次數(shù)來(lái)決定,假設(shè)延時(shí)程序的延時(shí)長(zhǎng)度為 5ms。延時(shí)程序可以按如下方式實(shí)現(xiàn)(假設(shè)晶振頻率為 12MHz):void delays()uchar t,ms;ms=5; /延時(shí) 5mswhile(ms-) for(t=0;t120;t+);或者采用內(nèi)嵌匯編來(lái)實(shí)現(xiàn):void d

16、elays()#pragma asmMOV R2,#50 /;5ms 延時(shí)程序DL1:MOV R1,#48DL2:DJNZ R1,DL2 / ;內(nèi)循環(huán) 100usNOPDJNZ R2,DL1 /;中循環(huán) 10ms#pragma endasm旋轉(zhuǎn)彩燈線反轉(zhuǎn)法 C 語(yǔ)言程序控制流程圖(1)主控流程圖 (2)鍵盤掃描子程序 Keyscan 流程圖旋轉(zhuǎn)彩燈行掃描法匯編控制流程圖3、實(shí)驗(yàn)步驟 根據(jù)上述實(shí)驗(yàn)內(nèi)容,參考 1.2.2,在 Proteus 環(huán)境下建立圖 3.11 所示原理圖,并將其保存為 keyscan_self.DSN 文件。 根據(jù)(2)和(3)編寫控制源程序,將其保存為 keyscan_se

17、lf.asm 或 keyscan_self.c。 將源程序添加到 U1 中,并構(gòu)造(build)該程序。 執(zhí)行仿真過(guò)程觀察秒表程序功能是否正確。4、源程序#includereg52.h#includeintrins.h#define uchar unsigned char#define uint unsigned intsbit g0=P04;uchar code T_TABLE=200,160,120,80,40;/周期值表uchar code key_code=0x22,0x12,0x21,0x11;void delay()/延時(shí)5msuchar t,ms;ms=5;while(ms-)f

18、or(t=0;t120;t+);void main()int aa=0xfe;uint dir=1;uint speed=0;int temp,temp2,keycode;int j,key;g0=0;while(1)P3=0x30;temp=P3;if(temp&0x30)!=0x30)/按鍵檢測(cè)delay();delay();P3=0x30;temp=P3;if(temp&0x30)!=0x30)P3=0x03;temp2=P3;keycode=temp|temp2;for(j=0;j4;j+)if(keycode=key_codej)key=j;if(key=0) dir=1;/正轉(zhuǎn)if

19、(key=1) dir=0;/反轉(zhuǎn)if(key=2) speed+;if(speed=5) speed=4;/換檔if(key=3)if(speed=0) speed+;/換檔speed-;switch (speed)case 0:P0=0xef;break;case 1:P0=0xf7;break;case 2:P0=0xfb;break;case 3:P0=0xfd;break;case 4:P0=0xfe;break;default:break;P3=0x03;while(!(P3=0x03);if(dir=1)/正轉(zhuǎn)時(shí)執(zhí)行P1=aa;for(j=0;jT_TABLEspeed;j+)d

20、elay();aa=_crol_(aa,1);/左移if(dir=0)/反轉(zhuǎn)時(shí)執(zhí)行P1=aa;for(j=0;j=4;tmp2=tmp&0x0f;/高半字節(jié)SBUF=led_tabletmp1;while(!TI); /等待發(fā)送是否完畢TI=0; /置發(fā)送標(biāo)志為零SBUF=led_tabletmp2;while(!TI);/等待發(fā)送是否完畢TI=0;/置發(fā)送標(biāo)志為零while(!P11);5、電路圖6、實(shí)驗(yàn)結(jié)果當(dāng)按鍵按下時(shí),DSW1 的開(kāi)關(guān)數(shù)據(jù)能夠被單片機(jī)通過(guò) 74LS165串行讀取,并通過(guò) 74LS164 串行輸出至兩個(gè) 7 段數(shù)碼管 7SEG1 和 7SEG2 顯示,顯示的據(jù)和 DSW1

21、的開(kāi)關(guān)數(shù)據(jù)一致。實(shí)驗(yàn)七 LCD1602顯示實(shí)驗(yàn) 自我完成實(shí)驗(yàn)1、 實(shí)驗(yàn)要求要求點(diǎn)擊按鍵 KEY1 可以在 LCD1602(LM016L)第一行上顯示“Hello Everyone”,在第二行上顯示“Welcome to SDU”,并閃爍 3 次。點(diǎn)擊按鍵 KEY2 可以將 LCD1602 清屏。2、實(shí)驗(yàn)步驟 根據(jù)上述實(shí)驗(yàn)內(nèi)容,參考 1.2.2,在 Proteus 環(huán)境下建立圖 3.28 所示原理圖,并將其保存為 lcd1602.DSN 文件。 將上面(3)中控制源程序保存為 lcd1602.c。 運(yùn)行 Keil uVision2 開(kāi)發(fā)環(huán)境,按照 1.1.3 節(jié)介紹的方法建立工程 lcd1602

22、.uV2,CPU 為 AT89C51,包含啟動(dòng)文件 STARTUP.A51。 按照 1.2.2 第(6)節(jié)介紹的方法將 C 語(yǔ)言源程序 lcd1602.c 加入工程 lcd1602.uV2,并設(shè)置工程 lcd1602.uV2 屬性,將其晶振頻率設(shè)置為 11.0592MHz,選擇輸出可執(zhí)行文件,仿真方式為選擇硬仿真,并選擇其中的“PROTEUS VSM MONITOR 51 DRIVER”仿真器。 構(gòu)造(Build)工程 lcd1602.uV2。如果輸入有誤進(jìn)行修改,直至構(gòu)造正確,生成可執(zhí)行程序 lcd1602.hex 為止。 為 AT89C51 設(shè)置可執(zhí)行程序 lcd1602.hex。 運(yùn)行程

23、序,點(diǎn)擊圖 2.28 中各按鍵,觀察 1602 的顯示是否符合程序要求。3、編程思路 按鍵的掃描與識(shí)別可以參考“3.4.1 示例實(shí)驗(yàn)”中的方法。LCD1602 的顯示控制可以參考“3.7.2 LCD1602 示例實(shí)驗(yàn)”。編成時(shí)要有一個(gè)狀態(tài)變量,該變量用于記錄當(dāng)前是輸入的哪個(gè)變量。輸入第一個(gè)變量,遇到輸入運(yùn)算符時(shí)結(jié)束第一個(gè)變量的輸入。輸入第二個(gè)變量,遇到“=”號(hào)時(shí)結(jié)束第二個(gè)變量的輸入,并且開(kāi)始計(jì)算結(jié)果。計(jì)算結(jié)果由于是 16 進(jìn)制的,要將其轉(zhuǎn)換成十進(jìn)制,并將該十進(jìn)制的數(shù)轉(zhuǎn)換成字符串后逐位顯示出來(lái)。減法時(shí)要注意結(jié)果是否為負(fù),除法時(shí)要注意除數(shù)是否為 0,結(jié)果是否帶有余數(shù)。 另外,按鍵要注意去抖動(dòng)處理。

24、4、源程序#include #define uint unsigned int #define uchar unsigned charsbit lcden=P15; sbit rs=P17;sbit rw=P16;sbit busy=P27;char i,j,temp,num,num_1;long a,b,c; float a_c,b_c;uchar flag,fuhao; uchar code table=0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0;uchar code table1=0,1,2,3,4,5,6,7,8,9,0x2b-0x30,0x2d-0x30,0x2a-0x30,0x2f-0x30,0x01-0x30,0x3d-0x30;void delay(uchar z) uchar y;for(z;z0;z-) for(y=0;y0) c=a-b; else c=b-a; while(c!=0) write

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論