2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  引 言</b></p><p>  數(shù)字電子時(shí)鐘,自從它問(wèn)世起,就是人們的好朋友,是人們?nèi)粘I钪斜夭豢缮俚碾娮赢a(chǎn)品,廣泛用于生活的方方面面,給人們的學(xué)習(xí)、生活、工作帶來(lái)了極大的方便。但隨著時(shí)間的推移,科學(xué)技術(shù)的不斷發(fā)展,生活節(jié)奏越來(lái)越快,競(jìng)爭(zhēng)日益激烈,人們對(duì)時(shí)間計(jì)量的精度要求越來(lái)越高,應(yīng)用越來(lái)越廣。通常使用的晶振芯片設(shè)計(jì)的電子時(shí)鐘,在生活中使用是一個(gè)很不錯(cuò)的選

2、擇,然而在工業(yè)現(xiàn)場(chǎng),環(huán)境惡劣,勢(shì)必會(huì)影響走時(shí)的進(jìn)度,我們?cè)囅胍幌?,大型的工業(yè)現(xiàn)場(chǎng)的走時(shí)如果因?yàn)榄h(huán)境的惡劣而不精確,導(dǎo)致的生產(chǎn)損失將有多大。而利用開(kāi)關(guān)量控制的PLC來(lái)設(shè)計(jì)的時(shí)鐘是不會(huì)因?yàn)榄h(huán)境的因素而發(fā)生走時(shí)誤差,從而,在工業(yè)現(xiàn)場(chǎng)最好使用PLC設(shè)計(jì)的時(shí)鐘。</p><p>  本文主要介紹在工業(yè)現(xiàn)場(chǎng)應(yīng)用的時(shí)鐘用PLC的設(shè)計(jì)。通過(guò)PLC我們?cè)O(shè)計(jì)的這種走時(shí)精確的的時(shí)鐘,終究會(huì)變成產(chǎn)品走進(jìn)工業(yè)現(xiàn)場(chǎng)。</p>

3、<p>  1 設(shè)計(jì)的目的及意義</p><p>  本設(shè)計(jì)通過(guò)用對(duì)一個(gè)能實(shí)現(xiàn)定時(shí),時(shí)鐘顯示功能的時(shí)間系統(tǒng)的設(shè)計(jì)學(xué)習(xí),讓我們了解到了51單片機(jī)應(yīng)用中的數(shù)據(jù)轉(zhuǎn)換顯示,數(shù)碼管顯示原理,靜態(tài)掃描顯示原理,單片機(jī)的定時(shí)中斷原理等,從而達(dá)到學(xué)習(xí)、了解單片機(jī)相關(guān)指令在各方面的應(yīng)用,讓我們學(xué)到更多關(guān)于單片機(jī)方面的知識(shí)。 </p><p><b>  2 芯片簡(jiǎn)介</b

4、></p><p>  2.1 STC80C52單片機(jī)芯片引腳功能介紹</p><p>  單片機(jī)的40個(gè)引腳大致可分為4類(lèi):電源、時(shí)鐘、控制和I/O引腳。</p><p> ?、?電源: ⑴ VCC - 芯片電源,接+5V;⑵ VSS - 接地端;</p><p> ?、?時(shí)鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出

5、端。</p><p> ?、?控制線(xiàn):控制線(xiàn)共有4根,⑴ ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖 ① ALE功能:用來(lái)鎖存P0口送出的低8位地址 ② PROG功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。⑵ PSEN:外ROM讀選通信號(hào)。⑶ RST/VPD:復(fù)位/備用電源。① RST(Reset)功能:復(fù)位信號(hào)輸入端。② VPD功能:在Vcc掉電情況下,接備用電源。⑷ E

6、A/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。① EA功能:內(nèi)外ROM選擇端。② Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。</p><p> ?、?I/O線(xiàn)80C51共有4個(gè)8位并行I/O端口:P0、P1、P2、P3口,共32個(gè)引腳。P3口還具有第二功能,用于特殊信號(hào)輸入輸出和控制信號(hào)(屬控制總線(xiàn))。</p><p>  2.2 STC89C52

7、單片機(jī)芯片封裝圖</p><p>  STC89C52芯片的封裝有PLCC、PQFP以及DIP—40,本設(shè)計(jì)采用的是引腳雙列直插式封裝。其封裝形式如圖2.2.1。</p><p>  圖2.2.1 STC89C52 DIP-40封裝</p><p>  2.3 DS1302芯片功能的介紹</p><p>  DS1302 是美國(guó)Dallas

