時間溫度顯示電路_第1頁
時間溫度顯示電路_第2頁
時間溫度顯示電路_第3頁
時間溫度顯示電路_第4頁
時間溫度顯示電路_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.單片機(jī)課程設(shè)計報告1設(shè)計任務(wù)實時時鐘芯片應(yīng)用1)可以顯示時間,日期及鬧鐘,并可通過按鍵進(jìn)行調(diào)整;2)可同時設(shè)置多個鬧鐘時間(不少于3個)。2整體設(shè)計方案及框圖a.整體設(shè)計方案流程:1)根據(jù)實驗電路原理圖,找出關(guān)于時鐘設(shè)計的相關(guān)芯片及原件并利用相關(guān)圖書資料和網(wǎng)絡(luò)資源搞清楚其功能結(jié)構(gòu),最終將各個元件連成時鐘電路圖畫在草稿紙上。2)根據(jù)畫好的電路原理圖進(jìn)行電路的焊接過程。3)電路焊接完畢后,首先進(jìn)行最小系統(tǒng)的調(diào)試,測試最小系統(tǒng)是否能夠?qū)崿F(xiàn)。4)最小系統(tǒng)在測試通過后進(jìn)行時鐘電路的焊接及測試,若最小系統(tǒng)沒有通過測試,則進(jìn)行錯誤排查直至最小系統(tǒng)成功實現(xiàn)。5)最小系統(tǒng)及時鐘電路測試通過后進(jìn)行軟件部分編寫。

2、6)根據(jù)搜集到的芯片相關(guān)資料,了解各芯片管腳結(jié)構(gòu)及功能后進(jìn)行軟件編寫。7)對編寫好的程序下載到單片機(jī)中進(jìn)行測試直至所要求功能全部實現(xiàn)。b.設(shè)計框圖:硬件電路最小系統(tǒng)實現(xiàn)硬件電路設(shè)計硬件電路焊接軟件部分編寫硬件電路數(shù)碼管部分電路實現(xiàn)硬件電路部分電路調(diào)試全部功能實現(xiàn)軟件部分調(diào)試3硬件設(shè)計最小系統(tǒng)原理:1)最小系統(tǒng)電路由芯片SST89E516RD和MAX232ACPE,復(fù)位電路,LED雙色燈,數(shù)據(jù)通信串口,USB連接口以及晶振部分組成。2)單片機(jī)SST89E516RD工作在12MHz頻率下,控制整個電路的運(yùn)行。3)復(fù)位電路主要通過按鈕的短接來實現(xiàn)電路的復(fù)位功能。4)9針的通信串口與MAX232ACP

3、E芯片連接與單片機(jī)上的RXD(串行數(shù)據(jù)接收)和TXD(串行數(shù)據(jù)發(fā)送)來實現(xiàn)單片機(jī)與計算機(jī)之間的通信。5)LED雙色顯示主要通過單片機(jī)上的1.6與1.7口來控制。6)按鈕通過2.42.7管腳口來實現(xiàn)其功能。7)USB接口通過與計算機(jī)USB接口相連為電路板上的電路提供電源。顯示電路原理:1)芯片SN74HC573AN實現(xiàn)數(shù)碼管顯示的控制,其八條線路分別控制數(shù)碼管上a,b,c,d,e,f,g,dot的亮滅,從而將相關(guān)數(shù)據(jù)顯示在數(shù)碼管中。2)數(shù)碼管上的Y0Y7口分別于74LS138芯片上的管腳相連,來實現(xiàn)對數(shù)碼管某一位的亮滅控制。時鐘電路原理:1)通過向DS1302中寫入初始時鐘來讓其通過內(nèi)部和外部的

4、晶振實現(xiàn)計時功能。2)DS1302中I/O端口為串行數(shù)據(jù)輸入/輸出,RST為復(fù)位/片選線,Vcc2為主電源,X1、X2為振蕩源,GND為地線,SCLK為串行時鐘引腳,Vcc1為后備電源。LED數(shù)碼管結(jié)構(gòu)圖:四位共陰數(shù)碼管內(nèi)部邏輯圖四位共陰數(shù)碼管實物引腳圖芯片介紹SST89E516RD介紹兼容80C51系列,內(nèi)置超級FLASH存儲器的單片機(jī),工作電壓 VDD=4.55.5V,5伏工作電壓時040MHz的頻率范圍,工作電壓 VDD=2.73.6V,在3伏工作電壓下,原廠保證025MHz的工作頻,實際最高可達(dá)40MHz,與現(xiàn)行的80C52列單片機(jī)硬件PIN-TO-PIN完全兼容,軟件、開發(fā)工具也完全

