電子萬年歷的設(shè)計_第1頁
電子萬年歷的設(shè)計_第2頁
電子萬年歷的設(shè)計_第3頁
電子萬年歷的設(shè)計_第4頁
電子萬年歷的設(shè)計_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 學(xué)號 7中州大學(xué)畢業(yè)設(shè)計(論文)題 目 電子萬年歷的設(shè)計 學(xué) 院 工程技術(shù)學(xué)院 專 業(yè) 應(yīng)用電子技術(shù) 年 級 12 班 級 2 學(xué)生姓名 xxx 指導(dǎo)教師 孫 建 延 職稱 副教授 時 間 2014年12月4日 電子萬年歷的設(shè)計摘 要: 隨著電子技術(shù)的迅速發(fā)展,特別是隨著大規(guī)模集成電路的出現(xiàn),給人類生活帶來根本性的改變。尤其是單片機技術(shù)的應(yīng)用產(chǎn)品已走進(jìn)千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來了諸多方便。電子萬年歷是一種非常廣泛的日常計時工具,在現(xiàn)代社會越來越流行。它可以對年、月、日、周日、時、分、秒進(jìn)行計時,還具有閏年補償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對于電子萬年歷采用

2、直觀的1602液晶顯示,可以同時顯示年、月、日、周日、時、分、秒和溫度等信息,還具有時間校準(zhǔn)等功能。該電路采用AT89S52單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用35V電壓供電。在設(shè)計的同時對單片機的理論基礎(chǔ)和外圍擴展知識進(jìn)行了比較全面準(zhǔn)備。在硬件與軟件設(shè)計時,沒有良好的基礎(chǔ)知識和實踐經(jīng)驗會受到很大限制,每項功能實現(xiàn)時需要那種硬件,程序該如何編寫,算法如何實現(xiàn)等,沒有一定的基礎(chǔ)就不可能很好的實現(xiàn)。在編寫程序過程中發(fā)現(xiàn)以現(xiàn)有的相關(guān)知識要獨自完成編寫任務(wù)困難重重,在老師和同學(xué)的幫助下才完成了程序部分的編寫。本萬年歷的設(shè)計采用 C語言,根據(jù)功能需求進(jìn)行程序的編寫與調(diào)試,保證軟硬件正常

3、工作,具有結(jié)構(gòu)簡單,成本低廉,顯示清晰,穩(wěn)定可靠等優(yōu)點。并且可進(jìn)行擴充,加入鬧鐘的功能,更加方便于你使用。 關(guān)鍵詞: 單片機 DS18B20 DS1302 1602液晶 PCBTheDesignOf Electronic CalendarAbstract: With the rapid development of electronic technology, especially along with large scale integrated circuit, the appearance of human life to bring fundamental change. Especi

4、ally the application of single chip microcomputer products have already walked into the country. The emergence of electronic calendar to the life of people brought many convenient. Electronic calendar is a very wide range of daily timing tool, in modern society is more and more popular. It can be to

5、 year, month, day, Sunday, when the clock, minutes and seconds, also has a leap year compensation, etc DuoZhong function, and the DS1302 long service life and small error. For electronic calendar by using object 1602 LCD display, can also shows that year, month, day, Sunday, when, minutes and second

6、s and temperature, information, but also has time calibration etc. Function. This circuit AT89S52 SCM as the core, low consumption, in 3 V of low-pressure work, voltage can choose 3 5 V voltage power supply. In the design at the same time the SCM theoretical basis and peripheral expansion knowledge

7、is compared to overall. In the hardware and software design, no good basic knowledge and practical experience is very limited, every function to a need that kind of hardware, and the program this how to write, how to realize the algorithm, not a foundation will not be very good implementation. In th

8、e process of program found that by the existing knowledge to finish writing task alone difficulties, the teachers and students of help to finish the program, and the writing of the part.The design of this calendar using C language, according to the function requirements of the procedures to write an