8、公司生產(chǎn)的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片。該芯片采用3 線(xiàn)串行接口方式,可提供年、月、日、星期、時(shí)、分、秒等時(shí)間信息,并可根據(jù)月份和閏年的情況自動(dòng)調(diào)整月份的結(jié)束日期,同時(shí)可以根據(jù)用戶(hù)需要決定是采用24 小時(shí)或12 小時(shí)格式。DS 1302 內(nèi)部帶有31 個(gè)字節(jié)RAM ,用于存放臨時(shí)性數(shù)據(jù),同時(shí)具有可編程涓細(xì)電流充電能力,從而使外圍硬件電路設(shè)計(jì)得到了大大簡(jiǎn)化。其中X1 、X2 為32. 768kHz 晶振端, GND 為地;R

9、ST 為復(fù)位端,高電平時(shí)允許I/ O 端進(jìn)行數(shù)據(jù)傳輸,低電平則禁止數(shù)據(jù)傳送且使I/ O 端呈高阻狀態(tài); I/ O 為串行數(shù)據(jù)輸入、輸出端,所有輸入、輸出數(shù)據(jù)的傳送順序均以最低位LSB 打頭, 最高位MSB 結(jié)束;SCL K為同步時(shí)鐘脈沖端,其上升沿將I/ O 端數(shù)據(jù)按位寫(xiě)入DS1302 ,下降沿使DS1302 按位輸出數(shù)據(jù)至I/ O 端;VCC2 、VCC1 為主電源和備份電源端,當(dāng)主電源VCC2 大于備份電源VCC1 +0. 2V 時(shí)

10、,由VCC2 對(duì)芯片供電,否則,由VCC1 對(duì)芯片電。工作電壓范圍為2. 5~5. 5</p><p>  圖2.3.1 DS1302芯片引腳圖</p><p>  DS1302芯片引腳功能說(shuō)明如下表2.3.1。</p><p>  表2.3.1 DS1302芯片引腳功能說(shuō)明</p><p>  3 電路原理圖與功能說(shuō)明</p>

11、<p><b>  3.1 晶振電路</b></p><p>  晶體振蕩器在固定頻率振蕩器中能夠提供較高的精度,絕大多數(shù)RTC采用32.768kHz的晶體,晶體振蕩器輸出經(jīng)過(guò)分頻后會(huì)產(chǎn)生1Hz的基準(zhǔn)來(lái)刷新時(shí)間和日期。RTC的精度主要取決于晶振的精度,晶體振蕩器在固定頻率振蕩器中能夠提供較高的精度,絕大多數(shù)RTC采用32.768kHz的晶體,晶體振蕩器輸出經(jīng)過(guò)分頻后會(huì)產(chǎn)生1Hz的

12、基準(zhǔn)來(lái)刷新時(shí)間和日期。RTC的精度主要取決于晶振的精度,晶振一般在特定的電容負(fù)載下,其調(diào)諧振蕩在正確的頻點(diǎn),而當(dāng)晶振調(diào)諧于12.5pF負(fù)載的RTC電路中時(shí),使用6pF負(fù)載的晶振將會(huì)使時(shí)鐘變快。Dallas Semiconductor提供的所有RTC均采用內(nèi)部偏置網(wǎng)絡(luò),因而晶振可直接連接到RTC的X1、X2引腳,而不需要額外的元件。由于RTC的晶振輸入電路具有很高的輸入阻抗,因此,它與晶振的連線(xiàn)猶如一個(gè)天線(xiàn),很容易耦合系統(tǒng)其余電路的高頻干

13、擾。而干擾信號(hào)被耦合到晶振引腳將導(dǎo)致時(shí)鐘數(shù)的增加或減少??紤]到線(xiàn)路板上大多數(shù)信號(hào)的頻率高于32.768kHz,所以,通常會(huì)產(chǎn)生額外的時(shí)鐘脈沖計(jì)數(shù)。因此,晶振應(yīng)盡可能靠近X1、X2引腳安裝,同時(shí)晶振、X1/X2引腳的下方最好布成地平面。晶振電路如</p><p>  圖3.1.1 晶振電路</p><p><b>  3.2 復(fù)位電路</b></p>&l

14、t;p>  當(dāng)STC89C52單片機(jī)的復(fù)位引腳RST(全稱(chēng)RESET)出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位和上電或開(kāi)關(guān)復(fù)位。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。上電或開(kāi)關(guān)復(fù)位要求電源接通后,單片機(jī)自動(dòng)復(fù)位,并且在單片機(jī)運(yùn)行期間,用開(kāi)關(guān)操作也能使單片機(jī)復(fù)位。上電后,由于電容的充電和反相門(mén)的作用,使RST持續(xù)一