5、兼容。1K*8的內(nèi)部RAM(256Bytes+768Bytes,可使用C語言編程)兩塊超級FLASH EEPROM,即SST89E516RD/SST89V516RD:64K*8的基本存儲塊和8K*8的二級存儲塊(扇區(qū)大小為 128 字節(jié))和SST89E58RD/SST89V58RD:32K*8的基本存儲塊和8K*8的二級存儲塊(扇區(qū)大小為128字節(jié)),(二級存儲塊可用于存放掉電后要保存的數(shù)據(jù),放在內(nèi)部具有極強(qiáng)的抗干擾性)。獨(dú)立的塊加密,IAP 下的并行操作,塊地址重映射。最大片外程序/數(shù)據(jù)地址空間為64K*8(當(dāng)然也可以通過I/O口進(jìn)行塊切換,實現(xiàn)超64K擴(kuò)展)。 三個高電流驅(qū)動引腳(每個16

6、mA,可直接驅(qū)動LED)和三個16位定時器/計數(shù)器。全雙工增強(qiáng)型UART:幀錯誤檢測、自動地址識別。9個中斷源,四個中斷優(yōu)先級??撮T狗定時器 (Watchdog Timer, 缺省情況下不打開, 用戶不需要時可不使用)??删幊逃嫈?shù)陣列(PCA),標(biāo)準(zhǔn)為每個機(jī)器周期12個時鐘,器件可選擇在每個機(jī)器周期6個時鐘基礎(chǔ)上加倍。掉電檢測(Brow-out缺省為產(chǎn)生復(fù)位,也可設(shè)置為產(chǎn)生中斷)降低EMI模式(通過AUXR SFR 不允許ALE 輸出時鐘)四個8位 I/O口(32 根輸入輸出線) MAX232介紹MAX232是一種把電腦的串行口RS232信號轉(zhuǎn)換為單片機(jī)所用到的TTL信號電平的芯片。RS232

7、引腳定義1-9針作用分別是載波檢測(DCD)、接收數(shù)據(jù)(RDX)、發(fā)送數(shù)據(jù)(TXD)、數(shù)據(jù)終端準(zhǔn)備好(DTR)、地信號(SG)、數(shù)據(jù)準(zhǔn)備好(DSR)、請求發(fā)送(RTS)、清除發(fā)送(CTS)、振鈴提示(RI)。DS1302 簡介:DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.55.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電

8、方式,提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302的外部引腳分配如圖所示。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄,因此廣泛應(yīng)用于測量系統(tǒng)中。DS1302的外部引腳分配 DS1302的內(nèi)部結(jié)構(gòu) 各引腳的功能為: Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2Vcc1+0.2V時,由Vcc2向DS1302供電,當(dāng)Vcc2 Vcc1時,由Vcc1向DS1302供電。SCLK:串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出;I/O:三線接口時的雙向數(shù)據(jù)線;CE:輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個功能:第一,CE開始控制字