9、d debugging, ensure software and hardware normal work, the structure is simple, the cost is low and the show clear, stable and reliable. And can be extended, join the alarm clock function, it is more convenient to use you.Keywords: DS18B20 DS1302 1602LCD PCB SCM目 錄第一章 緒論61.1本課題的研究的背景以及現(xiàn)實意義61.2本課題對于專

10、業(yè)知識的綜合應(yīng)用情況61.3課題論述總體結(jié)構(gòu)安排7第二章 電子萬年歷的工作概述以及原理分析82.1電子萬年歷的工作概述82.2確保電子萬年歷的工作性能穩(wěn)定的相關(guān)措施82.3系統(tǒng)硬件電路總體結(jié)構(gòu)框圖82.4電子萬年歷總體電路原理圖92.5各部分單元電路介紹92.5.1 DS18B20溫度傳感器電路介紹92.5.2 DS1302電路102.5.3單片機最小系統(tǒng)電路102.5.4 1602液晶顯示電路11第三章 應(yīng)用Protel實現(xiàn)電路原理圖的繪制及PCB設(shè)計123.1Protel簡介123.2繪制電路原理圖的主要步驟123.3PCB人工布局、人工布線設(shè)計13第四章 電子萬年歷C程序的編寫與實現(xiàn)15

11、4.1程序流程框圖154.2電子萬年歷C語言程序174.2.1鍵盤掃描部分程序174.2.2 DS18B20部分程序274.2.3 DS1302部分程序304.2.41602液晶顯示部分程序32第五章 總結(jié)365.1設(shè)計功能分析365.2 心得體會36參考文獻(xiàn)37致 謝38附錄39第一章 緒論1.1本課題的研究的背景以及現(xiàn)實意義時鐘在現(xiàn)實生活中占有非常重要作用,目前時鐘的使用已經(jīng)從原來單一的機械式計時工具發(fā)展為同時具有計時、時間調(diào)節(jié)、溫度顯示以及相關(guān)附加功能。針對這樣的發(fā)展實際情況,在完成學(xué)院的畢業(yè)設(shè)計工作中,我決定采用所學(xué)習(xí)的單片機知識以及相關(guān)的電路知識來進(jìn)行電子萬年歷的設(shè)計。目前市場上電子

12、萬年歷的發(fā)展,其功能也逐漸從單一的計時發(fā)展到事跡、日期、溫度顯示,甚至有的還具有鬧鐘、問候語顯示等功能,讓人能清楚地知道當(dāng)前的日期、時間、溫度等物理量。所以本課題的研究具有一定的現(xiàn)實應(yīng)用意義。1.2本課題對于專業(yè)知識的綜合應(yīng)用情況因為學(xué)習(xí)的知識深度的限制以及實際情況的考慮,我設(shè)計的電子萬年歷的功能確定為能夠正確顯示日期、時間、溫度。顯示的方式采用ATMEL公司AT89S51單片機為驅(qū)動1602LCD顯示器進(jìn)行顯示。采用TB上購買的mini80E單片機開發(fā)電路板作為電路實現(xiàn)的主要功能載體。在學(xué)院三年的單片機學(xué)習(xí)過程中,我們學(xué)習(xí)單片機都是采用TB上買的單片機開發(fā)板以及C語言進(jìn)行學(xué)習(xí),TB的51單片

13、機開發(fā)板在單片機最小系統(tǒng)的基礎(chǔ)上配置了數(shù)碼管顯示、LCD顯示區(qū)、LCD顯示區(qū)、獨立鍵盤輸入?yún)^(qū)以及模擬量輸入、A/D轉(zhuǎn)換等資源,滿足了單片機實際開發(fā)的絕大部分要求。同時開發(fā)板上的電路結(jié)構(gòu)也能夠較好地鍛煉自己電路方面的知識。采用C語言進(jìn)行編程能夠綜合鍛煉自己的實際程序編寫的能力以及程序的調(diào)試功能。本課題的選題難度適中,能夠?qū)?yīng)用電子技術(shù)專業(yè)學(xué)習(xí)的專業(yè)課程有較為全面的應(yīng)用與掌握,同時也與自己的專業(yè)能力符合。1.3課題論述總體結(jié)構(gòu)安排第一章敘述了電子萬年歷研究的背景以及現(xiàn)實意義第二章則主要介紹設(shè)計工作總體概述以及產(chǎn)品工作的原理,按照功能電路的分別進(jìn)行詳細(xì)的分析討論,最終分析電路的總體工作原理。第三章主