15、段時(shí)間的高電平。當(dāng)單片機(jī)已在運(yùn)行當(dāng)中時(shí),按下復(fù)位鍵K后松開(kāi),也能使RST為一段時(shí)間的高電平,從而實(shí)現(xiàn)上電或開(kāi)關(guān)復(fù)位的操作。復(fù)位電路如圖3.2.1</p><p>  圖 3.2.1 復(fù)位電路</p><p>  3.3 數(shù)碼管顯示電路</p><p>  所謂數(shù)碼管就是為數(shù)碼管顯示提供的各段狀態(tài)組合,即字形代碼。八段數(shù)碼管的段碼為八位,用一個(gè)字節(jié)即可表示。在段碼字節(jié)

16、中代碼位與各段發(fā)光二極管的對(duì)應(yīng)關(guān)系表3.3.1。</p><p>  表3.3.1 段碼字節(jié)代碼位與發(fā)光二極管的關(guān)系</p><p>  段碼的值與數(shù)碼管公共引腳的接法有關(guān)。以八段數(shù)碼管為例,顯示十六進(jìn)制的段碼值如表3.3.2。</p><p>  表3.3.2 十六進(jìn)制段碼表</p><p>  并排使用的多位數(shù)碼管稱(chēng)為L(zhǎng)ED顯示器。LED

17、顯示器多采用動(dòng)態(tài)顯示方式,全部數(shù)碼管共用一套段碼驅(qū)動(dòng)電路,各位數(shù)碼管的同段引腳短接后在借到應(yīng)段碼的驅(qū)動(dòng)線(xiàn)上。顯示時(shí)通過(guò)位控信號(hào)采用掃描的方法逐位地循環(huán)點(diǎn)亮各位數(shù)碼管。動(dòng)態(tài)顯示雖然在任何一時(shí)刻只有一位數(shù)碼管被點(diǎn)亮,但是由于人眼具有的視覺(jué)殘留效應(yīng),看起來(lái)與全部數(shù)碼管持續(xù)點(diǎn)亮的效果完全一樣。LED顯示器動(dòng)態(tài)顯示需要為各位提供段碼以及相應(yīng)的位控制,此即通常所說(shuō)的段控和位控。把LED顯示器段碼表預(yù)先存放在存儲(chǔ)器中,使用時(shí)通過(guò)查表就可以得到段碼。段

18、碼輸出后送到公共段碼線(xiàn)上,也可稱(chēng)為段控信號(hào)。而通過(guò)并行口輸出的相互獨(dú)立的為嘛則是起選通作用的,也稱(chēng)位控或掃描信號(hào),用于選擇顯示位。數(shù)碼管電路如圖3.3.1。</p><p>  圖3.3.1 數(shù)碼管電路圖</p><p>  3.4 DS1302電路</p><p>  DS1302 所進(jìn)行的一切工作必須先由CPU 向DS1302 發(fā)送命令字節(jié), 命令字節(jié)格式如圖3

19、.4.1 。各位定義如下:命令字節(jié)的最高位7 必須為“1”,否則禁止對(duì)DS1302 進(jìn)行操作。第6 位是時(shí)鐘/ 日歷或RAM 選擇位, 如它為“1”可對(duì)內(nèi)部RAM 讀寫(xiě),如它為“0”可對(duì)時(shí)鐘日歷操作。此處所謂日歷型數(shù)據(jù)即數(shù)據(jù)格式為壓縮型BCD 碼,且數(shù)值必須在它的定義域內(nèi);例如,“月份”的定義域?yàn)?~12“, 秒”的定義域?yàn)?~59 等等。所謂RAM型數(shù)據(jù)即指一般16 進(jìn)制數(shù)據(jù)。位5 至位1 為DS1302 內(nèi)部寄存器地址。DS1302

20、 有單字節(jié)和多字節(jié)兩種讀、寫(xiě)方式。所謂單字節(jié)讀、寫(xiě)方式即每次只能從DS1302 中讀、寫(xiě)1 字節(jié)數(shù)據(jù)。所謂多字節(jié)讀、寫(xiě)方式則每次可從DS1302 中連續(xù)讀、寫(xiě)若干字節(jié)數(shù)據(jù)。當(dāng)位5 至位1 各位均為“1”時(shí),DS1302為多字節(jié)讀、寫(xiě)方式。最低位0 為“0”表示寫(xiě)操作,否則為讀操作。命令字節(jié)的傳輸都是從最低位開(kāi)始。</p><p>  圖3.4.1 DS1302時(shí)鐘芯片的控制字</p><p&g

