版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于單片機的多功能電子時鐘設計姓名:江偉學號:0909054108 專業(yè):電子信息工程目目 錄錄1 使用硬件模塊使用硬件模塊介介紹紹.11.1 STC89C52 單片機最小系統(tǒng)模塊.21.212864 液晶顯示模塊.31.3 DS18B20 的溫度傳感器的測溫模塊 .51.4 DS1302 時鐘芯片模塊.71.5. 定時報警模塊 .91.6. NE555 背光模塊.101.7 電源與按鍵模塊.102 程序控制與實現(xiàn)程序控制與實現(xiàn).1111.使用硬件模塊介紹使用硬件模塊介紹該電子時鐘是基于 AT89C52 單片機設計的,具有定時,鬧鈴,顯示實時溫度,顯示日歷,節(jié)日信息,由于程序較大,所以選擇了
2、STC89C52 單片機,他可以提供 8KB 的 FlashROM,設計可以分為以下七個模塊單片機的最小系統(tǒng)模塊。12864 液晶顯示模塊DS18B20 的溫度傳感器的測溫模塊。DS1302 時鐘芯片模塊。定時報警模塊。NE555 背光模塊。電源與按鍵模塊總電路及實物如下總電路及實物如下:XTAL232.768K HZC 1130C 1030GNDGNDVC C3VP3.2P3.3P3.412345678P5Header 4X2A12P6Header 2GND10KR 6R es S emi10KR 7R es S emi10KR 8R es S emiVC C12P10Header 2123
3、45678P4Header 4X2VC C220KR 3R es S emiC 9103+ C 433uFQ19013VC CGNDGNDLEDS 0S W -PBGNDR 101KR S TAX1AX2VC CGNDP3.2P3.4P1.4P3.3P2.0123456789P3R 10*8KVC CVC CGNDVC CP1.1P1.2P1.0P1.0P1.1P1.2GNDVCCVCCVCC1234567891011121314151617181920P1Header 20LED12P8Header 2VC C1KR 2R PotVIN1VOUT3GND2ZU178L05C 6103C 71
4、03+ C 810UF /6.3V+ C 510UF /6.3VGNDVC C12P2Header 2HVC C 9+Q22N3906LS 1B ellP2.0VC CGND1KR 5R es S emi器器器XTAL112MC 330C 130GNDAX1AX2+ C 210UF /6.3VR 110KR S TGNDVC CVC C3DQ2GND11DS 18B 20VC CGNDP1.410KR 4R es S emi電源DS130218B20其他NE555背光燈AT89S52EA/VPP31XTAL119XTAL218R S T9P3.7(R D)17P3.6(W R )16P3.2(
5、INT0)12P3.3(INT1)13P3.4(T0)14P3.5(T1)15P1.0(T2)1P1.1(T2EX)2P1.23P1.34P1.45P1.56P1.67P1.78(AD0)P0.039(AD1)P0.138(AD2)P0.237(AD3)P0.336(AD4)P0.435(AD5)P0.534(AD6)P0.633(AD7)P0.732(A8)P2.021(A9)P2.122(A10)P2.223(A11)P2.324(A12)P2.425(A13)P2.526(A14)P2.627(A15)P2.728PS EN29ALE/PR OG30(TXD)P3.111(R XD)P3
6、.010GND20VC C40U1AT89C 52S 1S W -PBS 2S W -PBS 3S W -PBS 4S W -PBGNDP2.1P2.2P2.3P2.4P2.1P2.2P2.3P2.4S 5S W -PBP2.5P2.521.1 STC89C52 單片機最小系統(tǒng)模塊單片機由時鐘電路和復位電路組成1.時鐘電路STC89C52 內(nèi)部有一個用于構成振蕩器的高增益反相放大器,引腳 RXD 和 TXD 分別是此放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生2.復位及復位電路(1)復位操作復位是單片機的初始化操作。其主要功能是把 PC 初始化為 0000H,使單片機從 000
7、0H 單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復位鍵重新啟動。2)復位信號及其產(chǎn)生RST 引腳是復位信號的輸入端。復位信號是高電平有效,其有效時間應持續(xù) 24 個振蕩周期(即二個機器周期)以上。若使用頗率為 6MHz 的晶振,則復位信號持續(xù)時間應超過 4us才能完成復位操作。二.STC89C52 單片機具體功能如下 主電源引腳(2 根)VCC(Pin40):電源輸入,接5V 電源GND(Pin20):接地線外接晶振引腳(2 根)XTAL1(Pin19):片內(nèi)振蕩電路的輸入端XTAL2(Pin20):片內(nèi)振蕩電路的輸出端
8、控制引腳(4 根)RST/VPP(Pin9):復位引腳,引腳上出現(xiàn) 2 個機器周期的高電平將使單片機復位。ALE/PROG(Pin30):地址鎖存允許信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令??删幊梯斎?輸出引腳(32 根)STC89C52 單片機有 4 組 8 位的可編程 I/O 口,分別位 P0、P1、P2、P3 口,每個口有 8 位(8 根引腳),共 32 根。PO 口(Pin39Pin32):8 位雙向 I/O 口線,名稱為 P0.0P0.7P1 口(Pin1
9、Pin8):8 位準雙向 I/O 口線,名稱為 P1.0P1.7 P2 口(Pin21Pin28):8 位準雙向 I/O 口線,名稱為 P2.0P2.7P3 口(Pin10Pin17):8 位準雙向 I/O 口線,名稱為 P3.0P3.7電路圖如下電路圖如下31P1.02P1.13P1.24P1.35P1.46P1.57P1.68P1.79RST10P3.011P3.112P3.213P3.314P3.415P3.516P3.617P3.718X T AL219X T AL120V ss21P2.022P2.123P2.224P2.325P2.426P2.527P2.628P2.729PSEN
10、30ALE31V pp32P0.733P0.634P0.535P0.436P0.337P0.238P0.139P0.040V cc AT 89S52R?30PF11.0592M HZ 30PF30PF30PFV ccV cc1.21.2 1286412864 液晶顯示模塊液晶顯示模塊液晶顯示的分類方法有很多種,通常可按其顯示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。在本萬年歷當中 12864 液晶顯示顯示當前的實時時間和溫度及重要的陰陽歷節(jié)日等功能。12864 液晶顯示具有如下的特性:提供8 位,4 位并行接口及串行接口可選并行接口適配M6800 時序自
11、動電源啟動復位功能內(nèi)部自建振蕩源6416 位字符顯示RAM(DDRAM 最多16 字符4 行,LCD 顯示范圍162 行)(改為半角輸入)2M 位中文字型ROM(CGROM),總共提供8192 個中文字型(1616 點陣)16K 位半寬字型ROM(HCGROM),總共提供126 個西文字型(168 點陣)6416 位字符產(chǎn)生RAM(CGRAM)1516 位總共240 點的ICON RAM(ICONRAM)其與單片機的連接電路如圖 1.2.1 所示:4圖 1.2.1 12864 與單片機的接線圖液晶顯示 12864 的引腳功能如表 1.2.2 所示。表 1.2.2 液晶顯示 12864 的引腳功
12、能引腳號引腳名稱方向功能說明1VSS-模塊的電池地2VDD-模塊的電源正端3VO-LCD 驅動電壓輸入端4RS(CS)H/L并行的指令數(shù)據(jù)選擇信號:串行的片選信號5R/W(SID)H/L并行的讀寫選擇信號:串行的數(shù)據(jù)口6E(CLK)H/L并行的使能信號:串行的同步時鐘7DB0H/L數(shù)據(jù) 08DB1H/L數(shù)據(jù) 19DB2H/L數(shù)據(jù) 210DB3H/L數(shù)據(jù) 311DB4H/L數(shù)據(jù) 412DB5H/L數(shù)據(jù) 513DB6H/L數(shù)據(jù) 6514DB7H/L數(shù)據(jù) 715PSBH/L并串行接口選擇:H-并行:L-串行16NC空腳17RSTH/L復位 低電平有效18NC空腳19LED_A-背光電源正極20LED
13、_K-背光電源負極12864LCD 的指令系統(tǒng)及時序的指令系統(tǒng)及時序 該類液晶顯示模塊(即 KS0108B 及其兼容控制驅動器)的指令系統(tǒng)比較簡單,總共只有七種。其指令表如表 2 所示:控制信號控制代碼指令名稱R/WRSDB7DB6DB5DB4DB3DB2DB1DB0顯示開關0000111111/0顯示起始行設置0011XXXXXX頁設置0010111XXX列地址設置0001XXXXXX讀狀態(tài)10BUSY0ON/OFF RST0000寫數(shù)據(jù)01寫數(shù)據(jù)讀數(shù)據(jù)11讀數(shù)據(jù)1.31.3 DS18B20DS18B20 的溫度傳感器的測溫模塊的溫度傳感器的測溫模塊V ccGNDDQDS18B2010KP1
14、.4V cc圖 1.3 測溫電路圖6溫度傳感器的種類眾多,DALLAS 公司生產(chǎn)的 DS18B20 溫度傳感器適合在應用與高精度、高可靠性的場合。DS18B20 的主要特點:超小的體積,超低的硬件開銷,抗干擾能力強,精度高。DS18B20 的主要特征:全數(shù)字溫度轉換及輸出 先進的單總線數(shù)據(jù)通信最高 12 位分辨率,精度可達土 0.5 攝氏度 12 位分辨率時的最大工作周期為 750 毫秒 可選擇寄生工作方式 檢測溫度范圍為55C +125C (67F +257F)內(nèi)置 EEPROM,限溫報警功能 64 位光刻 ROM,內(nèi)置產(chǎn)品序列號,方便多機掛接 多樣封裝形式,適應不同硬件系統(tǒng) DS18B20
15、 工作原理及應用:工作原理及應用:DS18B20 的溫度檢測與數(shù)字數(shù)據(jù)輸出全集成于一個芯片之上,從而抗干擾力更強。其一個工作周期可分為兩個部分,即溫度檢測和數(shù)據(jù)處理。DS18B20 共有三種形態(tài)的存儲器資源,分別是:ROM 只讀存儲器:用于存放 DS18B20 的 ID 編碼,其前 8 位是單線系列編碼(DS18B20 的編碼是 19H) ,后面 48 位是芯片唯一的序列號,最后 8 位是以上 56 位的CRC 碼(冗余校驗) 。數(shù)據(jù)在出產(chǎn)時設置不由用戶更改。DS18B20 共 64 位 ROM。RAM 數(shù)據(jù)暫存器:用于內(nèi)部計算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20 共 9 個字節(jié) RA
16、M,每個字節(jié)為 8 位。第 1、2 個字節(jié)是溫度轉換后的數(shù)據(jù)值信息,第 3、4 個字節(jié)是用戶 EEPROM(常用于溫度報警值儲存)的鏡像。在上電復位時其值將被刷新。第 5 個字節(jié)則是用戶第 3 個 EEPROM 的鏡像。第 6、7、8 個字節(jié)為計數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內(nèi)部溫度轉換、計算的暫存單元。第 9 個字節(jié)為前 8 個字節(jié)的 CRC 碼。EEPROM 非易失性記憶體,用于存放長期需要保存的數(shù)據(jù),上下限溫度報警值和校驗數(shù)據(jù),DS18B20 共 3 位 EEPROM,并在 RAM 都存在鏡像,以方便用戶操作。 DS18B20 芯片與單片機的接口:DS18B
17、20 只需要接到控制器(單片機)的一個 I/O口上,由于單總線為開漏,所以需要外接一個 4.7K 的上拉電阻。如要采用寄生工作方式,只要將 VDD 電源引腳與單總線并聯(lián)即可。但在程序設計中,寄生工作方式將會對總線的狀態(tài)有一些特殊的要求。微控制器控制 DS18B20 完成溫度轉換必須經(jīng)過三個步驟:每一次讀寫之前要對DS18B20 進行復位,復位成功后發(fā)送一條 ROM 指令,最后發(fā)送 RAM 指令,這樣才能對7讀數(shù)據(jù)寫 060 微秒15 微秒45 微秒15 微秒45 微秒15 微秒DS18B20 寫時間間隙寫 1DS18B20 進行預定的操作。復位要求微控制器將數(shù)據(jù)線下拉 500 微秒,然后釋放,
18、DS18B20 收到信號后等待 1660 微秒左右,然后發(fā)出 60240 微秒的存在低脈沖,微控制器收到此信號表示復位成功,如果沒有收到復位成功信號,則表示 DS18B20 出現(xiàn)問題,可以用來作為系統(tǒng)設計時的故障提示、判斷信號。DS18B20 的單總線數(shù)據(jù)傳輸特點,決定了它嚴格的控制時序。微控制器寫 1 時,數(shù)據(jù)線必須先被拉至低電平,然后就被釋放,使數(shù)據(jù)線在寫時間片開始之后的 15 微秒之內(nèi)拉至高電平。微控制器寫 0 時,數(shù)據(jù)線必須先被拉至低電平且至少保持邏輯低電平 60 微秒。微控制器把數(shù)據(jù)線從高電平拉至低電平時,產(chǎn)生讀時間片,數(shù)據(jù)線必須保持在邏輯低電平至少 1微秒;來自 DS18B20 的
19、輸出數(shù)據(jù)在讀時間片下降沿之后 15 微秒有效。因此,為了讀取從時間片開始算起 15 微秒的數(shù)據(jù)線狀態(tài),微控制器必須停止把數(shù)據(jù)線驅動至低電平。在讀時間片結束時,數(shù)據(jù)線經(jīng)過外部的上拉電阻拉回至高電平。所有讀時間片的最短持續(xù)期限為60 微秒,各個讀時間片之間必須有最短為 1 微秒的恢復時間。其讀寫時序如圖所示1.41.4 DS1302DS1302 時鐘芯片模塊時鐘芯片模塊12P10HEADER 212P6HEADER 232.768KHZXTAL2C1030uFC1130uFR610KR710KR810KVCCVCC3V12345678P5HEADER4*2P3.4P3.3P3.21.4.1 DS1
20、302 電路原理圖8(1)DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片,它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償功能,工作電壓寬達2.55.5V。時鐘可工作在24小時格式或12小時(AM/PM)格式。 DS1302與單片機的接口使用同步串行通信,僅用3條線與之相連接??刹捎靡淮蝹魉鸵粋€字節(jié)或突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源后背電源雙電源引腳。如圖1.4.2所示。引腳號引腳名稱功能1VCC
21、2主電源2、3X1、X2振蕩源,外接 32768Hz 晶振4GND地線5RST復位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行時鐘輸入端8VCC1后備電源9圖圖 1.4.21.4.2 DS1302DS1302 引腳功能表引腳功能表(2)DS1302 共有 12 個寄存器,其中有 7 個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD 碼形式。其日歷、時間寄存器及其控制字見下表。此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與 RAM相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器的內(nèi)容。 DS1302 與 RAM 相關的寄存器分為
22、兩類,一類是單個 RAM 單元,共 31 個,每個單元組態(tài)為一個 8 位的字節(jié),其命令控制字為 C0H-FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的 RAM 寄存器,此方式下可一次性讀寫所有的 RAM 的 31 個字節(jié),命令控制字為 FEH(寫)、FFH(讀)。命令字各位內(nèi)容寄存器名寫操作讀操作取值范圍76543210秒寄存器80H81H00-59CH10SECSEC分寄存器82H83H00-59010MINMIN時寄存器84H85H01-12 或 00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01
23、-1200010MMONTH周寄存器8AH8BH01-0700000DAY年寄存器8CH8DH00-9910YEARYEAR DS1302 的日歷、時鐘寄存器及其控制字1.5.1.5. 定時報警模塊定時報警模塊LS1BELLQ2PNP1KVCCR5P2.0 1.5 報警電路圖10因為單片機的 I/O 的驅動能力不足以讓蜂鳴器發(fā)聲,所以外加三極管來放大電路驅動蜂鳴器,當 P2.0 管腳輸出高電平時,發(fā)射結導通,集電結反偏,三極管處于放大狀態(tài),所以可以提供較大的電流來驅動蜂鳴器報警1.6.1.6. NE555NE555 背光模塊背光模塊R9220KR101KS0SW-PBC433uFQ1NPNC1
24、03CAP12345678P4HEADER 4X2LEDVCCVCC1.6.1 NE555 背光電路此電路是由 555 構成的單穩(wěn)態(tài)電路,當按鍵 S0 按下了,電容將會放電,被單穩(wěn)態(tài)電路觸發(fā)整形,形成一定寬度的脈沖,從 5 腳輸出,使得三極管導通一段時間,從而使得LED 導通一段時間,從而實現(xiàn),在使用時可以看到屏幕,不使用時,屏幕處于省電的狀態(tài),節(jié)約了能量1.71.7 電源與按鍵模塊電源與按鍵模塊. .S1SW-PBS2SW-PBS3SW-PBS4SW-PBS5SW-PBP2.1P2.2P2.3P2.4P2.512P2HEADER123VinVoutGNDV cc111.6.2 電源與按鍵模塊
25、按鍵是用來設置日期,時間,其中各部分的功能分別為 P21:退出設置鍵,顯示版本信息鍵 P22:上調(diào)鍵 P23:設置鍵 P24:減,下調(diào)鍵 P25:日程提醒電源是為各個元器件提供能量的,電路所采用的單電源供電,7805 輸出的是一個壓值大小為 5V 的直流電壓。2 程序控制與實現(xiàn)程序控制與實現(xiàn)/頭文件#include #include #include/*/燈與揚聲器定義sbit beep = P20;/揚聲器/*/溫度傳感器引腳定義sbit DQ = P1 4 ;/ds18B20*/*/鍵盤引腳定義sbit KEY_1 = P21; /退出設置鍵,顯示版本信息鍵sbit KEY_2 = P22
26、; /上調(diào)鍵sbit KEY_3 = P23; /設置鍵sbit KEY_4 = P24; /減,下調(diào)鍵sbit KEY_7 = P25; /日程提醒 /*/LED 接口定義sbit RS = P12;/模式位,為 0 輸入指令,為 1 輸入數(shù)據(jù)sbit RW = P11;/讀寫位,為 0 讀,為 1 寫sbit E = P10;/使能位#define Lcd_Bus P0 /數(shù)據(jù)總線/sbit wela = P26;/sbit dula = P27;/*/定義 DS1302 時鐘接口sbit clock_clk = P3 2;/ds1302_clk(時鐘線)sbit clock_dat =
27、P3 3;/ds1302_dat(數(shù)據(jù)線)sbit clock_Rst = P3 4;/ds1302_Rst(復位線)/*/定義累加器 A 中的各位sbit a0 = ACC 0;sbit a1 = ACC 1;12sbit a2 = ACC 2;sbit a3 = ACC 3;sbit a4 = ACC 4;sbit a5 = ACC 5;sbit a6 = ACC 6;sbit a7 = ACC 7;/*/定義全局變量Unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moo
28、ntemp2,nf,ns;/定義時間映射全局變量(專用寄存器)bit w = 0; /調(diào)時標志位,=0 時為走時狀態(tài),=1 時為調(diào)時狀態(tài)static unsigned char menu = 0;/定義靜態(tài)小時更新用數(shù)據(jù)變量static unsigned char keys = 0;/定義靜態(tài)小時更新用數(shù)據(jù)變量static unsigned char timecount = 0;/定義靜態(tài)軟件計數(shù)器變量signed char address,item,max,mini,calam,dalam,aalam,balam,ealam,falam,galam,halam;unsigned char f
29、lag=0,flag1=0; unsigned char richeng=0; int kk=0;/*/void DelayM(unsigned int a)/延時函數(shù) 1MS/次 unsigned char i; while( -a != 0) for(i = 0; i 125; i+); /一個 ; 表示空語句,CPU 空轉。 /i 從 0 加到 125,CPU 大概就耗時 1 毫秒/*void DelayF(unsigned char b) unsigned int j,k; for(j=b;j=0;j-) for(k=3000;k0) write_data(*s); s+; /*/vo
30、id lcm_w_test(bit i,unsigned char word)/寫指令或數(shù)據(jù) if(i = 0) write_com(word);/寫指令或數(shù)據(jù)(0,指令) else write_data(word);/寫指令或數(shù)據(jù)(1,數(shù)據(jù)) /*/void lcm_clr(void)/清屏函數(shù) lcm_w_test(0,0 x01); /*/14void lcm_clr2(void)/清屏上面 3 行(用空格填滿要清顯示的地方,因為液晶屏是靜態(tài)顯示的,所以這辦法常用) lcm_w_test(0,0 x80);/第一行 lcm_w_word( ); /標尺(1234567812345678應
31、該能夠顯示滿一行) lcm_w_test(0,0 x90);/第二行 lcm_w_word( ); /標尺(1234567812345678應該能夠顯示滿一行) lcm_w_test(0,0 x88);/第一行 lcm_w_word( ); /標尺(1234567812345678應該能夠顯示滿一行) /*/DS18B20 溫度傳感器驅動(顯示 0 至 60 度,小數(shù)點后顯示一位)/*/void Delay(int num)/延時函數(shù) while(num-) ; /*/void Init_DS18B20(void)/初始化 ds1820 unsigned char x=0; DQ = 1; /
32、DQ 復位 Delay(8); /稍做延時 DQ = 0; /單片機將 DQ 拉低 Delay(80); /精確延時 大于 480us DQ = 1; /拉高總線 Delay(14); x=DQ; /稍做延時后 如果 x=0 則初始化成功 x=1 則初始化失敗 Delay(20);/*/unsigned char ReadOneChar(void)/讀一個字節(jié) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; De
33、lay(4); return(dat);15/*/void WriteOneChar(unsigned char dat)/寫一個字節(jié) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; Delay(5); DQ = 1; dat=1; /*/unsigned int ReadTemperature(void)/讀取溫度,溫度值返回到此函數(shù)中,供調(diào)用 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); Writ
34、eOneChar(0 xCC); / 跳過讀序號列號的操作 WriteOneChar(0 x44); / 啟動溫度轉換 Init_DS18B20(); WriteOneChar(0 xCC); /跳過讀序號列號的操作 WriteOneChar(0 xBE); /讀取溫度寄存器 a=ReadOneChar(); /讀低 8 位 b=ReadOneChar(); /讀高 8 位 t=b; t=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; /放大 10 倍輸出并四舍五入 return(t);/t 內(nèi)的溫度值,返回到子函數(shù)中,要將溫度傳輸?shù)?temp 變量,應用 temp=
35、ReabTemperature()/*/后面會出現(xiàn)的函數(shù)聲明(當各函數(shù)的排列適當時可不用聲明,加入函數(shù)聲明就不用管各個子函數(shù)出現(xiàn)的位置先后了?)void lcm_w_ss(void);/向液晶 LCM 中寫秒數(shù)據(jù)void lcm_w_mm(void);/向液晶 LCM 中寫分數(shù)據(jù)void lcm_w_hh(void);/向液晶 LCM 中寫小時數(shù)據(jù)void lcm_w_dd(void);/寫日數(shù)據(jù)void lcm_w_mo(void);/寫月數(shù)據(jù)void lcm_w_yy(void);/寫年數(shù)據(jù)void lcm_w_xq(void);/星期處理并送入 LCM 的指定區(qū)域unsigned cha
36、r clock_in(void);/DS1302 逐位寫入字節(jié)(底層協(xié)議)16void clock_out(unsigned char dd);/1302 驅動程序逐位讀出字節(jié)(底層協(xié)議?void Init_1302(void);/-設置 1302 的初始時間(2007 年 1 月 1 日 00 時 00 分 00 秒星期一)unsigned char read_clock(unsigned char ord);/DS1302 讀數(shù)據(jù)(底層協(xié)議)void read_clockS(void);void Set_time(unsigned char sel);/根據(jù)選擇調(diào)整的相應項目 sel 加
37、1 并寫入 DS1302void write_clock(unsigned char ord, unsigned char dd);/DS1302 寫數(shù)據(jù)(底層協(xié)議)void updata (void);void lcm_w_nl(void);/顯示農(nóng)歷子函數(shù)void Conversion(bit c,unsigned char year,unsigned char month,unsigned char day); /農(nóng)歷年月日計算子函數(shù)void Conver_week(bit c,unsigned char year,unsigned char month,unsigned char da
38、y);/星期計算子函數(shù)void ds_w(void); void alam_w1(void) ;/!1 void alam_w2(void);void lcm_w_ns2(); void lcm_w_nf2(); void naozhong(); void lcm_w_naozhong(); / void DelayF () ;/*/設置 1302 的初始時間(自動初始化)void Init_1302(void)/-設置 1302 的初始時間(2007 年 1 月 1 日 00 時 00 分 00 秒星期一) unsigned char f; if(read_clock(0 xc1) != 0
39、 xaa) write_clock(0 x8e,0 x00);/允許寫操作 write_clock(0 x8c,0 x07);/年 write_clock(0 x8a,0 x01);/星期 write_clock(0 x88,0 x01);/月 write_clock(0 x86,0 x01);/日 write_clock(0 x84,0 x00);/小時 write_clock(0 x82,0 x00);/分鐘 write_clock(0 x80,0 x00);/秒 write_clock(0 x90,0 xa5);/充電 write_clock(0 xc0,0 xaa);/寫入初始化標志
40、RAM(第 00 個 RAM 位置) for(f=0;f0;a-)/第一個聲音的長度 beep = beep;/取反揚聲器驅動口,以產(chǎn)生音頻 Delay(100);/音調(diào)設置延時 for(a=100;a0;a-)/同上 beep = beep; Delay(80);/ for(a=100;a0;a-)/同上 beep = beep; Delay(30);/ beep = 1;/音樂結束后揚聲器輸出 1 關閉,因為后端用 9012 驅動,所以控制輸出 0 時蜂鳴響 /*/void Beep_set(void)/BELL -揚聲器-確定設置 unsigned char a;/定義變量用于發(fā)聲的長度
41、設置 for(a=50;a0;a-)/第一個聲音的長度 beep = beep;/取反揚聲器驅動口,以產(chǎn)生音頻 Delay(100);/音調(diào)設置延時 for(a=100;a0;a-)/同上 beep = beep; Delay(50);/ for(a=50;a0;a-)/同上 beep = beep; Delay(100);/ beep = 1;/音樂結束后揚聲器輸出 1 關閉,因為后端用 9012 反相驅動,所以控制輸出 0 時蜂鳴響/*/void Beep_key(void)/-揚聲器-按鍵音 unsigned char a;/定義變量用于發(fā)聲的長度設置 for(a=100;a0;a-)/
42、聲音的長度 beep = beep;19 Delay(50);/音調(diào)設置延時 beep = 1;/音樂結束后揚聲器拉高關閉/*/農(nóng)歷節(jié)日數(shù)據(jù)庫表,農(nóng)歷紀念日數(shù)據(jù)表,加上公歷的重大節(jié)日/*/void jie_nl(void) / dd = read_clock(0 x87);/日 mo = read_clock(0 x89);/月 yy = read_clock(0 x8d);/年 Conversion(0,yy,mo,dd);/調(diào)用公歷轉農(nóng)歷子函數(shù) /調(diào)用函數(shù)后,原有數(shù)據(jù)不變,讀 c_moon 農(nóng)歷世紀,year_moon 農(nóng)歷年,month_moon,day_moon 得出陰歷BCD 數(shù)據(jù)
43、lcm_w_test(0,0 x98);/在屏幕第四行顯示節(jié)日(下面的注釋行用坐標尺,不要改動)/農(nóng)歷節(jié)日:/ -|-|標尺,漢字不要對在空隙上 if ( richeng = 1 ) lcm_w_word(今天有重要事件!); if ( richeng = 2 ) lcm_w_word(有會議,別忘!); if ( richeng = 3 ) lcm_w_word(有約會,重要!); if ( richeng = 4 ) lcm_w_word(回電話,記得!); if ( richeng = 5 ) lcm_w_word(紀念日,慶祝!); if(richeng = 0) if ( month
44、_moon = 0 x12 & day_moon = 0 x29 ) lcm_w_word( 明天是春節(jié)!); if ( month_moon = 0 x12 & day_moon = 0 x30 ) lcm_w_word( 今天是春節(jié)!); if ( month_moon = 0 x01 & day_moon = 0 x01 ) lcm_w_word(大年初一拜年啦 ); if ( month_moon = 0 x01 & day_moon = 0 x14 ) lcm_w_word( 明天元宵節(jié)! ); if ( month_moon = 0 x01 & day_moon = 0 x15 )
45、 lcm_w_word( 元宵節(jié)到啦! ); if ( month_moon = 0 x05 & day_moon = 0 x04 ) lcm_w_word( 明天端午 ); if ( month_moon = 0 x05 & day_moon = 0 x05 ) lcm_w_word( 今天端午 ); / if ( month_moon = 0 x07 & day_moon = 0 x06 ) lcm_w_word( 明天七月七啦 ); if ( month_moon = 0 x07 & day_moon = 0 x07 ) lcm_w_word(牛郎織女鵲橋相會); if ( month_
46、moon = 0 x08 & day_moon = 0 x14 ) lcm_w_word( 明天仲秋節(jié) ); if ( month_moon = 0 x08 & day_moon = 0 x15 ) lcm_w_word( 仲秋佳節(jié) ); if ( month_moon = 0 x09 & day_moon = 0 x08 ) lcm_w_word( 明天重陽 ); if ( month_moon = 0 x09 & day_moon = 0 x09 ) lcm_w_word( 今天重陽節(jié) ); if ( month_moon = 0 x12 & day_moon = 0 x07 ) lcm_
47、w_word( 明天臘八 ); if ( month_moon = 0 x12 & day_moon = 0 x08 ) lcm_w_word( 今天臘八 ); if ( month_moon = 0 x12 & day_moon = 0 x22 ) lcm_w_word( 明日辭灶 ); if ( month_moon = 0 x12 & day_moon = 0 x23 ) lcm_w_word( 今日辭灶 ); /農(nóng)歷生日:20 if ( month_moon = 0 x07 & day_moon = 0 x05 ) lcm_w_word(明天是我的生日!); if ( month_mo
48、on = 0 x07 & day_moon = 0 x06 ) lcm_w_word(今天是我的生日啊); if ( month_moon = 0 x02 & day_moon = 0 x21 ) lcm_w_word(明天是女友的生日); if ( month_moon = 0 x02 & day_moon = 0 x22 ) lcm_w_word(今天是女友生日!); void jie_gl(void) / dd = read_clock(0 x87);/日 mo = read_clock(0 x89);/月 yy = read_clock(0 x8d);/年 /Conversion(0,
49、yy,mo,dd);/調(diào)用公歷轉農(nóng)歷子函數(shù) /調(diào)用函數(shù)后,原有數(shù)據(jù)不變,讀 c_moon 農(nóng)歷世紀,year_moon 農(nóng)歷年,month_moon,day_moon 得出陰歷BCD 數(shù)據(jù) lcm_w_test(0,0 x98);/在屏幕第四行顯示節(jié)日(下面的注釋行用坐標尺,不要改動)/下面是公歷的,有些沒意思的,就不顯示了 if ( richeng = 1 ) lcm_w_word(今天有重要事件!); if(richeng = 0) if ( mo = 0 x01 & dd = 0 x01 ) lcm_w_word( Happy new year!); / ( mo = 0 x01 & d
50、d = 0 x22 ) lcm_w_word( 節(jié)日實驗 ); /2010-01-22 是農(nóng)歷臘八節(jié),用于實驗輪流顯示 if ( mo = 0 x02 & dd = 0 x13 ) lcm_w_word( 明天情人節(jié)了 ); if ( mo = 0 x02 & dd = 0 x14 ) lcm_w_word( 今天是情人節(jié) ); if ( mo = 0 x03 & dd = 0 x08 ) lcm_w_word( 3.8 婦女節(jié) ); if ( mo = 0 x03 & dd = 0 x11 ) lcm_w_word( 明天是植樹節(jié) ); if ( mo = 0 x03 & dd = 0 x1
51、2 ) lcm_w_word( 植樹節(jié) ); if ( mo = 0 x03 & dd = 0 x14 ) lcm_w_word(明天消費者權益日); if ( mo = 0 x03 & dd = 0 x15 ) lcm_w_word( 消費者權益日 ); if ( mo = 0 x04 & dd = 0 x01 ) lcm_w_word(愚人節(jié) 小心上當); /if ( mo = 0 x04 & dd = 0 x07 ) lcm_w_word( 世界衛(wèi)生日 ); if ( mo = 0 x04 & dd = 0 x08 ) lcm_w_word( 復活節(jié) ); /if ( mo = 0 x0
52、4 & dd = 0 x13 ) lcm_w_word( 黑色星期五 ); if ( mo = 0 x05 & dd = 0 x01 ) lcm_w_word( 勞動節(jié) 放假 ); /5 if ( mo = 0 x05 & dd = 0 x04 ) lcm_w_word( 青年節(jié) ); if ( mo = 0 x05 & dd = 0 x08 ) lcm_w_word( 世界紅十字日 ); if ( mo = 0 x05 & dd = 0 x12 ) lcm_w_word( 國際護士節(jié) ); if ( mo = 0 x05 & dd = 0 x05 ) lcm_w_word(近日注意母親節(jié) )
53、; if ( mo = 0 x05 & dd = 0 x06 ) lcm_w_word(近日注意母親節(jié) ); /if ( mo = 0 x05 & dd = 0 x15 ) lcm_w_word( 國際家庭日 ); if ( mo = 0 x05 & dd = 0 x31 ) lcm_w_word( 明天兒童節(jié) ); if ( mo = 0 x06 & dd = 0 x01 ) lcm_w_word(祝我兒童節(jié)快樂! ); /6 if ( mo = 0 x06 & dd = 0 x05 ) lcm_w_word( 世界環(huán)境日 ); /if ( mo = 0 x06 & dd = 0 x26 )
54、 lcm_w_word( 國際禁毒日 ); /if ( mo = 0 x06 & dd = 0 x06 ) lcm_w_word( 全國愛眼日 ); 21 if ( mo = 0 x06 & dd = 0 x13 ) lcm_w_word(近日注意父親節(jié) ); if ( mo = 0 x06 & dd = 0 x15 ) lcm_w_word(近日注意父親節(jié) ); if ( mo = 0 x07 & dd = 0 x01 ) lcm_w_word(香港回歸記念日 ); /7 /if ( mo = 0 x07 & dd = 0 x07 ) lcm_w_word(抗日戰(zhàn)爭記念日 ); /if (
55、mo = 0 x07 & dd = 0 x11 ) lcm_w_word( 世界人口日 ); if ( mo = 0 x08 & dd = 0 x01 ) lcm_w_word( 八一建軍節(jié) ); /8 / if ( mo = 0 x08 & dd = 0 x08 ) lcm_w_word( 中國男子節(jié) ); if ( mo = 0 x08 & dd = 0 x15 ) lcm_w_word(抗戰(zhàn)勝利記念日 ); if ( mo = 0 x09 & dd = 0 x09 ) lcm_w_word( 明天教師節(jié) ); if ( mo = 0 x09 & dd = 0 x10 ) lcm_w_wo
56、rd( 中國教師節(jié) ); /9 if ( mo = 0 x09 & dd = 0 x18 ) lcm_w_word(九一八事變紀念 ); if ( mo = 0 x09 & dd = 0 x20 ) lcm_w_word( 國際愛牙日 ); if ( mo = 0 x09 & dd = 0 x27 ) lcm_w_word( 世界旅游日 ); if ( mo = 0 x10 & dd = 0 x01 ) lcm_w_word( 中國國慶節(jié) ); /10 /if ( mo = 0 x10 & dd = 0 x04 ) lcm_w_word( 世界動物日 ); if ( mo = 0 x10 &
57、dd = 0 x24 ) lcm_w_word( 聯(lián)合國日 ); /if ( mo = 0 x10 & dd = 0 x12 ) lcm_w_word(明天國際教師節(jié) ); /if ( mo = 0 x10 & dd = 0 x13 ) lcm_w_word( 國際教師節(jié) ); /if ( mo = 0 x11 & dd = 0 x10 ) lcm_w_word( 世界青年節(jié) ); /11 / if ( mo = 0 x11 & dd = 0 x17 ) lcm_w_word( 世界學生節(jié) ); / if ( mo = 0 x12 & dd = 0 x01 ) lcm_w_word( 世界艾滋
58、病日 ); /12 if ( mo = 0 x12 & dd = 0 x23 ) lcm_w_word( 明晚平安夜 ); if ( mo = 0 x12 & dd = 0 x24 ) lcm_w_word( 今晚平安夜 ); if ( mo = 0 x12 & dd = 0 x25 ) lcm_w_word( 今天圣誕節(jié) ); if ( mo = 0 x12 & dd = 0 x31 ) lcm_w_word( 明日元旦 ); else/非節(jié)日時顯示時晨信息,判斷小時數(shù)據(jù)范圍,調(diào)取顯示 if ( hh = 0 x04 & hh = 0 x06 & hh = 0 x08 & hh = 0 x1
59、3 & hh = 0 x18 & hh = 0 x22 & hh = 0 x00 & hh 0 x07 & hh 0 x07 & hh max) item=mini;/查看數(shù)值是否在有效范圍之內(nèi) if(itemmax) calam=mini;/查看數(shù)值是否在有效范圍之內(nèi) if(calammax) dalam=mini;/查看數(shù)值是否在有效范圍之內(nèi) if(dalammini) dalam=max;/如果數(shù)值小于最小值,則自動等于最大值 /alam_r(alam/10+alam%10) ; balam=dalam; void naozhong(void) if(KEY_2 = 0)galam=1;
60、 if(KEY_4 = 0)galam=0; halam =galam;void alam_int(void) ealam=read_clock(0 x85); falam=read_clock(0 x83); if(aalam/10)*16+aalam%10)=ealam&(balam/10)*16+balam%10)=falam&flag1=0) /if(11/10*16+11/10)=ealam&(12/10*16+11/10)=falam) if(KEY_2=0) DelayM(20); /防抖 if(KEY_2=0) / Beep_key();/確定按鍵音 flag1=1; / De
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五年度高端獼猴桃產(chǎn)地直銷合作合同4篇
- 2025版寧波商業(yè)地產(chǎn)買賣合同范本4篇
- 2025年度鋼材市場調(diào)研與分析合同范本
- 2025年度鋼材加工定制合同
- 2025年工業(yè)用地出售合同
- 2025版牛羊屠宰場環(huán)保處理合同規(guī)范文本4篇
- 2025年度農(nóng)村人居環(huán)境改善排水溝施工及污水處理合同4篇
- 2025年實景景觀設計合同
- 2025年度個人消費貸款擔保合同編制手冊4篇
- 2025年個人購房合同(附房產(chǎn)抵押貸款服務)
- 山東省濰坊市2024-2025學年高三上學期1月期末 英語試題
- 危險性較大分部分項工程及施工現(xiàn)場易發(fā)生重大事故的部位、環(huán)節(jié)的預防監(jiān)控措施
- 《榜樣9》觀后感心得體會四
- 2023事業(yè)單位筆試《公共基礎知識》備考題庫(含答案)
- 化學-廣東省廣州市2024-2025學年高一上學期期末檢測卷(一)試題和答案
- 2025四川中煙招聘高頻重點提升(共500題)附帶答案詳解
- EHS工程師招聘筆試題與參考答案(某大型央企)2024年
- 營銷策劃 -麗亭酒店品牌年度傳播規(guī)劃方案
- 2025年中國蛋糕行業(yè)市場規(guī)模及發(fā)展前景研究報告(智研咨詢發(fā)布)
- 潤滑油過濾培訓
- 護理組長年底述職報告
評論
0/150
提交評論