電子臺(tái)歷電子設(shè)計(jì)_第1頁(yè)
電子臺(tái)歷電子設(shè)計(jì)_第2頁(yè)
電子臺(tái)歷電子設(shè)計(jì)_第3頁(yè)
電子臺(tái)歷電子設(shè)計(jì)_第4頁(yè)
電子臺(tái)歷電子設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2016年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽電子臺(tái)歷( b 題)2016年6月3日摘要電子臺(tái)歷中需顯示時(shí)間、日期、和溫度等信息的校準(zhǔn)使用四個(gè)按鍵,另外還需要顯示星期幾。根據(jù)項(xiàng)目要求,該系統(tǒng)選用at89c52單片機(jī)作為處理器;使用ds1302作為時(shí)鐘芯片,使用1602液晶顯示模塊。 2目 錄一、系統(tǒng)方案11、系統(tǒng)構(gòu)造12、元器件的論證與選擇2二、系統(tǒng)理論分析與計(jì)算21、電子臺(tái)歷的分析3(1)51單片機(jī)的最小系統(tǒng)3(2)ds1302的引腳分析3(3)液晶顯示器的引腳分析3三、電路與程序設(shè)計(jì)41、電路的設(shè)計(jì)4(1)系統(tǒng)總體框圖4(2)系統(tǒng)顯示子系統(tǒng)框圖與電路原理圖4(3)系統(tǒng)按鍵子系統(tǒng)框圖與電路原理圖4(4)電

2、源42、程序的設(shè)計(jì)5(1)程序功能描述與設(shè)計(jì)思路5(2)程序流程圖6四、測(cè)試方案與測(cè)試結(jié)果81、測(cè)試方案82、測(cè)試條件與儀器83、測(cè)試結(jié)果及分析9(1)測(cè)試結(jié)果(數(shù)據(jù))9(2)測(cè)試分析與結(jié)論9五、結(jié)論與心得10六、參考文獻(xiàn)11附錄1:電路原理圖12附錄2:源程序13電子臺(tái)歷( b 題)【高職高專組】一、 系統(tǒng)方案1系統(tǒng)構(gòu)造本系統(tǒng)主要由時(shí)鐘模塊,按鍵模塊,數(shù)據(jù)處理模塊 ,溫度模塊,下面介紹電子臺(tái)歷的元器件選擇時(shí)鐘模塊 該模塊采用ds1302時(shí)鐘芯片,使用13.768khz晶振,芯片自帶時(shí)間存儲(chǔ)器,單片機(jī)可從中直接讀取,免去繁瑣的計(jì)算。按鍵模塊使用四個(gè)按鍵,其中兩個(gè)作為左右選擇和時(shí)間校準(zhǔn);一個(gè)作為

3、功能鍵,用于時(shí)間校準(zhǔn)和鬧鈴輸入;另外1個(gè)作為確認(rèn)鍵,用于確認(rèn)信息和返回。數(shù)據(jù)處理模塊 數(shù)據(jù)處理模塊采用at89c52,信息匯集到單片機(jī)經(jīng)單片機(jī)處理后再發(fā)送到其他設(shè)備,完成一個(gè)工作周期后再返回重復(fù)執(zhí)行。 溫度模塊采用18d20,能夠干凈有效的獲取溫度,鏈接方便,利于使用。2.方案和論證 單片機(jī)芯片的選擇方案和論證:方案一:采用89c51芯片作為硬件核心,采用flash rom,內(nèi)部具有4kb rom 存儲(chǔ)空間,能于3v的超低壓工作,而且與mcs-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備isp在線編程技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ?/p>

4、序的新增功能需要燒入程序時(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。方案二:采用at89c52,片內(nèi)rom全都采用flash rom;能以3v的超底壓工作;同時(shí)也與mcs-51系列單片機(jī)完全該芯片內(nèi)部存儲(chǔ)器為8kb rom ,具有89c51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞,所以選擇采用 at89c52作為主控制系統(tǒng)。 顯示模塊選擇方案和論證:方案一:采用led液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見(jiàn)。方案二:

5、采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以也不用此種作為顯示。方案三:采用led數(shù)碼管動(dòng)態(tài)掃描,led數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字最合適,而且采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),占用的單片機(jī)口線少。但是功能比較單一,且不能顯示較多字符。 所以采用led液晶顯示屏。 時(shí)鐘芯片的選擇方案和論證:方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大。所以不采用此方案。方案二:采用ds1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,d

