單片機(jī)課程設(shè)計(jì)溫度控制系統(tǒng)_第1頁
單片機(jī)課程設(shè)計(jì)溫度控制系統(tǒng)_第2頁
單片機(jī)課程設(shè)計(jì)溫度控制系統(tǒng)_第3頁
單片機(jī)課程設(shè)計(jì)溫度控制系統(tǒng)_第4頁
單片機(jī)課程設(shè)計(jì)溫度控制系統(tǒng)_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、溫度控制系統(tǒng)設(shè)計(jì)題 目: 基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì) 姓 名: 賀丹 李嘉位 學(xué) 院: 工學(xué)院 專 業(yè): 自動化 班 級: 自動114班 學(xué) 號: 32211405 32211409 指導(dǎo)教師: 2013年 9月 日南京農(nóng)業(yè)大學(xué)教務(wù)處制摘要:3一、系統(tǒng)設(shè)計(jì)31.1 項(xiàng)目概要31.2設(shè)計(jì)任務(wù)和要求:4二、 硬件設(shè)計(jì)42.1 硬件設(shè)計(jì)概要42.2 信息處理模塊42.3 溫度采集模塊52.3.1傳感器DS18b20簡介52.3.2實(shí)驗(yàn)?zāi)M電路圖62.3.3程序流程圖72.4控制調(diào)節(jié)模塊82.4.1升溫調(diào)節(jié)系統(tǒng)82.4.2溫度上下限調(diào)節(jié)系統(tǒng)92.5顯示模塊11三、仿真后,部分顯示成果12四、兩周

2、實(shí)習(xí)總結(jié)15五、致謝15六、參考文獻(xiàn)15七、附錄167.1原理圖167.2參考程序16摘要: 在現(xiàn)代工業(yè)生產(chǎn)中,溫度是常用的測量被控因素。本設(shè)計(jì)是基于51單片機(jī)控制,將DS18B20溫度傳感器實(shí)時(shí)溫度轉(zhuǎn)化,并通過1602液晶對溫度實(shí)行實(shí)時(shí)顯示,并通過加熱片(PWM波,改變其占空比)加熱與步進(jìn)電機(jī)降溫逐次逼近的方式,將溫度保持在設(shè)定溫度,通過按鍵調(diào)節(jié)溫度報(bào)警區(qū)域,實(shí)現(xiàn)對溫度在0-99控制的自動化。實(shí)驗(yàn)結(jié)果表明此結(jié)構(gòu)完全可行,溫度偏差可達(dá)0.1以內(nèi)。關(guān)鍵字:AT89C51單片機(jī);溫控;DS18b20Abstract: In modern industrial production, the tem

3、perature is commonly measured controlled factors.The design is based on the 51 SCM control, the DS18B20 temperature sensor real time temperature transformation, and through the 1602 LCD on the temperature of the real-time display, and by heating the sheet (PWM wave, changing its duty cycle) heating

4、and stepper motor cooling successive approximation approach, keeping the temperature at the set temperature, through the buttons adjust temperature alarm area, the temperature at 0 -99 control automation.The experimental results show that this structure is completely feasible, the deviation of tempe

5、rature can reach 0.1 DEG C.Key word: AT89C51Monolithic integrated circuit ; Temperature control; DS18B20 一、系統(tǒng)設(shè)計(jì)1.1 項(xiàng)目概要 溫度控制系統(tǒng)無論是工業(yè)生產(chǎn)過程,還是日常生活都起著非常重要的作用,過低或過高的溫度環(huán)境不僅是一種資源的浪費(fèi),同時(shí)也會對機(jī)器和工作人員的壽命產(chǎn)生嚴(yán)重影響,極有可能造成嚴(yán)重的經(jīng)濟(jì)財(cái)產(chǎn)損失,給生活生產(chǎn)帶來許多利的因素,基于AT89C51的單片機(jī)溫度控制系統(tǒng)與傳統(tǒng)的溫度控制相比具有操作方便、價(jià)價(jià)格便宜、精確度高和開展容易等優(yōu)點(diǎn),因此市場前景好。1.2設(shè)計(jì)任務(wù)和基本要