9、訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒āS1302有下列幾組寄存器: DS1302有關(guān)日歷、時間的寄存器共有12個,其中有7個寄存器(讀時81h8Dh,寫時80h8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如圖所示。 DS1302有關(guān)日歷、時間的寄存器 小時寄存器(85h、84h)的位7用于定義DS1302是運(yùn)行于12小時模式還是24小時模式。當(dāng)為高時,選擇12小時模式。在12小時模式時,位5是 ,當(dāng)為1時,表示PM。在24小時模式時,位5是第二個10小時位。秒寄存器(81h、80h)的位7定義為時鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時,時鐘振蕩器停止,DS1302

10、處于低功耗狀態(tài);當(dāng)該位置為0時,時鐘開始運(yùn)行??刂萍拇嫫鳎?Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對時鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時,寫保護(hù)位防止對任一寄存器的寫操作。 DS1302有關(guān)RAM的地址 DS1302中附加31字節(jié)靜態(tài)RAM的地址如圖所示。 DS1302的工作模式寄存器所謂突發(fā)模式是指一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。突發(fā)模式寄存器如圖所示。 此外,DS1302還有充電寄存器等。 2 讀寫時序說明DS1302是SPI總線驅(qū)動方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與DS1302通信,首先要先了解DS

11、1302的控制字。DS1302的控制字如圖。 控制字(即地址及命令字節(jié)) 控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1(A4A0):指示操作單元的地址;位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作??刂谱挚偸菑淖畹臀婚_始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖

12、。數(shù)據(jù)讀寫時序 3 電路原理圖:電路原理圖如圖,DS1302與單片機(jī)的連接也僅需要3條線:CE引腳、SCLK串行時鐘引腳、I/O串行數(shù)據(jù)引腳,Vcc2為備用電源,外接32.768kHz晶振,為芯片提供計時脈沖。4軟件設(shè)計軟件各模塊設(shè)計流程:日期功能設(shè)計:從DS1302中讀出日期向DS1302芯片寫入初始化日期初始化DS1302芯片模塊功能實現(xiàn)對顯示的日期進(jìn)行長度判斷在LED數(shù)碼管上顯示讀出的日期時間功能設(shè)計:從DS1302中讀出時間向DS1302芯片寫入初始化時間初始化DS1302芯片模塊功能實現(xiàn)對顯示的時間進(jìn)行長度判斷在LED數(shù)碼管上顯示讀出的時間鬧鐘功能設(shè)計:鬧鐘時間點過去后蜂鳴器停止響聲

13、,LED燈滅編寫程序?qū)崿F(xiàn)鬧鐘到點后蜂鳴器響,LED燈亮紅色實現(xiàn)三個鬧鐘能夠獨(dú)立顯示設(shè)置,互相之間沒有干擾鬧鐘設(shè)置顯示設(shè)計程序?qū)崿F(xiàn)代碼:#includetypedef unsigned char unchar; typedef unsigned int unint;sbit T_CLK = P20; /DS1302中串行時鐘引腳sbit T_IO = P21; /DS1302中串行數(shù)據(jù)輸入/輸出sbit T_RST = P22; /DS1302中復(fù)位/片選線sbit Bee = P27;sbit DQ = P34; sbit DT =P07;sbit P1_6=P16;sbit P1_7=P17

14、;sbit TAD = P27;sbit K1=P26;sbit K2=P25;sbit K3=P24;sbit ACC0=ACC0;/累加寄存器sbit ACC7=ACC7;unchar data year=0x10, month=0x07, date=0x25, day=0x01, hour=0x12, minute=0x59, second=0x45;unchar data Led = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /分別代表0,1,2,3,4,5,6,7,8,9,-unchar data Dispbuff

15、 =0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;unchar data ring=0x00,0x00;unchar data ring1=0x00,0x00;unchar data ring2=0x00,0x00;unsigned char Code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; unchar sec,min,hou,dat,mon,wek,yea,i=0,j=0,i1=0,i2=0,i3=0,i4=0;long k=0; void CDelay(unchar CDelay)

16、/延時 while(CDelay-);ReadOneChar(void) /讀一個字節(jié) unchar i = 0; unchar dat = 0; for(i=8;i0;i-) DQ = 0; dat=1; DQ = 1; if(DQ) /判斷DQ高低電平,若為高電平則賦給dat高電平值 dat |= 0x80; CDelay(4);/延時 return(dat); /返回dat值WriteOneChar(unchar dat) /寫一個字節(jié) unchar i = 0; for(i=8;i0;i-) DQ = 0; /低電平脈沖信號 DQ = dat&0x01; CDelay(5);/延時 D

