




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單片機實驗指導書實驗一、模擬開關燈實驗一、實驗目的1、認識單片機芯片內(nèi)部基本結構和功能;2、學習Keil和Proteus軟件的基本使用方法;3、了解了解單片機最小系統(tǒng)及單片機應用系統(tǒng)的設計過程。二、實驗說明1、單片機應用系統(tǒng)基本過程1)啟動Keil,創(chuàng)建一個項目文件*.UV2;2)選擇單片機的型號,如AT89C51;3)單擊菜單“File”→“New”命令,新建源程序文件,輸入代碼,保存為*.c;4)把源程序文件添加到項目中,在項目管理器中,在展開的“SourceGroup1”上單擊右鍵,選擇“AddFilestoGroup’SourceGroup1’”5)選中Target1,鼠標右鍵菜單“OptionsforTarget‘Target1’”命令,在“Output”選項卡中選中“CreateHEXfile”6)執(zhí)行菜單“Project”→“Rebuildalltargetfiles”命令,編譯項目并生成*.hex文件;7)打開ProteusISIS軟件,建立硬件控制電路;8)用鼠標雙擊“ATC89C51”單片機彈出對話框,在“ProgramFile”中載入編譯好的“*.HEX9)在Proteus環(huán)境中啟動調(diào)試程序,觀察仿真結果。三、實驗內(nèi)容及步驟1、實驗內(nèi)容使用單片機監(jiān)控一個按鍵開關,通過一個發(fā)光二極管顯示其工作狀態(tài)。如果開關打開,LED燈熄滅;開關合上,LED燈亮2、硬件原理圖3、軟件設計#include<reg51.h>//包含的頭文件,對單片機內(nèi)部特殊功能寄存器進行了符號定義sbitLed=P1^0;//定義位名稱sbitKey=P1^7;voidmain(){P1=0xff;while(1){Led=Key;}}畫出程序流程圖:四、思考題1、使用Keil和Proteus如何建立單片機開發(fā)系統(tǒng),描述基本過程。2、單片機的最小系統(tǒng)包含哪些電路?實驗二、流水燈實驗一、實驗目的1、學習單片機并行I/O端口的使用方法;2、學習延時子程序的編寫;3、學習Keil和Proteus軟件的基本使用方法。二、實驗說明1、P1口為一組雙向口,每位都可獨立地定義為輸入或輸出線,在作輸入線使用前,必須向鎖存器相應位寫入“1”,該位才能作為輸入(即:P1=0xff2、本實驗中延時采用循環(huán)程序來實現(xiàn),入口參數(shù)控制延時時間長短。三、實驗內(nèi)容及步驟1、實驗內(nèi)容P1口做輸出口,接八位邏輯電平顯示,編寫程序,使發(fā)光二極管循環(huán)點亮。通過一個按鍵開關控制顯示順序,如果開關打開,LED自上而下依次點亮;開關合上,LED從下向上依次點亮。2、硬件原理圖3、軟件設計1)、畫出程序流程圖2)源程序#include<reg51.h>#defineucharunsignedchar//類型重定義#defineuintunsignedintsbitKey=P0^0;//定義位名稱voidDelayMS(uintms);//延時函數(shù)原型聲明voidmain(){uchari,keyPre,shift;Key=1;while(1){keyPre=Key;if(keyPre){shift=0x01;for(i=0;i<8;i++){P1=~shift;DelayMS(200);shift<<=1;}}else{shift=0x80;for(i=0;i<8;i++){P1=~shift;DelayMS(200);shift>>=1;}}}}voidDelayMS(uintms){uchari;while(ms--)for(i=0;i<120;i++);}四、思考題1、MCS-51系列單片機的P0~P3四個I/O端口在結構上有何異同?使用時應注意的事項?實驗三、定時器實驗一、實驗目的1、學習單片機內(nèi)部計數(shù)器的使用和編程方法;2、掌握中斷處理程序的編寫方法;3、學習Keil和Proteus軟件的基本使用方法。二、實驗說明1、采用定時器方式設計一交通燈控制系統(tǒng),使道路狀態(tài)切換時間更準確。正常情況下,90s后信號燈由“紅燈”轉“黃燈”,經(jīng)過2s的過渡后“黃燈”轉“綠燈”,另外設東西方向、南北方向緊急開關各一個,緊急開關閉合時,相應方向切換成“綠燈”,以方便特種車輛通過。另設置一個開關,在晚上由人工閉合,此時所有的燈都變成黃燈。2、系統(tǒng)的晶振是12MHZ,定時器1工作于方式1,即16位定時器,定時器50000uS(50mS)中斷一次,所以定時常數(shù)的設置可按以下方法計算:定時時間=(65536-定時常數(shù))×1uS=50000uS定時常數(shù)=15536,(0x3CB0)對50mS中斷次數(shù)計數(shù)10次,就是0.5秒鐘。定時器0工作于方式1,定時20ms,定時常數(shù)=45536,(0XB1E00)。三、實驗內(nèi)容及步驟1、硬件原理圖2、軟件設計1)、畫出程序流程圖2)源程序#include<reg51.h>#include<stdio.h>unsignedchart0;voidyellow();//東西、南北方向同時打開黃燈voidyellowflash();//東西、南北方向同時打開黃燈,每隔0.5秒開始閃爍 voiddelay0_5s();//延時0.5秒voiddelayxms(unsignedchart);//延時t*0.5秒/******************************************************************函數(shù)名稱:ex_intex0;函數(shù)功能:外部中斷0服務子程序******************************************************************/voidex_intex0(void)interrupt0{ EA=0;//關閉中斷,不允許中斷嵌套 while((P3&0x04)==0)//檢測外部中斷0是否持續(xù)有效 { P1=0x1E;//東西方向綠燈亮、南北方向紅燈亮,其它四個燈關閉。 } EA=1;//打開中斷}/******************************************************************函數(shù)名稱:ex_intex1;函數(shù)功能:外部中斷1服務子程序******************************************************************/voidex_intex1(void)interrupt2{ EA=0;//關閉中斷,不允許中斷嵌套 while((P3&0x08)==0)//檢測外部中斷1是否持續(xù)有效 { P1=0x33;//東西方向紅燈亮、南北方向綠燈亮,其它四個燈關閉。 } EA=1;//打開中斷}/******************************************************************函數(shù)名稱:tm_timer0;函數(shù)功能:定時器0服務子程序******************************************************************/voidtm_timer0(void)interrupt1{ EA=0;//關閉中斷,不允許中斷嵌套 while((P3&0x40)==0)//檢測P3.6開關是否閉合 { yellow();//東西、南北方向同時打開黃燈 } TH0=0xb1;//20ms定時初值重新裝入TL0=0xe0 EA=1;//打開中斷}//主程序voidmain(){TMOD=0x11;//T1工作方式1,T0工作方式0EA=1;EX0=1;IT0=0;//打開外部中斷0EX1=1;IT1=0;//打開外部中斷1ET0=1;//打開定時器0中斷 TH0=0xb1;//20ms定時初值重新裝入TL0=0xe0 TR0=1;//啟動定時器0 while(1)//無限循環(huán) { P1=0x1e;//東西方向綠燈亮、南北方向紅燈亮,其他四個燈關閉。 delayxms(180);//延時90秒 yellowflash();//東西、南北方向同時打開黃燈,每隔0.5秒閃爍一次 P1=0x33;//東西方向紅燈亮、南北方向綠燈亮,其他四個燈關閉。 delayxms(180);//延時90秒 yellowflash();//東西、南北方向同時打開黃燈,每隔0.5秒閃爍一次 }}/******************************************************************函數(shù)名稱:yellow;功能:東西、南北方向同時打開黃燈******************************************************************/voidyellow(){ P1=0x2d;//兩個黃燈同時打開}/******************************************************************函數(shù)名稱:yellowflash;功能:東西、南北方向同時打開黃燈,每隔0.5秒閃爍一次******************************************************************/voidyellowflash(){unsignedchari;for(i=0;i<2;i++){ P1=0x2d;//兩個黃燈同時打開 delay0_5s(); P1=0xff;//兩個黃燈同時關閉 delay0_5s(); }}/******************************************************************函數(shù)名稱:delay0_5s函數(shù)功能:延時0.5s,用T1工作方式1定時50ms,再循環(huán)10次得到0.5s的延時時間******************************************************************/voiddelay0_5s(){for(t0=0;t0<10;t0++){TH1=0x3c;TL1=0xb0;TR1=1;while(!TF1);//TF1=1時50ms定時時間到TF1=0;TR1=0;}}/******************************************************************函數(shù)名稱:delayxms;函數(shù)功能:在函數(shù)delay0_5s的基礎延時,即延時t*0.5秒******************************************************************/voiddelayxms(unsignedchart){for(t0=0;t0<t;t0++)delay0_5s();}四、思考題1、如果更換不同頻率的晶振,會出現(xiàn)什么現(xiàn)象?如何調(diào)整程序?實驗四、外部中斷實驗一、實驗目的1、掌握外部中斷技術的基本使用方法;2、掌握中斷處理程序的編寫方法;3、學習Keil和Proteus軟件的基本使用方法。二、實驗說明1、外部中斷的初始化設置共有三項內(nèi)容:中斷總允許即EA=1;外部中斷允許即EXi=1(i=0或1);中斷方式設置,中斷方式設置一般有兩種方式:電平方式和脈沖方式。本實驗選用脈沖方式,中斷請求信號由引腳INT0(P3.2)引入。2、51系列用于中斷的控制寄存器有四個:TCON、IE、SCON及IP。3、中斷過程分為三個階段:中斷請求、中斷響應、中斷服務。4、開關K0(中斷請求信號)利用外部中斷INT0接入。采用中斷邊沿觸發(fā)方式,每中斷一次,單片機對P1口完成一次讀寫操作。當P1.0~P1.3任何一位輸出0時,相應的發(fā)光二極管就會發(fā)光。當開關K0來回撥動一次時,將產(chǎn)生一個下降沿信號,通過INT0發(fā)出中斷請求。三、實驗內(nèi)容及步驟1、硬件原理圖2、軟件設計1)分別畫出主程序和中斷服務程序流程圖2)源程序#include<reg51.h>sbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_2=P1^2;sbitP1_3=P1^3;sbitP1_4=P1^4;sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;/******************************************************************函數(shù)名稱:ex_intex0;函數(shù)功能:外部中斷0服務子程序******************************************************************/ voidex_intex0(void)interrupt0 { P1_0=P1_4; P1_1=P1_5; P1_2=P1_6; P1_3=P1_7; }//主程序 voidmain() { P1=0xff;//P1口四個按鍵位置1EX0=1;//開外部中斷0EA=1;//開中斷總開關 IT0=1;//外部中斷0電平觸發(fā) while(1)//等待中斷 {; }}四、思考題1、簡述中斷處理的一般過程。實驗五、單片機之間的串行雙機通信一、實驗目的1、學習單片機串行口的工作原理;2、掌握串行通信的編程方法及波特率的設置;3、進一步學習定時器的功能和編程。二、實驗說明1、本實驗采用兩臺AT89C51單片機U1和U2進行串行雙機通信設計。U1作為發(fā)送機,U2作為接收機,兩者的發(fā)送腳RXD和接收腳TXD交叉連接。U1通過串行口間接控制與U2的P1口相連的8個LED發(fā)光管亮滅。2、單片機間通信采用串行口方式1,對單片機U1編程時,需令SM0=0,SM1=1;對單片機U2編程時,除了令SM0=0,SM1=1,還需設置REN=1,使其允許接收。3、晶體振蕩器頻率為11.0592MHz,選擇波特率為9600b/s,SMOD=0,定時器1工作方式2:TH1=TL1=FDH。三、實驗內(nèi)容及步驟1、硬件原理圖2、軟件設計1)、畫出程序流程圖2)源程序⑴單片機U1的發(fā)送程序使用Keil軟件建立“send”工程項目,建立源程序文件“send.c”,輸入如下源程序:#include<reg51.h>//流水燈控制碼unsignedcharTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};/********************************************************************函數(shù)名稱:Send;函數(shù)功能:發(fā)送一個字節(jié)數(shù)據(jù)********************************************************************/voidSend(unsignedchardat){SBUF=dat;//將待發(fā)送數(shù)據(jù)寫入發(fā)送緩沖器while(TI==0);TI=0;//用軟件將TI清零}/********************************************************************函數(shù)名稱:delay;函數(shù)功能:延時約150ms********************************************************************/voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//主程序voidmain(void){unsignedcharI;TMOD=0x20;//TMOD=00100000B,定時器T1工作在方式2SCON=0x40;//SCON=01000000B,串口工作在方式1PCON=0x00;//PCON=00000000B,波特率9600b/sTH1=0xfd;//給定時器T1高8位賦初值TL1=0xfd;//給定時器T1低8位賦初值TR1=1;//啟動定時器T1while(1){for(i=0;i<8;i++)//共8位流水燈控制碼{Send(Tab[i]);//發(fā)送數(shù)據(jù)idelay();//每發(fā)送一次數(shù)據(jù),延時150ms再發(fā)送}}⑵單片機U2的接收程序使用Keil軟件建立“receive”工程項目,建立源程序文件“receive.c”,輸入如下源程序:#include<reg51.h>/********************************************************************函數(shù)名稱:Receive;函數(shù)功能:接收串行口數(shù)據(jù)********************************************************************/unsignedcharReceive(void){unsignedchardat;while(RI==0);//空操作RI=0;//用軟件將RI清零,為接收下一幀數(shù)據(jù)做準備dat=SBUF;//將接收緩沖器的數(shù)據(jù)存于datreturndat;}//主程序voidmain(void){TMOD=0x20;//TMOD=00100000B,定時器T1工作在方式2SCON=0x50;//SCON=01010000B,串口工作在方式1,允許接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600b/sTH1=0xfd;//給定時器T1高8位賦初值TL1=0xfd;//給定時器T1低8位賦初值TR1=1;//啟動定時器T1REN=1;//允許接收while(1){P1=Receive();}}四、思考題1、異步串行通信協(xié)議的幀格式是怎樣的?已知系統(tǒng)時鐘頻率和波特率,如何計算定時器初值?2、接收時采用中斷方式時,程序代碼應該如何改?實驗六、數(shù)碼管顯示4×4陣列式鍵盤按鍵一、實驗目的1、掌握數(shù)字、字符轉換成顯示段碼的軟件譯碼方法2、掌握鍵盤和顯示器的接口方法和編程方法;3、掌握陣列式鍵盤的硬件組成和軟件編程方法。二、實驗說明1、本實驗提供了一個4X4小鍵盤,向P0口的低四位逐個輸出低電平,如果有鍵盤按下,則相應輸出為低,如果沒有鍵按下,則輸出為高。通過輸出的列碼和讀取的行碼來判斷按下什么鍵。2、去抖動,有鍵按下后,要有一定的延時,防止由于鍵盤抖動而引起誤操作。三、實驗內(nèi)容及步驟1、硬件原理圖2、源程序及流程圖#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F的顯示代碼ucharkeys_scan();voiddelay(uinti);voidmain()//主程序{ucharkey;P0=0x00;//數(shù)碼管滅,為顯示鍵碼作準備while(1){key=keys_scan();//調(diào)用鍵盤掃描,switch(key){case0xee:P0=dofly[0];break;//0按下相應的鍵顯示相應的碼值case0xde:P0=dofly[1];break;//1case0xbe:P0=dofly[2];break;//2case0x7e:P0=dofly[3];break;//3case0xed:P0=dofly[4];break;//4case0xdd:P0=dofly[5];break;//5case0xbd:P0=dofly[6];break;//6case0x7d:P0=dofly[7];break;//7case0xeb:P0=dofly[8];break;//8case0xdb:P0=dofly[9];break;//9case0xbb:P0=dofly[10];break;//acase0x7b:P0=dofly[11];break;//bcase0xe7:P0=dofly[12];break;//ccase0xd7:P0=dofly[13];break;//dcase0xb7:P0=dofly[14];break;//ecase0x77:P0=dofly[15];break;//f}}}/********************************************************************函數(shù)名稱:keys_scan;函數(shù)功能:鍵盤掃描函數(shù)返回值:返回鍵盤碼,高4位為行碼,低4位為列碼********************************************************************/ucharkeys_scan(){ucharcord_h,cord_l;//行列值P3=0x0f;//列線輸出全為0cord_h=P3&0x0f;//讀入行線值if(cord_h!=0x0f)//先檢測有無按鍵按下{delay(100);//消抖動cord_h=P3&0x0f;if(cord_h!=0x0f){P3=cord_h|0xf0;cord_l=P3&0xf0;return(cord_h+cord_l);}}return(0xff);}/*函數(shù)名稱:delay;函數(shù)功能:延時函數(shù)*/voiddelay(uinti){while(i--);}四、思考題1、描述陣列式鍵盤掃描原理。實驗七、簡易波形發(fā)生器的制作實驗一、實驗目的1、熟悉MCS-51單片機與D/A轉換器DAC0832的接線方法;2、掌握DAC0832直通方式,單緩沖器方式、雙緩沖器方式的編程方法。二、實驗說明數(shù)/模轉換器采用DAC0832集成電路,其數(shù)據(jù)輸入端直接與單片機8051的P0口相連,輸出經(jīng)運算放大器得到電壓波形。DAC0832采用單極性單緩沖方式工作,鎖存器74LS373的Q0為DAC0832提供片選和數(shù)據(jù)傳送控制信號,兩個寄存器的寫控制端連接8051的寫輸出端。在8051的P1口接三個開關K0、K1和K2,用來設置輸出波形的類型,K0、K1和K2,分別對應正弦波、鋸齒波和方波。三、實驗內(nèi)容及步驟1、硬件原理圖2、源程序及流程圖#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineDAC0832XBYTE[0xF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CQAP 4002-2024醫(yī)療安全(不良)事件根本原因分析法活動指南
- T/CSRME 010-2021巖質邊坡安全性數(shù)值分析與評價方法
- 房屋租賃合同范本廣州市3篇
- 按揭貸款房屋轉讓協(xié)議格式合同5篇
- 一方出軌離婚協(xié)議書范本7篇
- 上海保安證考試題庫及答案
- 關于商品房銷售合同4篇
- 預付款采購標準合同8篇
- 【課件】元素(第1課時)-2024-2025學年九年級化學人教版(2024)上冊
- 水電工程包工施工合同4篇
- 管道直飲水項目可行性研究報告
- 《公路橋梁掛籃設計與施工技術指南》
- 期中復習-首字母填空精練100題 2024-2025學年人教版英語八年級上冊
- 臨床富血小板血漿介紹、分類、制備技術及質量控制要點
- 2024年地鐵施工負責人安全考試題庫-判斷題
- 人教版歷史2024年第二學期期末考試七年級歷史試卷(含答案)
- 大藥房《質量管理體系文件》-管理制度
- 地渣土清運項目 投標方案(技術標)
- 第五屆全國電力行業(yè)青年培訓師教學技能競賽考試題庫-上(單選題)
- 2025年中考歷史復習專項訓練:中國現(xiàn)代史材料題40題(原卷版)
- 氯及其化合物:《氯氣和水的反應實驗探究》說課課件 2023-2024學年高一上學期化學人教版(2019)必修第一冊
評論
0/150
提交評論