版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)</p><p> 設(shè)計(jì)題目: 時(shí)間控制器設(shè)計(jì)</p><p> 學(xué) 院: </p><p> 專 業(yè): 自動(dòng)化 </p><p> 班 級(jí): 091 </p><p>
2、 學(xué) 號(hào): </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p> 2012年 6 月 22 日</p><p><b> 設(shè)計(jì)任務(wù)書</b></p>&
3、lt;p><b> 設(shè)計(jì)目的</b></p><p> 1、熟悉硬件電路設(shè)計(jì)的基本流程,初步掌握印制電路板設(shè)計(jì)制作的方法;</p><p> 2、熟悉程序設(shè)計(jì)和調(diào)試的基本流程;</p><p> 3、熟悉微控制器系統(tǒng)設(shè)計(jì)的流程和調(diào)試方法;</p><p> 4、鍛煉團(tuán)隊(duì)協(xié)作的能力;</p>
4、<p><b> 設(shè)計(jì)任務(wù)</b></p><p> 設(shè)計(jì)一個(gè)基于DS1302計(jì)時(shí)、DS18B20測(cè)溫和LCD1602液晶顯示模塊顯示的時(shí)間控制系統(tǒng),能顯示年、月、日、時(shí)、分、秒和實(shí)時(shí)溫度,具有時(shí)間調(diào)整功能并能根據(jù)設(shè)定時(shí)間控制一路220伏負(fù)載的通斷(繼電器);計(jì)時(shí)誤差不大于±10分鐘/天;能夠自動(dòng)判別大小月和閏年。</p><p> (1)、
5、能夠調(diào)整年、月、日、時(shí)和分,調(diào)整“日”時(shí),“周”能自動(dòng)跟隨自動(dòng)調(diào)整,調(diào)整“日”時(shí),“日”能自動(dòng)根據(jù)大小月及是否閏年改變最大值;</p><p> (2)、斷電數(shù)據(jù)不丟失;</p><p> ?。?)、以1分鐘為步進(jìn),能夠在1~30分鐘內(nèi)設(shè)置定時(shí),控制一路220伏負(fù)載(電阻性,不大于800W)的通斷;</p><p><b> 具體要求</b>
6、;</p><p> 1、根據(jù)任務(wù)設(shè)計(jì)出程序(程序語言不限),經(jīng)調(diào)試后能實(shí)現(xiàn)任務(wù)書中要求的功能;</p><p> 2、用PROTEUS仿真,在仿真軟件中系統(tǒng)能夠正常運(yùn)行;</p><p> 3、根據(jù)仿真結(jié)果,將程序加載到實(shí)際電路板,經(jīng)調(diào)試后能正常運(yùn)行;</p><p> 4、撰寫課程設(shè)計(jì)任務(wù)書; </p><p&
7、gt;<b> 目 錄</b></p><p><b> 摘要II</b></p><p> 第一章 設(shè)計(jì)方案1</p><p> 1.1 設(shè)計(jì)任務(wù)書分析1</p><p> 1.2 設(shè)計(jì)思路1</p><p> 1.3 設(shè)計(jì)方案1</p>
8、<p> 第二章 硬件設(shè)計(jì)2</p><p> 2.1 功能模塊設(shè)計(jì)2</p><p> 2.2 芯片介紹2</p><p> 2.2.1 微控制器AT89C522</p><p> 2.2.2 實(shí)時(shí)時(shí)鐘芯片DS13025</p><p> 2.2.3 溫度傳感器DS18B207&l
9、t;/p><p> 第三章 程序設(shè)計(jì)10</p><p> 3.1 程序設(shè)計(jì)思路10</p><p> 3.2 程序設(shè)計(jì)工具簡(jiǎn)介10</p><p> 3.3 程序流程框圖12</p><p> 第四章 系統(tǒng)調(diào)試13</p><p> 4.1 調(diào)試思路13</p>
10、<p> 4.2 調(diào)試方法及過程13</p><p> 4.3 問題及解決措施13</p><p><b> 第五章 總結(jié)13</b></p><p><b> 5.1硬件14</b></p><p><b> 5.2 程序14</b><
11、/p><p><b> 心得體會(huì)15</b></p><p><b> 參考文獻(xiàn)16</b></p><p> 附錄一 電路原理圖17</p><p> 附錄二 源程序清單18</p><p><b> 時(shí)間控制系統(tǒng)設(shè)計(jì)</b></p
12、><p><b> 摘要</b></p><p> 基于DS1302計(jì)時(shí)、DS18B20測(cè)溫和LCD1602液晶顯示模塊顯示的時(shí)間控制系統(tǒng),能顯示年、月、日、時(shí)、分、秒和實(shí)時(shí)溫度,具有時(shí)間調(diào)整功能并能根據(jù)設(shè)定時(shí)間控制一路220伏負(fù)載的通斷(繼電器);計(jì)時(shí)誤差不大于±10分鐘/天;能夠自動(dòng)判別大小月和閏年。</p><p> ?。?)、
13、能夠調(diào)整年、月、日、時(shí)和分,調(diào)整“日”時(shí),“周”能自動(dòng)跟隨自動(dòng)調(diào)整,調(diào)整“月”時(shí),“日”能自動(dòng)根據(jù)大小月及是否閏年改變最大值;</p><p> ?。?)、斷電數(shù)據(jù)不丟失;</p><p> ?。?)、以1分鐘為步進(jìn),能夠在1~30分鐘內(nèi)設(shè)置定時(shí),控制一路220伏負(fù)載(電阻性,不大于800W)的通斷</p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī),時(shí)間控制</p>
14、<p><b> 第一章 設(shè)計(jì)方案</b></p><p> 1.1 設(shè)計(jì)任務(wù)書分析</p><p> 根據(jù)任務(wù)書要求實(shí)現(xiàn)的功能來看,主要有實(shí)時(shí)時(shí)間的顯示,溫度的顯示,通過按鍵調(diào)整時(shí)間與選擇定時(shí)功能。由此可知,系統(tǒng)所需包含的部件應(yīng)有單片機(jī)、單片機(jī)外圍電路(時(shí)鐘電路、溫度采集電路、顯示電路),按鍵調(diào)時(shí)電路。它們之間的關(guān)系方框圖如設(shè)計(jì)方案所示。<
15、/p><p><b> 1.2 設(shè)計(jì)思路</b></p><p> 本次設(shè)計(jì)采用AT89C52作為主控制器,DS1302輸入時(shí)間信息,DS18B20采集溫度信息,LCD1602作為顯示輸出設(shè)備,通過四個(gè)按鍵實(shí)現(xiàn)時(shí)間設(shè)置。</p><p><b> 1.3 設(shè)計(jì)方案</b></p><p> 中央
16、處理單元:采用AT89C52對(duì)整個(gè)系統(tǒng)進(jìn)行控制,</p><p> 它將定時(shí)數(shù)據(jù)輸出到LED,實(shí)現(xiàn)時(shí)間的顯示;</p><p> 根據(jù)鍵盤輸入調(diào)用相應(yīng)鍵處理子程序,實(shí)現(xiàn)時(shí)間的調(diào)整設(shè)定;</p><p> 接收溫度傳感器輸入的溫度數(shù)據(jù),進(jìn)行一定轉(zhuǎn)換,輸出到LCD顯示器顯示。</p><p> 時(shí)鐘電路:時(shí)間的的讀寫輸入。</p&g
17、t;<p> 溫度采集模塊:采集溫度信息輸送到單片機(jī)。</p><p> 液晶顯示電路:是對(duì)單片內(nèi)數(shù)據(jù)視化,讓設(shè)計(jì)的功能通過它能夠直觀的體現(xiàn)出來,使用戶方便觀察結(jié)果及對(duì)功能的設(shè)置。</p><p> 按鍵調(diào)時(shí)模塊:通過按鍵設(shè)置,改變芯片內(nèi)數(shù)據(jù)達(dá)到調(diào)時(shí)的效果,設(shè)置定時(shí)等功能。</p><p><b> 第二章 硬件設(shè)計(jì)</b>
18、;</p><p> 2.1 功能模塊設(shè)計(jì)</p><p><b> 2.2 芯片介紹</b></p><p> 2.2.1 微控制器AT89S52</p><p> AT89S52為 ATMEL 所生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flsah存儲(chǔ)器。</p><
19、;p> 1 AT89S52主要功能列舉如下:</p><p> 1)擁有靈巧的8位CPU和在系統(tǒng)可編程Flash;2)晶片內(nèi)部具時(shí)鐘振蕩器(傳統(tǒng)最高工作頻率可至 12MHz);3)內(nèi)部程序存儲(chǔ)器(ROM)為 8KB;4)內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)為 256字節(jié);5)32 個(gè)可編程I/O 口線;6)8 個(gè)中斷向量源;7)三個(gè) 16 位定時(shí)器/計(jì)數(shù)器;8)三級(jí)加密程序存儲(chǔ)器;9)全雙工UART串行通道。<
20、;/p><p> 2 AT89S52各引腳功能介紹:</p><p> VCC:AT89S52電源正端輸入,接+5V。</p><p><b> VSS:電源地端。</b></p><p> XTAL1:?jiǎn)涡酒到y(tǒng)時(shí)鐘的反相放大器輸入端。</p><p> XTAL2:系統(tǒng)時(shí)鐘的反相放大器輸
21、出端,一般在設(shè)計(jì)上只要在 XTAL1 和 XTAL2 上接上</p><p> 一只石英振蕩晶體系統(tǒng)就可以動(dòng)作了,此外可以在兩引腳與地之間加入一 20PF 的小電</p><p> 容,可以使系統(tǒng)更穩(wěn)定,避免噪聲干擾而死機(jī)。</p><p> RESET:AT89S52的重置引腳,高電平動(dòng)作,當(dāng)要對(duì)晶片重置時(shí),只要對(duì)此引腳電平提升</p><
22、;p> 至高電平并保持兩個(gè)機(jī)器周期以上的時(shí)間,AT89S51便能完成系統(tǒng)重置的各項(xiàng)動(dòng)作,使</p><p> 得內(nèi)部特殊功能寄存器之內(nèi)容均被設(shè)成已知狀態(tài),并且至地址0000H處開始讀入程序代</p><p><b> 碼而執(zhí)行程序。</b></p><p> EA/Vpp:"EA"為英文"Extern
23、al Access"的縮寫,表示存取外部程序代碼之意,低電平</p><p> 動(dòng)作,也就是說當(dāng)此引腳接低電平后,系統(tǒng)會(huì)取用外部的程序代碼(存于外部EPROM中)</p><p> 來執(zhí)行程序。因此在8031及8032中,EA引腳必須接低電平,因?yàn)槠鋬?nèi)部無程序存儲(chǔ)器</p><p> 空間。如果是使用 8751 內(nèi)部程序空間時(shí),此引腳要接成高電平。此
24、外,在將程序代碼</p><p> 燒錄至8751內(nèi)部EPROM時(shí),可以利用此引腳來輸入21V的燒錄高壓(Vpp)。</p><p> PSEN:此為"Program Store Enable"的縮寫,其意為程序儲(chǔ)存啟用,當(dāng)8051被設(shè)成為</p><p> 讀取外部程序代碼工作模式時(shí)(EA=0),會(huì)送出此信號(hào)以便取得程序代碼,通常這支腳&
25、lt;/p><p> 是接到EPROM的OE腳。AT89S52可以利用PSEN及RD引腳分別啟用存在外部的RAM與</p><p> EPROM,使得數(shù)據(jù)存儲(chǔ)器與程序存儲(chǔ)器可以合并在一起而共用64K的定址范圍。</p><p> PORT0(P0.0~P0.7):端口0是一個(gè)8位寬的開路汲極(Open Drain)雙向輸出入端口,</p><p
26、> 共有8個(gè)位,P0.0表示位0,P0.1表示位1,依此類推。其他三個(gè)I/O端口(P1、P2、</p><p> P3)則不具有此電路組態(tài),而是內(nèi)部有一提升電路,P0在當(dāng)做I/O用時(shí)可以推動(dòng)8個(gè)</p><p> LS的TTL負(fù)載。如果當(dāng)EA引腳為低電平時(shí)(即取用外部程序代碼或數(shù)據(jù)存儲(chǔ)器),P0</p><p> 就以多工方式提供地址總線(A0~A7)
27、及數(shù)據(jù)總線(D0~D7)。設(shè)計(jì)者必須外加一鎖存</p><p> 器將端口0送出的地址栓鎖住成為A0~A7,再配合端口2所送出的A8~A15合成一完整</p><p> 的16位地址總線,而定址到64K的外部存儲(chǔ)器空間。</p><p> PORT2(P2.0~P2.7):端口2是具有內(nèi)部提升電路的雙向I/O端口,每一個(gè)引腳可以推</p><
28、;p> 動(dòng)4個(gè)LS的TTL負(fù)載,若將端口2的輸出設(shè)為高電平時(shí),此端口便能當(dāng)成輸入端口來</p><p> 使用。P2除了當(dāng)做一般I/O端口使用外,若是在AT89S52擴(kuò)充外接程序存儲(chǔ)器或數(shù)據(jù)存</p><p> 儲(chǔ)器時(shí),也提供地址總線的高字節(jié)A8~A15,這個(gè)時(shí)候P2便不能當(dāng)做I/O來使用了。</p><p> PORT1(P1.0~P1.7):端口1
29、也是具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動(dòng)4個(gè)LS TTL負(fù)載,同樣地若將端口1的輸出設(shè)為高電平,便是由此端口來輸入數(shù)據(jù)。如果是使用8052或是8032的話,P1.0又當(dāng)做定時(shí)器2的外部脈沖輸入腳,而P1.1可以有T2EX功能,可以做外部中斷輸入的觸發(fā)腳位。</p><p> PORT3(P3.0~P3.7):端口3也具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以</p>&l
30、t;p> 推動(dòng)4個(gè)TTL負(fù)載。其引腳分配如下:</p><p> P3.0:RXD,串行通信輸入。</p><p> P3.1:TXD,串行通信輸出。</p><p> P3.2:INT0,外部中斷0輸入。</p><p> P3.3:INT1,外部中斷1輸入。</p><p> P3.4:T0,計(jì)時(shí)
31、計(jì)數(shù)器0輸入。</p><p> P3.5:T1,計(jì)時(shí)計(jì)數(shù)器1輸入。</p><p> P3.6:WR:外部數(shù)據(jù)存儲(chǔ)器的寫入信號(hào)。</p><p> P3.7:RD,外部數(shù)據(jù)存儲(chǔ)器的讀取信號(hào)。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí)要保持RST腳兩個(gè)機(jī)器周期的高電平。</p><p> ALE
32、/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地</p><p> 位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不</p><p> 變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)</p><p> 外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器</p>
33、<p> 時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此</p><p> 時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微</p><p> 拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,
34、每個(gè)機(jī)</p><p> 器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信</p><p><b> 號(hào)將不出現(xiàn)。</b></p><p> /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),</p><p> 不管是否有內(nèi)部程序存儲(chǔ)器。注意加密
35、方式1時(shí),/EA將內(nèi)部鎖定為RESET;</p><p> 當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也</p><p> 用于施加12V編程電源(VPP)。</p><p> 2.2.2 實(shí)時(shí)時(shí)鐘芯片DS1302</p><p> DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片
36、,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302的外部引腳分配如圖1所示</p><p> 圖1
37、60; DS1302的外部引腳分配</p><p><b> 1各引腳的功能為:</b></p><p> Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。</p><p> SCLK:串行時(shí)鐘,輸入;
38、160;</p><p> I/O:三線接口時(shí)的雙向數(shù)據(jù)線;</p><p> CE:輸入信號(hào),在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?lt;/p><p> 2 DS1302有下列幾組寄存器:</p><p> 1)DS1302有關(guān)日歷、
39、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h~8Dh,寫時(shí)80h~8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如圖2所示。</p><p> 圖 2 DS1302有關(guān)日歷、時(shí)間的寄存器</p><p> 小時(shí)寄存器(85h、84h)的位7用于定義DS1302是運(yùn)行于12小時(shí)模式還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí),位5是,當(dāng)為1時(shí),
40、表示PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位。</p><p> 秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。</p><p> 控制寄存器(8Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫保護(hù)
41、位防止對(duì)任一寄存器的寫操作。</p><p> 2) DS1302的工作模式寄存器</p><p> 所謂突發(fā)模式是指一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。突發(fā)模式寄存器如圖3所示。</p><p><b> 圖3</b></p><p><b> 3 讀寫時(shí)序說明</b></p&g
42、t;<p> DS1302是SPI總線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。DS1302的控制字如圖4。</p><p> 圖4 控制字(即地址及命令字節(jié))</p><p> 控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)
43、據(jù);位5至位1(A4~A0):指示操作單元的地址;位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。</p><p> 控制字總是從最低位開始輸出。在控制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時(shí)序如圖5 。<
44、/p><p> 圖5 數(shù)據(jù)讀寫時(shí)序</p><p><b> 3 電路原理圖</b></p><p> 電路原理圖如圖8,DS1302與單片機(jī)的連接也僅需要3條線:CE引腳、SCLK串行時(shí)鐘引腳、I/O串行數(shù)據(jù)引腳,Vcc2為備用電源,外接32.768kHz晶振,為芯片提供計(jì)時(shí)脈沖。</p><p><
45、;b> 圖8</b></p><p> 2.2.3 溫度傳感器DS18B20</p><p> TO-92封裝的DS18B20的引腳排列見下圖,其引腳功能描述見表1。(底視圖)</p><p> 表1 DS18B20詳細(xì)引腳功能描述</p><p> DS18B20的性能特點(diǎn)如下:1)獨(dú)特的單線接口僅需要一個(gè)端口引
46、腳進(jìn)行通信;2)多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;3)無須外部器件;4)可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;5)零待機(jī)功耗;6)溫度以9或12位數(shù)字;7)用戶可定義報(bào)警設(shè)置;8)報(bào)警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;9)負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; </p><p> 64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號(hào),
47、接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><p> DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝
48、,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如圖3所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。</p><p> 圖3 DS18B20字
49、節(jié)定義</p><p> DS18B20的測(cè)溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測(cè)量前,首先將-5
50、5℃所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。</p><p> 減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就
51、是所測(cè)溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測(cè)溫度值。</p><p> 表2 一部分溫度對(duì)應(yīng)值表</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操
52、作命令→處理數(shù)據(jù)。</p><p> 圖4 DS18B20與單片機(jī)的接口電路</p><p><b> 第三章 程序設(shè)計(jì)</b></p><p> 3.1 程序設(shè)計(jì)思路</p><p> 程序包括主程序若干子程序,系統(tǒng)每一個(gè)相應(yīng)的功能都對(duì)應(yīng)有一個(gè)子程序,在編寫程序時(shí)每一功能都分開編寫,通過主程序的調(diào)用使它們串聯(lián)
53、起來,實(shí)現(xiàn)其功能。在編寫程序前先畫出其流程圖,然后根據(jù)流程圖寫出其源程序,在編寫程序的過程中要有足夠的細(xì)心和耐心。</p><p> 3.2 程序設(shè)計(jì)工具簡(jiǎn)介</p><p> 3.2.1 KEIL C51的功能和操作簡(jiǎn)介</p><p> KEIL C51簡(jiǎn)介</p><p> Keil uVision2是德國(guó)Keil Softwa
54、re公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),使用接近于傳統(tǒng)C語言的語法來開發(fā),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用,而且大大的提高了工作效率和項(xiàng)目開發(fā)周期,他還能嵌入?yún)R編,您可以在關(guān)鍵的位置嵌入,使程序達(dá)到接近于匯編的工作效率。KEILC51標(biāo)準(zhǔn)C編譯器為8051微控制器的軟件開發(fā)提供了C語言環(huán)境,同時(shí)保留了匯編代碼高效,快速的特點(diǎn)。C51編譯器的功能不斷增強(qiáng), 使你可以更加貼近CPU
55、本身,及其它的衍生產(chǎn)品。C51已被完全集成到uVision2的集成開發(fā)環(huán)境中,這個(gè)集成開發(fā)環(huán)境包含:編譯器,匯編器,實(shí)時(shí)操作系統(tǒng),項(xiàng)目管理器,調(diào)試器。KEILC51是一款非常優(yōu)秀的編譯器,受到廣大單片機(jī)設(shè)計(jì)者的廣泛使用。其主要特點(diǎn)如下:</p><p> 支持匯編語言、C語言等多種單片機(jī)設(shè)計(jì)語言;</p><p> 可視化的文件管理,界面友好;</p><p>
56、 支持豐富的產(chǎn)品線,除了51及其兼容內(nèi)核的單片機(jī)外,還增加了對(duì)ARM內(nèi)核產(chǎn)品的支持;</p><p> 具有完善的編譯連接工具;</p><p> 具有豐富的仿真調(diào)試功能,可以仿真串口、并口、A/D、D/A、定時(shí)器/計(jì)數(shù)器以及中斷等資源,同時(shí)也可以和外部仿真器聯(lián)合進(jìn)行在線調(diào)試;</p><p> 內(nèi)嵌RTX-51實(shí)時(shí)多任務(wù)操作系統(tǒng);</p>&
57、lt;p> 支持在一個(gè)工作空間中進(jìn)行多項(xiàng)目的程序設(shè)計(jì);</p><p><b> 支持多級(jí)代碼優(yōu)化。</b></p><p> KEIL C51的入門操作</p><p> 第一步:雙擊Keil uVision2的桌面快捷方式,啟動(dòng)Keil集成開發(fā)開發(fā)軟件。</p><p> 第二步:新建文本編輯窗。點(diǎn)擊
58、工具欄上的新建文件快捷按鍵,即可在項(xiàng)目窗口的右側(cè)打開一個(gè)新的文本編輯窗。</p><p> 第三步:輸入源程序。在新的文本編輯窗中輸入源程序,可以輸入C語言程序,也可以輸入?yún)R編語言程序。</p><p> 第四步:保存源程序。保存文件時(shí)必須加上文件的擴(kuò)展名,如果你使用匯編語言編程,那么保存時(shí)文件的擴(kuò)展名為“.asm”,如果是C語言程序,文件的擴(kuò)展名使用“*.C ”。</p>
59、<p> 第五步:新建立Keil工程。點(diǎn)擊 "工程" → "新建工程" 命令,將出現(xiàn)保存對(duì)話框。</p><p> 第六步:選擇CPU型號(hào)。為工程選擇CPU型號(hào),本次設(shè)計(jì)新建工程選擇了ATMEL公司的AT89C52單片機(jī)。</p><p> 第七步:加入源程序到工程中。在選擇好CPU型號(hào)后,點(diǎn)擊"確定"按鈕返回
60、主界面,此時(shí)可見到工程管理窗中出現(xiàn)“Target 1”,點(diǎn)擊“Target 1”前面的“+”號(hào)展開下一層的“Source Group 1”文件夾,此時(shí)的新工程是空的,“Source Group 1”文件夾中什么文件都沒有,必須把剛才輸入的源程序加入到工程當(dāng)中。右擊工程管理窗中的“Source Group 1”,出現(xiàn)下拉菜單,點(diǎn)擊“增加文件到組'Source Group 1'”命令,將出現(xiàn)添加文件對(duì)話框。</p>
61、;<p> 第八步:工程目標(biāo)'Target 1'屬性設(shè)置。如下圖14所示,在工程項(xiàng)目管理窗中的"Target 1"文件夾上右擊,出現(xiàn)下拉菜單,點(diǎn)擊“目標(biāo)'Target 1'屬性”命令,就進(jìn)入目標(biāo)屬性設(shè)置界面。</p><p> 第九步:源程序的編譯與目標(biāo)文件的獲得</p><p> 3.2.2 PROTUES的功能和
62、操作簡(jiǎn)介</p><p> Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點(diǎn)是:①實(shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀
63、器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。②支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。③提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 u
64、Vision2等軟件。④具有強(qiáng)大的原理圖繪制功能??傊撥浖且豢罴瘑纹瑱C(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大。</p><p> Proteus基本操作</p><p> Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面。包括:標(biāo)題欄、主菜單、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、圖形編輯窗口。</p&g
65、t;<p> 運(yùn)行Proteus程序后,進(jìn)入軟件的主界面。通過左側(cè)的工具欄中的P(從庫中選擇元件命令),在Pick Devices左側(cè)窗口中選擇所需元件的關(guān)鍵字,然后放置元件并調(diào)整方向和位置以及參數(shù)設(shè)置,然后進(jìn)行連線。</p><p> 最后載入hex文件后可以進(jìn)行模擬仿真,可以全速運(yùn)行也可以單步調(diào)試運(yùn)行。</p><p> 3.3 程序流程框圖</p>
66、<p><b> 第四章 系統(tǒng)調(diào)試</b></p><p><b> 4.1 調(diào)試思路</b></p><p> 調(diào)試是檢驗(yàn)系統(tǒng)功能的環(huán)節(jié),本次調(diào)試為軟件調(diào)試,在KEIL C51和PROTUES上進(jìn)行,在KEIL C51平臺(tái)上程序無誤后,創(chuàng)立相關(guān)文件,打開PROTUES仿真軟件,通過顯示屏觀察功能實(shí)現(xiàn),邊調(diào)邊改,直至系統(tǒng)功能全部實(shí)
67、現(xiàn)。</p><p> 4.2 調(diào)試方法及過程</p><p> 此次設(shè)計(jì)由于時(shí)間因素,來不及硬件調(diào)試,所以只能通過KEIL C51和PROTUES仿真軟件進(jìn)行軟件調(diào)試,在編譯好源程序并檢查無誤后,在KEIL C51創(chuàng)建生成相關(guān)文件,進(jìn)入PROTUES仿真軟件打開原理圖,在AT89C52里選中工程模塊中output文件夾的.hex文件,點(diǎn)擊仿真開始按鈕,觀察其功能實(shí)現(xiàn),邊觀察邊修改程序
68、,每次修改程序后都必須重新在KEIL C51里創(chuàng)建新的文件,直至系統(tǒng)功能正常實(shí)現(xiàn)。</p><p> 4.3 問題及解決措施</p><p> 1.換屏?xí)r亂跳,有時(shí)顯示亂碼。</p><p> 解決措施:經(jīng)檢查是未加延時(shí)消抖和清屏,增加延時(shí)消抖和清屏函數(shù)后,問題解決。</p><p> 2.星期顯示比實(shí)際星期快一天。</p>
69、;<p> 解決措施:在DS1302子程序里把各星期逐一調(diào)換位置后,成功顯示實(shí)時(shí)星期。</p><p> 3.在調(diào)試修改過程序后,在仿真軟件上未有任何變化。</p><p> 解決措施:經(jīng)詢問老師,原來是在修改程序后未在KEIL C51上重新創(chuàng)建文件,重新創(chuàng)建后,新功能實(shí)現(xiàn)。</p><p><b> 第五章 總結(jié)</b>
70、</p><p><b> 5.1硬件</b></p><p> 設(shè)計(jì)中的硬件包括AT89C52單片機(jī),DS1302時(shí)鐘芯片、DS18B20溫度傳感器和LCD1602液晶顯示屏。AT89C52單片機(jī)作為控制核心,具有在線編程,低功耗,能在3V超低電壓工作;時(shí)鐘電路由DS1302時(shí)鐘芯片提供,它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可對(duì)年、月、日、時(shí)、分、
71、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,同時(shí)具有掉電保護(hù)功能;溫度的采集由DS18B20溫度傳感器構(gòu)成,顯示部分由LCD1602構(gòu)成。</p><p><b> 5.2 程序</b></p><p> 程序由主程序和若干子程序構(gòu)成,是實(shí)現(xiàn)時(shí)鐘控制器功能的重要組成部分,只有編譯調(diào)試好了程序,時(shí)鐘控制器的功能才能得以實(shí)現(xiàn)。在編寫程序時(shí),一步一步著手,在寫每個(gè)程序前都要先畫出其相
72、應(yīng)的流程圖,然后再根據(jù)流程圖寫出源程序。主程序主要有設(shè)備初始化,相關(guān)信息的讀寫與顯示及按鍵程序的調(diào)用。按鍵子程序主要實(shí)現(xiàn)時(shí)間調(diào)整與定時(shí)功能的選擇。</p><p><b> 心得體會(huì)</b></p><p><b> 參考文獻(xiàn)</b></p><p> 【1】肖婧.單片機(jī)系統(tǒng)設(shè)計(jì)與仿真—基于Proteus【M】.北京
73、:北京航空航天大學(xué)出版社,2010</p><p> 【2】樓然苗 李光飛.單片機(jī)課程設(shè)計(jì)指導(dǎo)【M】. 北京:北京航空航天大學(xué)出版社,2007</p><p> 【3】譚浩強(qiáng).C程序設(shè)計(jì)(第三版)【M】.清華大學(xué)出版社,2005</p><p><b> 附錄一 電路原理圖</b></p><p><b>
74、; 附錄二 源程序清單</b></p><p><b> 主程序:</b></p><p> #include <reg52.h></p><p> #include "lcd1602_driver.h"</p><p> #include "ds1302_
75、driver.h"</p><p> #include "display.h"</p><p> #include "ds18b20_driver.h"</p><p> #include "anjian.h"</p><p><b> main()<
76、;/b></p><p> {init_lcd1602( );</p><p> init_ds1302( );</p><p> init_ds18b20( );</p><p> wr_realtime( );</p><p> wr_realdate( );</p><p
77、><b> while(1)</b></p><p><b> {</b></p><p> set_disp_position(1,1);</p><p> display_date( );</p><p> set_disp_position(2,1);</p>&
78、lt;p> display_time( );</p><p> set_disp_position(1,13);</p><p> display_week( );</p><p> set_disp_position(2,13);</p><p> read_temp();</p><p> dis
79、play_temp( );</p><p><b> scan();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 按鍵掃描:</b></p><p> #i
80、nclude "anjian.h"</p><p> #include "delay.h"</p><p> #include "lcd1602_driver.h"</p><p> #include "ds1302_driver.h"</p><p>
81、#include "ds18b20_driver.h"</p><p> #include "display.h"</p><p> #include <reg52.h></p><p> unsigned char key_age_sure=0;</p><p> unsigned
82、 char key_age_up=0;</p><p> unsigned char key_age_down=0;</p><p> unsigned char key_age_next=0;</p><p> void scan( )</p><p><b> {</b></p><p&g
83、t; P1=P1|0xf0;</p><p> key_value=P1; </p><p> key_value=key_value&0xf0;</p><p> if(key_value==0xe0)</p><p><b> { </b></p><p> key_
84、age_sure++; </p><p><b> sure();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 按鍵程序:</b></p><p> v
85、oid sure( )</p><p><b> { </b></p><p> switch(key_age_sure)</p><p><b> { </b></p><p> case 1:{clean_screen();</p><p><b&
86、gt; while(1)</b></p><p><b> {</b></p><p> set_disp_position(1,1);</p><p> display_menu(settime_menu);</p><p> set_disp_position(2,4);</p>
87、<p> display_time();</p><p> switch(key_age_next)</p><p><b> {</b></p><p> case 0:{set_disp_flash(2,4);</p><p> set_disp_flash(2,5);</p>&l
88、t;p><b> } break;</b></p><p> case 1:{set_disp_flash(2,7);</p><p> set_disp_flash(2,8);</p><p><b> }break;</b></p><p><b> }</b&g
89、t;</p><p> if(key_next==0)</p><p> key_age_next++;</p><p> if(key_age_next==2) </p><p> key_age_next=0;</p><p> if(key_plus==0&&key_age_next==
90、0) //調(diào)時(shí)加</p><p> {delay_ms(10);</p><p> while(key_plus==0)</p><p><b> {</b></p><p> rd_realtime();</p><p> real_time[0]=(real_time[0]/16)
91、*10+real_time[0]%16;</p><p> real_time[0]++;</p><p> if (real_time[0]==24)</p><p> real_time[0]=0;</p><p> real_time[0]=(real_time[0]/10)*16+real_time[0]%10;</p&
92、gt;<p> } wr_realtime( );</p><p><b> }</b></p><p> if(key_minus==0&&key_age_next==0)//調(diào)時(shí)減</p><p><b> {</b></p><p> while(k
93、ey_minus==0)</p><p><b> {</b></p><p> rd_realtime();</p><p> real_time[0]=(real_time[0]/16)*10+real_time[0]%16;</p><p> real_time[0]--;</p><p
94、> if (real_time[0]==-1)</p><p> real_time[0]=23;</p><p> real_time[0]=(real_time[0]/10)*16+real_time[0]%10; </p><p> }wr_realtime( );</p><p><b> }&
95、lt;/b></p><p> if(key_plus==0&&key_age_next==1)//調(diào)分加</p><p> {delay_ms(10);</p><p> while(key_plus==0)</p><p><b> {</b></p><p>
96、; rd_realtime();</p><p> real_time[1]=(real_time[1]/16)*10+real_time[1]%16;</p><p> real_time[1]++;</p><p> if (real_time[1]==60)</p><p> real_time[1]=0;</p>
97、<p> real_time[1]=(real_time[1]/10)*16+real_time[1]%10;</p><p> } wr_realtime( ); }</p><p> if(key_minus==0&&key_age_next==1) //調(diào)分減</p><p><b> {</b>
98、</p><p> while(key_minus==0)</p><p><b> {</b></p><p> rd_realtime();</p><p> real_time[1]=(real_time[1]/16)*10+real_time[1]%16;</p><p> re
99、al_time[1]--;</p><p> if (real_time[1]==-1)</p><p> real_time[1]=59;</p><p> real_time[1]=(real_time[1]/10)*16+real_time[1]%10; </p><p> }wr_realtime( );<
100、/p><p><b> }</b></p><p> if(key_sure==0)</p><p> key_age_sure++;</p><p> if(key_age_sure==2)break; </p><p> } } </p><p>&l
101、t;b> case 2:{</b></p><p> clean_screen();</p><p><b> while(1) </b></p><p><b> {</b></p><p> set_disp_position(1,1);</p><
102、;p> display_menu(setdate_menu);</p><p> set_disp_position(2,4);</p><p> display_date();</p><p> set_disp_position(1,14); </p><p> display_week();</p>&l
103、t;p> switch(key_age_next)</p><p><b> {</b></p><p> case 0:{set_disp_flash(2,6);</p><p> set_disp_flash(2,7);</p><p><b> } break;</b><
104、;/p><p> case 1:{set_disp_flash(2,9);</p><p> set_disp_flash(2,10);</p><p><b> } break;</b></p><p> case 2:{set_disp_flash(2,12);</p><p> se
105、t_disp_flash(2,13);</p><p><b> } break;</b></p><p><b> }</b></p><p> if(key_next==0)</p><p> key_age_next++;</p><p> if(key_a
106、ge_next==3) </p><p> key_age_next=0;</p><p> if(key_plus==0&&key_age_next==0) //調(diào)年加</p><p> {delay_ms(10);</p><p> while(key_plus==0)</p><p>&
107、lt;b> {</b></p><p> rd_realdate();</p><p> real_date[0]=(real_date[0]/16)*10+real_date[0]%16;</p><p> real_date[0]++;</p><p> if (real_date[0]==100)</p
108、><p> real_date[0]=0;</p><p> real_date[0]=(real_date[0]/10)*16+real_date[0]%10;</p><p> } wr_realdate( );</p><p><b> }</b></p><p> if(key_m
109、inus==0&&key_age_next==0) //調(diào)年減</p><p> {delay_ms(10);</p><p> while(key_minus==0)</p><p><b> {</b></p><p> rd_realdate();</p><p>
110、 real_date[0]=(real_date[0]/16)*10+real_date[0]%16;</p><p> real_date[0]--;</p><p> if (real_date[0]==-1)</p><p> real_date[0]=99;</p><p> real_date[0]=(real_date[
111、0]/10)*16+real_date[0]%10;</p><p> } wr_realdate( );</p><p><b> }</b></p><p> if(key_plus==0&&key_age_next==1) //調(diào)月加</p><p> {delay_ms(10);<
112、/p><p> while(key_plus==0)</p><p><b> {</b></p><p> rd_realdate();</p><p> real_date[1]=(real_date[1]/16)*10+real_date[1]%16;</p><p> real_da
113、te[1]++;</p><p> if (real_date[1]==13)</p><p> real_date[1]=1;</p><p> real_date[1]=(real_date[1]/10)*16+real_date[1]%10;</p><p> } wr_realdate( );</p><
114、p><b> }</b></p><p> if(key_minus==0&&key_age_next==1)//調(diào)月減</p><p> {delay_ms(10);</p><p> while(key_minus==0)</p><p><b> {</b>
115、</p><p> rd_realdate();</p><p> real_date[1]=(real_date[1]/16)*10+real_date[1]%16;</p><p> real_date[1]--;</p><p> if (real_date[1]==0)</p><p> real_d
116、ate[1]=12;</p><p> real_date[1]=(real_date[1]/10)*16+real_date[1]%10;</p><p> } wr_realdate( );</p><p><b> }</b></p><p> if(key_plus==0&&key_ag
117、e_next==2) //調(diào)日加</p><p> {delay_ms(10);</p><p> while(key_plus==0)</p><p><b> {</b></p><p> rd_realdate();</p><p> real_date[2]=(real_dat
118、e[2]/16)*10+real_date[2]%16;</p><p> real_date[2]++;</p><p> real_date[3]++; //周隨日加而變化 </p><p> if (real_date[3]==8)</p><p> real_date[3]=1;</p>
119、<p> if (real_date[1]==1||real_date[1]==3||real_date[1]==5||real_date[1]==7||real_date[1]==9||real_date[1]==11)</p><p> if (real_date[2]==32)</p><p> real_date[2]=1;</p><p>
120、 if (real_date[1]==4||real_date[1]==6||real_date[1]==8||real_date[1]==10||real_date[1]==12)</p><p> if (real_date[2]==31)</p><p> real_date[2]=1;</p><p> if (real_date[0]%4==0)&
121、lt;/p><p> if (real_date[1]==2)</p><p> if (real_date[2]==30)</p><p> real_date[2]=1;</p><p> if (real_date[0]%4!=0)</p><p> if (real_date[1]==2)</p&g
122、t;<p> if (real_date[2]==29)</p><p> real_date[2]=1;</p><p> real_date[2]=(real_date[2]/10)*16+real_date[2]%10;</p><p> } wr_realdate( );</p><p><b>
123、}</b></p><p> if(key_minus==0&&key_age_next==2) //調(diào)日減</p><p> {delay_ms(10);</p><p> while(key_minus==0)</p><p><b> {</b></p><
124、;p> rd_realdate();</p><p> real_date[2]=(real_date[2]/16)*10+real_date[2]%16;</p><p> real_date[2]--;</p><p> real_date[3]--;//周隨日加而變化</p><p> if (real_date[
125、3]==0)</p><p> real_date[3]=7;</p><p> if (real_date[1]==1||real_date[1]==3||real_date[1]==5||real_date[1]==7||real_date[1]==8||real_date[1]==10||real_date[1]==12)</p><p> if (re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)-時(shí)間控制器
- 單片機(jī)作息時(shí)間控制器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)節(jié)日彩燈控制器
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)原理及應(yīng)用
- 單片機(jī)課程設(shè)計(jì):彩燈控制器設(shè)計(jì)
- 單片機(jī)課間作息時(shí)間控制器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 單片機(jī)原理及應(yīng)用
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的定時(shí)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 彩燈控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---水溫控制器設(shè)計(jì)
- 彩燈控制器的設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--水溫控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--溫度控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)控制的時(shí)鐘控制器
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--節(jié)日彩燈控制器設(shè)計(jì)
- 時(shí)鐘控制器單片機(jī)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論