6、求:(1) 采用DS18B20作為溫度傳感器進(jìn)行溫度檢測。(2) 對采集溫度用LCD1602進(jìn)行顯示(顯示溫度分辨率0.1);采集溫度數(shù)值應(yīng)采用數(shù)字濾波措施,保證顯示數(shù)據(jù)穩(wěn)定。(3) 設(shè)計(jì)相應(yīng)的溫度控制電路,根據(jù)測得的溫度情況對加熱器進(jìn)行控制,將溫度保持在設(shè)定溫度。(4) 通過按鍵設(shè)置溫度上下限,超限通過蜂鳴器報(bào)警。(5) 采用DS1302時(shí)鐘芯片顯示當(dāng)前時(shí)間,并可以對時(shí)間進(jìn)行設(shè)置。二、 硬件設(shè)計(jì)2.1 硬件設(shè)計(jì)概要根據(jù)需求,我們將系統(tǒng)分為五個(gè)模塊,信息處理模塊,溫度采集模塊、時(shí)間模塊、控制調(diào)節(jié)模塊、報(bào)警電路模塊,顯示模塊。2.2 信息處理模塊AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀

7、存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。單片機(jī)模塊如

8、圖(1) 所示。圖(1)單片機(jī)模塊2.3 溫度采集模塊2.3.1傳感器DS18b20簡介 DALLAS最新單線數(shù)字溫度傳感器DS18b20簡介新的“一線器件”,體積更小、適用電壓更寬、更經(jīng)濟(jì)。Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS18b20是世界上第一片支持“一線總線”接口溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新的概念。DS18b20、DS1822“一線總線”數(shù)字化溫度傳感器同DS1820一樣,DS18b20也支持“一線總線”接口,測量溫度范圍為-55 +125,在-10 +85范圍內(nèi),精度為0.5。DS18b20的精度較差為2。現(xiàn)場

9、溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測量類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V 5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。DS18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18b20的實(shí)驗(yàn)板原理接線圖如圖(2): 圖(2) DS18b20的實(shí)驗(yàn)板接線圖 其中:DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)2.3.2實(shí)驗(yàn)?zāi)M電路圖溫度檢測控制模擬

10、電路圖Ds18b20原件及其連線如圖(3),此溫度傳感器上顯示的溫度同步顯示到LCD1602上,并有加溫,減溫按鈕。圖(3)溫度檢測控制模擬電路圖2.3.3程序流程圖圖(4)主程序流程圖圖(5)DS18B20初始化子程序流程圖 圖(6)DS18B20讀寫的程序流程圖2.4控制調(diào)節(jié)模塊2.4.1升溫調(diào)節(jié)系統(tǒng) 通過繼電器的開合來控制加熱片電路的通斷,來達(dá)到設(shè)溫效果,我們預(yù)設(shè)溫度為25度,當(dāng)溫度低于25度時(shí),單片機(jī)P3.6引腳輸出高電平,繼電器導(dǎo)通,對溫度傳感器加熱,加熱模塊如圖(7)所示。圖(7)加溫控制電路2.4.2溫度上下限調(diào)節(jié)系統(tǒng) 通過按鍵控制鍵選著調(diào)節(jié)對象,通過上升下降調(diào)節(jié)值大小,模擬電路