21、t;  DS1302 采用串行方式與微控制器通訊。在片選信號(hào)RST 變?yōu)楦唠娖胶?可向芯片發(fā)送指令及讀取數(shù)據(jù)。DS1302 的命令字的傳輸從最低位開(kāi)始。當(dāng)對(duì)DS1302 進(jìn)行寫(xiě)數(shù)據(jù)時(shí),首先發(fā)寫(xiě)控制指令,在控制指令字輸入后的下一個(gè)SCL K時(shí)鐘的上升沿,數(shù)據(jù)被寫(xiě)入DS1302 ,數(shù)據(jù)輸入從低位即位0開(kāi)始。當(dāng)對(duì)DS1302 進(jìn)行讀數(shù)據(jù)時(shí),首先發(fā)讀控制指令,在緊跟8 位的控制指令字后的下一個(gè)SCL K脈沖的下降沿讀出DS1302 的數(shù)據(jù),讀出

22、數(shù)據(jù)時(shí)從低位0 位至高位7 。注意在SCLK為高電平期間,不能讀I/ O 線(xiàn),此期間I/ O 端為高阻狀態(tài)。因此,在程序設(shè)計(jì)時(shí)應(yīng)保證在SCLK上升沿之前讀I/ O線(xiàn),即可正確讀出時(shí)鐘數(shù)據(jù)[3 ] [8 ] 。在本記錄儀表系統(tǒng)中,實(shí)時(shí)時(shí)鐘軟件首先應(yīng)將日歷信息初值———秒、分、時(shí)、日、月、星期、年等按序?qū)懭氲紻S1302 相關(guān)寄存器中,此后,時(shí)鐘便以此初值為基準(zhǔn)進(jìn)行計(jì)時(shí),只要主電源VCC2 和備份電源VCC1 尚有一個(gè)工作正常,則計(jì)時(shí)就不會(huì)

23、終止。初始化日歷信息程序分為三部分:(1) 發(fā)送“解除寫(xiě)保護(hù)”命令字8EH 和內(nèi)容00H ,以開(kāi)放DS1302 寫(xiě)操作。(2) </p><p>  圖3.4.2 DS1302工作流程圖</p><p>  4.1 接口電路設(shè)計(jì)</p><p>  在溫度測(cè)量記錄儀表中,DS1302 與微處理器的接口電路如圖2 所示。該微處理器采用宏晶科技推出的STC89C516R

24、D + 單片機(jī)作為主控芯片,該產(chǎn)品具有片內(nèi)資源豐富、超強(qiáng)抗干擾、高抗靜電、超低功耗、寬電壓、不怕電源抖動(dòng)、在系統(tǒng)可編程、加密性強(qiáng)、無(wú)法解密、可降低單片機(jī)時(shí)鐘對(duì)外部電磁輻射等特點(diǎn)[7 ] ,其良好的性能保證了各個(gè)器件的協(xié)調(diào)可靠工作及控制要求。在電路中單片機(jī)的P1. 7 控制DS1302 的復(fù)位輸入端, P1. 4 與數(shù)據(jù)輸入/ 輸出引腳相連, P1. 3 用來(lái)作為DS1302 的輸入時(shí)鐘SCL K控制端。由于單片機(jī)復(fù)位時(shí),所有單片機(jī)的端口

25、均為高電平,如果直接用單片機(jī)的某一口線(xiàn)同DS1302 的RST 相連,則影響了系統(tǒng)加電時(shí)對(duì)DS1302 的初始化,從而造成DS1302 計(jì)時(shí)的不穩(wěn)定。因此,本電路在設(shè)計(jì)時(shí)采用反相器來(lái)完成單片機(jī)的I/ O 線(xiàn)同DS1302 的RST 相連。供電時(shí),儀表主電源(5 V) 接VCC2 ,備份電池采用可充電鎘鎳電池(3. 6 V) 接VCC1 ,可啟用內(nèi)部涓流充電器在主電壓正常時(shí)向電池充電,以延長(zhǎng)電池使用時(shí)間。備份電池也可用1 微法以上的超容量

26、電</p><p>  圖4.1.1 DS1302 與STC89C51 單片機(jī)的接口電路</p><p><b>  5 調(diào)試與軟件設(shè)計(jì)</b></p><p><b>  5.1 調(diào)試</b></p><p>  調(diào)試分為硬件調(diào)試和軟件調(diào)試,硬件調(diào)試就是檢測(cè)電路是否有錯(cuò)誤或者有短路、虛焊、短路的現(xiàn)

