單片機課程設(shè)計及實訓(xùn)報告模板x_第1頁
單片機課程設(shè)計及實訓(xùn)報告模板x_第2頁
單片機課程設(shè)計及實訓(xùn)報告模板x_第3頁
單片機課程設(shè)計及實訓(xùn)報告模板x_第4頁
單片機課程設(shè)計及實訓(xùn)報告模板x_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

年4月19日單片機課程設(shè)計及實訓(xùn)報告模板x文檔僅供參考,不當(dāng)之處,請聯(lián)系改正。廣東水利電力職業(yè)技術(shù)學(xué)院課程設(shè)計/實訓(xùn)報告(-第2學(xué)期)學(xué)生:周雄君(組長)、周雄君提交日期:6月26日學(xué)生簽名:周雄君學(xué)號與姓名的排序相同學(xué)院自動化系課程名稱單片機接口技術(shù)任課教師郭玲教師評語:成績評定教師簽名濕度探測器周雄君摘要隨著人們的生活及其生產(chǎn)水平的不斷提高,對生活環(huán)境和生產(chǎn)環(huán)境的要求就顯的尤為重要,溫濕度的控制就是一個典型的例子,因此溫濕度檢測系統(tǒng)就是現(xiàn)代生產(chǎn)生活中應(yīng)運而生的一種智能、快捷、方便可靠的檢測系統(tǒng),特別是在工業(yè)生產(chǎn)中如果檢測得不準確就會發(fā)生許多的生產(chǎn)事故。為了給現(xiàn)代人工作、科研、生活提供更好的更方便的設(shè)施,對現(xiàn)有的溫濕度控制器的設(shè)計、改良有著很大的現(xiàn)實意義利用ATMEl51系列單片機和HR202濕度模塊設(shè)計并制作一個簡單的濕度檢測裝置,以單片機為核心,其它外圍設(shè)備如電源HR202濕度模塊等,其中濕度模塊D0輸出口是數(shù)字開關(guān)量輸出,輸出0和1,因此單片主要是檢測D0輸出口的高低電平。關(guān)鍵詞D0輸出口的工作模式、單片機如何與濕度模塊聯(lián)系設(shè)計要求及目標設(shè)計要求:閱讀相關(guān)文獻,學(xué)習(xí)濕度檢測的原理;根據(jù)網(wǎng)上提供的用戶說明,熟悉所提供的濕度探測模塊接口特性。設(shè)計并搭建濕度探測電路,調(diào)試電路,令模塊正常工作。加載傳感器的單片機驅(qū)動程序,實現(xiàn)濕度探測功能:濕度探測:熱毛巾,將傳感器模塊放置在其附近,觀察傳感器模塊輸出信號的變化情況。熱水或開水的水蒸氣,將傳感器模塊放置在其附近,觀察傳感器模塊輸出信號的變化情況。調(diào)節(jié)傳感器,令在上述情況下,傳感器報警(led閃爍等)。選作:將濕度報警的開始時間和結(jié)束進行記錄,保存到EEPROM里。當(dāng)有按鍵按下,就調(diào)出記錄,顯示在數(shù)碼管上。當(dāng)有按鍵按下,就將記錄發(fā)送到PC端。設(shè)計目標:經(jīng)過濕度模塊和51單片機對周圍環(huán)境濕度進行簡單檢測,當(dāng)環(huán)境濕度變化或者人為加大減小HR202周圍的濕度后,模塊達到設(shè)定閥值時DO口輸出高電平,輸送到單片機IO口并用LED和數(shù)碼管顯示相關(guān)數(shù)據(jù)。4位數(shù)碼管顯示AT89C51單4位數(shù)碼管顯示AT89C51單片機濕度模塊杜邦杜邦線LED上下限顯示LED上下限顯示環(huán)境濕度環(huán)境濕度濕度模塊:模塊在環(huán)境濕度達不到設(shè)定閾值時,DO口輸出高電平,當(dāng)外界環(huán)境濕度超過設(shè)定閾值時,模塊D0輸出0;杜邦線:杜邦線可用于實驗板的引腳擴展,增加實驗項目等。能夠非常牢靠地和插針連接,無需焊接,能夠快速進行電路試驗;數(shù)碼顯示:設(shè)置定時器,利用外部中斷0實現(xiàn)按鍵發(fā)生事件,當(dāng)環(huán)境濕度大于或小于閥值時D0口輸出0或1,并開始計時顯示在數(shù)碼管上;LED模塊:當(dāng)D0口輸出0或1時LED有相應(yīng)。三、電路圖設(shè)計整體電路圖:模塊電路圖:模塊接口說明(4線制)

1VCC外接3.3V-5V

2GND外接GND

3DO小板開關(guān)數(shù)字量輸出接口(0和1)