14、要討論應(yīng)用Protel軟件來實現(xiàn)電路原理圖的繪制以及印制板設(shè)計第四章是電子萬年歷的軟件實現(xiàn)部分,主要是利用C語言進(jìn)行程序的編寫,完成電路的測量功能。第五章為總結(jié)和展望,總結(jié)本課題設(shè)計的總體思路,產(chǎn)品的功能以及對于產(chǎn)品功能升級等進(jìn)行情景展望。第二章 電子萬年歷的工作概述以及原理分析2.1電子萬年歷的工作概述電子萬年歷是由數(shù)據(jù)采集,MCU,輸入輸出,數(shù)據(jù)存儲四個功能部分構(gòu)成。其中數(shù)據(jù)的采集是由DS1302和DS18B20來完成的,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M(jìn)行計數(shù),而且精度高。數(shù)字式溫度傳感器DS18B20,僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳

15、輸,易于與單片機連接,可以去除A/D模塊,降低硬件成本,簡化系統(tǒng)電路。當(dāng)數(shù)據(jù)送入AT89S51單片機后,單片機將對INT1腳的信號進(jìn)行計數(shù),當(dāng)計數(shù)的脈沖達(dá)到1KM的時候,INT1申請中斷,對外輸出信號,輸出的信號由顯示部分送LCD進(jìn)行顯示,顯示當(dāng)前日期、時間、溫度。其中鍵盤是人機交互的接口,系統(tǒng)設(shè)計使得鍵盤能夠?qū)崿F(xiàn)調(diào)節(jié)日期、時間的功能。2.2確保電子萬年歷的工作性能穩(wěn)定的相關(guān)措施電子萬年歷能實時地將所測的溫度和當(dāng)前時間顯示出來,主要是DS1302通過串行口與單片機進(jìn)行通訊,實時時鐘/日歷電路提供秒、分、時、日、星期、月、年的信息。每個月的天數(shù)和閏年的天數(shù)可與自動調(diào)整,時鐘操作可以通過AM/PM

16、標(biāo)志位決定采用24或12小時時間格式。DS1302與單片機之間能采用簡單的同步串行進(jìn)行通信僅需三根I/O線。DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。其測溫范圍 55+125,固有測溫分辨率0.5。設(shè)計應(yīng)綜合考慮測溫精度和系統(tǒng)反應(yīng)時間。本設(shè)計采用9位的分辨率,因而具有較高的快的計算速度。在計算環(huán)境溫度的時候省去了末尾幾位。為了保證系統(tǒng)的實時性,系統(tǒng)的速度轉(zhuǎn)換模塊和顯示數(shù)據(jù)轉(zhuǎn)BCD碼模塊都采用快速算法。另外,還應(yīng)盡量保證其他子模塊在編程時的通用性和高效性。本設(shè)計的里程值采用兩位顯示。AT89S52主控制模 塊2.3系統(tǒng)硬件電路總體結(jié)構(gòu)框圖LED數(shù)碼

17、管動態(tài)掃描顯示模塊DS1302時鐘模塊溫度采集模塊鍵盤模塊圖2-1電子萬年歷總體結(jié)構(gòu)框圖2.4電子萬年歷總體電路原理圖電子萬年歷總體電路原理圖由DS1302和DS18B20電路以及單片機開發(fā)板電路三部分組成。圖2-2為電路總原理圖之一,單片機開發(fā)板電路的電路原理圖。圖2-2電子萬年歷電2.5各部分單元電路介紹2.5.1 DS18B20溫度傳感器電路介紹 DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設(shè)備,單總線器件