6、s1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,位的ram做為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時(shí)耗電小于300ma.  溫度傳感器的選擇方案與論證:方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個(gè)相應(yīng)阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個(gè)電阻變化的分壓值,并進(jìn)行a/d轉(zhuǎn)換。此設(shè)計(jì)方案需用a/d轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會(huì)產(chǎn)生較大的測(cè)量誤差。方案二:采用數(shù)字式溫度傳感器ds18b20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)

7、據(jù)傳輸,易于與單片機(jī)連接,可以去除a/d模塊,降低硬件成本,簡(jiǎn)化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測(cè)量精度高、測(cè)量范圍廣等優(yōu)點(diǎn)。電路設(shè)計(jì)最終方案決定綜上各方案所述,對(duì)此次作品的方案選定:采用at89c52作為主控制系統(tǒng); ds1302提供時(shí)鐘;數(shù)字式溫度傳感器;led液晶顯示器二、系統(tǒng)理論分析1、電子臺(tái)歷的分析 (1)51單片機(jī)的最小系統(tǒng)此最小系統(tǒng)中的電源供電模塊的電源可以通過(guò)電腦的usb口供給,也可以使用外部穩(wěn)定的5v電源供電模塊供給。電源電路中接入了電源指示led。stc89系列的復(fù)位電路由按鍵復(fù)位和上電復(fù)位兩部分組成。上電復(fù)位:通常在復(fù)位引腳rst上連接一個(gè)電容到vcc,再連接電阻到

8、gnd,由此形成一個(gè)rc充放電回路保證單片機(jī)在上電時(shí)rst腳上有足夠時(shí)間的高電平復(fù)位,隨后回歸到低電平進(jìn)入正常工作狀態(tài),這個(gè)電阻和電容的典型值為10k和10uf。按鍵復(fù)位:按鍵復(fù)位就是在復(fù)位電容上并聯(lián)一個(gè)開(kāi)關(guān),當(dāng)開(kāi)關(guān)按下時(shí)電容被放點(diǎn)、rst也被拉到高電平,而且由于電容的充電,會(huì)保持一段時(shí)間的高電平來(lái)使單片機(jī)復(fù)位。(2)ds1302的引腳分析x1,x2是32.768khz晶振的引腳vcc2是電源供電引腳,vcc1是3v紐扣電池的供電引腳;sclk為與單片機(jī)串行通信的時(shí)鐘引腳i/o為與單片機(jī)傳送數(shù)據(jù)的引腳rts是ds1302的復(fù)位引腳,低電平有效。(3)液晶顯示器的引腳分析rt-1602采用標(biāo)準(zhǔn)的

9、16腳接口,各引腳情況如下:第一腳:vss,電源地第二腳:vdd,+5v電源第三腳:v0,液晶顯示偏壓信號(hào),一般加電位器調(diào)整第四腳:rs,數(shù)據(jù)、命令選擇端,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第五腳:r/w,讀/寫選擇端,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)rs為低電平r/w為高電平時(shí)可以讀忙信號(hào),當(dāng)rs為高電平r/w為低電平時(shí)可以寫入數(shù)據(jù)。第六腳:e,端為使能端,當(dāng)e端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7-14腳:d0d7,為8位雙向數(shù)據(jù)線。第15腳:bla,背光源正極第16腳:blk,背光源負(fù)極三、電路與程序

10、設(shè)計(jì)1、電路的設(shè)計(jì)(1)系統(tǒng)總體框圖系統(tǒng)總體框圖(2)系統(tǒng)顯示子系統(tǒng)框圖與電路原理圖 (3)系統(tǒng)鍵掃子系統(tǒng)框圖與電路原理圖 (4)電源此最小系統(tǒng)中的電源供電模塊的電源可以通過(guò)電腦的usb口供給,也可以使用外部穩(wěn)定的5v電源供電模塊供給。電源電路中接入了電源指示led。2、程序的設(shè)計(jì)(1)程序功能描述與設(shè)計(jì)思路1、程序功能描述在液晶顯示年,月,日,時(shí),分,秒。1鍵用于模式調(diào)整,按一下改變一個(gè)模塊值。b鍵用于按下2鍵后的+1。c鍵用于按下3鍵后的-1。d鍵用于確定改變值。到23時(shí)59分59秒時(shí)到0時(shí)0分0秒的自動(dòng)進(jìn)位。日期到一個(gè)月的自動(dòng)進(jìn)位1,滿1年自動(dòng)進(jìn)位1。且可以顯示溫度,星期幾。2、程序設(shè)計(jì)

