物理與電子工程學(xué)院電子科技作品制作_第1頁
物理與電子工程學(xué)院電子科技作品制作_第2頁
物理與電子工程學(xué)院電子科技作品制作_第3頁
物理與電子工程學(xué)院電子科技作品制作_第4頁
物理與電子工程學(xué)院電子科技作品制作_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、物理與電子工程學(xué)院電子科技作品制作競賽結(jié)題報告書 作品名稱: DS18B20測溫電路 作者姓名:* * * 所在學(xué)院: 物理與電子工程學(xué)院 填表日期: 2013年5月4日 一、摘要在我們的日常生活中常常要對許多現(xiàn)象進行監(jiān)測,比如,空氣濕度、風(fēng)力大小、各種氣體還有溫度。這些數(shù)據(jù)能為人們的生活提供幫助。本次我們就采用DS18B20溫度傳感器設(shè)計了一溫度檢測電路,并能設(shè)置報警值,還附帶有時鐘電路。能夠?qū)崟r監(jiān)測我們生活的環(huán)境溫度,正確顯示當(dāng)前時間,為我們的生活提供一些幫助。二、作品介紹1創(chuàng)作背景溫度是我們?nèi)粘I钪谐3jP(guān)注的,我們常常會因為天氣太熱或太冷而發(fā)出“今天怎么這么熱(冷)哦,好多度哦?”這樣

2、的疑問??梢娢覀兪嵌嗝吹南胫雷约荷硖幵诙嗌俣鹊沫h(huán)境中。如果有個溫度計能實時測出環(huán)境溫度,那是多么的好啊。所以,本次我們采用DS18B20溫度傳感器設(shè)計了一溫度傳感器,能實時測出環(huán)境溫度。2、作品創(chuàng)新本次采用的溫度傳感器是DS18B20,它是一塊數(shù)字溫度傳感器,在使用時不用外接元件,不需A/D轉(zhuǎn)換,使用簡單方便。另外,電路還帶得有時鐘,能夠正確顯示當(dāng)前時間,還具有鬧鐘功能。三、工作原理溫度傳感器DS18B20檢測到溫度,然后傳給單片機再在液晶屏上顯示。時鐘芯片將時間通過單片機顯示在液晶屏上。鍵盤可對時間、溫度報警值、鬧鐘進行設(shè)置。四、作品結(jié)構(gòu)1、硬件部分 單片機介紹:AT89S52是一種低功耗

3、、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。VCC : 電源GND: 地P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,

4、P0具有內(nèi)部上拉電阻。在 flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。P1 口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX)。P2 口:P2 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4

5、 個TTL 邏輯電平。對P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX DPTR)時,P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。P3 口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P3 端口

6、寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。在flash編程和校驗時,P3口也接收一些控制信號。RST: 復(fù)位輸入。晶振工作時,RST腳持續(xù)2 個機器周期高電平將使單片機復(fù)位??撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8 位地址的輸出脈沖。在fla

7、sh編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE 使能標志位(地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當(dāng) AT89S52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周

8、期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。DS1302介紹:DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、

9、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.55.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對后背電源進行涓細電流充電的能力。DS1302的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄,因此廣泛應(yīng)用于測量系統(tǒng)中。各引腳的功能為: Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2Vcc1+0.2V時,由Vcc2向DS1302供電,當(dāng)Vcc20;i-)DQ = 0; / 給脈沖信號dat=1;DQ = 1; / 給脈沖信號i