18、作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。DS18B20溫度傳感器電路圖如圖2-4所示 圖2-4 基于運放的有源濾波器電路圖2.5.2 DS1302電路DS1302采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。DS1302電路

19、原理圖如圖2-5所示圖2-5 基于運放的信號放大電路2.5.3單片機最小系統(tǒng)電路單片機最小系統(tǒng)電路由單片機、單片機復(fù)位電路、晶體振蕩回路組成,能夠完成單片機工作的最基本需要,單片機最小系統(tǒng)電路如圖2-6所示圖2-6 單片機最小系統(tǒng)電路2.5.4 1602液晶顯示電路單片機將計算處理的結(jié)果采用1602液晶進(jìn)行顯示,顯示電路的電路原理圖如圖2-7所示圖 2-7 1602液晶顯示電路第三章 應(yīng)用Protel實現(xiàn)電路原理圖的繪制及PCB設(shè)計3.1Protel簡介使用電腦設(shè)計電路原理圖和電路板圖是把電子技術(shù)從理論運用到實際的第一步。只有會設(shè)計電路原理圖和電路板圖才能進(jìn)行電子產(chǎn)品的研發(fā)與開發(fā)。本軟件就是從

20、理論走向?qū)嶋H,掌握電子產(chǎn)品開發(fā)的基本技術(shù)。Protel99SE是澳大利亞ProtelTechnology公司推出的一個全32位的電路板設(shè)計軟件。該軟件功能強大,人機界面友好,易學(xué)易用,使用該軟件設(shè)計者可以容易設(shè)計電路原理圖、畫元件圖、設(shè)計電路板圖、畫元件封裝圖和電路仿真,是夜內(nèi)人士首選的電路板設(shè)計工具。3.2繪制電路原理圖的主要步驟1、進(jìn)入Protel 99SE環(huán)境2、使用菜單File/New建立新設(shè)計數(shù)據(jù)庫文件3、使用菜單File/New在打開窗口選擇Schematic Document圖標(biāo),建立新原理圖文件4、將原理圖打開5、設(shè)置畫圖環(huán)境6、添加元件庫7、將所需元件從元件庫中取出來,放置在

21、圖紙上,并且調(diào)整好位置8、使用連線工具將元件連起來,設(shè)置元件屬性,對元件進(jìn)行編號9、進(jìn)行電氣規(guī)格檢查(ERC)10、建立網(wǎng)絡(luò)表,為制作電路板圖做準(zhǔn)備3.3PCB人工布局、人工布線設(shè)計人工布局就是將所有的元件一個一個放置到PCB上各個位置。操作較為繁瑣,但是能夠結(jié)合工藝的要求以及設(shè)計中實際要求進(jìn)行,人工布局的效果一般來說效果要比自動布局好很多。在設(shè)計中,工程師基本都是采用自動布局的方案進(jìn)行。這也要求作為電路板設(shè)計人員要具有豐富的經(jīng)驗以及長時間堅持的毅力。元件的布局與走線對產(chǎn)品的壽命、穩(wěn)定性、電磁兼容都有很大的影響,是應(yīng)該特別注意的地方。一般來說應(yīng)該有以下一些原則:在放置順序上應(yīng)該先放置與結(jié)構(gòu)有關(guān)