11、思路由平時(shí)使用的手機(jī),電腦和手表的等攜帶的功能延伸過(guò)來(lái)的,并加上了對(duì)溫度的顯示,取消了鬧鐘功能。(2)程序流程圖1、主程序流程圖2、中斷子程序流程圖四、測(cè)試方案與測(cè)試結(jié)果1、測(cè)試方案(1)硬件測(cè)試我們?cè)诤附雍秒娐分笠驗(yàn)樵_接錯(cuò)了,導(dǎo)致一兩個(gè)元器件損壞,然后用萬(wàn)用表測(cè)試,發(fā)現(xiàn)有一些小問(wèn)題。(2)軟件仿真測(cè)試 軟件仿真我們用的是proteus仿真,仿真結(jié)果很好,如圖可以顯示現(xiàn)在的日期和時(shí)間,星期幾以及溫度(3)硬件軟件聯(lián)調(diào) 一開(kāi)始因?yàn)樵骷附佑幸稽c(diǎn)點(diǎn)的問(wèn)題,導(dǎo)致只能點(diǎn)亮液晶顯示屏不能顯示任務(wù)的要求,后來(lái)更改了這些問(wèn)題之后,液晶就可以正常顯示了2、測(cè)試條件與儀器測(cè)試條件:檢查多次,仿真電路和

12、硬件電路必須與系統(tǒng)原理圖完全相同,并且檢查無(wú)誤,硬件電路保證無(wú)虛焊。測(cè)試儀器:硬件用指針式萬(wàn)用表,軟件用proteus。3、測(cè)試結(jié)果及分析(1)測(cè)試結(jié)果(數(shù)據(jù))電路為通路,電壓為5v。proteus正常顯示時(shí)間,日期,星期及溫度。液晶為正常5v電壓,且正常顯示軟件仿真的數(shù)據(jù)。(2)測(cè)試分析與結(jié)論根據(jù)上述測(cè)試數(shù)據(jù),由此可以得出以下結(jié)論:1、硬件電路無(wú)虛焊。2、proteus軟件仿真無(wú)誤。3、軟件硬件聯(lián)調(diào)無(wú)誤,正常顯示功能。綜上所述,本設(shè)計(jì)達(dá)到設(shè)計(jì)要求。焊接工藝在焊接方面,我們是用的手工焊接,在手工焊接方面,我們主要按照以下幾個(gè)步驟進(jìn)行:a. 準(zhǔn)備焊接:清潔被焊元件處的積塵及油污,再將被焊元器件周

13、圍的元器件左右掰一掰,讓電烙鐵頭可以觸到被焊元器件的焊錫處,以免烙鐵頭伸向焊接處時(shí)燙壞其他元器件。在此期間,我們也要給烙鐵預(yù)熱,讓溫度達(dá)到250400 。焊接新的元器件時(shí),應(yīng)對(duì)元器件的引線鍍錫。b. 加熱焊接:將沾有少許焊錫和松香的電烙鐵頭接觸被焊元器件約幾秒鐘。若是要拆下印刷板上的元器件,則待烙鐵頭加熱后,用手或鑷子輕輕拉動(dòng)元器件,看是否可以取下。c. 清理焊接面:若所焊部位焊錫過(guò)多,可將烙鐵頭上的焊錫甩掉(注意不要燙傷皮膚,也不要甩到印刷電路板上!),用光烙錫頭"沾"些焊錫出來(lái)。若焊點(diǎn)焊錫過(guò)少、不圓滑時(shí),可以用電烙鐵頭"蘸"些焊錫對(duì)焊點(diǎn)進(jìn)行補(bǔ)焊。d.

14、 檢查焊點(diǎn):看焊點(diǎn)是否圓潤(rùn)、光亮、牢固,是否有與周圍元器件連焊的現(xiàn)象。五、結(jié)論與心得這次實(shí)訓(xùn),用了一周的時(shí)間,讓我們受益匪淺,學(xué)習(xí)到了很多課本上學(xué)不到的知識(shí)。這次實(shí)訓(xùn)初步完成了原本的要求。之前學(xué)習(xí)到的知識(shí)得到了進(jìn)一步的鞏固和提高,學(xué)到了不少新的東西,也學(xué)習(xí)到了作為一個(gè)團(tuán)隊(duì)?wèi)?yīng)該做的事情,互相幫助的團(tuán)隊(duì)精神,相信在今后的工作和學(xué)習(xí)中會(huì)使我們終身受益。這次實(shí)訓(xùn)讓我們的的學(xué)習(xí)能力得到了提高,完成了對(duì)于單片機(jī)程序的編寫、pcb的設(shè)計(jì)、和硬件電路的設(shè)計(jì)等。當(dāng)然在實(shí)訓(xùn)的過(guò)程中我們也遇到了很多的困難,但是通過(guò)查閱資料、問(wèn)同學(xué)和老師幫助下,解決了困難,這無(wú)疑讓我們對(duì)理論知識(shí)有了更深一步的認(rèn)識(shí)與理解,也培養(yǎng)了我們