10、f(DQ)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar(unsigned char dat)/寫一個字節(jié)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;Delay(5);DQ = 1;dat=1;/*/unsigned int ReadTemperature(void)/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC);

11、/ 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作WriteOneChar(0xBE); /讀取溫度寄存器a=ReadOneChar(); /讀低8位b=ReadOneChar(); /讀高8位t=b;t0; i-) T_IO = ACC0; /相當(dāng)于匯編中的 RRC T_CLK = 1; T_CLK = 0; ACC = ACC 1; /* 函 數(shù) 名:RTOutputByte() 功 能:實時時鐘讀取一字節(jié) 說 明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù)) 入口參

12、數(shù):無 返 回 值:ACC*/unsigned char RTOutputByte(void) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相當(dāng)于匯編中的 RRC ACC7 = T_IO; T_CLK = 1; T_CLK = 0; return(ACC); /* 函 數(shù) 名:Write1302() 功 能:往DS1302寫入數(shù)據(jù) 說 明:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù)) 調(diào) 用:RTInputByte() , RTOutputByte() 入口參數(shù):ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù) 返 回 值:無 */v

13、oid Write1302(unsigned char ucAddr, unsigned char ucDa) T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); / 地址,命令 clk 1-0 RTInputByte(ucDa); / 寫1Byte數(shù)據(jù) T_CLK = 1; T_RST = 0;/* 函 數(shù) 名:Read1302() 功 能:讀取DS1302某地址的數(shù)據(jù) 說 明:先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù)) 調(diào) 用:RTInputByte() , RTOutputByte() 入口參數(shù):ucAddr: DS1302地址 返 回

14、 值:ucData :讀取的數(shù)據(jù)*/unsigned char Read1302(unsigned char ucAddr) unsigned char ucData; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); / 地址,命令 ucData = RTOutputByte(); / 讀1Byte數(shù)據(jù) T_CLK = 1; T_RST = 0; return(ucData);/* 函 數(shù) 名:Set1302() 功 能:設(shè)置初始時間 說 明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式) 調(diào) 用:Write1302() 入口參數(shù):pC

15、lock: 設(shè)置時鐘數(shù)據(jù)地址 格式為: 秒 分 時 日 月 星期 年 7Byte (BCD碼)1B 1B 1B 1B 1B 1B 1B 返 回 值:無*/void Set1302(unsigned char *pClock) unsigned char i; unsigned char ucAddr = 0x80; Write1302(0x8e,0x00); / 控制命令,WP=0,寫操作 for(i =7; i0; i-) Write1302(ucAddr,*pClock); / 秒 分 時 日 月 星期 年 pClock+; ucAddr +=2; Write1302(0x8e,0x80)

16、; / 控制命令,WP=1,寫保護int temp;char temph = 45;char templ = 5;extern unsigned char id,timecount,re_disp,id_1,id_2,teh,tel,count,numb,timer0_count;extern bit bit_hour,bit_minute,bit_second,bit_day,bit_month,bit_year,bit_week,bit_n_zh,bit_z_d,flag,disp_mode;extern bit bit_clock_hour,bit_clock_minute,bit_cl

17、ock_second,bit_clock_contrl;/*定義DS1302各時間變量*/extern uchar secondh; extern uchar secondl;extern uchar miniteh;extern uchar minitel;extern uchar hourh;extern uchar hourl;extern uchar yearh;extern uchar yearl;extern uchar monthh;extern uchar monthl;extern uchar dayh;extern uchar dayl;extern uchar weekl

18、;extern uchar n_zh; extern uchar z_d; extern uchar clock_hourh;extern uchar clock_hourl;extern uchar clock_minh;extern uchar clock_minl;extern uchar clock_sech;extern uchar clock_secl;extern uchar _clock_key;void displayfun2(void)DisplayOneChar(0,0,S);DisplayOneChar(1,0,E);DisplayOneChar(2,0,T);Disp

19、layOneChar(3,0, );DisplayOneChar(4,0,T);DisplayOneChar(5,0,:);DisplayOneChar(8,0,:);DisplayOneChar(11,0,:);DisplayOneChar(14,0, );DisplayOneChar(15,0, );/顯示溫度 設(shè)置 DisplayOneChar(0,1, );DisplayOneChar(1,1,T);DisplayOneChar(2,1,E);DisplayOneChar(3,1,M);DisplayOneChar(4,1,P);DisplayOneChar(5,1, );Displa

