![電子萬年歷課程設計報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/05177e75-643d-4905-9c7d-e3cbed7eacbb/05177e75-643d-4905-9c7d-e3cbed7eacbb1.gif)
![電子萬年歷課程設計報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/05177e75-643d-4905-9c7d-e3cbed7eacbb/05177e75-643d-4905-9c7d-e3cbed7eacbb2.gif)
![電子萬年歷課程設計報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/05177e75-643d-4905-9c7d-e3cbed7eacbb/05177e75-643d-4905-9c7d-e3cbed7eacbb3.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、機電信息工程學院單片機系統(tǒng)課程設計報告系另專 業(yè): 班 級: 設計題目: 學生姓名: 指導教師:完成日期:、設計任務與性能指標1.1 設計任務設計一個帶有年月日、 時分秒及星期顯示的電子日歷。 要求用 Altium 6.0 畫 出系統(tǒng)的電路原理圖,印刷電路板,繪出程序流程圖,并給出程序清單。1.2 性能指標電子日歷的主要功能是給人們提供時間和日期信息,無論其形式如何,從外 部都可分為顯示和校準兩部分。 為使電子日歷協(xié)調(diào)工作, 整個系統(tǒng)從功能上可分 為實時時鐘、 顯示和鍵盤三個模塊, 分別完成時間和日期的計算以及人機交互的 管理。帶有時鐘(時分秒)和日期(年月日)和星期的顯示。可進行時間及日期
2、的校正及報時點設置。1.3 系統(tǒng)要求帶有時鐘(時分秒)和日期(年月日)和星期的顯示??蛇M行時間及日期的校正及報時點設置。二、方案選擇2.1硬件方案實時時鐘方案選擇實時時鐘(RTC: Real Time Clock)是系統(tǒng)的核心,其運行精度直接影響產(chǎn) 品質(zhì)量。實時時鐘的實現(xiàn)有兩種方案可選, 一是利用單片機系統(tǒng)時鐘和中斷完成 時間和日期的計算;二是利用專用時鐘芯片。前者不用附加芯片,系統(tǒng)簡單,但 是累計誤差較大, 只有短時計時才可使用。 長時間計時一般都采用后者。 后者采 用 32.768KHz 晶體振蕩器振作為脈沖源,內(nèi)部的 15 位計數(shù)器剛好產(chǎn)生標準秒脈 沖。該類芯片除時鐘計時外, 還有年月日
3、和星期的計算功能, 并且還可計算閏年。 芯片初始化后可脫離 CPU 自動運行,有些芯片內(nèi)部帶有電池,出廠時芯片即開 始運行。專用時鐘芯片的種類很多,與 CPU 的通信方式有并行,也有串行。常 見的芯片有DALLAS 公司生產(chǎn)的DS1302和DS12887,前者為串行,需要外加 后備電池; 后者為并行, 芯片內(nèi)置鋰電池和晶體振蕩器, 無外加電源的情況下可 運行 10 年。本實驗采用的是第二種方案,而且用的是 DS1302。顯示方案選擇簡單的數(shù)據(jù)顯示常采用液晶顯示或數(shù)碼管顯示。液晶顯示有耗電低、外形美 觀的優(yōu)點, 并且,點陣液晶可顯示較復雜的字符或圖案。 其缺點是通用液晶顯示 器的顯示方案構建不夠
4、靈活, 在較暗的環(huán)境下液晶需要背光, 而且,液晶顯示成 本較高。相對液晶顯示器來講,由于數(shù)碼管種類繁多,其顯示方案構建靈活,成 本較低。由于本身即是發(fā)光體,所以,數(shù)碼管顯示無需額外光源。數(shù)碼管的缺點 是功耗較大,字符較多時,必須交流供電,而且,數(shù)碼管不能顯示復雜字型???慮到本實驗的設計要求,選擇的則是液晶顯示。系統(tǒng)框圖如圖 1 所示:圖1電子萬年歷的系統(tǒng)框圖2.2軟件方案系統(tǒng)軟件可分為鍵盤管理、顯示管理、報時管理和 RTC管理三部分。軟件 可由匯編語言完成,也可由C語言完成。本實驗米用的則是 C語言。三、硬件電路的設計與分析El02S1100iyiT 110532 Hl_33PFbGND1K
5、-oWETGHD111TO:XT AL1卩 0 M DUFO 1MD1XTAL2F0.2/AD2R2TPO.3/AD3PD.4/AD4PD.5/ADJ PO左他D£ PO.7/AD7EA/7PPF3J0 皿 DPSENP3JrTxDALE/PROGP3.2/INT0P1J0/T2P3.3/INT1P3.4/T0P3.5fTlPl.l/T 沁P3.5/MP1.2/ECIP37莎P1.3/CEX0P1.4EX1P2maPl S/CEX2P2.1ZA9Pl.fiEZSP2 2/A10Pl .70X4P23XL11vssP2.4/A12P2.5/A13P2.7/A15PsyC51ED2HBP
6、UI4013.1單片機模塊本實驗CPU采用的是STC89C52,單片機模塊主要包括晶振電路,復位電 路,單片機芯片,P0 口作為輸出連接液晶模塊,P1 口連接實時時鐘部分,P3 口 用來掃描鍵盤使用,如圖2所示。3.2實時時鐘模塊實時時鐘采用DS1302其中Vcci為后備電源,VCc2為主電源。在主電源關閉 的情況下,也能保持時鐘的連續(xù)運行。DS1302由也1或Vcc2兩者中的較大者供電。 當 仏2大于V=d+ 0.2V時,仏2給DS1302供電。當 仏2小于VCc1時,DS1302由 也1 供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把 RST輸入驅(qū)動置高
7、電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字 節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允 許對DS1302進行操作。如果在傳送過程中 RST置為低電平,則會終止此次數(shù)據(jù) 傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在 Vcc>2.5V之前,RST必須保持低電 平。只有在SCLK為低電平時,才能將 RST置為高電平。I/O為串行數(shù)據(jù)輸入輸 出端(雙向),SCLK始終是輸入端。DS1302與 P1 口連接。如圖3所示:GNDBATTERYVCCY232.758k> SCLK
8、:VCCIRST1/0GNDDS1302U2814尹GNDC7GND3.3按鍵模塊11' GND實時系統(tǒng)的按鍵共有4個:確定鍵,加一鍵,減一鍵,返回鍵。與 P2 口連接。 如圖4所示:圖4按鍵模塊原理圖3.4顯示模塊顯示模塊用的是液晶顯示器1602, 1602采用標準的16腳接口。第1腳:VSS 為地電源。第2腳:VDD接5V正電源。第3腳:V0為液晶顯示器對比度調(diào)整端, 接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”, 使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高 電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:RW為讀寫信號
9、線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫 入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當 RS為高 電平RW為低電平時可以寫入數(shù)據(jù)。第 6腳:E端為使能端,當E端由高電平跳 變成低電平時,液晶模塊執(zhí)行命令。第 714腳:D0D7為8位雙向數(shù)據(jù)線。 第1516腳:背光。DS1602的控制端與P3 口連接,而數(shù)據(jù)端與 P0 口連接。如 圖5所示:Pl Header 16GND.| 1vcc|3.5報時模塊1點鐘響1聲,12報時模塊采用的蜂鳴器,具有整點報時的功能。例如: 點鐘響12聲。如圖6所示:3.6測溫模塊測溫模塊主要采用的則是18B20,
10、 18B20是一個三腳的溫度芯片,一腳接電 源,一腳接地,另一個腳是一跟信號線。18B20是一款僅使用一跟信號線與單片 機通信的溫度測量芯片,這跟信號線既要包含時間信息,又要包含數(shù)據(jù)信息,因 此與單片機的硬件連接(物理層)比較簡單。如圖7所示:U?vcc|_OQvcc3DS1S207測溫模塊電路圖四、系統(tǒng)軟件設計4.1主程序設計程序軟件部分流程圖如圖8所示:L開始圖8主程序流程圖4.2時鐘芯片DS1302子程序設計DS1302的控制字節(jié)定義如表1所示??刂谱止?jié)的最高有效位(位 7)必須 是邏輯1,如果為0,則不能把數(shù)按位寫入 DS1302中。位6為0,表示存取日歷 時鐘數(shù)據(jù);為1,表示存取RA
11、M數(shù)據(jù)。位5至位1指示操作單元的地址,最低有交往位(位0)為0, 總是從最低位開始輸出。表示要執(zhí)行寫操作;為1,表示執(zhí)行讀操作,控制字節(jié)表1DS1302的控制字節(jié)定義DS1302共有12個寄存器,其中有7個與日歷、時鐘有關,存放的數(shù)據(jù)為BCD碼,其日歷、時間寄存器及其控制字如表 2所示。表2 DS1302各寄存器及控制字寄存器名命令字取值范圍各位內(nèi)容寫操作讀操作76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN時寄存器84H85H0012 或 002312/24010/APHRHR日寄存器86H87H0128,29,30,310010
12、DATEDATE月寄存器88H89H011200010MMONTH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR(開始 )初始化DS1302時分秒賦值為0DS1302禁止寫入讀取數(shù)據(jù)獲取數(shù)組將數(shù)據(jù)轉換成液晶顯示字符串字符串存入數(shù)組( 返回圖9 DS1302流程圖4.3液晶顯示芯片1602子程序設計1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROIM)經(jīng)存儲了 160個不同的點 陣字符圖形,如表3所示液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊 的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字 符地址,也就是
13、告訴模塊在哪里顯示字符,表 4是DM-162的內(nèi)部顯示地址.表3 CGROM和CGRAM中字符代碼與字符圖形對應關系'高位 低位 '、0000001000110100010101100111101010111100110111101111X X X X0000CGRAM(1)0PP夕aPX X X X0001(2)!1AQaqo了厶aqX X X X0010(3)a2BRbrr39X X X X0011(4)#3CScsj亍£ooX X X X0100(5)$4DTds、工卜VQX X X X0101(6)%5EUeu才n(TuX X X X0110(7)&6
14、FVfv、力二Hp刀X X X X0111(8)>7GWgw7VgnX X X X1000(1)(8HXhxVXX X X X1001(2)9IYiy丿兒yX X X X1010(3)aJZgz工八j千X X X X1011(4)+Kk才口萬X X X X1100(5)7L¥l|uX X X X1101(6)'Mmn口%X X X X1110(7)Nn3、nX X X X1111(8)OoJ、丿V0表4DM-162的內(nèi)部顯示地址12345678910111213141516000102030405060708090A0B0C0D0E0F第一行40414243444546
15、4748494A4B4C4D4E4F第二行初始化LCD設置顯示模式設置輸入模式確定輸入位置字符輸出到液晶返回圖10 1602液晶顯示子程序 流程4.4溫度傳感芯片18B20子程序設計18B20可以測量-55度到125度之間的溫度,測量精度為0.5度。在DS1820中溫度是以1/2度LSB (最低有效位)形式表示時產(chǎn)生以下 9位格式MSB最高位)(最低有效位)LSB1.11001110最高有效(符號)位被復制到存儲器內(nèi)兩字節(jié)的溫度寄存器中較高 MSB的所 有位這種符號擴展產(chǎn)生了如表5所示的16位溫度讀數(shù)。表5溫度/數(shù)據(jù)關系溫度數(shù)字輸出/ (二進制)安息字輸出(十八進制)+ 12500000000
16、 1111101000FAh+2500000000 001100100032h+ 1/200000000 000000010001h00000000 000000000000h11111111 11111111FFFFh11111111 11001110FFCEh11111111 10010010FF92h開始1!初始化1T讀一個字節(jié)寫一個字節(jié)讀取溫度將溫度轉換成液晶字符返回圖1118B20溫度傳感子程序五、調(diào)試及性能分析流程5.1調(diào)試步驟1)硬件調(diào)試主要是檢測硬件電路是否有短路、斷路、虛焊等。具體步驟及測試結果如 下所示:由于在PCB圖設計中按鍵封裝選擇有誤,導致起初電路無任何反應,后經(jīng) 萬
17、用表測試,發(fā)現(xiàn)了錯誤原因,通過割線、飛線加以改正了電路的錯誤連接,實 現(xiàn)了預期功能。2)軟件調(diào)試因為網(wǎng)上相似的萬年歷案例很多,基本相似的也不少,我們小組參照相關程 序進行調(diào)試,基本沒遇到很困難的問題。5.2 性能分析單片機上電復位后,我們已經(jīng)給 1302 賦了初值,按下控制鍵進入時間調(diào)整 狀態(tài),此時在我們調(diào)整哪一位時哪一位就會處于閃爍狀態(tài), 按下加 1 鍵被調(diào)整的 那一位就會加 1,按減一也會減 1,然后我們把時間調(diào)到當時的時間,屏幕也很 穩(wěn)定,溫度也自動的顯示出來, 但經(jīng)過我們仔細的觀察之后, 時鐘走的好像不是 很穩(wěn)定,可能會有一定的誤差, 所以我們的日歷在性能上還有不完善的地方, 在 以后
18、的學習當中,我們將盡力把這些功能也完善好。六、心得體會經(jīng)過這次的課程設計,我們對單片機、 PCB 其相關芯片的資料和運用有了 深刻的了解。同時,理論同實踐相聯(lián)系,使我們對這些知識的應用更加清楚。我們此次的設計產(chǎn)品為電子萬年歷, 基本功能包括時間, 日期,星期和溫度 已經(jīng)實現(xiàn),報時功能因軟件問題,未能實現(xiàn)。在調(diào)試過程中,起初無論如何復位,燒錄的程序都未見任何現(xiàn)象,后來,在 用萬用表測試串口模塊硬件的過程中,發(fā)現(xiàn)按鍵全都短路了,經(jīng)查看 PCB 圖才 發(fā)現(xiàn)按鍵的封裝反了,應該是橫向短路、縱向開關,我們誤把橫向設計成開關、 縱向短路了。經(jīng)過仔細校對、割線、飛線,才開始出現(xiàn)預定的現(xiàn)象。本次課程設計時間不
19、算長, 但是收獲很大, 包括對單片機的認識, 對 AltiumDesigner 6軟件使用的鞏固和加深,對 DS1302的工作原理的了解等。同時也培 養(yǎng)了我們面對問題, 要耐心冷靜處理的態(tài)度。 這次課程設計對我們今后的影響會 非常大。當然,非常感謝老師和同學們在我們遇到問題時的熱情幫助。課程設計是一次很好的理論聯(lián)系實踐的動手機會, 增了我們的動手能力, 使 我們的理論知識得以應用, 今后我們會注重實踐能力的鍛煉, 注重動手能力的培 養(yǎng)。參考文獻1 徐維祥、劉旭敏。 單片微型機原理及應用。 大連理工大學出版社, 19962 楊將新、李華軍、劉東駿。 單片機程序設計及應用。 電子工業(yè)出版社, 20
20、063 劉文濤。 單片機語言 C51 典型應用設計。 人民郵電出版社, 20054 樓然苗、李光飛 . 51 系列單片機設計實例 . 北京航空航天大學出版社, 2003附錄1系統(tǒng)硬件電路圖1£1O P 詁 rff ti 當 S-9 血 5 S 2r/1上3W.-亍乳 sw -定 rKSLr W 二 £ J5Z 二兀 LIT; sw二2 =-.mfr £ =2 二< AVL 一 scns_£ EJV; _.£- -I卜s -£ 耳二£ 呂二匸 wi£ ?二£ §-*£=4fl自2應
21、ursd 護匚一 l_r一 附錄 2 程序清單#include <REG51.H> #include <intrins.h>/#include "LCD1602.h"/#include "DS1302.h"#define uint unsigned int #define uchar unsigned charsbit DS1302_CLK = P1A4;sbitDS1302_IO= P1A3sbitDS1302_RST = P1A2;sbitwireless_1 =P3A0;sbitwireless_2 =P3A1;sbitwi
22、reless_3 =P3A2;sbitwireless_4 =P3A3;sbitACC0 = ACCA0;sbitACC7 = ACCA7;/實時時鐘時鐘線引腳/實時時鐘數(shù)據(jù)線引腳/實時時鐘復位線引腳/秒,分,時到日sbit Set = P2A0;sbit Up =卩2人1;sbit Down = P2A2;sbit out = P2A3;sbit DQ = P1A0;void show_time();/液晶顯示程序* 1602液晶顯示部分子程序 */char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year
23、; 月,年位閃的計數(shù)/模式切換鍵/加法按鈕/減法按鈕/立刻跳出調(diào)整模式按鈕/ 溫度傳送數(shù)據(jù) IO 口char done,count,temp,flag,up_flag,down_flag; uchar temp_value;/溫度值 uchar TempBuffer5,week_value2;/Port Definitions*sbit LcdRssbit LcdRw= P2A5;= P2A6;*sbit LcdEn = P2A7;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0. 數(shù)據(jù)端口sfr DBPort = 0x80; / 內(nèi)*unsigned char LCD_Wai
24、t(void)LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0; return DBPort;寫入命數(shù)據(jù)/ 向 LCD*#define LCD_COMMAND0 / Command#define LCD_DATA#define LCD_CLEAR_SCREEN#define LCD_HOMING1 / Data0x01/ 清屏0x02/ 光標返回原點void LCD_Write(bit style, unsigned char input) LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input; _n
25、op_();/ 注意順序LcdEn=1;_nop_();/ 注意順序LcdEn=0;_nop_();LCD_Wait();*#define LCD_SHOW0x04/顯示開#define LCD_HIDE0x00/ 顯示關#define LCD_CURSOR0x02/ 顯示光標#define LCD_NO_CURSOR0x00/無光標#define LCD_FLASH0x01/光標閃動#define LCD_NO_FLASH0x00/光標不閃動void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|Di
26、splayMode);#define LCD_AC_UP0x020x00/ default#define LCD_AC_DOWN#define LCD_MOVE0x01/ 畫面可平移#define LCD_NO_MOVE0x00/default/設置輸入模式*void 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 點陣 LCD_
27、Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);/ 開啟顯示 , 無光標LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);/清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC 遞增 , 畫面不動 / 液晶字符輸入的位置 * void GotoXY(unsigned char x, unsigned char y) if(y=0) LCD_Write(LCD_COMMAND,0x80|x);if(y=1) LCD_Write(LCD_COMMAND,0x8
28、0|(x-0x40); /將字符輸出到液晶顯示void Print(unsigned char *str)while(*str!='0')LCD_Write(LCD_DATA,*str);str+;/*DS1302時鐘部分子程序 */ typedef struct _SYSTEMTIME unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week;unsigned char Day; unsigned char Month;unsigned char Year; unsig
29、ned char DateString11; unsigned char TimeString9;SYSTEMTIME; /定義的時間類型 SYSTEMTIME CurrentTime;#define AM(X)X#define PM(X)(X+12)#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C/ 轉成 24 小
30、時制/ 時鐘芯片的寄存器位置 ,存放時間void DS1302InputByte(unsigned char d) unsigned char i;ACC = d;for(i=8; i>0; i-)DS1302_IO = ACC0;DS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;/ 實時時鐘寫入一字節(jié) (內(nèi)部函數(shù) )/相當于匯編中的 RRCunsigned char DS1302OutputByte(void) unsigned char i;for(i=8; i>0; i-)/ 實時時鐘讀取一字節(jié) (內(nèi)部函數(shù) )ACC = A
31、CC >>1; ACC7 = DS1302_IO; DS1302_CLK = 1;/相當于匯編中的 RRCDS1302_CLK = 0; return(ACC);void Write1302(unsigned char ucAddr, 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
32、;DS1302_RST = 0;*Time) / 獲取時鐘芯片的時鐘數(shù)據(jù)到自定義的結構unsigned char Read1302(unsigned char ucAddr) /讀取 DS1302 某地址的數(shù)據(jù)unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01);/ 地址,命令ucData = DS1302OutputByte();/ 讀 1Byte 數(shù)據(jù)DS1302_CLK = 1;DS1302_RST = 0;return(ucData);void DS1
33、302_GetTime(SYSTEMTIME型數(shù)組unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadV alue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_
34、HOUR);Time->Hour = (ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F);Read
35、Value = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = (ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F);void DateToStr(SYSTEMTIME *Time)/將時間年 ,月,日,星期數(shù)據(jù)轉換成液晶顯示字符串 ,放到數(shù)組里 DateString if(hide_yea
36、r<2)/ 這里的 if,else 語句都是判斷位閃爍 ,<2 顯示數(shù)據(jù) ,>2就不顯示 ,輸出字符串為 2007/07/22Time->DateString0 = '2'Time->DateString1 = '0'Time->DateString2 = Time->Year/10 + '0'Time->DateString3 = Time->Year%10 + '0'elseTime->DateString0 = ' 'Time->DateStr
37、ing1 = ' 'Time->DateString2 = ' 'Time->DateString3 = ' 'Time->DateString4 = '/'if(hide_month<2)Time->DateString5 = Time->Month/10 + '0'Time->DateString6 = Time->Month%10 + '0'elseTime->DateString5 = ' 'Time->DateSt
38、ring6 = ' 'Time->DateString7 = '/' if(hide_day<2)Time->DateString8 = Time->Day/10 + '0'Time->DateString9 = Time->Day%10 + '0'elseTime->DateString8 = ' 'Time->DateString9 = ' ' if(hide_week<2)week_value0 = Time->Week%10 + &
39、#39;0' /星期的數(shù)據(jù)另外放到 week_value 數(shù)組里 , 跟年 ,月,日的分開存放 ,因為等一下要在最后顯示else week_value0 = ' 'week_value1 = '0'Time->DateString10 = '0' / 字符串末尾加 '0' , 判斷結束字符void TimeToStr(SYSTEMTIME *Time) /將時 ,分 ,秒數(shù)據(jù)轉換成液晶顯示字符放到數(shù)組 TimeString; if(hide_hour<2)Time->TimeString0 = Time-
40、>Hour/10 + '0'Time->TimeString1 = Time->Hour%10 + '0'elseTime->TimeString0 = ' 'Time->TimeString1 = ' 'Time->TimeString2 = ':'if(hide_min<2)Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 +
41、'0'elseTime->TimeString3 = ' 'Time->TimeString4 = ' 'Time->TimeString5 = ':'if(hide_sec<2)Time->TimeString6 = Time->Second/10 + '0'Time->TimeString7 = Time->Second%10 + '0'elseTime->TimeString6 =Time->TimeString7 = Time-&g
42、t;DateString8 = '0'void Initial_DS1302(void)/時鐘芯片初始化unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80)/判斷時鐘芯片是否關閉Write1302(0x8e,0x00); / 寫入允許Write1302(0x8c,0x07); / 以下寫入初始化時間 日期:07/07/25.星期: 3. 時間 : 23:59:55 Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1
43、302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); / 禁止寫入/*ds18b20子程序 */*ds18b20延遲子函數(shù)(晶振 12MHz ) */void delay_18B20(unsigned int i) while(i-); void Init_DS18B20(void)/*ds18b20初始化函數(shù) *unsigned char x=0;DQ = 1; /DQ 復位delay_18B20(8); / 稍做延時DQ = 0; /單片機將 DQ 拉低 delay_18B20(80);
44、 / 精確延時 大于 480usDQ = 1; /拉高總線 delay_18B20(14);x=DQ; / 稍做延時后 如果 x=0 則初始化成功 x=1 則初始化失敗 delay_18B20(20);/*ds18b20讀一個字節(jié) */unsigned char ReadOneChar(void) uchar i=0;uchar dat = 0;for (i=8;i>0;i-)DQ = 0; / 給脈沖信號 dat>>=1;DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; delay_18B20(4); return(dat); void WriteOneC
45、har(uchar dat) * *ds18b20寫一個字節(jié) *unsigned char i=0;for (i=8; i>0; i-)DQ = 0;DQ = dat&0x01; delay_18B20(5);DQ = 1; dat>>=1;void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作 WriteOneChar(0x44); / 啟動溫度轉換delay_18B20(100);
46、/ this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作前兩個就是溫度WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀 9 個寄存器)delay_18B20(100);a=ReadOneChar();/讀取溫度值低位b=ReadOneChar();/ 讀取溫度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4;void temp_to_str()/溫度數(shù)據(jù)轉換成液晶字符顯示TempBuffer0=temp_val
47、ue/10+'0' / 十位 TempBuffer1=temp_value%10+'0' /個位 TempBuffer2=0xdf;/ 溫度符號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+); /* 延時子程序 */ void mdelay(uint delay) uint i;for(;delay>0;delay-) for
48、(i=0;i<62;i+) /1ms 延時 .;void outkey()/ 跳出調(diào)整模式 ,返回默認顯示 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
49、,0x80);/ 禁止寫入done=0;while(out=0);while(wireless_1=1);/void 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)整后更新標志if(temp&0x7f)>0x59)/超過 59 秒,清零temp=0;break;case 2:temp=Read1302(DS1302_MINUTE); / 讀取分數(shù) t
50、emp=temp+1; /分數(shù)加 1 up_flag=1;if(temp>0x59)/超過 59 分 ,清零temp=0;break;temp=Read1302(DS1302_HOUR); / 讀取小時數(shù) temp=temp+1; /小時數(shù)加 1default:break;up_flag=1;if(temp>0x23)/ 超過 23 小時 ,清零temp=0;break;case 4:temp=Read1302(DS1302_WEEK); / 讀取星期數(shù) temp=temp+1; /星期數(shù)加 1 up_flag=1;if(temp>0x7)temp=1;break;case 5:temp=Read1302(DS1302_DAY); / 讀取日數(shù) temp=temp+1; /日數(shù)加 1up_flag=1;if(temp>0x31)temp=1;break;case 6:t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城鄉(xiāng)污水處理和管網(wǎng)建設工程項目可行性研究報告寫作模板-申批備案
- 2025年江西陶瓷工藝美術職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年昆明鐵道職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年揭陽職業(yè)技術學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年氫能源行業(yè)發(fā)展動態(tài)與前景分析
- 展覽展示服務合同模板
- 幼兒園支教工作活動方案總結四篇
- 計件工資勞動合同范文
- 酒店轉讓簡單合同范本
- 場攤位的租賃合同年
- 2025年度高端商務車輛聘用司機勞動合同模板(專業(yè)版)4篇
- GB/T 45107-2024表土剝離及其再利用技術要求
- 2025長江航道工程局招聘101人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年黑龍江哈爾濱市面向社會招聘社區(qū)工作者1598人歷年高頻重點提升(共500題)附帶答案詳解
- 《妊娠期惡心嘔吐及妊娠劇吐管理指南(2024年)》解讀
- 《黑神話:悟空》跨文化傳播策略與路徑研究
- 《古希臘文明》課件
- 居家養(yǎng)老上門服務投標文件
- 長沙市公安局交通警察支隊招聘普通雇員筆試真題2023
- 2025年高考語文作文滿分范文6篇
- 零售業(yè)連鎖加盟合同
評論
0/150
提交評論