15、的自學(xué)能力以及分析問(wèn)題和解決問(wèn)題的能力。感覺(jué)這次實(shí)訓(xùn)比較困難的地方是編寫程序還有對(duì)電路的設(shè)計(jì)和布局,為了讓電路板看起來(lái)比較美觀,花了很多的時(shí)間和精力,但是最后還是做好了,感覺(jué)看起來(lái)還是很不錯(cuò)。這次實(shí)訓(xùn)我們組受益匪淺,也讓我們知道了,想要做好一件事情,要有耐心,不能浮躁,一步接著一步的做下去,才能做成功。六、參考文獻(xiàn)1 李澤中.c語(yǔ)言程序設(shè)計(jì)m.清華大學(xué)出版社,201031附錄1:源程序#include <reg51.h>#include <intrins.h>/#include "lcd1602.h"/#include "ds13

16、02.h" #define uint unsigned int#define uchar unsigned charsbit ds1302_clk = p23; /實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 sbit ds1302_io = p24; /實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 sbit ds1302_rst = p25; /實(shí)時(shí)時(shí)鐘復(fù)位線引腳sbit wireless_1 = p30;sbit wireless_2 = p31;sbit wireless_3 = p32;sbit wireless_4 = p33;sbit acc0 = acc0;sbit acc7 = acc7;char hide_sec,h

17、ide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; /秒,分,時(shí)到日,月,年位閃的計(jì)數(shù)sbit set = p34; /模式切換鍵sbit up = p35; /加法按鈕sbit down = p36; /減法按鈕sbit out = p37; /立刻跳出調(diào)整模式按鈕sbit dq = p27; /溫度傳送數(shù)據(jù)io口char done,count,temp,flag,up_flag,down_flag;uchar temp_value; /溫度值uchar tempbuffer5,week_value2;void show_ti

18、me(); /液晶顯示程序/*1602液晶顯示部分子程序*/port definitions*sbit lcdrs= p20;sbit lcdrw= p21;sbit lcden = p22;sfr dbport = 0x90;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.數(shù)據(jù)端口/內(nèi)部等待函數(shù)*unsigned char lcd_wait(void)lcdrs=0;lcdrw=1;_nop_();lcden=1;_nop_(); lcden=0;return dbport;/向lcd寫入命令或數(shù)據(jù)*#define lcd_command0 / command#define

19、 lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光標(biāo)返回原點(diǎn)void lcd_write(bit style, unsigned char input)lcden=0;lcdrs=style;lcdrw=0;_nop_();dbport=input;_nop_();/注意順序lcden=1;_nop_();/注意順序lcden=0;_nop_();lcd_wait();/設(shè)置顯示模式*#define lcd_show0x04 /顯示開(kāi)#define lcd_hide0x00 /顯示關(guān) #de

20、fine lcd_cursor0x02 /顯示光標(biāo)#define lcd_no_cursor0x00 /無(wú)光標(biāo) #define lcd_flash0x01 /光標(biāo)閃動(dòng)#define lcd_no_flash0x00 /光標(biāo)不閃動(dòng)void lcd_setdisplay(unsigned char displaymode)lcd_write(lcd_command, 0x08|displaymode);/設(shè)置輸入模式*#define lcd_ac_up0x02#define lcd_ac_down0x00 / default#define lcd_move0x01 / 畫面可平移#define l