22、的固定位置的元器件,如電源插座、指示燈、開關(guān)、連接件之類,這些器件放置好后用軟件的LOCK功能將其鎖定,使之以后不會被誤移動。再放置線路上的特殊元件和大的元器件,如發(fā)熱元件、變壓器、IC等。最后放置小器件。元件布局還要特別注意散熱問題。對于大功率電路,應(yīng)該將那些發(fā)熱元件如功率管、變壓器等盡量靠邊分散布局放置,便于熱量散發(fā),不要集中在一個地方,也不要高電容太近以免使電解液過早老化。 布線原則,每人都會有自己的體會,但還是有些通行的原則的。高頻數(shù)字電路走線細(xì)一些、短一些好,大電流信號、高電壓信號與小信號之間應(yīng)該注意隔離(隔離距離與要承受的耐壓有關(guān),通常情況下在2kv時板上要距離2mm,在此之上以比

23、例算還要加大,例如若要承受3KV的耐壓測試,則高低壓線路之間的距離應(yīng)在3.5mm以上,許多情況下為避免爬電,還在印制線路板上的高低壓之間開槽。),兩面板布線時,兩面的導(dǎo)線宜相互垂直、斜交、或彎曲走線,避免相互平行,以減小寄生耦合;作為電路的輸人及輸出用的印制導(dǎo)線應(yīng)盡量避兔相鄰平行,以免發(fā)生回授,在這些導(dǎo)線之間最好加接地線。走線拐角盡可能大于90度,杜絕90度以下的拐角,也盡量少用90度拐角同是地址線或者數(shù)據(jù)線,走線長度差異不要太大,否則短線部分要人為走彎線作補償。走線盡量走在焊接面,特別是通孔工藝的PCB,盡量少用過孔、跳線,單面板焊盤必須要大,焊盤相連的線一定要粗,能放淚滴就放淚滴,一般的單

24、面板廠家質(zhì)量不會很好,否則對焊接和RE-WORK都會有問題,大面積敷銅要用網(wǎng)格狀的,以防止波焊時板子產(chǎn)生氣泡和因為熱應(yīng)力作用而彎曲,但在特殊場合下要考慮GND的流向,大小,不能簡單的用銅箔填充了事,而是需要去走線,元器件和走線不能太靠邊放,一般的單面板多為紙質(zhì)板,受力后容易斷裂,如果在邊緣連線或放元器件就會受到影響;必須考慮生產(chǎn)、調(diào)試、維修的方便性;模擬電路來說處理地的問題是很重要的,地上產(chǎn)生的噪聲往往不便預(yù)料,可是一旦產(chǎn)生將會帶來極大的麻煩,應(yīng)該未雨綢緞。對于功放電路,極微小的地噪聲都會因為后級的放大對音質(zhì)產(chǎn)生明顯的影響;在高精度A/D轉(zhuǎn)換電路中,如果地線上有高頻分量存在將會產(chǎn)生一定的溫漂,

25、影響放大器的工作。這時可以在板子的4角加退藕電容,一腳和板子上的地連,一腳連到安裝孔上去(通過螺釘和機殼連),這樣可將此分量慮去,放大器及AD也就穩(wěn)定了。另外,電磁兼容問題在目前人們對環(huán)保產(chǎn)品倍加關(guān)注的情況下顯得更加重要了。一般來說電磁信號的來源有3個:信號源,輻射,傳輸線。晶振是常見的一種高頻信號源,在功率譜上晶振的各次諧波能量值會明顯高出平均值??尚械淖龇ㄊ强刂菩盘柕姆?,晶振外殼接地,對干擾信號進(jìn)行屏蔽,采用特殊的濾波電路及器件等。第四章 電子萬年歷C程序的編寫與實現(xiàn)4.1程序流程框圖開始初始化讀、寫日期、時間和溫度分離日期時間溫度顯示值顯示子程序農(nóng)歷自動更新子程序日期、時間修改子程序閏

26、月子程返回定時鬧鈴子程序 圖-A 主程序流程圖 圖-B計算陽歷程序流程圖 圖-C 時間調(diào)整程序流程圖 圖-D 陰歷程序流程圖4.2電子萬年歷C語言程序4.2.1鍵盤掃描部分程序if(key1=0)/-key1為功能鍵(設(shè)置鍵)-delay(9);/延時,用于消抖動if(key1=0)/延時后再次確認(rèn)按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設(shè)置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán)switch(key1n) case 1: TR0=0;/關(guān)閉定時器/TR