27、象,通過(guò)萬(wàn)用表的檢測(cè)可以最終完成硬件的調(diào)試。</p><p>  軟件調(diào)試是指通過(guò)Keil軟件編譯生成Hex文件,在通過(guò)Protus軟件的聯(lián)調(diào),再進(jìn)行仿真,出現(xiàn)所能實(shí)現(xiàn)的功能,最后通過(guò)串口下載到STC89C52單片機(jī)芯片中讓整個(gè)硬件可以得到運(yùn)行。</p><p><b>  5.2 程序設(shè)計(jì)</b></p><p>  #include<

28、reg52.h></p><p>  #include<intrins.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit rtc_clk=P1^0;</p><p> 

29、 sbit rtc_io=P1^1;</p><p>  sbit rtc_rst=P1^2;</p><p>  sbit set=P1^3;</p><p>  sbit up=P1^4;</p><p>  sbit out=P1^5;</p><p>  sbit qiehuan=P1^6;</p>

30、<p>  uchar cnt,num;</p><p>  uchar done,count,temp,up_flag,flag;</p><p>  uchar time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};</p><p>  uchar code SEG7[10]={0xc0,0xf9,0xa4,0xb

31、0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p>  //uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  uchar hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hid

32、e_year;</p><p>  uchar ACT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; </p><p>  #define RD 0x01</p><p>  #define WR 0x00</p><p>  #define C_SEC 0x80</p><p

33、>  #define C_MIN 0x82</p><p>  #define C_HR 0x84</p><p>  #define C_DAY 0x86</p><p>  #define C_MTH 0x88</p><p>  #define C_WK 0x8a</p><p>  #define C_Y

34、R 0x8c</p><p>  #define C_WP 0x8e</p><p>  #define CLK_HALT 0x80</p><p>  #define CLK_START 0x00</p><p>  #define M12_24 0x80</p><p>  #define PROTECT 0x80

35、</p><p>  #define UNPROTECT 0x00</p><p>  void delay(uint k)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=0;i<k;i+

36、+)</p><p>  for(j=0;j<121;j++);</p><p><b>  }</b></p><p>  void DS1302_writeB(uchar byte)</p><p><b>  {</b></p><p><b>  uc

37、har i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  if(byte&0x01)</p><p><b>  rtc_io=1;</b></p><p><b&

38、gt;  else</b></p><p><b>  rtc_io=0;</b></p><p>  rtc_clk=0;</p><p>  rtc_clk=1;</p><p><b>  delay(1);</b></p><p>  byte=byte&

39、gt;>1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar DS1302_readB()</p><p><b>  {</b></p><p>  uchar i,date;<

40、;/p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  date=date>>1;</p><p>  rtc_clk=1;</p><p>  rtc_clk=0;</p><p><b>

41、  delay(1);</b></p><p>  if(rtc_io==1)</p><p>  date=date|0x80;</p><p><b>  else</b></p><p>  date=date&0x7f;</p><p><b>  }<

42、/b></p><p>  return(date);</p><p><b>  }</b></p><p>  void DS1302_writeD(uchar add,uchar date)</p><p><b>  {</b></p><p>  rtc_rs

43、t=0;</p><p>  rtc_clk=0;</p><p>  rtc_rst=1;</p><p>  DS1302_writeB(add);</p><p><b>  delay(1);</b></p><p>  DS1302_writeB(date);</p>&l

44、t;p>  rtc_clk=0;</p><p>  rtc_rst=0;</p><p><b>  }</b></p><p>  uchar DS1302_readD(uchar add)</p><p><b>  {</b></p><p>  uchar

45、date;</p><p>  rtc_rst=0;</p><p>  rtc_clk=0;</p><p>  rtc_rst=1;</p><p><b>  delay(1);</b></p><p>  DS1302_writeB(add|RD);</p><p>

46、;<b>  delay(1);</b></p><p>  date=DS1302_readB();</p><p><b>  delay(1);</b></p><p>  rtc_clk=0;</p><p>  rtc_rst=0;</p><p>  return

47、(date);</p><p><b>  }</b></p><p>  void DS1302_init()//開(kāi)啟ds1302</p><p><b>  {</b></p><p>  uint second;</p><p>  second=DS1302_rea

48、dD(C_SEC);</p><p>  if(second&0x80)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_SEC|WR,CLK_START);</p>

49、<p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  void DS1302_getT();<

50、/p><p><b>  }</b></p><p><b>  }</b></p><p>  void DS1302_getT()</p><p><b>  {</b></p><p>  uchar i,value;</p><p

51、>  uchar addr=0x80;</p><p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p>  value=DS1302_readD(addr);</p><p>  //time[i]=DS1302_readD(addr|RD);</p&g

52、t;<p>  time[i]=((value&0x70)>>4)*10+(value&0x0f);</p><p><b>  addr+=2;</b></p><p><b>  }</b></p><p><b>  }</b></p>&