21、cd_no_move0x00 /defaultvoid lcd_setinput(unsigned char inputmode)lcd_write(lcd_command, 0x04|inputmode);/初始化lcd*void lcd_initial()lcden=0;lcd_write(lcd_command,0x38); /8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣lcd_write(lcd_command,0x38);lcd_setdisplay(lcd_show|lcd_no_cursor); /開(kāi)啟顯示, 無(wú)光標(biāo)lcd_write(lcd_command,lcd_clear_scree

22、n); /清屏lcd_setinput(lcd_ac_up|lcd_no_move); /ac遞增, 畫面不動(dòng)/液晶字符輸入的位置*void gotoxy(unsigned char x, unsigned char y)if(y=0)lcd_write(lcd_command,0x80|x);if(y=1)lcd_write(lcd_command,0x80|(x-0x40);/將字符輸出到液晶顯示void print(unsigned char *str)while(*str!='0')lcd_write(lcd_data,*str);str+;/*ds1302時(shí)鐘部分子程

23、序*/typedef struct _systemtime_unsigned char second;unsigned char minute;unsigned char hour;unsigned char week;unsigned char day;unsigned char month;unsigned char year;unsigned char datestring11;unsigned char timestring9;systemtime;/定義的時(shí)間類型systemtime currenttime;#define am(x)x#define pm(x)(x+12) / 轉(zhuǎn)成

24、24小時(shí)制#define ds1302_second0x80 /時(shí)鐘芯片的寄存器位置,存放時(shí)間#define ds1302_minute0x82#define ds1302_hour0x84 #define ds1302_week0x8a#define ds1302_day0x86#define ds1302_month0x88#define ds1302_year0x8c void ds1302inputbyte(unsigned char d) /實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; acc = d; for(i=8; i>0; i-) ds1302_io

25、 = acc0; /相當(dāng)于匯編中的 rrc ds1302_clk = 1; ds1302_clk = 0; acc = acc >> 1; unsigned char ds1302outputbyte(void) /實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i>0; i-) acc = acc >>1; /相當(dāng)于匯編中的 rrc acc7 = ds1302_io; ds1302_clk = 1; ds1302_clk = 0; return(acc); void write1302(unsigned char ucaddr

26、, unsigned char ucda)/ucaddr: ds1302地址, ucdata: 要寫的數(shù)據(jù) ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr); / 地址,命令 ds1302inputbyte(ucda); / 寫1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; unsigned char read1302(unsigned char ucaddr)/讀取ds1302某地址的數(shù)據(jù) unsigned char ucdata; ds1302_rst = 0; d

27、s1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr|0x01); / 地址,命令 ucdata = ds1302outputbyte(); / 讀1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; return(ucdata);void ds1302_gettime(systemtime *time) /獲取時(shí)鐘芯片的時(shí)鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(shù)組unsigned char readvalue;readvalue = read1302(ds1302_second);time->second = (readv

28、alue&0x70)>>4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_minute);time->minute = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_hour);time->hour = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_day

29、);time->day = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_week);time->week = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_month);time->month = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);readvalue

30、= read1302(ds1302_year);time->year = (readvalue&0x70)>>4)*10 + (readvalue&0x0f);void datetostr(systemtime *time) /將時(shí)間年,月,日,星期數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符串,放到數(shù)組里datestring if(hide_year<2) /這里的if,else語(yǔ)句都是判斷位閃爍,<2顯示數(shù)據(jù),>2就不顯示,輸出字符串為 2007/07/22 time->datestring0 = '2' time->datestr

31、ing1 = '0' time->datestring2 = time->year/10 + '0' time->datestring3 = time->year%10 + '0' else time->datestring0 = ' ' time->datestring1 = ' ' time->datestring2 = ' ' time->datestring3 = ' 'time->datestring4 = '/

32、'if(hide_month<2) time->datestring5 = time->month/10 + '0' time->datestring6 = time->month%10 + '0' else time->datestring5 = ' ' time->datestring6 = ' ' time->datestring7 = '/'if(hide_day<2) time->datestring8 = time->day/10

33、 + '0' time->datestring9 = time->day%10 + '0' else time->datestring8 = ' ' time->datestring9 = ' ' if(hide_week<2) week_value0 = time->week%10-1 + '0' /星期的數(shù)據(jù)另外放到 week_value數(shù)組里,跟年,月,日的分開(kāi)存放,因?yàn)榈纫幌乱谧詈箫@示 else week_value0 = ' ' week_value1

34、 = '0'time->datestring10 = '0' /字符串末尾加 '0' ,判斷結(jié)束字符void timetostr(systemtime *time) /將時(shí),分,秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符放到數(shù)組 timestring; if(hide_hour<2) time->timestring0 = time->hour/10 + '0' time->timestring1 = time->hour%10 + '0' else time->timestring0 =