27、1=0;write_1602com(er+0x09);/設(shè)置按鍵按動一次,秒位置顯示光標(biāo) write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標(biāo) /write_1602com(0x0f);break;case 3: write_1602com(er+3);/按動

28、3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按動4次,week /write_1602com(0x0f); break;case 5: write_1602com(yh+0x0a);/按動5次,ri /write_1602com(0x0f); break;case 6: write_1602com(yh+0x07);/按動6次,yue /write_1602com(0x0f); break;case 7: write_1602com(yh+0x04);/按動7次,nian /write_1602com(0x

29、0f); break;case 8:write_1602com(0x0c);/按動到第8次,設(shè)置光標(biāo)不閃爍TR0=1;/打開定時器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x80); break; /-加鍵key2- if(key1n!=0)/當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零) if(key2=0) /上調(diào)鍵 delay(10); if(key2=0) buzzer=0;/蜂鳴器短響一次 d

30、elay(20); buzzer=1; while(!key2); switch(key1n) case 1:miao+;/設(shè)置鍵按動1次,調(diào)秒if(miao=60)miao=0;/秒超過59,再加1,就歸零write_sfm(0x08,miao);/令LCD在正確位置顯示加設(shè)定好的秒數(shù)temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,temp); /向DS1302內(nèi)寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0x8e,0x8

31、0); /打開寫保護(hù)write_1602com(er+0x09);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,光標(biāo)自動右移,所以要指定返回/write_1602com(0x0b); break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);/令LCD在正確位置顯示加設(shè)定好的分?jǐn)?shù)據(jù)temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x82,temp);/向DS1302內(nèi)寫分寄存器82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1

32、302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令LCD在正確的位置顯示加設(shè)定好的小時數(shù)據(jù)temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x84,temp);/向DS1302內(nèi)寫小時寄存器84H寫入調(diào)整后的小時數(shù)據(jù)BCD碼 write_1302(0x8e,

33、0x80);/打開寫保護(hù)write_1602com(er+3);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0C);/指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x8a,temp);/向DS1302內(nèi)寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼

34、write_1302(0x8e,0x80);/打開寫保護(hù) write_1602com(yh+0x0e);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令LCD在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x86,temp);/向DS1302內(nèi)寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0x8

35、e,0x80);/打開寫保護(hù)write_1602com(yh+10);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);/令LCD在正確的位置顯示加設(shè)定好的月份數(shù)據(jù)temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x88,temp);/向DS1302內(nèi)寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開

36、寫保護(hù)write_1602com(yh+7);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian);/令LCD在正確的位置顯示加設(shè)定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8c,temp);/向DS1302內(nèi)寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù)

37、write_1602com(yh+4);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break; /-減鍵key3,各句功能參照加鍵注釋-if(key3=0)delay(10);/調(diào)延時,消抖動if(key3=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key3);switch(key1n) case 1:miao-;if(miao=-1)miao=59;/秒數(shù)據(jù)減到-1時自動變成59write_sfm(0x08,miao);/在LCD的正確位置顯示改變后新的秒數(shù) temp=(miao)/10*16+(miao)%10;/

38、十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,temp); /向DS1302內(nèi)寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0x8e,0x80); /打開寫保護(hù)write_1602com(er+0x09);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置/write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換

39、成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x82,temp);/向DS1302內(nèi)寫分寄存器82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置break;case 3:shi-; if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,

40、0x00);/允許寫,禁止寫保護(hù) write_1302(0x84,temp);/向DS1302內(nèi)寫小時寄存器84H寫入調(diào)整后的小時數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+3);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 4:week-;if(week=0)week=7; write_1602com(yh+0x0C);/指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼

41、 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x8a,temp);/向DS1302內(nèi)寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+0x0e);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_

42、1302(0x86,temp);/向DS1302內(nèi)寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+10);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 6:yue-;if(yue=0)yue=12;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x88,temp);/向DS1302內(nèi)寫月份寄存器88H