11、圖如圖(78主控電路:我們設(shè)定溫度為10-20度,為表示方便,這里設(shè)控制開關(guān),升溫開關(guān),降溫開關(guān)分別為,k1,k2,k3,開始顯示的是當(dāng)前溫度,K1主控開關(guān),用來控制進(jìn)入的是當(dāng)前溫度,溫度上限,下限的調(diào)節(jié)界面。按k1,一次進(jìn)入三個(gè)界面。按K2為加1開關(guān),按一下,加1,k3減1開關(guān),按一下,減1.例如:開始時(shí)顯示的是當(dāng)前溫度界面,按下k1進(jìn)入高溫設(shè)定界面,顯示器上顯示當(dāng)前溫度和溫度上限,按k2,上限加1,按k3,上限減1,再按k1進(jìn)入顯現(xiàn)設(shè)定界面,顯示器顯示當(dāng)前溫度,和溫度下限,按k2,下限加1,按k3,下限減1,再按k1,進(jìn)入顯示當(dāng)前溫度界面。如圖(8)2.4.3 報(bào)警電路系統(tǒng) 通過蜂鳴器的鳴

12、叫實(shí)現(xiàn)報(bào)警,如果溫度超過上限蜂鳴器鳴叫,溫度低于下限蜂鳴器鳴叫。如圖(8)、(9)。圖(8)溫度設(shè)定開關(guān)圖(9)報(bào)警模塊 2.5顯示模塊通過采集DS18B20的溫度,同步顯示到LCD1602上,精確到小數(shù)點(diǎn)后第一位。如下圖圖(10)溫度顯示界面通過DS1302時(shí)鐘芯片將時(shí)間同步顯示到LCD1602上。如下圖(時(shí)間可以設(shè)置在此沒有設(shè)置)圖(11)時(shí)間顯示界面通過2402記錄超過設(shè)定值的溫度,如下圖:圖(12)記錄超過設(shè)定值的溫度顯示界面 三、仿真后,部分顯示成果圖(10)開始啟動時(shí),顯示時(shí)間信息圖(11)顯示當(dāng)前溫度圖(12)溫度低于低溫下限,蜂鳴器鳴叫圖(13)溫度高于溫度上限,蜂鳴器鳴叫圖(

13、14)顯示學(xué)號界面四、兩周實(shí)習(xí)總結(jié) 這次單片機(jī)實(shí)習(xí)我們做的是溫度控制系統(tǒng)??吹竭@個(gè)題目我們還是比較有信心的,對基本功能的設(shè)計(jì),我們比較熟練,關(guān)鍵問題在于一些拓展功能的時(shí)限。第一周我們找了很多資料,通過兩周的實(shí)習(xí),我們 學(xué)到了很多的知識,也對DS18B20的用法以及DS1302的用法有了一個(gè)更深入的學(xué)習(xí)。 五、參考文獻(xiàn)1 郭天祥.新概念51單片機(jī)C語音教程入門提高開發(fā)拓展攻略M.北 京:北京:電子工業(yè)出版社,2009.2 韓廣興.電子元器件與實(shí)用電路基礎(chǔ)M.北京:電子工業(yè)出版社,2005.3 方大千,朱麗.電子控制系統(tǒng)裝置制作入門M.北京:國防出版社,2006.4 劉向舉,劉麗娜. 基于單片機(jī)的

14、智能溫度測控系統(tǒng)的設(shè)計(jì)J. 齊齊哈爾大 學(xué)學(xué)報(bào)(自然科學(xué)版). 2012(03)5 黃文力,鄧小磊. DS18B20數(shù)字溫度傳感器接口程序的時(shí)序J. 儀器儀表 用戶. 2011(06)6 黃曉林. 一種實(shí)用型智能恒溫控制系統(tǒng)設(shè)計(jì)J. 自動化技術(shù)與應(yīng)用. 2011(11)7 王文,王直. 基于ARM和DS18B20的溫度監(jiān)測系統(tǒng)J. 電子設(shè)計(jì)工程. 2011(20)8 陳錫華,賈磊磊. 溫度傳感器DS18B20序列號批量搜索算法J. 單片機(jī)與 嵌入式系統(tǒng)應(yīng)用. 2011(09)六、附錄 6.1原理圖6.2參考程序main.c文件:#include"STC89C51RC.H"#

15、include<absacc.h>#include"ds18b20.h"#include"lcd1602.h"#include"ds1302.h"#include"2402.h"uchar data datadis=0x00,0x00,0x00,0x00,0x00;uint temp=0;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit K5=P14;sbit L1=P16;sbit K7=P17;sbit beep=P15;/sbit K1=P1

16、4;/sbit K2=P15;/sbit K3=P16;/sbit K4=P17;/sbit K5=P33;/sbit L1=P25;/sbit speaker=P32;uchar keynum=1,flag,flag1,flag2,flag4,adder,q;uint k,count=1,th,tl,set;systemtime realtime;/CurrentTime;uchar th1=8;uchar th2=5;uchar th3=2;uchar th4=0;uchar tab,w;void delay(uchar z)uchar x,y;for(x=z;x>0;x-) for

17、(y=110;y>0;y-);/*控制頁面 1-4頁*/uchar key4() if(K4=0) delay(5);if(K4=0) while(!K4); keynum+; if(keynum=6)keynum=1; return keynum;/*設(shè)置時(shí)間鍵盤函數(shù)*/void key_time() if(flag4=1&&k=1)if(K7=0)delay(5);if(K7=0)while(!K7);count+;if(count=8) count=2;switch(count)case 2:if(K1=0) delay(5);if(K1=0) set+; whil

18、e(!K1); if(set=60)set=0; if(K2=0) delay(5);if(K2=0) set-; while(!K2); if(set=-1)set=59; DS1302_SetTime(0x80, set); break; /設(shè)置秒case 3:if(K1=0) delay(5);if(K1=0) set+; while(!K1); if(set=60)set=0; if(K2=0) delay(5);if(K2=0) set-; while(!K2); if(set=-1)set=59; DS1302_SetTime(0x82, set); break; /設(shè)置分case

19、 4:if(K1=0) delay(5);if(K1=0) set+; while(!K1); if(set=60)set=0; if(K2=0) delay(5);if(K2=0) set-; while(!K2); if(set=-1)set=59; DS1302_SetTime(0x84, set); break; /設(shè)置時(shí)case 5:if(K1=0) delay(5);if(K1=0) set+; while(!K1); if(set=31)set=0; if(K2=0) delay(5);if(K2=0) set-; while(!K2); if(set=-1)set=30; DS

20、1302_SetTime(0x86, set); break; /設(shè)置日case 6:if(K1=0) delay(5);if(K1=0) set+; while(!K1); if(set=13)set=0; if(K2=0) delay(5);if(K2=0) set-; while(!K2); if(set=-1)set=12; DS1302_SetTime(0x88, set); break; /設(shè)置月case 7:if(K1=0) delay(5);if(K1=0) set+; while(!K1); if(set=100)set=0; if(K2=0) delay(5);if(K2=

21、0) set-; while(!K2); if(set=-1)set=99; DS1302_SetTime(0x8c, set); break; /設(shè)置年default: break;else flag4=0;/*設(shè)置溫度的鍵盤掃描函數(shù)*/void key_lcd() if(flag1=1&&k=3) /k一定不能掉,不然會在其他菜單里出現(xiàn)亂碼 if(K3=0)/按鍵判斷,選擇設(shè)置溫度的光標(biāo) delay(5);if(K3=0) while(!K3); flag+; /按鍵標(biāo)識位 if(flag=5)flag=1; switch(flag) case 1: if(K1=0) de

22、lay(5);if(K1=0) th1+; while(!K1); if(th1=10)th1=0; if(K2=0) delay(5);if(K2=0) th1-; while(!K2); if(th1=-1)th1=9; LCD_pos(0x43); write_dat(th1+0x30); break;case 2: if(K1=0) delay(5);if(K1=0) th2+; while(!K1); if(th2=10)th2=0; if(K2=0) delay(5);if(K2=0) th2-; while(!K2); if(th2=-1)th2=9; LCD_pos(0x44)

23、;/位置設(shè)定 write_dat(th2+0x30); break;case 3: if(K1=0) delay(5);if(K1=0) th3+; while(!K1); if(th3=10)th3=0; if(K2=0) delay(5);if(K2=0) th3-; while(!K2); if(th3=-1)th3=9; LCD_pos(0x4c); write_dat(th3+0x30); break;case 4: if(K1=0) delay(5);if(K1=0) th4+; while(!K1); if(th4=10)th4=0; if(K2=0) delay(5);if(K

24、2=0) th4-; while(!K2); if(th4=-1)th4=9; LCD_pos(0x4d); write_dat(th4+0x30); break;default:break; else flag1=0; /m一定不能掉,否則在調(diào)節(jié)溫度的時(shí)候會影響其他菜單 th=th1*10+th2; /獲取設(shè)置溫度的高位 tl=th3*10+th4; /獲取設(shè)置溫度的低位void alarm_beep() /報(bào)警系統(tǒng)與當(dāng)前溫度進(jìn)行比較并處理if(temp>(th*10)|temp<(tl*10) beep=beep;L1=0;adder+;tab=temp/10;write_ad

25、d(adder,tab); else beep=1;L1=1; /*主函數(shù)*/void main()init_18b20();init_lcd();init_2402();beep=1;/Set_RTC();count=7;while(1) k=key4(); get_ds1302(&realtime);/取時(shí)間temp=read_temp(); /取溫度delay(200); /延時(shí) 保持?jǐn)?shù)據(jù)穩(wěn)定 避免數(shù)據(jù)刷新switch(k) case 1: /菜單一,顯示時(shí)間并且可以設(shè)置時(shí)間 /key_time();/get_ds1302(&realtime);LCD_pos(0); p

