




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、傳感器課程設計報告題目:通訊系統、溫度傳感系統及時鐘的設計日期:2013-12-0228目錄目錄2一.設計任務與要求 .31)課程設計任務 .32)課程設計要求 .3二課程設計方案 31) 課程設計思路 .32) 芯片功能 32.1 DS1302 功能簡介 .42.2 DS18B20 功能簡介 .5三 .硬件電路設計 61)單片機主電路原理圖72)DS1302 原理圖 .73)DS18B20 原理圖 .74)通訊流程圖85 ) DS18B20溫度控制流程圖 96) DS1302時鐘控制流程圖 .10四.通訊、溫度、時鐘效果圖10五程序清單 .141 )通訊 142)溫度 173)時鐘 21六.
2、 實驗心得 . 24七. 自評分 28一.設計任務與要求1)課程設計任務1、設計簡單的通訊功能2、設計簡單的溫度顯示功能3、設計簡單的時鐘顯示功能2)課程設計要求1、完成基本的設計功能2、分工明確,理解程序功能作用3、達到最終的效果二課程設計方案1)課程設計思路通訊:使單片機達到發(fā)送與接收數據的功能溫度:使用單片機讀取溫度傳感器的值,經過轉換,在8段LED數碼管顯示時鐘:時鐘系統是通過12C總線訪問DS1302獲取和設置時鐘的值2)芯片功能2.1 DS1302功能簡介時鐘芯片使用DS1302該模塊電路原理圖如下圖引腳圖時鐘電路采用的是ds1302芯片,DS1302是美國DALLAS公司推出的一
3、種 高性能、低功耗、帶 RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為 2.5V5.5V。采用三線接口 與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的 時鐘信號或RAM 數據。工作電壓與單片機的輸入電壓比較適合。 上面是它的一些基本的應用介紹。F面是它的引腳的描述。管腳描述XI,X2弦7住醫(yī)Hz晶振管腦GND胞RST乜位腳I/O敢擁輸入/輸出引腳SCLK串行時鐘VccLVccl 電源供電管腳F面是DS1302的時鐘寄存器。我們要讀取的時間數據就是從下面這些數據胡,1。DO0分 1O0 0 &小時I t0oa I D1
4、6;° 1 0 1 °i L' 1%694 J 31 O* I a° 1 ?D' %門 口 由|乜| *一。1 °年 10Q0!,10 %0° 1 °F1相淹電1;00 'o 1%時鄲|老T乩寄存器中讀取出來的。當我們要想調整時間時,可以把時間數據寫入到相應的寄 存器中就可以了。DS1302和單片機的連接很簡單。只需一根復位線,一根時鐘線,一根數據線即 可。同時它本身還需要接一個32.768KHZ的晶振來提供時鐘源。對于晶振的兩端 可以分別接一個6PF左右的電容以提高晶振的精確度。同時可以在第8腳接上一 個3.
5、6V的可充電的電池。當系統正常工作時可以對電池進行涓流充電。當系統 掉電時,DS1302由這個電池提供的能量繼續(xù)工作。2.2 DS18B20功能簡介通過1820進行讀數據,將讀出來的數據進行進制轉換,轉換后送到數碼管 顯示。工作原理介紹:全數字溫度轉換及輸出先進的單總線數據通信。最高丄2位分辨率,精度PJ達土 0.5攝氏度°12位分辨率時的最大工作周期為750毫秒 可選擇寄生工作方式°檢測溫度范圍為-55C - + 125" C ( - 67D F - + 257u F) 內 W EEPROM 限溫報警功能。64 1立光刻ROM 內置產品序列號.方便多機掛接
6、76;多樣封裝形式.適應不同硬件系統上DS18B20是單總線的數字溫度傳感器。其與單片機的接口只需要一根數據線 即可。當然連線簡單意味著軟件處理上可能要麻煩一點。下面來看看它的優(yōu)點 看看它的靚照。外形和我們常用的三極管沒有什么兩樣哦DS18B20的內部存儲器分為以下幾部分 ROM:存放該器件的編碼。 前8位為單線系列的編碼(DS18B20的編碼是19H)后面48位為芯 片的唯一序列號。在出場的時候就已經設置好,用戶無法更改。最 后8位是以上56位的CRC碼。RAM : DS18B20的內部暫存器共9個字節(jié)。其中第一個和第二個 字節(jié)存放轉換后的溫度值。第二個和第三個字節(jié)分別存放高溫和低溫告警值。
7、(可以用RAM指令將其拷貝到EEPROM中)第四個字節(jié)為配置寄存器。 第57個字節(jié)保留。第9個字節(jié)為前8個字節(jié)的CRC碼。2322212°尸2-4MSb(unit =°C)LSbSSSSS262524LSBMSBDS18B20的溫度存放如上圖所示。其中 S位符號位。當溫度值為負值時,S =1,反之則S = 0。我們把得到的溫度數據乘上對應的分辨率即可以得到轉換 后的溫度值。DS18B20的通訊協議:在對DS18B20進行讀寫編程時,必須嚴格保證讀寫的時序。否則將無法讀 取測溫結果。根據DS18B20的通訊協議,主機控制 DS18B20完成溫度轉換必須 經過3個步驟:每一次讀
8、寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令。這樣才能對DS18B20進行預定的操作。復位要求主機將數據線下拉500us,然后釋放,DS18B20收到信號后等待16160us 然后發(fā)出60240us的存在低脈沖,主機收到此信號表示復位成功。LINE TYPE LEGEND:Bus master active lowDS13B20 active low Both bus master and mujniiiLLds 1BB2O active towReswtw pulf-up上圖即DS18B20的復位時序圖F面是讀操作的時序圖MASTER READ p0&
9、quot; SLOT1 tflEC 5MASTER READSLOT叱cHARE BUSGND這是寫操作的時序圖瀰SAMPlfS :'a "'* '"亠0 *.?g uf1 "- - -團團瞬貌翩蹋鞭継牌:.m .:;:搠移$豐±;常二息:化址匕二:二:?:套二-汀丫卩建那那:三.硬件電路設計1)單片機主電路原理圖壬上Lrr卜fwfer4 t-feu£ijlmji匸>5 sTJYF=S=SF 一 F=s3t "匚二.-h一二Tr-T-亠亠.一3fl?xtx3 畫“目”日B5H P 4* M=a fBBBB
10、. n-* ii 1s空二 wkll-turbb蜃一廠2) DS1302原理圖9CL7r8RESETA面XIX2GNDV0C2I'YT1產J 7XTAL3TOSDA4DS13O23) DS18B20原理圖DS18B2CGXD284)通訊流程圖通訊子程序發(fā)送八位命令和校臉有誤7收到有用數扌居F妥竟數據井校驗發(fā)送成功命令返回用數據變量存儲有用 數據,誦訊結束后存 人數據5)溫度流程圖6)時間流程圖開始開始初始化,啟動初始化,啟動寫控制指令位(從低到高)寫控制指令位(從低到高)1LK發(fā)脈沖控制指令右移1位控制指令右移1位延時15-45/ 右移8次?/ 右移8次?、X、 右移8次?四.通訊、溫
11、度、時鐘效果圖通訊:STC-ISP (V6n 57)官方STCMCU- c(j» (研發(fā)願問 QQ: STC:全球最大的刃氐 匚叵Jx|單片機型號STC12C5A5QS2V引腳數Autc 7串口號USE-SERIAL CK34O(COM4)V掃描閱低波特率24007 堀高波特率115200 v起始地址.00000回潘除代碼舞沖區(qū)I打開程序文件0x00000 WEEFKOM沖區(qū)打開EEFBOLI立件程序文件耽文件串口助手Ksiltt真設置范例程序選型/價格/祥品接收緩沖區(qū):文本梗式 ® ME腮式渚空播收區(qū)I傑存播收數據00h 畫便件選項 脫機下載/U
12、?f自動増量|自定文加巒下竭#選擇使用內部TRC時鉀環(huán)選為外部時樹0振蕩器放大増益口鈿以上逢蛙喘擇1境位腳用作T/D 口 HISET2腳的電平低于1.33W芯片復位E上電震位使用較長延時上電復位時由硬件自動啟動看門狗看門駒定時貉分頻系數曲«0空閑狀窸時停止看門狗計數下次冷啟動時FL. 0/F1-1W3才可下載程序下次下煢用尸程序時擦除用戶eepbonE渚空發(fā)送區(qū)保存發(fā)嗟數據串口下載f編程停止檢測肛U選項注意/幫助重復延時3秒v重套編程0每欠下靈前都重新裝羲目標文件當目標文件變讓時自動裝載并發(fā)送下載命令清空全部數據1111發(fā)送緩沖區(qū) O立本複式 ® HK模式HEXE a爭手苻
13、串發(fā)送 VIT)a破特率9&00蕪閉串口 編程芫成后自動打開串口>|自動循環(huán)發(fā)電|ns間隔校驗位無驗位7停止位1位V發(fā)送.PL D和Fl. 1與下次下載無關.下次下載用戶程庫時不標除用戶eefromEA |.芯片出廠序列號;0003009909042D.單片機型號:STC12C5A60S2.固件版本號;&.2I撫作咸功!V208 清零760接收C : VDacumens ni SettingsAdmiiii5trtQrS)l 11. h«x發(fā)布項目程序發(fā)布項目釉助讀取本機硬盤號|回標示音 成功計數匚可« 七gOODOOOOO溫度:時鐘:六程序清單1)通
14、訊#in clude<reg51.h>#i nclude<i ntri ns.h>sfr AUXR=0x8e;/ 計算波特率un sig ned char i,j=0;unsigned char num=0x00,0x00,0x00,0x00;unsigned char disp4=0x00,0x00,0x00,0x00;sbit P2_0=P2A0;sbit P2_1= P2A1;sbit P2_2=P2A2;sbit P2_3=P2A3;sbit P2_4=P2A4;sbit P2_5=P2A5;sbit P2_6=P2A6;sbit P2_7=P2A7;unsig
15、nedcharcodeled_code10=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90; /unsigned char led_reg8=0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08; void UartInit()/9600bps12.000MHzPCON &= 0x7F;SCON = 0x50;/波特率不倍速/8 位數據 ,可變波特率AUXR |= 0x40;/定時器1時鐘為Fosc,即1TAUXR &= 0xFE;/串口 1 選擇定時器 1 為波特率發(fā)生器TMOD &= 0x
16、0F;/清除定時器 1 模式位TMOD |= 0x20;/設定定時器 1 為 8 位自動重裝方式TL1 = 0xD9;/設定定時初值TH1 = 0xD9;/設定定時器重裝值ET1 = 0;/禁止定時器 1 中斷TR1 = 1;/啟動定時器 1EA=1;ES=1;void Delay2ms() /12.000MHzunsigned char i, j;i = 24;j = 85;dowhile (-j); while (-i);void serial() interrupt 4 if(RI)RI=0; numj=SBUF; j+;if(j=5)j=0;if(num0+num1+num2+num3
17、=num4) disp0=num0;disp1=num1;disp2=num2;disp3=num3;SBUF=0x00; elseSBUF=0X01; if(TI)/發(fā)送TI=0;void led_show()P2=0XFF;switch(i)case 0:P2_0=0,P0=led_codedisp0%16;break;case 1:P2_1=0,P0=led_codedisp0/16;break;case 2:P2_2=0,P0=led_codedisp1%16;break;case 3:P2_3=0,P0=led_codedisp1/16;break;case 4:P2_4=0,P0=
18、led_codedisp2%16;break;case 5:P2_5=0,P0=led_codedisp2/16;break;case 6:P2_6=0,P0=led_codedisp3%16;break;case 7:P2_7=0,P0=led_codedisp3/16;break; default:break;i+;if(i=8)i=0;void main() P0=0X00;P2=0XFF;UartInit();disp0=0x10;disp1=0x32;disp2=0x54;disp3=0x76;while(1) led_show();Delay2ms();2) 溫度#include&
19、lt;reg51.h>#define uchar unsigned char#define uint unsigned intsbit P2_0=P2P;引腳位定義sbit P2_1= P2A1;sbit P2_2=P2A2;sbit P2_3=P2A3;sbit P2_4=P2A4;sbit P2_5=P2A5;sbit P2_6=P2A6;sbit P2_7=P2A7;unsignedcharcodeled_code21=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0xFF,0xc6,0x7 f;unsigned char le
20、d_reg8=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08;sbit DQ=P1A0;/數據傳輸總線,單片機連接口uchar data disdata6;/uchar fCode8;uchar wdata;/uint t;uchar flag;存放溫度值的各位數(如個十百小數位的數值) /存放 DS18B20 的 ROM 編碼/存放溫度值/溫度正負標志/延時程序void delay(unsigned char i) unsigned char j,k; for(k=0;k<i;k+) for(j=0;j<255;j+);void delay_18B
21、20(unsigned int i) /12m 晶振 i=i*5;/ 仿真時,應注釋掉,下載到 STC 單片機時應保留/while(i-);ds1820復位初始化/DQ 復位/延時/DQ 拉低 /精確延時大于 480us/DQ 拉高void Rst_18B20() unsigned char x=0;DQ=1; delay_18B20(4);DQ=0; delay_18B20(100);DQ=1;delay_18B20(240); uchar Rd_18b20()/讀數據 unsigned char i=0;unsigned char dat=0;for(i=8;i>0;i-) DQ=1
22、;delay_18B20(1);/延時DQ=0;/產生脈沖信號dat>>=1;delay_18B20(1);DQ=1;/給脈沖信號if(DQ)dat|=0x80;delay_18B20(10);return(dat);void Wr_18b20(uchar wdata) /寫數據 unsigned char i=0;for(i=8;i>0;i-) DQ=0;DQ=wdata&0x01;/向總線上寫位數據delay_18B20(10);延時50us等待寫完成DQ=1;/恢復高電平,至少保持 1uswdata>>=1;/為下次寫操作準備uint RD_temp
23、()/讀取溫度值并轉換 uchar a,b;Rst_18B20();Wr_18b20(0xcc);Wr_18b20(0x44);Rst_18B20();Wr_18b20(0xcc);Wr_18b20(0xbe);/讀取溫度a=Rd_18b20();b=Rd_18b20();t=b;t<<=8;t=t|a;if(t<0x0fff)flag=0;/ 溫度為正elset=t+1;flag=1;/溫度值為負,負值以補碼存放,這里要將其還原為原碼t=t*(6.25);/溫度值擴大 100 倍,精確到 2 位小數 /return(t);void T_display()uchar flag
24、dat; disdata0=t/10000; disdata1=t%10000/1000; disdata2=t%1000/100; disdata3=t%100/10; disdata4=t%10; if(flag=0) flagdat=0x20; else flagdat=0x2d; if(disdata0=0x30) disdata0=0x20; if(disdata1=0x30) disdata1=0x20;led_reg0= disdata0; led_reg1= disdata1; led_reg2= disdata2; led_reg3= disdata3; led_reg4=
25、disdata4; led_reg5= 11;/溫度值顯示/百位數/十/個/小數位/小數位/負溫度顯示負號/ 如果百位為 0,不顯示/如果百位為 0,十位為 0 也不顯示led_reg6= 10;led_reg7= 10;void led_show()/ 顯示函數static unsigned char led_shift=0x00;P2=0xff;/關閉數碼管控制端口switch(led_shift) case 0:P2_0=0;P0=led_codeled_reg0; break; case 1:P2_1=0;P0=led_codeled_reg1; break;case 2:P2_2=0
26、;P0=led_codeled_reg2&0x7f; break;case 3:P2_3=0;P0=led_codeled_reg3; break;case 4:P2_4=0;P0=led_codeled_reg4; break;case 5:P2_5=0;P0=led_codeled_reg5; break;case 6:P2_6=0;P0=led_codeled_reg6; break;case 7:P2_7=0;P0=led_codeled_reg7; break; default:break;led_shift+;if(led_shift=0x08)led_shift=0x00
27、;void main()/主函數P0=0xff;P2=0xff;/初始化delay(5);while(1)led_show();RD_temp();讀取溫度T_display();/顯示溫度3) 時鐘#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int #define ds1302_sec_add 0x80#define ds1302_min_add 0x82/秒數據(寫地址)/分/時#define ds1302_hr_add 0x84 #defi
28、ne ds1302_charge_add 0x8e /控制數據地址unsigned char sec,min,hr;sbit DS1302_CLK=PM7;sbit DS1302_IO=P1A6; sbit DS1302_RST=PM5;/實時時鐘時鐘線引腳/實時時鐘數據線引腳/實時時鐘復位線引腳sbit P2_0=P2A0;/引腳位定義sbit P2_1=P2A1;sbit P2_2=P2A2;sbit P2_3=P2A3;sbit P2_4=P2A4;sbit P2_5=P2A5;sbit P2_6=P2A6;sbit P2_7=P2A7;unsignedcharcodeled_code2
29、2=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x40,0xFF,0x7 9,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10,0xbf;unsigned char led_reg8=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08;uchar data disdata8; /uchar flag; /延時程序void delay(unsigned char i) unsigned char j,k; for(k=0;k<i;k+) for(j=0;j<255;j+
30、);向 Ds1302 寫 入 一 個 字 節(jié) 數 據void Ds1302_Write_Byte(unsigned char addr,unsigned char d) unsigned char i;DS1302_RST=0;/高電平時允許 i/0 端進行數據傳輸DS1302_CLK=0;/同步時鐘脈沖端,其上升沿將 i/0 端數據按位寫入DS1302,下降沿使DS1302按位輸出數據到i/0端DS1302_RST=1;addr=addr&0xFE; for(i=0;i<8;i+) if(addr&0x01)/最低位置 0,為了得到寫地址/寫入目標地址, addrDS1
31、302_IO=1;/i/0 為串行數據輸入輸出端,傳送數據順序均已最低位 LSB 開始到最高位 MSB 結束elseDS1302_CLK=1;DS1302_CLK=0; addr=addr>>1; for(i=0;i<8;i+) DS1302_IO=0;/ /寫入數據 dif(d&0x01) DS1302_IO=1;else DS1302_IO=0;DS1302_CLK=1;DS1302_CLK=0;d=d>>1;DS1302_CLK=1;DS1302_RST=0;/停止 DS13B20 總線向 Ds1302 讀出 一個字節(jié)數據unsigned char
32、Ds1302_Read_Byte(unsigned char addr)unsigned char i;unsigned char temp;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;addr=addr|0x01;/最低位置高。為了得到讀地址for(i=0;i<8;i+)if(addr&0x01) DS1302_IO=1;else DS1302_IO=0;DS1302_CLK=1;DS1302_CLK=0; addr=addr>>1;for(i=0;i<8;i+)/輸出數據: temptemp=temp>>1;if
33、(DS1302_IO)temp|=0x80;else temp&=0x7F;DS1302_CLK=1;DS1302_CLK=0;DS1302_CLK=1;DS1302_RST=0;/停止 DS1302 總線return temp;void T_display()/ 時鐘顯示uchar flagdat;disdata0=Ds1302_Read_Byte(ds1302_hr_add)/16; / 時 disdata1=Ds1302_Read_Byte(ds1302_hr_add)%16; disdata2=0xbf;disdata3=Ds1302_Read_Byte(ds1302_min_add)/16; /分 disdata4=Ds1302_Read_Byte(ds1302_min_add)%16; disdata5=0xbf;disdata6=Ds1302_Read_Byte(ds1302_sec_add)/16; /秒 disdata7=Ds1302_Read_Byte(ds1302_sec_add)%16; if(flag=0) flagdat=0x20;else flagdat=0x2d;if(disdata0=0x30)disdata0=0x20;if(disdata1=0x30)disdata1=0x20;led_reg0=di
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省泗陽縣2024-2025學年高一下學期期中考試數學試卷
- 2025年建筑裝飾服務項目建議書
- 商業(yè)衛(wèi)星運營風險控制與收益分成合同
- 高效運營型電商平臺積分體系開發(fā)合同
- 直播行業(yè)內容監(jiān)管及應急處理補充協議
- 2025年矯味劑項目合作計劃書
- 網絡直播平臺內容創(chuàng)作者數據保密協議
- 綠色環(huán)保物業(yè)維修員派遣合作協議
- 父母去世后子女生活用品交接與遺產分配協議
- 高新技術產業(yè)特定領域有限合伙人合作協議
- 2024年生產部員工培訓計劃
- 醫(yī)療器械軟件網絡安全描述文檔
- 【學前兒童記憶力發(fā)展的分析5700字(論文)】
- 校園綠化養(yǎng)護投標方案
- 【基于STM32廚房安全環(huán)境監(jiān)測的設計與實現9400字(論文)】
- ECN變更作業(yè)流程
- 河道清理水浮蓮及河道保潔方案模板
- 南京玄武外國語中學英語新初一分班試卷
- 高邊坡施工腳手架搭設技術
- 免稅資格申請模版
- 柴油發(fā)電機組的操作維護保養(yǎng)
評論
0/150
提交評論