20、yOneChar(6,1,H);DisplayOneChar(7,1,:);DisplayOneChar(10,1, );DisplayOneChar(11,1,L);DisplayOneChar(12,1,:);DisplayOneChar(15,1, );if(flag&teh)DisplayOneChar(8,1,0x20);DisplayOneChar(9,1,0x20);elseDisplayOneChar(8,1,temph/10+0x30);DisplayOneChar(9,1,temph%10+0x30);if(flag&tel)DisplayOneChar(13,1,0x20

21、);DisplayOneChar(14,1,0x20);elseDisplayOneChar(13,1,templ/10+0x30);DisplayOneChar(14,1,templ%10+0x30);if(flag&bit_clock_hour)DisplayOneChar(6,0,0x20);DisplayOneChar(7,0,0x20);elseDisplayOneChar(6,0,clock_hourh+0x30);DisplayOneChar(7,0,clock_hourl+0x30);if(flag&bit_clock_minute)DisplayOneChar(9,0,0x2

22、0);DisplayOneChar(10,0,0x20);elseDisplayOneChar(9,0,clock_minh+0x30);DisplayOneChar(10,0,clock_minl+0x30); if(flag&bit_clock_second)DisplayOneChar(12,0,0x20);DisplayOneChar(13,0,0x20);elseDisplayOneChar(12,0,clock_sech+0x30);DisplayOneChar(13,0,clock_secl+0x30);void displayfun1(void)DisplayOneChar(0

23、,0,2);DisplayOneChar(1,0,0);DisplayOneChar(4,0,-);DisplayOneChar(7,0,-);DisplayOneChar(10,0, );DisplayOneChar(11,0,W);DisplayOneChar(12,0,:);DisplayOneChar(14,0, );DisplayOneChar(15,0, );DisplayOneChar(0,1, );DisplayOneChar(3,1,:);DisplayOneChar(6,1,:);DisplayOneChar(9,1, );DisplayOneChar(14,1, );Di

24、splayOneChar(15,1, );display_temp();if(flag&bit_hour)DisplayOneChar(1,1,0x20);DisplayOneChar(2,1,0x20);elseDisplayOneChar(1,1,hourh+0x30);DisplayOneChar(2,1,hourl+0x30);if(flag&bit_minute)DisplayOneChar(4,1,0x20);DisplayOneChar(5,1,0x20);elseDisplayOneChar(4,1,miniteh+0x30);DisplayOneChar(5,1,minite

25、l+0x30); if(flag&bit_second)DisplayOneChar(7,1,0x20);DisplayOneChar(8,1,0x20);elseDisplayOneChar(7,1,secondh+0x30);DisplayOneChar(8,1,secondl+0x30);if(flag&bit_week)DisplayOneChar(13,0,0x20); elseDisplayOneChar(13,0,weekl+0x30);if(flag&bit_year)DisplayOneChar(2,0,0x20);DisplayOneChar(3,0,0x20); else

26、DisplayOneChar(2,0,yearh+0x30);DisplayOneChar(3,0,yearl+0x30);if(flag&bit_month)DisplayOneChar(5,0,0x20);DisplayOneChar(6,0,0x20); elseDisplayOneChar(5,0,monthh+0x30);DisplayOneChar(6,0,monthl+0x30);if(flag&bit_day)DisplayOneChar(8,0,0x20);DisplayOneChar(9,0,0x20); elseDisplayOneChar(8,0,dayh+0x30);

27、DisplayOneChar(9,0,dayl+0x30);void display_time()secondh=Read1302(sec|read)/16;delay_LCM(10);secondl=Read1302(sec|read)%16;delay_LCM(10); miniteh=Read1302(min|read)/16;delay_LCM(10);minitel=Read1302(min|read)%16;delay_LCM(10); hourh=Read1302(hou|read)/16;delay_LCM(10);hourl=Read1302(hou|read)%16;del

28、ay_LCM(10); dayh=Read1302(day|read)/16;delay_LCM(10);dayl=Read1302(day|read)%16;delay_LCM(10); monthh=Read1302(month|read)/16;delay_LCM(10);monthl=Read1302(month|read)%16;delay_LCM(10); yearh=Read1302(year|read)/16;delay_LCM(10);yearl=Read1302(year|read)%16;delay_LCM(10); weekl=Read1302(week|read)%1