53、lt;p>  void outkey()//跳出調(diào)整按鍵</p><p><b>  {</b></p><p><b>  //out=1;</b></p><p>  uchar second;</p><p>  if(out==0)</p><p><b

54、>  {</b></p><p>  delay(10);</p><p>  if(out==0);</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  hide_sec=0,hide_min=

55、0,hide_hour=0,hide_day=0,hide_week,hide_month=0,hide_year=0;</p><p>  //hide_sfm=0,hide_nyr=0,hide_week=0;;</p><p>  second=DS1302_readD(C_SEC);</p><p>  DS1302_writeD(C_WP|WR,UNPR

56、OTECT);</p><p>  DS1302_writeD(C_SEC|WR,second&0x7f);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p><b>  done=0;</b></p><p>  while(out==0);</p>

57、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void upkey()//升序按鍵</p><p><b>  {</b></p><

58、p>  //uchar valueble;</p><p><b>  up=1;</b></p><p><b>  if(up==0)</b></p><p><b>  {</b></p><p>  delay(20);</p><p>

59、  if(up==0);</p><p><b>  {</b></p><p>  while(up==0);</p><p>  switch(count)</p><p><b>  {</b></p><p><b>  case 1:</b>&

60、lt;/p><p>  temp=DS1302_readD(C_SEC);</p><p>  //temp=((valueble&0x70)>>4)*10+(valueble&0x0f);</p><p>  temp=temp+1;</p><p>  up_flag=1;</p><p>

61、  if((temp&0x7f)>0x59)</p><p><b>  temp=0;</b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  temp=DS1302_readD(C_M

62、IN);</p><p>  temp=temp+1;</p><p>  up_flag=1;</p><p>  if((temp&0x7f)>0x59)</p><p><b>  temp=0;</b></p><p><b>  break;</b>&

63、lt;/p><p><b>  case 3:</b></p><p>  temp=DS1302_readD(C_HR);</p><p>  temp=temp+1;</p><p>  up_flag=1;</p><p>  if((temp&0x7f)>0x23)</p

64、><p><b>  temp=0;</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  temp=DS1302_readD(C_WK);</p><p>  temp=temp

65、+1;</p><p>  up_flag=1;</p><p>  if((temp&0x7f)>0x07)</p><p><b>  temp=1;</b></p><p><b>  break;</b></p><p><b>  case

66、5:</b></p><p>  temp=DS1302_readD(C_DAY);</p><p>  temp=temp+1;</p><p>  up_flag=1;</p><p>  if((temp&0x7f)>0x31)</p><p><b>  temp=1;&l

67、t;/b></p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  temp=DS1302_readD(C_MTH);</p><p>  temp=temp+1;</p><p>  up_flag=

68、1;</p><p>  if((temp&0x7f)>0x12)</p><p><b>  temp=1;</b></p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>

69、  temp=DS1302_readD(C_YR);</p><p>  temp=temp+1;</p><p>  up_flag=1;</p><p>  if((temp&0x7f)>0x85)</p><p><b>  temp=0;</b></p><p><b&

70、gt;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void

71、 setkey()//功能切換</p><p><b>  {</b></p><p><b>  set=1;</b></p><p>  if(set==0)</p><p><b>  {</b></p><p>  delay(10);</

72、p><p>  if(set==0)</p><p><b>  {</b></p><p>  count=count+1;</p><p><b>  done=1;</b></p><p><b>  }</b></p><p>

73、;  while(set==0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void qiehuankey()</p><p><b>  {</b></p><p>  qiehuan=1;&

74、lt;/p><p>  if(qiehuan==0)</p><p><b>  {</b></p><p>  delay(10);</p><p>  if(qiehuan==0)</p><p><b>  {</b></p><p>  while

75、(qiehuan==0);</p><p>  num=num+1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(num==2)</p><p><b>  num=0;</b></p&

76、gt;<p><b>  }</b></p><p>  void keydone()</p><p><b>  {</b></p><p>  uchar value;</p><p>  uchar second;</p><p>  if(flag==0

77、)</p><p><b>  {</b></p><p>  temp=DS1302_readD(C_SEC);</p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_SEC|WR,temp|0x80);</p><

78、;p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p><b>  flag=1;</b></p><p><b>  }</b></p><p><b>  setkey();</b></p><p>  switch(count)&l

79、t;/p><p><b>  {</b></p><p><b>  case 1:do</b></p><p><b>  {</b></p><p><b>  outkey();</b></p><p><b>  up

80、key();</b></p><p>  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_SEC|WR,temp|0x80);</p>

81、<p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  //dis_play();</p><p>  hide_sec++;</p><p>  if(hide_

82、sec>10)</p><p>  hide_sec=0;</p><p>  value=DS1302_readD(C_SEC);</p><p>  //time[i]=DS1302_readD(addr|RD);</p><p>  time[0]=((value&0x70)>>4)*10+(value&a

83、mp;0x0f);</p><p>  }while(count==2);break;</p><p><b>  case 2:do</b></p><p><b>  {</b></p><p>  hide_sec=0;</p><p><b>  outke

84、y();</b></p><p><b>  upkey();</b></p><p>  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>

85、;  DS1302_writeD(C_MIN|WR,temp);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  hide_min++;</p><p>  i

86、f(hide_min>10)</p><p>  hide_min=0;</p><p>  value=DS1302_readD(C_MIN);</p><p>  //time[i]=DS1302_readD(addr|RD);</p><p>  time[1]=((value&0x70)>>4)*10+(

87、value&0x0f);</p><p>  }while(count==3);break;</p><p><b>  case 3:do</b></p><p><b>  {</b></p><p>  hide_min=0;</p><p><b>

88、  outkey();</b></p><p><b>  upkey();</b></p><p>  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p>&

89、lt;p>  DS1302_writeD(C_HR|WR,temp);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  hide_hour++;</p><p

90、>  if(hide_hour>10)</p><p>  hide_hour=0;</p><p>  value=DS1302_readD(C_HR);</p><p>  //time[i]=DS1302_readD(addr|RD);</p><p>  time[2]=((value&0x70)>>

91、;4)*10+(value&0x0f);</p><p>  }while(count==4);break;</p><p><b>  case 4:do</b></p><p><b>  {</b></p><p>  hide_hour=0;</p><p>

92、<b>  outkey();</b></p><p><b>  upkey();</b></p><p>  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);<

93、/p><p>  DS1302_writeD(C_WK|WR,temp);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  hide_week++;</p&g

94、t;<p>  if(hide_week>10)</p><p>  hide_week=0;</p><p>  value=DS1302_readD(C_WK);</p><p>  time[5]=((value&0x70)>>4)*10+(value&0x0f);</p><p>  }