26、rint(" Time: "); print(realtime.TimeString);LCD_pos(0x40); print(" Date: "); print(realtime.DateString);flag4=1; break; case 2: /菜單二,顯示溫度 LCD_pos(0); print(" DS18B20 is OK ");LCD_pos(0x40); print("NOW TEMP: ");if(flagt=1)datadis0=0x2d;else datadis0=temp/1000+0

27、x30;datadis1=temp/100%10+0x30;datadis2=temp/10%10+0x30;datadis3=0x2e;datadis4=temp%10+0x30;LCD_pos(0x49);print(datadis);LCD_pos(0x4e); /寫入攝氏度符號write_dat(0xdf);LCD_pos(0x4f);write_dat(0x43); break; case 3: /菜單三,顯示溫度設(shè)置值 LCD_pos(0);print(" change temp: ");LCD_pos(0x40);print("TH= TL= &qu

28、ot;);LCD_pos(0x43);write_dat(th1+0x30);LCD_pos(0x44);write_dat(th2+0x30);LCD_pos(0x45); /攝氏度符號write_dat(0xdf); LCD_pos(0x46);write_dat(0x43);LCD_pos(0x4c);write_dat(th3+0x30);LCD_pos(0x4d);write_dat(th4+0x30);LCD_pos(0x4e); /攝氏度符號write_dat(0xdf); LCD_pos(0x4f);write_dat(0x43);flag1=1; break; case 4:

