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

下載本文檔

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

文檔簡介

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

1VCC外接3.3V-5V

2GND外接GND

3DO小板開關數字量輸出接口(0和1)

4AO小板模擬量輸出接口四、程序流程說明主程序:開啟定時器1;開啟外部中斷0;開啟外部中斷1;while(1) { if(!HUM)當環境濕度達到閥值時取反,D0口輸出低電平 {second=0;時間開始取0msecond=0;TR0=1; P1=temp;while(!HUM)Display();TR0=0;P1=0x00; } Display(); }}定時器1中斷程序:{裝載定時器1的TH1,TL1初值;每隔250ms就產生1個10us的高電平輸出到P3_2IO口,}I2C程序:I2C起始程序:voidstart(){SDA=1;//SDA初始化為高電平“1”SCL=1;//開始數據傳送時,要求SCL為高電平“1”delay();SDA=0;//SDA的下降沿被認為是開始信號delay();//等待一個機器周期SCL=0;//SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞)}voidstop(){SDA=0;//SDA初始化為低電平“0”_nSCL=1;//結束數據傳送時,要求SCL為高電平“1”delay();SDA=1;//SDA的上升沿被認為是結束信號delay();SDA=0;SCL=0;}寫程序:voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr處寫入數據WriteCurrent{start();//開始數據傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數據WriteCurrent(add);//寫入指定地址WriteCurrent(dat);//向當前地址(上面指定的地址)寫入數據stop();//停止數據傳遞Delaynms(4);//1個字節的寫入周期為1ms,最好延時1ms以上}I2C讀程序:unsignedcharReadSet(unsignedcharset_addr)//在指定地址讀取{start();//開始數據傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數據WriteCurrent(set_addr);//寫入指定地址return(ReadCurrent());//從指定地址讀出數據并返回}軟硬件開發過程及調試結果第一天拿到題目后上淘寶和百度文庫查閱了關于本次實訓要用的濕度模塊的相關資料,詳細了解了濕度模塊的工作原理和電路原理圖,如工作條件是什么,閥值如何調整到最佳的值等等,了解好模塊的工作原理后才能開始下一步的工作;第二天開始著手編寫程序,變寫過程中遇到很多問題,經過多次調試編寫成功能編譯,可是很多功能不完善,如數碼時間顯示的不正常,串口通信會崩潰等問題;之后經過查閱資料和問同學解決了一些問題,整體上把老師布置的要求先大概完成,選做的先留著,這是預期的想法。第二個禮拜,就是開始對程序進行修改,如:讓單片機的顯示效果更完善更有特點,計數更準確些,濕度模塊更精確地測試到環境濕度等等。實訓過程中遇到的困難可謂重重,由于基本功不是太扎實,一些小細節會疏忽遺漏,比如串口與PC之間的通信不靈活,單片機不能正常的發送數碼管顯示的時間到PC等經過一個多禮拜的實訓,老師要求的目的大部分都已經完成,可是串口部分因為程過于復雜等原因始終調試不成功。現象結果:參考文獻:[1]《單片機應用技術》主編邵忠良[2]《10天學會單片機》郭天祥[3]《C程序設計教程》主編林小茶附件1程序代碼#include<REGX51.H>#include<I2C2.c>sbitHUM=P3^2;sbitSDA=P3^4;//將串行數據總線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)//數碼掃描{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_()函數定義的頭文件#defineOP_READ0xa1//器件地址以及讀取操作,0xa1即為10100001B#defineOP_WRITE0xa0//器件地址以及寫入操作,0xa1即為10100000B#defineucharunsignedcharsbitSDA=P3^4;//將串行數據總線SDA位定義在為P3.4引腳sbitSCL=P3^3;//將串行時鐘總線SDA位定義在為P3.3引腳uchara,i;/*****************************************************函數功能:延時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;//開始數據傳送時,要求SCL為高電平“1”delay();SDA=0;//SDA的下降沿被認為是開始信號delay();//等待一個機器周期SCL=0;//SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞)}voidstop(){SDA=0;//SDA初始化為低電平“0”_nSCL=1;//結束數據傳送時,要求SCL為高電平“1”delay();SDA=1;//SDA的上升沿被認為是結束信號delay();SDA=0;SCL=0;}/***************************************************函數功能:從AT24Cxx讀取數據出口參數:x***************************************************/unsignedcharReadData()//從AT24Cxx移入數據到MCU{unsignedchari;unsignedcharx;//儲存從AT24Cxx中讀出的數據for(i=0;i<8;i++){SCL=1;//SCL置為高電平x<<=1;//將x中的各二進位向左移一位x|=(unsignedchar)SDA;//將SDA上的數據經過按位“或“運算存入x中SCL=0;//在SCL的下降沿讀出數據}return(x);//將讀取的數據返回}/***************************************************函數功能:向AT24Cxx的當前地址寫入數據入口參數:y(儲存待寫入的數據)***************************************************///在調用此數據寫入函數前需首先調用開始函數start(),因此SCL=0bitWriteCurrent(unsignedchary){unsignedchari;bitack_bit;//儲存應答位for(i=0;i<8;i++)//循環移入8個位{SDA=(bit)(y&0x80);//經過按位“與”運算將最高位數據送到S//因為傳送時高位在前,低位在后_nop_();//等待一個機器周期SCL=1;//在SCL的上升沿將數據寫入AT24Cxx_nop_();//等待一個機器周期_nop_();//等待一個機器周期SCL=0;//將SCL重新置為低電平,以在SCL線形成傳送數據所需的8個脈沖y<<=1;//將y中的各二進位向左移一位}SDA=1;//發送設備(主機)應在時鐘脈沖的高電平期間(SCL=1)釋放SDA線,//以讓SDA線轉由接收設備(AT24Cxx)控制_nop_();//等待一個機器周期_nop_();//等待一個機器周期SCL=1;//根據上述規定,SCL應為高電平delay();//等待一個機器周期ack_bit=SDA;//接受設備(AT24Cxx)向SDA送低電平,表示已經接收到一個字節//若送高電平,表示沒有接收到,傳送異常SCL=0;//SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞)returnack_bit;//返回AT24Cxx應答位}/***************************************************函數功能:向AT24Cxx中的指定地址寫入數據入口參數:add(儲存指定的地址);dat(儲存待寫入的數據)***************************************************/voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr處寫入數據WriteCurrent{start();//開始數據傳遞WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數據WriteCurrent(add);//寫入指定地址WriteCu

溫馨提示

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

評論

0/150

提交評論