95、while(count==5);break;</p><p><b>  case 5:do</b></p><p><b>  {</b></p><p>  hide_week=0;</p><p><b>  outkey();</b></p><p&

96、gt;<b>  upkey();</b></p><p>  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_DAY|WR,temp);

97、</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  hide_day++;</p><p>  if(hide_day>10)</p><

98、;p>  hide_day=0;</p><p>  value=DS1302_readD(C_DAY);</p><p>  time[3]=((value&0x70)>>4)*10+(value&0x0f);</p><p>  }while(count==6);break;</p><p><b&

99、gt;  case 6:do</b></p><p><b>  {</b></p><p>  hide_day=0;</p><p><b>  outkey();</b></p><p><b>  upkey();</b></p><p&

100、gt;  if(up_flag==1)</p><p><b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_MTH|WR,temp);</p><p>  DS1302_writeD(C_WP|WR,PROTE

101、CT);</p><p>  up_flag=0;</p><p><b>  }</b></p><p>  hide_month++;</p><p>  if(hide_month>10)</p><p>  hide_month=0;</p><p>  va

102、lue=DS1302_readD(C_MTH);</p><p>  time[4]=((value&0x70)>>4)*10+(value&0x0f);</p><p>  }while(count==7);break;</p><p><b>  case 7:do</b></p><p>

103、;<b>  {</b></p><p>  hide_month=0;</p><p><b>  outkey();</b></p><p><b>  upkey();</b></p><p>  if(up_flag==1)</p><p>&l

104、t;b>  {</b></p><p>  DS1302_writeD(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_YR|WR,temp);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p>  up_flag=0;</p

105、><p><b>  }</b></p><p>  hide_year++;</p><p>  if(hide_year>10)</p><p>  hide_year=0;</p><p>  value=DS1302_readD(C_YR);</p><p>  

106、time[6]=((value&0x70)>>4)*10+(value&0x0f);</p><p>  }while(count==8);break;</p><p>  case 8: count=0;</p><p>  /*hide_sfm=0;</p><p>  hide_week=0;</p&

107、gt;<p>  hide_nyr=0;*/</p><p>  hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;</p><p>  second=DS1302_readD(C_SEC);</p><p>  DS1302_writeD

108、(C_WP|WR,UNPROTECT);</p><p>  DS1302_writeD(C_SEC|WR,second&0x7f);</p><p>  DS1302_writeD(C_WP|WR,PROTECT);</p><p><b>  done=0;</b></p><p><b>  br