4AO小板模擬量輸出接口四、程序流程說明主程序:開啟定時器1;開啟外部中斷0;開啟外部中斷1;while(1) { if(!HUM)當(dāng)環(huán)境濕度達到閥值時取反,D0口輸出低電平 {second=0;時間開始取0msecond=0;TR0=1; P1=temp;while(!HUM)Display();TR0=0;P1=0x00; } Display(); }}定時器1中斷程序:{裝載定時器1的TH1,TL1初值;每隔250ms就產(chǎn)生1個10us的高電平輸出到P3_2IO口,}I2C程序:I2C起始程序:voidstart(){SDA=1;//SDA初始化為高電平“1”SCL=1;//開始數(shù)據(jù)傳送時,要求SCL為高電平“1”delay();SDA=0;//SDA的下降沿被認為是開始信號delay();//等待一個機器周期SCL=0;//SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞)}voidstop(){SDA=0;//SDA初始化為低電平“0”_nSCL=1;//結(jié)束數(shù)據(jù)傳送時,要求SCL為高電平“1”delay();SDA=1;//SDA的上升沿被認為是結(jié)束信號delay();SDA=0;SCL=0;}寫程序:voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr處寫入數(shù)據(jù)WriteCurrent{start();//開始數(shù)據(jù)傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數(shù)據(jù)WriteCurrent(add);//寫入指定地址WriteCurrent(dat);//向當(dāng)前地址(上面指定的地址)寫入數(shù)據(jù)stop();//停止數(shù)據(jù)傳遞Delaynms(4);//1個字節(jié)的寫入周期為1ms,最好延時1ms以上}I2C讀程序:unsignedcharReadSet(unsignedcharset_addr)//在指定地址讀取{start();//開始數(shù)據(jù)傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數(shù)據(jù)WriteCurrent(set_addr);//寫入指定地址return(ReadCurrent());//從指定地址讀出數(shù)據(jù)并返回}軟硬件開發(fā)過程及調(diào)試結(jié)果第一天拿到題目后上淘寶和百度文庫查閱了關(guān)于本次實訓(xùn)要用的濕度模塊的相關(guān)資料,詳細了解了濕度模塊的工作原理和電路原理圖,如工作條件是什么,閥值如何調(diào)整到最佳的值等等,了解好模塊的工作原理后才能開始下一步的工作;第二天開始著手編寫程序,變寫過程中遇到很多問題,經(jīng)過多次調(diào)試編寫成功能編譯,可是很多功能不完善,如數(shù)碼時間顯示的不正常,串口通信會崩潰等問題;之后經(jīng)過查閱資料和問同學(xué)解決了一些問題,整體上把老師布置的要求先大概完成,選做的先留著,這是預(yù)期的想法。第二個禮拜,就是開始對程序進行修改,如:讓單片機的顯示效果更完善更有特點,計數(shù)更準確些,濕度模塊更精確地測試到環(huán)境濕度等等。實訓(xùn)過程中遇到的困難可謂重重,由于基本功不是太扎實,一些小細節(jié)會疏忽遺漏,比如串口與PC之間的通信不靈活,單片機不能正常的發(fā)送數(shù)碼管顯示的時間到PC等經(jīng)過一個多禮拜的實訓(xùn),老師要求的目的大部分都已經(jīng)完成,可是串口部分因為程過于復(fù)雜等原因始終調(diào)試不成功?,F(xiàn)象結(jié)果:參考文獻:[1]《單片機應(yīng)用技術(shù)》主編邵忠良[2]《10天學(xué)會單片機》郭天祥[3]《C程序設(shè)計教程》主編林小茶附件1程序代碼#include<REGX51.H>#include<I2C2.c>sbitHUM=P3^2;sbitSDA=P3^4;//將串行數(shù)據(jù)總線SDA位定義在為P3.4引腳sbitSCL=P3^3;//將串行時鐘總線SDA位定義在為P3.3引腳//*********************變量聲明*************************unsignedcharcodetable1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsignedcharDat[]={0,0,0,0},temp=0xaa;unsignedcharsecond=0,msecond=0;//**********************子程序***************************voidDelay1ms(void)//1ms{unsignedcharj,z;for(j=1;j<4;j++)for(z=10;z<200;z++);}voidDelaynms(unsignedcharn){unsignedchari;//k=255;for(i=0;i<n;i++)Delay1ms();}//voiddisplay(unsignedchara,b,c,d){P2=0xff;P0=table1[a];P2_0=0;P0_7=0;Delaynms(2);P2=0xff;P0=table1[b];P2_1=0;P0_7=0;Delaynms(2);P2=0xff;P0=table1[c];P2_2=0;P0_7=1;Delaynms(2);P2=0xff;P0=table1[d];P2_3=0;P0_7=0;Delaynms(2);}voidDisplay(void)//數(shù)碼掃描{Dat[0]=msecond%10;Dat[1]=msecond/10;Dat[2]=second%10;Dat[3]=second/10;display(Dat[0],Dat[1],Dat[2],Dat[3]);}voidmain(){ unsigneda;EA=1;ET0=1;TMOD=0x01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=0;P1=0x00; while(1) { if(!HUM) {second=0;msecond=0;TR0=1; P1=temp;while(!HUM)Display();TR0=0;P1=0x00;WriteSet(0x31,second); WriteSet(0x32,mecond); if(P3_3==0) {P0=a; a=ReadSet(0x31); a=ReadSet(0x32); } } Display(); }}voidintserv1(void)interrupt1using1{TH0=(65536-37037)/256;TL0=(65536-37037)%256;msecond=msecond+2; if(msecond%25==0) { temp=~temp; P1=temp; }if(msecond>=100){msecond=0;second++;if(second>=100)second=0; }}I2C子程序:#include<REGX51.H>#include<intrins.h>//包含_nop_()函數(shù)定義的頭文件#defineOP_READ0xa1//器件地址以及讀取操作,0xa1即為10100001B#defineOP_WRITE0xa0//器件地址以及寫入操作,0xa1即為10100000B#defineucharunsignedcharsbitSDA=P3^4;//將串行數(shù)據(jù)總線SDA位定義在為P3.4引腳sbitSCL=P3^3;//將串行時鐘總線SDA位定義在為P3.3引腳uchara,i;/*****************************************************函數(shù)功能:延時1ms(3j+2)*i=(3×33+2)×10=1010(微秒),能夠認為是1毫秒***************************************************/externvoidDelay1ms(void);externvoidDelaynms(unsignedcharn);voiddelay(){_nop_();//等待一個機器周期_nop_();//等待一個機器周期_nop_();//等待一個機器周期_nop_();//等待一個機器周期}voidstart(){SDA=1;//SDA初始化為高電平“1”SCL=1;//開始數(shù)據(jù)傳送時,要求SCL為高電平“1”delay();SDA=0;//SDA的下降沿被認為是開始信號delay();//等待一個機器周期SCL=0;//SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞)}voidstop(){SDA=0;//SDA初始化為低電平“0”_nSCL=1;//結(jié)束數(shù)據(jù)傳送時,要求SCL為高電平“1”delay();SDA=1;//SDA的上升沿被認為是結(jié)束信號delay();SDA=0;SCL=0;}/***************************************************函數(shù)功能:從AT24Cxx讀取數(shù)據(jù)出口參數(shù):x***************************************************/unsignedcharReadData()//從AT24Cxx移入數(shù)據(jù)到MCU{unsignedchari;unsignedcharx;//儲存從AT24Cxx中讀出的數(shù)據(jù)for(i=0;i<8;i++){SCL=1;//SCL置為高電平x<<=1;//將x中的各二進位向左移一位x|=(unsignedchar)SDA;//將SDA上的數(shù)據(jù)經(jīng)過按位“或“運算存入x中SCL=0;//在SCL的下降沿讀出數(shù)據(jù)}return(x);//將讀取的數(shù)據(jù)返回}/***************************************************函數(shù)功能:向AT24Cxx的當(dāng)前地址寫入數(shù)據(jù)入口參數(shù):y(儲存待寫入的數(shù)據(jù))***************************************************///在調(diào)用此數(shù)據(jù)寫入函數(shù)前需首先調(diào)用開始函數(shù)start(),因此SCL=0bitWriteCurrent(unsignedchary){unsignedchari;bitack_bit;//儲存應(yīng)答位for(i=0;i<8;i++)//循環(huán)移入8個位{SDA=(bit)(y&0x80);//經(jīng)過按位“與”運算將最高位數(shù)據(jù)送到S//因為傳送時高位在前,低位在后_nop_();//等待一個機器周期SCL=1;//在SCL的上升沿將數(shù)據(jù)寫入AT24Cxx_nop_();//等待一個機器周期_nop_();//等待一個機器周期SCL=0;//將SCL重新置為低電平,以在SCL線形成傳送數(shù)據(jù)所需的8個脈沖y<<=1;//將y中的各二進位向左移一位}SDA=1;//發(fā)送設(shè)備(主機)應(yīng)在時鐘脈沖的高電平期間(SCL=1)釋放SDA線,//以讓SDA線轉(zhuǎn)由接收設(shè)備(AT24Cxx)控制_nop_();//等待一個機器周期_nop_();//等待一個機器周期SCL=1;//根據(jù)上述規(guī)定,SCL應(yīng)為高電平delay();//等待一個機器周期ack_bit=SDA;//接受設(shè)備(AT24Cxx)向SDA送低電平,表示已經(jīng)接收到一個字節(jié)//若送高電平,表示沒有接收到,傳送異常SCL=0;//SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞)returnack_bit;//返回AT24Cxx應(yīng)答位}/***************************************************函數(shù)功能:向AT24Cxx中的指定地址寫入數(shù)據(jù)入口參數(shù):add(儲存指定的地址);dat(儲存待寫入的數(shù)據(jù))***************************************************/voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr處寫入數(shù)據(jù)WriteCurrent{start();//開始數(shù)據(jù)傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數(shù)據(jù)WriteCurrent(add);//寫入指定地址WriteCu

溫馨提示

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

評論

0/150

提交評論