29、 /菜單四,記錄報(bào)警溫度 write_cmd(0x80);print(" ALARM TEMP ");write_cmd(0xc0);print(" RECORD: ");write_cmd(0xcb);write_dat(0xdf); write_cmd(0xcc);write_dat(0x43);flag2=1;break; case 5: /菜單五,顯示學(xué)號 LCD_pos(0x00);print("AUTO llk32210309"); /顯示學(xué)號LCD_pos(0x40);print("AUTO wyp322103

30、04"); /顯示學(xué)號break; default:break; key_time();key_lcd();/菜單三中溫度設(shè)置的按鍵掃描alarm_beep(); /報(bào)警系統(tǒng)通過2402存儲超出的溫度,并記錄 if(K5=0)/按下K5,就記錄當(dāng)前報(bào)警的溫度 delay(5); if(K5=0) while(!K5);q=read_add(adder); ;if(flag2=1&&k=4) /k一定不能掉,不然會在其他菜單里出現(xiàn)亂碼,菜單四中需要顯示存儲的報(bào)警數(shù)據(jù) write_cmd(0xc9);write_dat(q/10%10+0x30);write_cmd(0x

31、ca);write_dat(q%10+0x30); DS18B20.h文件:#ifndef _ds18b20_h_#define _ds18b20_h_#define uchar unsigned char#define uint unsigned int/晶振22MHZ/延時(shí)/sbit DQ=P37;bit flagt;void delay_18b20(uint i)while(i-);/*初始化程序*/ void init_18b20()uchar x=0;DQ=1;delay_18b20(8);DQ=0;delay_18b20(80);DQ=1;delay_18b20(15);x=DQ;

32、delay_18b20(15);/* 讀一個(gè)字節(jié)*/uchar read_byte()uchar i=0;uchar dat=0;for(i=0;i<8;i+) DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay_18b20(5); return dat;/*寫一個(gè)字節(jié)*/void write_byte(uchar dat)uchar i=0;for(i=0;i<8;i+) DQ=0;DQ=dat&0x01;delay_18b20(5);DQ=1;dat>>=1; /*溫度轉(zhuǎn)換并讀取溫度*/uint read_temp()

33、uchar a=0;uchar b=0;uint t;init_18b20();write_byte(0xcc); /跳過讀序號列號的操作write_byte(0x44);/ 啟動溫度轉(zhuǎn)換 /delay_18b20(100);init_18b20();write_byte(0xcc);/跳過讀序號列號的操作write_byte(0xbe);/讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=read_byte(); /讀第八位b=read_byte(); /讀高八位if(b&0x80) /高八位的最高位于是否為1,若為1,則為負(fù)溫度,若為0,則是0-128; flagt=1; a

34、=a; b=b; else flagt=0;t=(b*256+a)*5; /也可以寫成 t=(b*256+a)*0.625 ;return t;return (t>>3); /右移三位相當(dāng)于5/8=0.625返回溫度有4位,千、百、十、個(gè),轉(zhuǎn)化后有一位小數(shù)位,沒有千位#endifLCD1602.h文件:#ifndef _lcd1602_h_#define _lcd1602_h_#include<ds1302.h>#include <intrins.h>#define LCD_DB P0 /定義LCD數(shù)據(jù)接口sbit LCD_RS=P26;sbit LCD_R