17、Q = 1; /高電平脈沖信號 dat = 1;/dat右移一位 CDelay(4);void oneByteToClock(unchar ucDa) /向DS1302中寫一位 unchar i; ACC= ucDa; for(i=8; i0; i-) T_IO = ACC0; /相當(dāng)于匯編中的 RRC T_CLK = 1; T_CLK = 0; ACC =ACC 1;/下一位移到ACC0 unchar oneByteFromClock(void) /從DS1302中讀一位 unchar i; for(i=8; i0; i-) ACC = ACC1; /*相當(dāng)于匯編中的 RRC ACC7 =

18、T_IO; T_CLK = 1; T_CLK = 0; return(ACC); void giveOneTime(unchar ucAddr, unchar ucDa) T_RST = 0; T_CLK = 0; T_RST = 1; oneByteToClock(ucAddr); /地址,命令 oneByteToClock(ucDa); /寫1Byte數(shù)據(jù) T_CLK = 1; T_RST =0; unchar getOneTime(unchar ucAddr) unchar ucDa; T_RST = 0; T_CLK = 0; T_RST = 1; oneByteToClock(ucA

19、ddr); / 地址,命令 ucDa = oneByteFromClock(); / 讀1Byte數(shù)據(jù) T_CLK = 1; T_RST =0; return(ucDa); void resetTime(void) giveOneTime(0x8e,0x00); /8e:寫寄存器BIT7=WP 控制命令,WP=0,寫操作 T_RST = 0; T_CLK = 0; T_RST = 1; oneByteToClock(0xbe); / 0xbe:時鐘突發(fā)模式:寫寄存器 時鐘多字節(jié)寫命令 oneByteToClock(second); oneByteToClock(minute); oneByte

20、ToClock(hour); oneByteToClock(date); oneByteToClock(month); oneByteToClock(day); oneByteToClock(year); oneByteToClock(0); T_CLK = 1; T_RST =0; void disTime(void) unchar sec,min,hou,dat,mon,wek,yea,i,j=0; T_RST = 0; T_CLK = 0; T_RST = 1; oneByteToClock(0xbf); /* 0xbf:時鐘突發(fā)模式寄存器:讀寄存器 時鐘多字節(jié)讀命令 sec = one

21、ByteFromClock(); min =oneByteFromClock(); hou = oneByteFromClock(); dat = oneByteFromClock(); mon = oneByteFromClock(); wek = oneByteFromClock(); yea = oneByteFromClock(); T_CLK = 1; T_RST =0; Dispbuff0 = sec%16; Dispbuff1 = sec/16; Dispbuff2 = 0xa; Dispbuff3 = min%16; Dispbuff4 = min/16; Dispbuff5

22、= 0xa; Dispbuff6 = hou%16; Dispbuff7 = hou/16; for(i=0; i8; i+)P1 = j;P0 = LedDispbuffi;CDelay(60);j +; CDelay(60); void disDate(void) unchar sec,min,hou,dat,mon,wek,yea,i,j=0; T_RST = 0; T_CLK = 0; T_RST = 1; oneByteToClock(0xbf); /* 0xbf:時鐘多字節(jié)讀命令 sec = oneByteFromClock(); min =oneByteFromClock();

23、hou = oneByteFromClock(); dat = oneByteFromClock(); mon = oneByteFromClock(); wek = oneByteFromClock(); yea = oneByteFromClock(); T_CLK = 1; T_RST =0; Dispbuff0 = dat%16; Dispbuff1 = dat/16; Dispbuff2 = 0xa; Dispbuff3 = mon%16; Dispbuff4 = mon/16; Dispbuff5 = 0xa; Dispbuff6 = yea%16; Dispbuff7 = yea

24、/16; for(i=0; i4)*10 + (bcd&0x0F); return n;unchar charToBcd (unchar num)unchar n;n = (num/10)4) | ( num%10 ); return n;unchar sToS(unchar s)unchar n;n=(s/16)*10+(s%16);return n;void disRing() /鬧鐘1設(shè)置顯示P1=0;P0=Ledring0%10;CDelay(60);P1=1;P0=Ledring0/10;CDelay(60);P1=4;P0=Ledring1%10;CDelay(60);P1=5;P

25、0=Ledring1/10;CDelay(60);void disRing1() /鬧鐘2設(shè)置顯示P1=0;P0=Ledring10%10;CDelay(60);P1=1;P0=Ledring10/10;CDelay(60);P1=4;P0=Ledring11%10;CDelay(60);P1=5;P0=Ledring11/10;CDelay(60);void disRing2() / 鬧鐘3設(shè)置顯示P1=0;P0=Ledring20%10;CDelay(60);P1=1;P0=Ledring20/10;CDelay(60);P1=4;P0=Ledring21%10;CDelay(60);P1

26、=5;P0=Ledring21/10;CDelay(60);void DateDisF()if(i=0)disDate();/K1if(K1=0&i1=0)i1=1;yea= bcdToChar(getOneTime(0x8d);if(yea=89)yea=0;yea= charToBcd(yea); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作 giveOneTime(0x8c,yea); /寫寄存器指令,年 giveOneTime(0x8e,0x80);disDate();elseyea= yea+1;yea= charToBcd(yea); giveO

27、neTime(0x8e,0x00); /* 控制命令,WP=0,寫操作giveOneTime(0x8c,yea); /寫寄存器指令,年giveOneTime(0x8e,0x80);disDate();/K2if(K2=0&i2=0)i2=1;mon= bcdToChar(getOneTime(0x89);if(mon=12)mon=1;mon= charToBcd(mon); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x88,mon); /寫寄存器指令,月 giveOneTime(0x8e,0x80);disDate();el

28、semon= mon+1;mon= charToBcd(mon); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作?giveOneTime(0x88,mon); /寫寄存器指令,月giveOneTime(0x8e,0x80);disDate();/K3if(K3=0&i3=0)i3=1;mon= bcdToChar(getOneTime(0x89);dat= bcdToChar(getOneTime(0x87);yea= bcdToChar(getOneTime(0x8d); if(mon=1|mon=3|mon=5|mon=7|mon=8|mon=10|mo

29、n=12) /判斷31天月份if(dat=31)dat=1;dat= charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); /寫寄存器指令,日 giveOneTime(0x8e,0x80);disDate();else dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); /寫寄存器指令,日 giveOneTime(0x8e,0x80); disDat

30、e();elseif(mon=2) /二月份平年、閏年天數(shù)判斷if(yea%4)=0&(yea%100)=0&yea!=0) /閏年if(dat=29)dat=1; dat= charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); /寫寄存器指令,日 giveOneTime(0x8e,0x80); disDate();else dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTi

31、me(0x86,dat); /寫寄存器指令,日 giveOneTime(0x8e,0x80); disDate();else /平年if(dat=28)dat=1;dat= charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); /寫指令 giveOneTime(0x8e,0x80);disDate();else dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86

32、,dat); /寄存器寫指令 giveOneTime(0x8e,0x80); disDate();elseif(dat=30)dat=1;dat= charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); giveOneTime(0x8e,0x80);disDate();else dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x86,dat); giveOneTime

33、(0x8e,0x80); disDate();if(K1=1&K2=1&K3=1)i1=0;i2=0;i3=0; void TimeDisF()if(i=1) disTime();/K1 if(K1=0&i1=0) i1=1;hou= bcdToChar(getOneTime(0x85);if(hou=23)hou=0;hou= charToBcd(hou); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x84,hou); /寫寄存器指令,時 giveOneTime(0x8e,0x80);disTime();elsehou= h

34、ou+1;hou= charToBcd(hou); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作?giveOneTime(0x84,hou); /寫寄存器指令,時giveOneTime(0x8e,0x80);disTime();/K2if(K2=0&i2=0)i2=1;min= bcdToChar(getOneTime(0x83);if(min=59)min=0;min= charToBcd(min); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作? giveOneTime(0x82,min); /寫寄存器指令,分 giv

35、eOneTime(0x8e,0x80);disTime();elsemin= min+1;min= charToBcd(min); giveOneTime(0x8e,0x00); /* 控制命令,WP=0,寫操作?giveOneTime(0x82,min); /寫寄存器指令,分giveOneTime(0x8e,0x80);disTime();/K3 if(K3=0&i3=0)resetTime();if(K1=1&K2=1&K3=1)i1=0;i2=0;i3=0; void GetTimeF() /讀取時間T_RST = 0;T_CLK = 0;T_RST = 1;oneByteToClock

36、(0xbf); /* 0xbf:時鐘多字節(jié)讀命令 sec = bcdToChar(oneByteFromClock();min = bcdToChar(oneByteFromClock();hou = bcdToChar(oneByteFromClock();dat = bcdToChar(oneByteFromClock();mon = bcdToChar(oneByteFromClock();wek = bcdToChar(oneByteFromClock();yea = bcdToChar(oneByteFromClock();T_CLK = 1;T_RST =0;void Change

37、KF() /按鈕切換顯示實現(xiàn)函數(shù)if(TAD=0&j=0)if(i=4)i=0;else i=i+1;j=1;elseif(TAD=0&j=1)i=i;else j=0;void main (void)iniClock(); /始終初始化 while(1) GetTimeF();/獲取之前初始化入DS1302中的時間 ChangeKF(); /顯示數(shù)據(jù)切換DateDisF(); /日期控制TimeDisF(); /時間控制/設(shè)置鬧鐘if(i=2) /鬧鐘1 disRing();P0=0x6;P1=7;if(K1=0&i1=0)i1=1;ring1=ring1+1;if(ring1=24)ring1=0;disRing();if(K2=0&i2=0)i2=1;ring0=ring0+1;if(ring0=60)ring0=0;disRing();if(K2=1&K1=1)i1=0;i2=0;if(i=3) /鬧鐘2 disRing1();P0=0x5b;P1=7;if(K1=0&i1=0)i1=1;ring11=ring11+1;if(ring11=24)ring11=0;disRing1();if(K2=0&

溫馨提示

  • 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

提交評論