109、eak;</b></p><p>  default:break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p

110、><p>  TMOD=0x01;</p><p><b>  TH0=0xfc;</b></p><p><b>  TL0=0x18;</b></p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</

111、b></p><p><b>  EA=1;</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b>

112、;</p><p>  DS1302_init();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  while(done==0)</p><p><b>  {</b></p>

113、;<p>  DS1302_getT();</p><p><b>  setkey();</b></p><p>  qiehuankey();</p><p><b>  flag=0;</b></p><p><b>  }</b></p>&

114、lt;p>  while(done==1)</p><p><b>  {</b></p><p>  keydone();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&

115、lt;/b></p><p>  void time0(void) interrupt 1</p><p><b>  {</b></p><p><b>  TH0=0xfc;</b></p><p><b>  TL0=0x18;</b></p><

116、;p><b>  cnt++;</b></p><p><b>  if(cnt>9)</b></p><p><b>  cnt=0;</b></p><p>  if(num==0)</p><p><b>  {</b></p>

117、;<p>  switch(cnt)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  if(hide_sec<6)</p><p>  {P0=SEG7[time[0]%10];P2=ACT[0];break;<

118、;/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[0];break;</p><p><b>  }</b>&

119、lt;/p><p><b>  case 2:</b></p><p>  if(hide_sec<6)</p><p>  {P0=SEG7[time[0]/10];P2=ACT[1];break;</p><p><b>  }</b></p><p><b>

120、;  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[1];break;</p><p><b>  }</b></p><p><b>  case 3:</b></p><p>

121、  if(hide_min<6)</p><p><b>  {</b></p><p>  P0=SEG7[time[1]%10];P2=ACT[2];break;</p><p><b>  }</b></p><p><b>  else</b></p>

122、<p><b>  {</b></p><p>  P0=0xff;P2=ACT[2];break;</p><p><b>  }</b></p><p><b>  case 4:</b></p><p>  if(hide_min<6)</p&g

123、t;<p><b>  {</b></p><p>  P0=SEG7[time[1]/10];P2=ACT[3];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

124、/b></p><p>  P0=0xff;P2=ACT[3];break;</p><p><b>  }</b></p><p><b>  case 5:</b></p><p>  if(hide_hour<6)</p><p><b>  {&

125、lt;/b></p><p>  P0=SEG7[time[2]%10];P2=ACT[4];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

126、;  P0=0xff;P2=ACT[4];break;</p><p><b>  }</b></p><p><b>  case 6:</b></p><p>  if(hide_hour<6)</p><p><b>  {</b></p><p

127、>  P0=SEG7[time[2]/10];P2=ACT[5];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[5];break

128、;</p><p><b>  }</b></p><p><b>  case 7:</b></p><p>  if(hide_week<6)</p><p><b>  {</b></p><p>  P0=SEG7[time[5]%10];

129、P2=ACT[6];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[6];break;</p><p><

130、b>  }</b></p><p><b>  case 8:</b></p><p>  if(hide_week<6)</p><p><b>  {</b></p><p>  P0=SEG7[time[5]/10];P2=ACT[7];break;</p>

131、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[7];break;</p><p><b>  }</b></p&g

132、t;<p><b>  }</b></p><p><b>  }</b></p><p>  if(num==1)</p><p><b>  {</b></p><p>  switch(cnt)</p><p><b>  

133、{</b></p><p><b>  case 1:</b></p><p>  if(hide_day<6)</p><p>  {P0=SEG7[time[3]%10];P2=ACT[0];break;</p><p><b>  }</b></p><p

134、><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[0];break;</p><p><b>  }</b></p><p><b>  case 2:</b></p>

135、;<p>  if(hide_day<6)</p><p>  {P0=SEG7[time[3]/10];P2=ACT[1];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b&

136、gt;</p><p>  P0=0xff;P2=ACT[1];break;</p><p><b>  }</b></p><p><b>  case 3:</b></p><p>  if(hide_month<6)</p><p><b>  {<

137、;/b></p><p>  P0=SEG7[time[4]%10];P2=ACT[2];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p> 

138、 P0=0xff;P2=ACT[2];break;</p><p><b>  }</b></p><p><b>  case 4:</b></p><p>  if(hide_month<6)</p><p><b>  {</b></p><p&

139、gt;  P0=SEG7[time[4]/10];P2=ACT[3];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[3];break;

140、</p><p><b>  }</b></p><p><b>  case 5:</b></p><p>  if(hide_year<6)</p><p><b>  {</b></p><p>  P0=SEG7[time[6]%10];P

141、2=ACT[4];break;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0=0xff;P2=ACT[4];break;</p><p><b

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論