29、6; clock_hourh=Read1302(clock_hour|read)/16;delay_LCM(10);clock_hourl=Read1302(clock_hour|read)%16;delay_LCM(50); clock_minh=Read1302(clock_min|read)/16;delay_LCM(10);clock_minl=Read1302(clock_min|read)%16;delay_LCM(10); clock_sech=Read1302(clock_sec|read)/16;delay_LCM(10);clock_secl=Read1302(clock_

30、sec|read)%16;delay_LCM(10); _clock_key=Read1302(clock_key|read);delay_LCM(10); if(disp_mode)displayfun2(); /正常顯示以及時間設(shè)置 if(!disp_mode)displayfun1();/鬧鐘設(shè)置 void display_temp(void)EA = 0;temp = ReadTemperature();EA = 1;if(temp/10)%100)=temph)beep=0; /溫度高于或等于上限值,報警 else beep=1;DisplayOneChar(15,1,C);Disp

31、layOneChar(14,1,0xdf);DisplayOneChar(10,1,temp/100+0x30);DisplayOneChar(11,1,(temp/10)-(temp/100)*10+0x30);DisplayOneChar(12,1,.);DisplayOneChar(13,1,temp%10+0x30);/* */extern unsigned char id,timecount,re_disp,id_1,id_2,teh,tel,count,numb,timer0_count;extern bit bit_hour,bit_minute,bit_second,bit_d

32、ay,bit_month,bit_year,bit_week,bit_n_zh,bit_z_d,flag,disp_mode;extern bit bit_clock_hour,bit_clock_minute,bit_clock_second,bit_clock_contrl;extern char temph,templ;void delays(unsigned char k)unsigned char i,j;for(i=0; ik; i+)for(j=0; j6)id=0; /id加1,后面根據(jù)id值對應(yīng)調(diào)整項目調(diào)9項else id_1+;if(id_15)id_1=0; /調(diào)3項 i

33、f(!disp_mode)/調(diào)整年月日時分等 id_1 = 0; if(id=0)bit_hour=0;bit_minute=0;bit_second=0; bit_day=0;bit_month=0;bit_year=0; bit_week=0;bit_n_zh=0;bit_z_d=0; /根據(jù)id值跳到相應(yīng)處理函數(shù) if(id=1)bit_minute=1;id_case1_key();/id為1,選擇調(diào)整小時位,閃爍標志位置1,然后跳到鍵盤處理函數(shù),下同 if(id=2)bit_minute=0;bit_hour=1;id_case1_key(); if(id=3)bit_hour=0;

34、bit_week=1;id_case1_key(); if(id=4)bit_week=0;bit_day=1;id_case1_key(); if(id=5)bit_day=0;bit_month=1;id_case1_key(); if(id=6)bit_month=0;bit_year=1;id_case1_key(); else /設(shè)置鬧鐘 和溫度 報警 id = 0;if(id_1=0)bit_clock_second = 0;bit_clock_minute = 0;bit_clock_hour = 0;bit_clock_second = 0;teh = 0;tel =0;if(

35、id_1=1)bit_clock_second = 1;id_case1_key();if(id_1=2)bit_clock_second = 0;bit_clock_minute = 1;id_case1_key();if(id_1=3)bit_clock_minute = 0;bit_clock_hour = 1;id_case1_key();if(id_1=4)bit_clock_hour = 0;teh = 1;id_case1_key();if(id_1=5)teh = 0;tel = 1;id_case1_key(); /*鍵盤處理函數(shù),只有按下SET_MODE鍵時才會進入*/void id_case1_key(void)display_time(); /*檢測減少鍵*/if(!DOWN)delays(50); /防止干擾10ms if (!DOWN) /減少 re_disp=0;if(!disp_mode)Set_id(

溫馨提示

  • 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

提交評論