35、' ' time->timestring1 = ' 'time->timestring2 = ':' if(hide_min<2) time->timestring3 = time->minute/10 + '0' time->timestring4 = time->minute%10 + '0' else time->timestring3 = ' ' time->timestring4 = ' ' time->times

36、tring5 = ':' if(hide_sec<2) time->timestring6 = time->second/10 + '0' time->timestring7 = time->second%10 + '0' else time->timestring6 = ' ' time->timestring7 = ' ' time->datestring8 = '0'void initial_ds1302(void) /時(shí)鐘芯片初始化 unsig

37、ned char second=read1302(ds1302_second);if(second&0x80) /判斷時(shí)鐘芯片是否關(guān)閉 write1302(0x8e,0x00); /寫入允許write1302(0x8c,0x07); /以下寫入初始化時(shí)間 日期:07/07/25.星期: 3. 時(shí)間: 23:59:55write1302(0x88,0x07);write1302(0x86,0x25);write1302(0x8a,0x07);write1302(0x84,0x23);write1302(0x82,0x59);write1302(0x80,0x55);write1302(0

38、x8e,0x80); /禁止寫入/*ds18b20子程序*/*ds18b20延遲子函數(shù)(晶振12mhz )*/ void delay_18b20(unsigned int i)while(i-);/*ds18b20初始化函數(shù)*/void init_ds18b20(void) unsigned char x=0; dq = 1; /dq復(fù)位 delay_18b20(8); /稍做延時(shí) dq = 0; /單片機(jī)將dq拉低 delay_18b20(80); /精確延時(shí) 大于 480us dq = 1; /拉高總線 delay_18b20(14); x=dq; /稍做延時(shí)后 如果x=0則初始化成功 x

39、=1則初始化失敗 delay_18b20(20);/*ds18b20讀一個(gè)字節(jié)*/ unsigned char readonechar(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-) dq = 0; / 給脈沖信號(hào) dat>>=1; dq = 1; / 給脈沖信號(hào) if(dq) dat|=0x80; delay_18b20(4); return(dat);/*ds18b20寫一個(gè)字節(jié)*/ void writeonechar(uchar dat) unsigned char i=0; for (i=8; i>0; i-) dq

40、= 0; dq = dat&0x01; delay_18b20(5); dq = 1; dat>>=1; /*讀取ds18b20當(dāng)前溫度*/void readtemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;init_ds18b20();writeonechar(0xcc); / 跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18b20(100); / this message is wery importantinit_ds18b20();writeon

41、echar(0xcc); /跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度delay_18b20(100);a=readonechar(); /讀取溫度值低位b=readonechar(); /讀取溫度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4; void temp_to_str() /溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符顯示 tempbuffer0=temp_value/10+'0' /十位 tempbuffer1=temp_value%10+

42、9;0' /個(gè)位 tempbuffer2=0xdf; /溫度符號(hào) tempbuffer3='c' tempbuffer4='0'void delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/*延時(shí)子程序*/void mdelay(uint delay)uint i; for(;delay>0;delay-) for(i=0;i<62;i+) /1ms延時(shí). ; void outkey() /跳出調(diào)整模式,返回默認(rèn)顯示

43、uchar second; if(out=0|wireless_1=1) mdelay(8); count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;second=read1302(ds1302_second); write1302(0x8e,0x00); /寫入允許write1302(0x80,second&0x7f);write1302(0x8e,0x80); /禁止寫入done=0; while(out=0);while(wireless_1=1); vo

44、id upkey()/升序按鍵 up=1;if(up=0|wireless_2=1) mdelay(8); switch(count) case 1: temp=read1302(ds1302_second); /讀取秒數(shù) temp=temp+1; /秒數(shù)加1 up_flag=1; /數(shù)據(jù)調(diào)整后更新標(biāo)志 if(temp&0x7f)>0x59) /超過(guò)59秒,清零 temp=0; break; case 2: temp=read1302(ds1302_minute); /讀取分?jǐn)?shù) temp=temp+1; /分?jǐn)?shù)加1 up_flag=1; if(temp>0x59) /超過(guò)59分,清零 temp=0; break; case 3: temp=read1302(ds1302_hour); /讀取小時(shí)數(shù) temp=temp+1; /小時(shí)數(shù)加1 up_flag=1; if(temp>0x23) /超過(guò)23小時(shí),清零 temp=0; break; case 4: temp=read1302(ds1302_week); /讀取星期數(shù) temp=temp+1; /星期數(shù)加1

溫馨提示

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

評(píng)論

0/150

提交評(píng)論