35、W=P25;sbit LCD_EN=P27;/*測忙信號*/bit LCD_check_busy() /檢查LCD是否繁忙函數(shù)bit busy;LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_EN=1; _nop_(); _nop_(); _nop_(); /_nop_(); busy=(bit)(P0 & 0x80);LCD_EN=0;return(busy);/*寫數(shù)據(jù)*/void write_dat(uchar dat)while(LCD_check_busy();LCD_DB=dat;LCD_RS=1;_nop_();LCD_RW=0;_nop_();LCD_EN

36、=1;_nop_();_nop_();LCD_EN=0;/*寫命令*/void write_cmd(uchar cmd) while(LCD_check_busy();LCD_DB=cmd;LCD_RS=0;_nop_();LCD_RW=0;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;void delay_5ms(void) /誤差 0us unsigned char a,b; for(b=19;b>0;b-) for(a=130;a>0;a-);/*設(shè)置顯示位置*/void LCD_pos(unsigned char pos)/設(shè)定顯示位置

37、 write_cmd(pos | 0x80);/*LCD初始化*/void init_lcd()write_cmd(0x38);delay_5ms();write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);void print(uchar *str) while(*str!='0') write_dat(*str); str+; #endif /一定不能掉DS1302.h文件:/* DS1302內(nèi)部函數(shù)*/#ifndef _ds1302_h_#define _ds1302_h_#include"intrins.h"s

38、bit T_RST=P35;sbit T_CLK=P36;sbit T_IO=P34;/sbit T_RST=P41;/sbit T_CLK=P40;/sbit T_IO=P42;sbit ACC0=ACC0;sbit ACC7=ACC7;unsigned char l_tmpdate7=5,34,15,26,6,3,13;/秒分時(shí)日月周年08-05-15 12:00:00code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分時(shí)日月周年 最低位讀寫位typedef struct systemti

39、me uchar second;uchar minute;uchar hour;uchar week;uchar day;uchar month;uchar year;uchar DateString9;uchar TimeString9;systemtime;/定義的時(shí)間類型/*向DS1302中寫入1BYTE數(shù)據(jù)*/void writeB(uchar ucda) uchar i; ACC=ucda;for(i=8;i>0;i-) T_IO=ACC0; T_CLK=1; T_CLK=0; ACC=ACC>>1; /T_IO=0;/*/* 寫入DS1302 */*/void W

40、rite_Ds1302( unsigned char address,unsigned char dat ) T_RST=0;_nop_(); T_CLK=0;_nop_(); T_RST=1; _nop_(); /啟動 writeB(address);/發(fā)送地址 writeB(dat);/發(fā)送數(shù)據(jù) T_RST=0; /恢復(fù)/*從DS1302中讀出1BYTE數(shù)據(jù)*/uchar readB() uchar i; for(i=8;i>0;i-) ACC=ACC>>1;ACC7=T_IO;T_CLK=1;T_CLK=0; / T_IO=0; return(ACC);/*單字節(jié)讀,向

41、DS1302某地址中讀出數(shù)據(jù), 先寫地址后寫命令/數(shù)據(jù)*/uchar r_ds1302(uchar ucaddr) uchar ucda; T_RST=0; T_CLK=0; T_RST=1; writeB(ucaddr); ucda=readB(); T_CLK=1; T_RST=0; return(ucda);/*-*/是否寫入保護(hù)void DS1302_SetProtect(bit Flag)if(Flag)Write_Ds1302(0x8E,0x80); /0x8e控制字節(jié)地址,bit7=WP WP=1 禁止數(shù)據(jù)寫入DS1302elseWrite_Ds1302(0x8E,0x00);

42、/WP=0 允許數(shù)據(jù)寫入DS1302/*-*/設(shè)置時(shí)間函數(shù)void DS1302_SetTime(unsigned char Address, unsigned char Value)DS1302_SetProtect(0);Write_Ds1302(Address,(Value/10)<<4|(Value%10);DS1302_SetProtect(1);/* 讀取 DS1302當(dāng)前時(shí)間, 格式為: 秒,分,時(shí),日,月,星期,年*/void get_ds1302(systemtime *Time) uchar readtime; readtime = r_ds1302(0x81); /秒寄存器讀操作0x81Time->second = (readtime&0x70)>>4)*10 + (readtime&0x0f); /十位+個(gè)位readtime = r_ds1302(0x83); /分寄存器讀操作0x83Time->minute = (readtime&0x70

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論