課程設計題目:溫度采集與顯示系統匯總_第1頁
課程設計題目:溫度采集與顯示系統匯總_第2頁
課程設計題目:溫度采集與顯示系統匯總_第3頁
課程設計題目:溫度采集與顯示系統匯總_第4頁
課程設計題目:溫度采集與顯示系統匯總_第5頁
已閱讀5頁,還剩16頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

課程設計題目:溫度采集與顯示系統1課程設計內容1.1設計要求利用STC89C52、DS18B20、LCD1602、AT24C02等元器件設計溫度采集與顯示系統。系統具有以下功能:1)能正確檢測溫度;2)在1602上實時顯示溫度;3)每隔10秒采集一次溫度數據并保存到AT24C02;4)按鍵按下后,可逐個顯示之前采集到的數據;5)其他功能可根據系統上的資源自行設定。1.2設計任務1)根據設計內容與要求,弄清系統及各個模塊的工作流程,完成電路原理圖,包括單片機最小系統模塊、LCD顯示模塊、存儲模塊、串行口下載模塊和電源模塊,最終在萬用板上焊接,完成整個系統硬件設計。2)根據設計內容與要求,弄清系統及各個模塊的工作流程,完成系統的軟件設計,包括系統主程序、溫度讀取子程序、LCD顯示子程序、存儲子程序等,可使用匯編語言或是C語言編寫,建議使用C語言編寫。3)完成系統的仿真與調試,使得系統在脫機情況下,能穩定可靠的工作。1.3課程設計原理基于DS18B20的數字溫度計設計主要由數字溫度傳感器、單片機控制電路、數碼顯示電路組成。DS18B20測量溫度采用了特有的溫度測量技術。它是通過計數時鐘周期來實現的。低溫度系數振蕩器輸出的時鐘信號通過由高溫度系數振蕩器產生的門周期而被計數。計數器被預置在與-55°C相對應的一個基權值。如果計數器在高溫度系數振蕩周期結束前計數到零,表示測量的溫度值高于-55C,被預置在-55C的溫度寄存器的值就增加1C,然后重復這個過程,直到高溫度系數振蕩周期結為止這時溫度寄存器中的值就是被測溫度值,這個值以16位形式存放在便箋式存貯器中,此溫度值可由主機通過發存貯器讀命令而讀出,讀取時低位在前,高位在后。斜率累加器用于補償溫度振蕩器的拋物線特性。讀出的二進制數可以直接轉換為十進制由單片機驅動數碼管顯示輸出。DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9?12位的數字值讀數方式。溫范圍一55C?+125C,在-10?+85°C時精度為±0.5°C;可編程的分辨率為9?12位,對應的可分辨溫度分別為0.5C、0.25C、0.125C和0.0625C,可實現高精度測溫,典型的轉換時間為200ms;用戶可以設定溫度的上下限;獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。DS1820具有測溫系統簡單、測溫精度高、連接方便、占用口線少等優點,所以在測量領域得到廣泛的運用。2課程設計思路3硬件設計3.1單元模塊設計本節主要介紹系統中單片機STC89C52外圍電路重要模塊的功能和電路原理圖分析。并對電路中的核心器件進行必要的說明單元模塊設計3.1.1時鐘電路3.1.2復位電路圖3.2復位電路3.1.3報警電路圖3.3報警電路3.1.4溫度采集電路圖3.4溫度采集電路3.1.5存儲電路3.1.6LCD顯示模塊圖3.6LCD模塊電路3.1.7按鍵部分圖3.7按鍵電路3.1.8串口通信電路圖3.8串口通信電路3.2核心器件介紹3.2.1單片機STC89C52介紹STC89C52RC單片機是宏晶科技推出的新一代高速/低功耗/超強抗干擾的單片機,指令代碼完全兼容傳統8051單片機,12時鐘/機器周期和6時鐘/機器周期可以任意選擇。主要特性如下:工作電壓:5.5V?3.3V(5V單片機)/3.8V?2.0V(3V單片機。工作頻率范圍:0?40MHz,相當于普通8051的0?80MHz,實際工作頻率可達48MHz。用戶應用程序空間為8K字節。片上集成512字節RAM。通用I/O口(32個)復位后為FFH,P1/P2/P3/P4是準雙向口/弱上拉,P0口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為I/O口用時,需加上拉電阻。ISP(在系統可編程)/IAP(在應用可編程),無需專用編程器,無需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程序,數秒即可完成一片具有EEPROM功能。具有看門狗功能。共3個16位定時器/計數器。即定時器T0、T1、T2。外部中斷4路,下降沿中斷或低電平觸發電路,PowerDown模式可由外部中斷低電平觸發中斷方式喚醒。STC89C52RC引腳功能說明VCC(40引腳):電源電壓。VSS(20引腳):接地。P0端口(P0.0-P0.7P0.7,39?32引腳):P0口是一個漏極開路的8位雙向I/O口。作為輸出端口,每個引腳能驅動8個TTL負載,對端口P0寫入每個引腳能驅動寫入“1時,可以作為高阻抗輸入。在訪問外部程序和數據存儲器時在訪問外部程序和數據存儲器時,P0口也可以提供低8位地址和8位數據的復用總線位數據的復用總線。此時,P0口內部上拉電阻有效。在FlashROM編在程時,P0端口接收指令字節端口接收指令字節;而在校驗程序時,則輸出指令字節則輸出指令字節。驗證時,要求外接上拉電阻。P1端口(P1.0?P1.7,1?8引腳):P1口是一個帶內部上拉電阻的8位雙向I/O口。P1的輸出緩沖器可驅動(吸收或者輸出電流方式)4個TTL輸入。對端口寫入1時,通過內部的上拉電阻把端口拉到高電位,這是可用作輸入口。P1口作輸入口使用時,因為有內部上拉電阻,那些被外部拉低的引腳會輸出一個電流()。此外,P1.0和P1.1還可以作為定時器/計數器2的外部技術輸入(P1.0/T2)和定時器/計數器2的觸發輸入(P1.1/T2EX),具體參見下表:在對FlashROM編程和程序校驗時,P1接收低8位地址。P2端口(P2.0?P2.7,21?28引腳):P2口是一個帶內部上拉電阻的8位雙向I/O端口。P2的輸出緩沖器可以驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫入1時,通過內部的上拉電阻把端口拉到高電平,這時可用作輸入口。P2作為輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流(I)。在訪問外部程序存儲器和16位地址的外部數據存儲器(如執行“MOVX@DPTR”指令)時,P2送出高8位地址。在訪問8位地址的外部數據存儲器(如執行“MOVX@R1”指令)時,P2口引腳上的內容(就是專用寄存器(SFR)區中的P2寄存器的內容),在整個訪問期間不會改變。在對FlashROM編程和程序校驗期間,P2也接收高位地址和一些控制信號。P3端口(P3.0?P3.7,10?17引腳):P3是一個帶內部上拉電阻的8位雙向I/O端口。P3的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫入1時,通過內部的上拉電阻把端口拉到高電位,這時可用作輸入口。P3做輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸入一個電流()。在對FlashROM編程或程序校驗時,P3還接收一些控制信號。P3口除作為一般I/O口外,還有其他一些復用功能,如下所示:RST(9引腳):復位輸入。當輸入連續兩個機器周期以上高電平時為有效,復位高電平有效。ALE/ROG(30引腳)地址鎖存控制信號:(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在Flash編程時,此引腳(ROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE脈沖將會跳過。XTAL1(19引腳):振蕩器反相放大器和內部時鐘發生電路的輸入端。XTAL2(18引腳):振蕩器反相放大器的輸入端。

圖3.9AT89C52引腳圖P1.0—/VCCP1.IPQ.0P1.2P0.1P13P0.2圖3.9AT89C52引腳圖P1.0—/VCCP1.IPQ.0P1.2P0.1P13P0.2PlJP0.3PI.5P0.4P16P0.5PL?7P爵RSTVPD定P0?RNDP3.0HVPPTXDP3.1云ALE或DCHP3.S-P2.7TOP3-?=P2.6ILPS.5P25KRP3.6P2.4Riyp3._?2.3XTAL2P2JXTAL1P2AvssP2.0圖3.11LCD1602引腳圖具有3引腳TO-92小體積封裝形式;DS18B20是DALLAS公司生產的一線式傳感器,溫度測量范圍為-55攝氏度到+125攝氏度,可編程為9到12位A/D轉換精度,測溫分辨率可達0.0625攝氏度,被側溫度用符號擴展的16位數字量方式串行輸出;其工作電源既可在遠端引入,也可采用寄生電源方式產生。CPU只需一根端口線就能與諸多具有3引腳TO-92小體積封裝形式;DS18B20主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發的溫度報警觸發器TH個TL、配置寄存器。DS18B20中的溫度傳感器可完成對溫度的測量,用16位符號擴展的二進制補碼讀數形式提供,以0.0625攝氏度/LSB形式表達,其中S為符號位。例如+125攝氏度的數字輸出為07DOH,+25.0625攝氏度的數字輸出為0191H,-25.0625攝氏度的數字輸出為FF6FH,-55攝氏度的數字輸出為FC90H.圖3.10DS18B20的兩種封裝形式DS18B20采用一線通信接口。因為一線通信接口,必須在先完成ROM設定,否則記憶和控制功能將無法使用。主要首先提供以下功能命令之一:⑴讀ROM指令0X33,⑵ROM匹配指令0X55,⑶搜索ROM指令0XF0,⑷跳過ROM指令0XCC,⑸報警檢查指令0XEC。這些指令操作作用在沒有一個器件的64位光刻ROM序列號。3.2.3LCD1602介紹(LCD1602引腳圖見圖3.11)1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔每行之間也有也有間隔起到了字符間距和行間距的作用,正因為如此所以他不能顯示圖形。1602LCD是指顯示的內容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。液晶顯示器各種圖形的顯示原理:線段的顯示點陣圖形式液晶由MxN個顯示單元組成,假設LCD顯示屏有64行,每行有128列,每8列對應1字節的8位,即每行由16字節,共16x8=128個點組成,屏上64x16個顯示單元與顯示RAM區1024字節相對應,每一字節的內容和顯示屏上相應位置的亮暗對應。例如屏的第一行的亮暗由RAM區的000H——00FH的16字節的內容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=00H,......(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。字符的顯示用LCD顯示一個字符時比較復雜,因為一個字符由6x8或8x8點陣組成,既要找到和顯示屏幕上某幾個位置對應的顯示RAM區的8字節,還要使每字節的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內帶字符發生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。漢字的顯示漢字的顯示一般采用圖形的方式,事先從微機中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5......右邊為2、4、6......根據在LCD上開始顯示的行列號及每行的列數可找出顯示RAM對應的地址,設立光標,送上要顯示的漢字的第一字節,光標位置加1,送第二個字節,換行按列對齊,送第三個字節直到32B顯示完就可以LCD上得到一個完整漢字?!?602LCD主要技術參數:顯示容量:16x2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95x4.35(WxH)mm■引腳功能說明及11條控制指令1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如編號符號引腳說明編號符號引腳說明17SS電源地9D2數據2VDD電源正極10D3數據3ML液晶顯示偏壓11D4數據4RS數據J命令選擇12D5數據5R/W讀厚選擇13D6數據6E使能信號14D7數據1DO數據15日心背光源正極序號指令RSR/WD7D6D5D4D3D2D1D0id清顯示)00000000012光標返回n000000001*3置輸入模式「00000001I/DS4顯小開/關控制0000001DCB5光標或字符移位000001S/CR/L**■6置功能「00001DLNF**7置字符發生存貯或地址0001字符發生存貯器J曲址圖3.10蠢7堰杼能哭刊1MLCD1602中文字符-■■-一■-r--■■?代碼,與二己符I瓦末瀚堰在曠哭址州卜圖形對應的關廠IL、F10與數到CGRAM或DDRAM)10要寫的數據內容11從CGRAM或HDDRAM讀豉11讀出的數據內容「1602液晶模塊內部的控制器共有11條控制指令,如表下:DC3>,強口置■a1h三cepAn.1OO1<a.ic*><s>豐OITI3I七#15EIUI—13&IGFIMI-FI^I>iTlGiuins<18HIXIH-ixl>1-911IV[i7*1sIJINI8In|+1M|K|EIfc|<|,|<|L|¥|1I1I~I=IM|3[ml>|.i>zn—■I才*ZLu二3p=i十i*i方ig]兀勺Ir\jiibF*Hindis頃Itri匕口xklxml電言心巾L后p15P=S]?3.2.4AT24C02引腳圖及MAX232E引腳圖AO匚18A1匚27A2匚36GND匚45□SDAvccJWPSCLC1+i,D16VccV+215GNDCLLTtotfrC2+MAX220間R1inMAX232C2-MAX233A12V-11「inT2qut~17|T&n3f^ouiMAX232E引腳圖AT24C02引腳圖4軟件設計用模塊化程序設計此課程設計,各模塊程序如下所示總程序main模塊#include<reg52.h>#include<function.h>charmiao,shi,fen;uints1num;ucharcount;uintsu,tt,mm,m,n;ucharbuff[4];unsignedcharpDat[7],pDat1[7];sbits1=P2A3;sbits2=P2A4;sbits3=P2A5;voidmain(){m=0;n=0;init();EX0=1;while(1){write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);dis_temp(tt);dis_temp1(mm);keyscan();}}voidint_{EA=0;IRcvStr(0xa0,n,&pDat1[0],8);0()interrupt0mm=pDat1[0]*100+pDat1[1]*10+pDat1[2];pDat1[0]=0;pDat1[1]=0;pDat1[2]=0;n=n+8;EA=1;}voidkeyscan(){if(s1==0){delay(5);if(s1==0){s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10)}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3)(shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}voidtimer0()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;su++;if(su==20)(su=0;tempchange();tt=get_temp();pDat[0]=tt/100;pDat[1]=(tt%100)/10;pDat[2]=tt%10;ISendStr(0xa0,m,&pDat[0],8);m=m+8;pDat[0]=0;pDat[1]=0;pDat[2]=0;}count++;if(count==20)(count=0;miao++;if(miao==60)(miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}//write_sfm(4,shi)}//write_sfm(7,fen)}//write_sfm(10,miao);}}I2C程序模塊#include<reg52.h>#include<intrins.h>#include<Function.h>#defineNOP()_nop_()#define_Nop()_nop_()sbitSCL=P2A1;sbitSDA=P2A0;bitack;voidStart_I2c(){SDA=1;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SDA=0;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();}voidStop_I2c(){SDA=0;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;_Nop();_Nop();_Nop();_Nop();}voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++){if((c<<BitCnt)&0x80)SDA=1;elseSDA=0;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==1)ack=0;elseack=1;SCL=0;_Nop();_Nop();}unsignedcharRcvByte()(unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();retc=retc<<1;if(SDA==1)retc=retc+1;_Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);}voidAck_I2c(bita)

{if(a==0)SDA=0;elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();}AT24C02模塊#include<Function.h>bitISendStr(unsignedcharsla,unsignedcharsuba,unsignedcharcharno)(unsignedchari;Start_I2c();SendByte(sla);if(ack==0)return(0);SendByte(suba);if(ack==0)return(0);for(i=0;i<no;i++)(SendByte(*s);if(ack==0)return(0);s++;}Stop_I2c();return(1);}bitIRcvStr(unsignedcharsla,unsignedcharsuba,unsignedcharcharno)(*s,unsigned*s,unsignedunsignedchari;*s,unsigned*s,unsignedStart_I2c();SendByte(sla);if(ack==0)return(0);SendByte(suba);if(ack==0)return(0);Start_I2c();SendByte(sla+1);if(ack==0)return(0);for(i=0;i<no-1;i++)(*s=RcvByte();Ack_I2c(0);s++;}*s=RcvByte();Ack_I2c(1);Stop_I2c();return(1);}Lcd模塊#include<reg52.h>#include<function.h>sbitrs=P3A5;sbitlcden=P3A4;ucharcodetablenum[]="0123456789";ucharcodetable[]="00.0Rem00.0";ucharcodetable1[]="00:00:00";voiddelay(uintz)(uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidwrite_com(ucharcom)(rs=0;lcden=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;voidwrite_date(uchardat)(rs=1;lcden=0;P1=dat;delay(5);lcden=1;delay(5);lcden=0;}voidinit()(ucharnum;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<13;num++)(write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++)(write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}voidwrite_sfm(ucharadd,uchardat)(uchars,g;s=dat/10;g=dat%10;write_com(0x80+0x40+add);write_date(tablenum[s]);write_date(tablenum[g]);}voidwrite_sfm1(ucharadd,uchardat)(write_com(0x80+add);write_date(tablenum[dat]);DS18B20模塊#include<reg52.h>#include<stdio.h>#include<function.h>sbitds=P2A2;uinttemp;floatf_temp;voiddsreset(void)(uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bittempreadbit(void)(uinti;bitdat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchartempread(void)(uchari,j,dat;dat=0;for(i=1;i<=8;i++)(j=tempreadbit();dat=(j<<7)l(dat>>1);}return(dat);}voidtempwritebyte(uchardat)(uinti;ucharj;bittestb;for(j=1;j<=8;j++)(testb=dat&0x01;dat=dat>>1;if(testb)(ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}voidtempchange(void){dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44);}uintget_temp(){uchara,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;f

溫馨提示

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

評論

0/150

提交評論