43、寫入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開寫保護(hù) write_1602com(yh+7);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 7:nian-; if(nian=-1)nian=99;write_nyr(3,nian); temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8c,temp);/向DS1302內(nèi)寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼 write_1302

44、(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+4);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break; 4.2.2 DS18B20部分程序void DS18_delay(int useconds) int s;for (s=0; suseconds;s+); 復(fù)位函數(shù)功能:完成單總線的復(fù)位操作。復(fù)位時間為480s,因此延時時間為(480-24)/16 = 28.5,取29s。經(jīng)過70s之后檢測存在脈沖,因此延時時間為(70-24)/16 = 2.875,取3s。unsigned char ow_reset(void) unsigned char

45、 presence;DQ = 0; / 將 DQ 線拉低DS18_delay(29); / 保持 480sDQ = 1; / DQ返回高電平DS18_delay(3); / 等待存在脈沖presence = DQ; / 獲得存在信號DS18_delay(25); / 等待時間隙結(jié)束return(presence); / 返回存在信號,0 = 器件存在, 1 = 無器件位寫入函數(shù)功能:向單總線寫入1位值:bitvalvoid write_bit(char bitval) DQ = 0; / 將DQ 拉低開始寫時間隙if(bitval=1) DQ =1; / 如果寫1,DQ 返回高電平DS18_d

46、elay(5); / 在時間隙內(nèi)保持電平值,DQ = 1; / DS18_delay函數(shù)每次循環(huán)延時16s,因此DS18_delay(5) = 104s字節(jié)寫入函數(shù)功能:向單總線寫入一個字節(jié)值:valvoid ds18write_byte(char val) unsigned char i;unsigned char temp;for (i=0; ii; temp &= 0x01; write_bit(temp); DS18_delay(5);位讀取函數(shù)功能:從單總線上讀取一位信號,所需延時時間為15s,因此無法調(diào)用前面定義* 的DS18_delay()函數(shù),而采用一個for()循環(huán)來實現(xiàn)延時

47、。* unsigned char read_bit(void) unsigned char i;DQ = 0; /將DQ 拉低開始讀時間隙DQ = 1; / then return highfor (i=0; i3; i+); / 延時15sreturn(DQ); / 返回 DQ 線上的電平值字節(jié)讀取函數(shù)功能:從單總線讀取一個字節(jié)的值unsigned char DSread_byte(void) unsigned char i;unsigned char value = 0;for (i=0;i8;i+) / 讀取字節(jié),每次讀取一個字節(jié)if(read_bit() value|=0x01i; /

48、 然后將其左移DS18_delay(6); return(value);讀取溫度函數(shù)功能:如果單總線節(jié)點上只有一個器件則可以直接掉用本函數(shù)。如果節(jié)點上有多個器* 件,為了避免數(shù)據(jù)沖突,應(yīng)使用Match ROM函數(shù)來選中特定器件。* 注: 本函數(shù)是根據(jù)DS1820的溫度數(shù)據(jù)格式編寫的,若用于DS18B20,必須根據(jù)* DS18B20的溫度數(shù)據(jù)格式作適當(dāng)修改。unsigned int ReadTemperature(void) unsigned char get10;unsigned char temp_lsb,temp_msb;unsigned int t;unsigned char k;ow_

49、reset();ds18write_byte(0xCC); / 跳過 ROMds18write_byte(0x44); / 啟動溫度轉(zhuǎn)換DS18_delay(5);ow_reset();ds18write_byte(0xCC); / 跳過 ROMds18write_byte(0xBE); / 讀暫存器for (k=0;k2;k+)getk=DSread_byte();temp_msb = get1; / Sign byte + lsbittemp_lsb = get0; / Temp data plus lsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t0xf0)t=(-1)*t;return t4;/temp_f = (int)temp_c)* 9)/5 + 32;4.2.3 DS1302部分程序 void write_byte(uchar dat)/寫一個字節(jié)ACC=dat;RST=1;for(a=8;a0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;uchar read_byte()/讀一個字節(jié)RST=1;for(a=8;a0;a-

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論