

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)原理及接口技術(shù)</p><p><b> 課程設(shè)計(jì)</b></p><p><b> 智能電子鐘</b></p><p><b> 摘 要</b></p><p> 本設(shè)計(jì)采用單片機(jī)AT89S52芯片以及相關(guān)的芯片來實(shí)現(xiàn)多功能的數(shù)字鐘。該設(shè)
2、計(jì)選用一線制溫度計(jì)DS18B20 作為溫度傳感器,實(shí)時(shí)時(shí)鐘芯片DS1302提供當(dāng)前日期和時(shí)間數(shù)據(jù),并將實(shí)時(shí)的日期和溫度數(shù)據(jù)在字符型液晶顯示器LCD1602上顯示出來。本文設(shè)計(jì)了一種基AT89S52單片機(jī),使用Dallas的一線制數(shù)字溫度計(jì)DS18B20作為溫度傳感器,實(shí)時(shí)時(shí)鐘芯片DS1302提供當(dāng)前日期和時(shí)間數(shù)據(jù),并將實(shí)時(shí)的日期和溫度數(shù)據(jù)字符型液晶顯示器LCD1602上顯示,本次設(shè)計(jì)的多功能數(shù)字鐘采用數(shù)字電路對(duì)日期和溫度進(jìn)行控制設(shè)置,我
3、們采用LCD液晶顯示,以24小時(shí)的計(jì)時(shí)方式,根據(jù)LCD顯示原理進(jìn)行顯示,定時(shí)器計(jì)數(shù)。在本次設(shè)計(jì)中,電路具有顯示日期、時(shí)間、溫度的基本功能,還可以實(shí)現(xiàn)對(duì)它們的調(diào)整。本次設(shè)計(jì)要達(dá)到的目的是:具有時(shí)間顯示和手動(dòng)校對(duì)功能,24小時(shí)制;具有年、月、日顯示和手動(dòng)校對(duì)功能;具有顯示當(dāng)前星期的功能;具有鬧鈴功能;具有環(huán)境溫度采集功能;掉電后無需重新設(shè)置時(shí)間和日期。</p><p> 關(guān)鍵詞: DS1302時(shí)鐘芯片; LCD16
4、02; DS18B20溫度傳感器.</p><p><b> 目 錄</b></p><p> 1 總體方案設(shè)計(jì)2</p><p> 1.1 設(shè)計(jì)內(nèi)容2</p><p> 2 單元模塊設(shè)計(jì)3</p><p> 2.1 各單元模塊功能介紹及電路設(shè)計(jì)3</p><
5、;p> 2.1.1 溫度采集電路3</p><p> 2.1.2 DS1302時(shí)鐘電路3</p><p> 2.1.3 串行通信接口電路4</p><p> 2.1.4 電源電路4</p><p> 2.1.5 按鍵電路5</p><p> 2.1.6液晶顯示顯示電路5</p>
6、<p> 2.2 特殊器件介紹5</p><p> 2.2.1 AT89S52單片機(jī)芯片5</p><p> 2.2.2 DS1302介紹6</p><p> 2.2.3 溫度傳感器DS18B207</p><p> 2.2.4 液晶顯示LCD16027</p><p><b&
7、gt; 3軟件設(shè)計(jì)8</b></p><p> 3.1軟件設(shè)計(jì)流程8</p><p> 3.1.1 溫度采集流程9</p><p> 3.2.2 日期數(shù)據(jù)處理流程9</p><p> 4 調(diào)試與結(jié)果10</p><p><b> 附錄11</b></p&
8、gt;<p><b> 參考文獻(xiàn)23</b></p><p><b> 1 總體方案設(shè)計(jì)</b></p><p><b> 1.1 設(shè)計(jì)內(nèi)容</b></p><p> 該電路具有顯示日期、時(shí)間、溫度的基本功能,還可以實(shí)現(xiàn)對(duì)它們的調(diào)整。本次設(shè)計(jì)要達(dá)到的目的是:具有時(shí)間顯示和手動(dòng)校
9、對(duì)功能,24小時(shí)制;具有年、月、日顯示和手動(dòng)校對(duì)功能;具有顯示當(dāng)前星期的功能;具有鬧鈴功能;具有環(huán)境溫度采集功能;掉電后無需重新設(shè)置時(shí)間和日期;</p><p> 系統(tǒng)不但接口設(shè)計(jì)簡(jiǎn)單、便于控制,而且具有很好的人機(jī)界面,可以通過幾個(gè)按鍵對(duì)當(dāng)前的時(shí)間進(jìn)行調(diào)整,對(duì)鬧鐘進(jìn)行隨意設(shè)置,以及溫度超過上下限會(huì)自動(dòng)進(jìn)行報(bào)警(LED亮)等功能。其原理框圖如下圖2.1所示:</p><p> 圖1.1
10、數(shù)字鐘原理框圖</p><p> 在現(xiàn)代SOC技術(shù)的引領(lǐng)下,人們對(duì)低故障、高實(shí)時(shí)、高可靠、高穩(wěn)定的性能更加青睞,其抗干擾性強(qiáng),加密性強(qiáng),超低功耗,可以遠(yuǎn)程升級(jí),內(nèi)部有專用復(fù)位電路,價(jià)格也較便宜,結(jié)合本設(shè)計(jì)的要求及綜合以上比較的情況,我們選擇用AT89S52單片機(jī)芯片來實(shí)現(xiàn)本次設(shè)計(jì)。</p><p><b> 2 單元模塊設(shè)計(jì)</b></p><
11、p> 2.1 各單元模塊功能介紹及電路設(shè)計(jì)</p><p> 2.1.1 溫度采集電路</p><p> DS18B20是美國(guó)Dallas半導(dǎo)體公司生產(chǎn)的一線制數(shù)字溫度傳感器。測(cè)量范圍為- 50 ℃~ + 125 ℃,精度可達(dá)0. 1 ℃,不需A /D 轉(zhuǎn)換電路,直接將溫度值轉(zhuǎn)換成數(shù)字量。溫度數(shù)據(jù)的傳輸,只需要一根數(shù)據(jù)線,直接將數(shù)據(jù)線與單片機(jī)的P3.6口相連接。其圖如下3.1所
12、示:</p><p><b> 圖2.1溫度采集 </b></p><p> 2.1.2 DS1302時(shí)鐘電路</p><p> DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí)。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與
13、出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。DS1302提供2個(gè)電源引腳:一個(gè)(VCC2)接主電源;另一個(gè)(VCC1)接備用電源。其圖如下3.2所示:</p><p> 圖2.2 DS1302時(shí)鐘電路</p><p> 2.1.3 串行通信接口電路</p><p> MAX232是電壓轉(zhuǎn)換芯片,將TTL電平轉(zhuǎn)換成可以和電腦串口匹配的電壓。DB9通過下載線纜與電腦連接,可以將程
14、序下載到單片機(jī)上。其圖如下3.3所示:</p><p> 圖2.3 RS232串行通信</p><p> 2.1.4 電源電路</p><p> 為了便于使用,本次采用了把交流的220V經(jīng)變壓器再經(jīng)LM7805B 變?yōu)閱纹瑱C(jī)所使用的5V電源,如圖3.4。</p><p><b> 圖2.4 電源電路</b>&l
15、t;/p><p> 2.1.5 按鍵電路</p><p> 本次設(shè)計(jì)中用到了4*4的矩陣鍵盤列陣,通過賦低電平選中其中一列,以便來控制時(shí),分,秒,年,月,日,以及鬧鐘的調(diào)整。其電路如圖3.5:</p><p> 圖2.5 按鍵控制電路</p><p> 2.1.6液晶顯示顯示電路</p><p> 本設(shè)計(jì)中會(huì)將時(shí)
16、分秒,年月日周以及鬧鐘的設(shè)置,溫度全部都會(huì)顯示到液晶LCD1602上面,其具有16×2能夠顯示所有英文大小寫字母,0到9十個(gè)數(shù)字以及一些常用的符號(hào)。該液晶在4.5V到5.5V電壓范圍內(nèi)都能正確工作,平均工作電流為2mA。液晶HS162共16個(gè)管腳。但是由于原理圖中電路很簡(jiǎn)單并且只用到接插件所以此處沒有給出原理圖。</p><p> 2.2 特殊器件介紹</p><p> 2.
17、2.1 AT89S52單片機(jī)芯片</p><p> AT89S52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高
18、靈活、超有效的解決方案。 AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),
19、單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。其圖如下3.6所示:</p><p> 圖2.6 AT89S52引腳圖</p><p> 2.2.2 DS1302介紹</p><p> DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的
20、時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月、年,一個(gè)月小于31天時(shí)可自動(dòng)進(jìn)行調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行。DS1302是以下的特性:雙電源管腳用于主電源和備份電源供應(yīng),Vcc1為課編程涓流充電電源,附加七個(gè)字節(jié)存儲(chǔ)器。其外部引腳分配如圖所示:</p><p> 圖2.7 DS1302的
21、外部時(shí)鐘引腳分配</p><p> 2.2.3 溫度傳感器DS18B20</p><p> 采用獨(dú)特的一線接口,可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無需備用電源。測(cè)量溫度范圍為-55℃至+125℃ 。華氏相當(dāng)于是-67°F到257華氏度 -10 °C至+85 °C范圍內(nèi)精度為±0.5℃。溫度傳感器可編程的分辨率為9~12位 溫度轉(zhuǎn)
22、換為12位數(shù)字格式最大值為750毫秒 用戶可定義的非易失性溫度報(bào)警設(shè)置應(yīng)用范圍包括恒溫控制,工業(yè)系統(tǒng),消費(fèi)電子產(chǎn)品溫度計(jì),或任何熱敏感系統(tǒng)。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。該裝置信號(hào)線高的時(shí)候,內(nèi)部電容器儲(chǔ)存能量通由1線通信線路給片子供電,而且在低電平期間為片子供電直至下一個(gè)高電平的到來重新充電。</p><p> 圖2.8
23、DS18B20的管腳</p><p> 2.2.4 液晶顯示LCD1602</p><p> HS1602是目前最常用的字符液晶之一。在操作液晶時(shí),先要對(duì)液晶進(jìn)行初始化,即進(jìn)行最初是的命令設(shè)置。要設(shè)置液晶的工作方式設(shè)置,顯示狀態(tài)設(shè)置,輸入方式設(shè)置等。最后再向液晶寫入數(shù)據(jù),即寫入想要顯示字符的ASCII碼。</p><p><b> 3軟件設(shè)計(jì)<
24、/b></p><p><b> 3.1軟件設(shè)計(jì)流程</b></p><p> 本次設(shè)計(jì)的系統(tǒng)軟件設(shè)計(jì)主要包括主程序設(shè)計(jì)和溫度采集子模塊程序設(shè)計(jì)、日歷日期數(shù)據(jù)子模塊程序、按鍵控制子模塊程序和LCD液晶顯示子模塊程序設(shè)計(jì)等。主程序主要完成器件的初始化,并判斷有無按鍵按下,并根據(jù)判斷的結(jié)果調(diào)用相應(yīng)的子模塊程序;而溫度采集子模塊程序和日歷日期數(shù)據(jù)子模塊程序完成相應(yīng)
25、的數(shù)據(jù)采集、處理和保存,按鍵處理子模塊程序完成日期和鬧鐘的設(shè)置,而液晶顯示子模塊只要把上述子模塊儲(chǔ)存的數(shù)據(jù)送去顯示即可。系統(tǒng)總的流程圖如下圖所示:</p><p> 圖3.1 主程序流程</p><p> 3.1.1 溫度采集流程</p><p> DS18B20在進(jìn)行溫度采集時(shí),必須首先進(jìn)行初始化,然后發(fā)ROM操作指令,再發(fā)存儲(chǔ)器操作指令,最后才能傳輸數(shù)據(jù)。
26、每次對(duì)器件進(jìn)行讀寫操作時(shí), 必須嚴(yán)格按照DS18B20 的時(shí)序要求。因?yàn)闇囟葦?shù)據(jù)在DS18B20中是以2的補(bǔ)碼形式存放的,且低4位為小數(shù)部分, 4位到10位為整數(shù)部分,其余為符號(hào)位,因此在讀出2個(gè)字節(jié)的溫度數(shù)據(jù)后,首先求一次補(bǔ)碼得到原碼,再將數(shù)據(jù)分離為整數(shù)溫度值和小數(shù)溫度值,整數(shù)部分的值可通過數(shù)據(jù)交換指令得到,而小數(shù)溫度值部分可通過查表得到。</p><p> 因?yàn)樵谝壕э@示器上顯示的是字符的ASCII碼,因而
27、還要轉(zhuǎn)換為BCD,在加30H轉(zhuǎn)換為ASCII碼。</p><p> 其流程圖如圖3.2:</p><p> 3.1.2 日期數(shù)據(jù)處理流程</p><p> 對(duì)時(shí)鐘芯片的操作主要包括一是將芯片中的日期等數(shù)據(jù)讀出來,二是在進(jìn)行日期等設(shè)置時(shí)將設(shè)置的數(shù)據(jù)寫入芯片,這也是按鍵處理時(shí)的主要內(nèi)容。無論是讀數(shù)據(jù)還是寫數(shù)據(jù)滿足DS1302 對(duì)時(shí)序的要求。而對(duì)芯片各個(gè)數(shù)據(jù)部分的
28、訪問是通過地址進(jìn)行的,且讀和寫的地址不一樣。讀出的數(shù)據(jù)同樣要轉(zhuǎn)為ASC II碼,然后儲(chǔ)存起來,等待送去顯示,流程圖如圖3.3:</p><p><b> 圖3.2 流程圖</b></p><p><b> 圖3.3 流程圖</b></p><p><b> 4 調(diào)試與結(jié)果</b></p&g
29、t;<p> 系統(tǒng)的調(diào)試可以分為軟件調(diào)試與硬件調(diào)試。軟件調(diào)試可以在其集成開放環(huán)境中進(jìn)行,編譯完之后,分別對(duì)各子程序進(jìn)行仿真。仿真之后在下載到單片機(jī),根據(jù)實(shí)際要求,進(jìn)行逐一測(cè)試。如果不滿足則進(jìn)行修改。直到可以準(zhǔn)確的報(bào)站以及顯示各站名為止。</p><p> 對(duì)于硬件的測(cè)試,要對(duì)電路板的各個(gè)部分進(jìn)行測(cè)試,尤其對(duì)虛焊要嚴(yán)格檢查,因?yàn)槿绻l(fā)生短路可能是其他元件損壞。用萬用表對(duì)電路板進(jìn)行反復(fù)檢查,再分別測(cè)
30、試鍵盤部分,I/O部分,LED顯示部分等。</p><p> 通過本次設(shè)計(jì),我們對(duì)單片機(jī)有了更深刻的認(rèn)識(shí),也從實(shí)踐的例子中去感受到了單片機(jī)設(shè)計(jì)給我們?cè)O(shè)計(jì)帶來的改變與進(jìn)步。我們不僅掌握Keil uVision3軟件的使用,與此同時(shí),我們還對(duì)電子設(shè)計(jì)的思路有了更多的認(rèn)識(shí)。這次對(duì)多功能數(shù)字鐘的設(shè)計(jì)與制作,讓我了解設(shè)計(jì)電路的程序,也了解了關(guān)于智能電子鐘的原理與設(shè)計(jì)理念。在此次的智能電子鐘設(shè)計(jì)過程中,更進(jìn)一步地熟悉了芯片
31、的結(jié)構(gòu)及掌握了各芯片的工作原理和具體的使用方法??傊鞘芤娣藴\。這為自己今后進(jìn)一步深化學(xué)習(xí),積累了一定寶貴經(jīng)驗(yàn)。</p><p><b> 附錄</b></p><p><b> 實(shí)現(xiàn)程序:</b></p><p> //介紹整個(gè)程序所包含的頭文件</p><p> #include<
32、reg52.h></p><p> #include<intrins.h></p><p> #include<ds1302.h></p><p> #include<lcd1602.h></p><p> #include<1820.h></p><p>
33、<b> //定義</b></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> Uchar u,u1,u2,u3,u4,u5,u6,u7,u8,</p><p><b> ala
34、rmOn;</b></p><p> uint fen,miao,shi,nian,yue,ri,anshu,</p><p><b> zh;</b></p><p> uchar linshi,a,a1,a2,a3,a4,a5,a6;</p><p> uint tab[3];</p>
35、<p> sbit rd=P3^5;</p><p> sbit P30=P3^0;</p><p> sbit P31=P3^1;</p><p> sbit P32=P3^2;</p><p> sbit P33=P3^3;</p><p> sbit beep=P3^3;</p&g
36、t;<p> sbit ds1302_rst=P0^2;</p><p> sbit ds1302_sclk=P0^0;</p><p> sbit ds1302_io=P0^1;</p><p> sbit ACC7=ACC^7;</p><p> sbit B1=B^0;</p><p>
37、 sbit lcd1602_en=P0^5;</p><p> sbit lcd1602_rw=P0^6;</p><p> sbit lcd1602_rs=P0^7;</p><p> #define lcd1602_data P2</p><p> uchar low,high; //存儲(chǔ)溫度的高位</p>&
38、lt;p><b> 值和低位值</b></p><p> sbit DQ=P3^6; // -- 定義通信端口</p><p> sbit D1=P0^7;</p><p> uchar gw,sw,w4,tpl,tph;</p><p> uint bai,b;</p><p>
39、;<b> //主函數(shù)部分</b></p><p> void fenjia (uchar rddr,uchar wddr,uchar yddr,uchar fenjiajian)//鍵盤掃描</p><p><b> {</b></p><p> u=ds1302_read(rddr);</p>&
40、lt;p> fen=((u&0x70)>>4)*10+(u&0x0f);//進(jìn)制轉(zhuǎn)換</p><p> if(fenjiajian==1)</p><p><b> {</b></p><p><b> fen++;</b></p><p> if(fen
41、==60)</p><p><b> {</b></p><p><b> fen=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else&l
42、t;/b></p><p><b> {</b></p><p><b> fen--;</b></p><p> if((fen+1)==0)</p><p><b> {</b></p><p><b> fen=59;&l
43、t;/b></p><p><b> }</b></p><p><b> }</b></p><p> ds1302_write(wddr,((fen/10)<<4)|(fen%10));</p><p> write_sfm(yddr,fen);</p>
44、<p> lcd1602_writecom(0x80+0x40+yddr);</p><p> lcd1602_writecom(0x0f);</p><p> lcd1602_writecom(0x80+0x40+yddr);</p><p><b> }</b></p><p> void shi
45、jia (uchar rddr,uchar wddr,uchar yddr,uchar shijiajian)//鍵盤掃描</p><p><b> {</b></p><p> a4=ds1302_read(rddr);</p><p> shi=((a4&0x70)>>4)*10+(a4&0x0f);//進(jìn)
46、制轉(zhuǎn)換</p><p> if(shijiajian==1)</p><p><b> {</b></p><p><b> shi++;</b></p><p> if(shi==24)</p><p><b> {</b></p>
47、;<p><b> shi=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p
48、><p><b> shi--;</b></p><p> if((shi+1)==0)</p><p><b> {</b></p><p><b> shi=23;</b></p><p><b> }</b></p
49、><p> }ds1302_write(wddr,(shi/10)<<4|(shi%10));</p><p> write_sfm(yddr,shi);</p><p> lcd1602_writecom(0x80+0x40+yddr)</p><p> lcd1602_writecom(0x0f);</p>
50、<p> lcd1602_writecom(0x80+0x40+yddr);</p><p><b> }</b></p><p> void sfmset()</p><p><b> {</b></p><p> uchar linshi;</p><p&
51、gt;<b> do</b></p><p><b> {</b></p><p> if(P30==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> i
52、f(P30==0)</p><p><b> {</b></p><p> while(!(P30));</p><p><b> linshi=1;</b></p><p><b> anshu++;</b></p><p> if(ansh
53、u==1)</p><p><b> {</b></p><p> a=ds1302read(0x81);</p><p> miao=((a&0x70)>>4)*10+(a&0x0f);/</p><p> write_sfm(6,miao)lcd1602_writecom(0x
54、80+0x40+6);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+6);</p><p><b> }</b></p><p> if(anshu==2)</p><p><b> {</b></p><p> u1=ds130
55、2_read(0x83)fen=((u1&0x70)>>4)*10+(u1&0x0f);</p><p> write_sfm(3,fen);lcd1602_writecom(0x80+0x40+3);</p><p> lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+3);</p>
56、<p><b> }</b></p><p> if(anshu==3)</p><p><b> {</b></p><p> u2=ds1302_read(0x85);</p><p> shi=((u2&0x70)>>4)*10+(u2&0x
57、0f);</p><p> write_sfm(0,shi);lcd1602_writecom(0x80+0x40+0);</p><p> lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+0);</p><p><b> }</b></p><p>
58、if(anshu==4)</p><p><b> {</b></p><p> lcd1602_writecom(0x0c); lcd1602_writecom(0x80 + 0x40+14);lcd1602_writedata('s');</p><p> lcd1602_writedata('t'
59、;); lcd1602_writecom(0x0f);</p><p><b> }</b></p><p> if(anshu==5)</p><p><b> {</b></p><p> u7=ds1302_read(0x83)tab[0]=((u7&0x70
60、)>>4)*10+(u7&0x0f); write_sfm(3,tab[0]);//table[0]為分存儲(chǔ)器lcd1602_writecom(0x80+0x40+3);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+3);</p><p><b> }</b></p>&l
61、t;p> if(anshu==6)</p><p> {u8=ds1302_read(0x85);tab[1]=((u8&0x70)>>4)*10+(u8&0x0f);write_sfm(0,tab[1]);//table[1]為時(shí)存儲(chǔ)器lcd1602_writecom(0x80+0x40+0);lcd1602_writecom(0x0
62、f);lcd1602_writecom(0x80+0x40+0);</p><p><b> }</b></p><p> if(anshu==7)</p><p><b> {</b></p><p> lcd1602_writecom(0x0c);</p><p&
63、gt; lcd1602_writecom(0x80 + 0x40+14);</p><p> lcd1602_writedata('O'); //顯示"On",提示鬧鐘已開啟 lcd1602_writedata('n');</p><p><b> linshi=0;</b><
64、;/p><p><b> }</b></p><p> if(anshu==8)</p><p><b> {</b></p><p><b> linshi=0;</b></p><p> anshu = 0;</p><p&
65、gt; beep=1; lcd1602_writecom(0x80 + 0x40+14); //第二次按下清除 "On"標(biāo)記</p><p> lcd1602_writedata(''); lcd1602_writedata(' ');</p><p><b> }
66、</b></p><p> if(anshu==9)</p><p><b> {</b></p><p><b> linshi=0;</b></p><p> anshu=0;ds1302_write(0x80,0x00);</p><p>
67、 lcd1602_writecom(0x38);</p><p> lcd1602_writecom(0x0c);//不出現(xiàn)光標(biāo)</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
68、t;p> if (anshu==2)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P3
69、2==0)</p><p><b> {</b></p><p> while(!P32);</p><p> fenjia(0x83,0x82,3,1);</p><p><b> }</b></p><p><b> }</b></p
70、><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P33==0)</p><p><b> {</b></p><p>
71、while(!P33);</p><p> fenjia(0x83,0x82,3,0);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (anshu==
72、3)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p> while(!P32);</p><p> shijia(0x85,0x84,0,1);</p><p&g
73、t;<b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P33==0)</p><p><b> {<
74、;/b></p><p> while(!P33);</p><p> shijia(0x85,0x84,0,0);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
75、/p><p> if (anshu==5)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p&
76、gt; if(P32==0)</p><p><b> {</b></p><p> while(!P32);</p><p><b> tab[0]++;</b></p><p> write_sfm(3,tab[0]);</p><p> if(tab[0]=
77、=60)</p><p><b> {</b></p><p><b> tab[0]=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
78、;/b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P33==0)</p><p><b> {</b></p>
79、<p> while(!P33);</p><p><b> tab[0]--;</b></p><p> write_sfm(3,tab[0]);</p><p> if(tab[0]==0)</p><p><b> {</b></p><p>
80、 tab[0]=59;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (anshu==6)&
81、lt;/p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p> while(!P32);</p><p><b> tab[1]++;</b></p><
82、p> write_sfm(0,tab[1]);</p><p> if(tab[1]==24)</p><p><b> {</b></p><p><b> tab[1]=0;</b></p><p><b> }</b></p><p&g
83、t;<b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p> while(!P32);</p><p><b> tab[1]--;</b></p><p> write_sfm(0
84、,tab[1]);</p><p> if(tab[1]==0)</p><p><b> {</b></p><p> tab[1]=23;</p><p><b> }</b></p><p><b> }</b></p>&
85、lt;p><b> }</b></p><p> if (anshu==7) //設(shè)置好鬧鐘返回時(shí)鐘界面并開啟鬧鐘</p><p><b> {</b></p><p> lcd1602_writecom(0x0c);//鬧鐘已經(jīng)設(shè)置好</p><p> lcd1602_writec
86、om(0x80 + 0x40+16);</p><p> lcd1602_writedata('O'); //顯示"On",提示鬧鐘已開啟</p><p> lcd1602_writedata('n');</p><p> u7=ds1302_read(0x83);</p><p>
87、 fen=((u7&0x70)>>4)*10+(u7&0x0f);</p><p> u8=ds1302_read(0x85);</p><p> shi=((u8&0x70)>>4)*10+(u8&0x0f);</p><p> if(tab[0]==fen && tab[1]==shi
88、)</p><p><b> {</b></p><p> alarmOn = 1; //鬧鐘時(shí)間到了</p><p><b> }</b></p><p> if(alarmOn == 1)</p><p><b> {</b></p&
89、gt;<p><b> beep = 0;</b></p><p> delay(10);</p><p><b> beep=1;</b></p><p> delay(10);</p><p><b> beep = 0;</b></p>
90、<p> delay(10);</p><p><b> beep=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
91、t; while(linshi);</p><p><b> }</b></p><p> void zhjia(uchar rddr,uchar wddr,uchar yddr,uchar zhjiajian)</p><p><b> {</b></p><p> u6=ds1302_
92、read(rddr);</p><p> zh=u6&0x07;//進(jìn)制轉(zhuǎn)換</p><p> if(zhjiajian==1)</p><p><b> {</b></p><p><b> zh++;</b></p><p><b> if(z
93、h==8)</b></p><p><b> {</b></p><p><b> zh=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
94、; else</b></p><p><b> {</b></p><p><b> zh--;</b></p><p><b> if(zh==0)</b></p><p><b> {</b></p><p&g
95、t;<b> zh=7;</b></p><p><b> }</b></p><p><b> }</b></p><p> ds1302_write(wddr,(zh/10)<<4|(zh%10));</p><p> write_nyr(yddr,z
96、h);</p><p> lcd1602_writecom(0x80+yddr);</p><p> lcd1602_writecom(0x0f);</p><p> lcd1602_writecom(0x80+yddr);</p><p><b> }</b></p><p> Voi
97、d rijia(uchar rddr,uchar wddr,uchar yddr,uchar rijiajian)</p><p><b> {</b></p><p> u3=ds1302_read(rddr);</p><p> ri=((u3&0x70)>>4)*10+(u3&0x0f);//進(jìn)制轉(zhuǎn)換&l
98、t;/p><p> if(rijiajian==1)</p><p><b> {</b></p><p><b> ri++;</b></p><p> if(ri==31)</p><p><b> {</b></p><p
99、><b> ri=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><
100、;p><b> ri--;</b></p><p> if((ri+1)==0)</p><p><b> {</b></p><p><b> ri=30;</b></p><p><b> }</b></p><p&
101、gt;<b> }</b></p><p> ds1302_write(wddr,(ri/10)<<4|(ri%10));</p><p> write_nyr(yddr,ri);</p><p> lcd1602_writecom(0x80+yddr);</p><p> lcd1602_writ
102、ecom(0x0f);</p><p> lcd1602_writecom(0x80+yddr);</p><p><b> }</b></p><p> void yuejia (uchar rddr,uchar wddr,uchar yddr,uchar yuejiajian)//鍵盤掃描</p><p>&l
103、t;b> {</b></p><p> u4=ds1302_read(rddr);</p><p> yue=((u4&0x70)>>4)*10+(u4&0x0f);//進(jìn)制轉(zhuǎn)換</p><p> if(yuejiajian==1)</p><p><b> {</b&g
104、t;</p><p><b> yue++;</b></p><p> if(yue==13)</p><p><b> {</b></p><p><b> yue=0;</b></p><p><b> }</b>&l
105、t;/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> yue--;</b></p><p> if((yue+1)==0)</
106、p><p><b> {</b></p><p><b> yue=12;</b></p><p><b> }</b></p><p><b> }</b></p><p> ds1302_write(wddr,(yue/1
107、0)<<4|(yue%10));</p><p> write_nyr(yddr,yue);</p><p> lcd1602_writecom(0x80+yddr);</p><p> lcd1602_writecom(0x0f);</p><p> lcd1602_writecom(0x80+yddr);</p&
108、gt;<p><b> }</b></p><p> void nianjia (uchar rddr,uchar wddr,uchar yddr,uchar nianjiajian)//鍵盤掃描</p><p><b> {</b></p><p> u5=ds1302_read(rddr);<
109、;/p><p> nian=((u5&0x70)>>4)*10+(u5&0x0f);//進(jìn)制轉(zhuǎn)換</p><p> if(nianjiajian==1)</p><p><b> {</b></p><p><b> nian++;</b></p>&l
110、t;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> nian--;</b></p><p><b> }</b></p>
111、<p> ds1302_write(wddr,(nian/10)<<4|(nian%10));</p><p> write_nyr(yddr,nian);</p><p> lcd1602_writecom(0x80+yddr);</p><p> lcd1602_writecom(0x0f);</p><p&
112、gt; lcd1602_writecom(0x80+yddr);</p><p><b> }</b></p><p> void nyrset()</p><p><b> {</b></p><p><b> do</b></p><p>
113、<b> {</b></p><p> if(P31==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P31==0)</p><p><b> {</
114、b></p><p> while(!(P31));</p><p><b> linshi=1;</b></p><p><b> anshu++;</b></p><p> if(anshu==1)</p><p> {a6=ds1302_read(
115、0x8B);zh=((a6&0x70)>>4)*10+(a6&0x0f);</p><p> write_nyr(13,zh);lcd1602_writecom(0x80+13);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+13);</p><p><b> }</b>&l
116、t;/p><p> if(anshu==2)</p><p> {a1=ds1302_read(0x87);ri=((a1&0x70)>>4)*10+(a1&0x0f);</p><p> write_nyr(8,ri);lcd1602_writecom(0x80+8);lcd1602_writecom(0x
117、0f); lcd1602_writecom(0x80+8);</p><p><b> }</b></p><p> if(anshu==3)</p><p><b> {</b></p><p> a2=ds1302_read(0x89);</p><p>
118、; yue=((a2&0x70>>4))*10+(a2&0x0f);</p><p> write_nyr(5,yue);</p><p> lcd1602_writecom(0x80+5);</p><p> lcd1602_writecom(0x0f);</p><p> lcd1602_writec
119、m(0x80+5);</p><p><b> }</b></p><p> if(anshu==4)</p><p><b> {</b></p><p> a3=ds1302_read(0x8D);</p><p> nian=((a3&0x70>
120、>4))*10+(a3&0x0f)</p><p> write_nyr(2,nian);</p><p> lcd1602_writecom(0x80+2);</p><p> lcd1602_writecom(0x0f);</p><p> lcd1602_writecom(0x80+2);</p>&
121、lt;p><b> }</b></p><p> if(anshu==5)</p><p><b> {</b></p><p><b> linshi=0;</b></p><p><b> anshu=0;</b></p>
122、<p> ds1302_write(0x80,0x00);lcd1602_writecom(0x38);</p><p> lcd1602_writecom(0x0c);</p><p><b> }</b></p><p><b> }</b></p><p> }i
123、f (anshu==1)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p> while(!P32);</p><p> zhjia(0x8B,0x8A,13,1);</p>
124、;<p><b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P33==0)</p><p><b
125、> {</b></p><p> while(!P33);</p><p> zhjia(0x8B,0x8A,13,0);</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
126、/b></p><p> if (anshu==2)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p> while(!P32);</p><p> r
127、ijia(0x87,0x86,8,1);</p><p><b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(P33=
128、=0)</p><p><b> {</b></p><p> while(!P33);</p><p> rijia(0x87,0x86,8,0);</p><p><b> }</b></p><p><b> }</b></p>
129、;<p><b> }</b></p><p> if (anshu==3)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p> while(!P
130、32);yuejia(0x89,0x88,5,1);</p><p><b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p&g
131、t; if(P33==0)</p><p><b> {</b></p><p> while(!P33);</p><p> yuejia(0x89,0x88,5,0);</p><p><b> }</b></p><p><b> }</b&
132、gt;</p><p><b> }</b></p><p> if (anshu==4)</p><p><b> {</b></p><p> if(P32==0)</p><p><b> {</b></p><p&g
133、t; while(!P32);</p><p> nianjia(0x8D,0x8C,2,1);</p><p><b> }</b></p><p> if(P33==0)</p><p><b> {</b></p><p><b> delay(5
134、);</b></p><p> if(P33==0)</p><p><b> {</b></p><p> while(!P33);nianjia(0x8D,0x8C,2,0);</p><p><b> }</b></p><p><b&
135、gt; }</b></p><p><b> }</b></p><p><b> }</b></p><p> while(linshi);</p><p><b> }</b></p><p> void init()<
136、/p><p><b> {</b></p><p> uchar num;</p><p> Init_DS18B20();</p><p> lcd1602_init();</p><p> //ds1302_init();</p><p><b> r
137、d=0;</b></p><p> for(num=0;num<15;num++)</p><p><b> {</b></p><p> lcd1602_writedata(table[num]);</p><p><b> delay(5);</b></p>
138、<p><b> }</b></p><p> lcd1602_writecom(0x80+0x40); //換行</p><p> for(num=0;num<8;num++)</p><p><b> {</b></p><p> lcd1602_writedat
139、a(table1[num]);</p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {&
140、lt;/b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> sfmset();</b></p><p&
141、gt;<b> nyrset();</b></p><p> u=ds1302_read(0x81);</p><p> miao=((u&0x70)>>4)*10+(u&0x0f);</p><p> write_sfm(6,miao);</p><p> u1=ds1302_re
142、ad(0x83);</p><p> fen=((u1&0x70)>>4)*10+(u1&0x0f);</p><p> write_sfm(3,fen);</p><p> u2=ds1302_read(0x85);</p><p> shi=((u2&0x70)>>4)*10+(u2
143、&0x0f);</p><p> write_sfm(0,shi);</p><p> u3=ds1302_read(0x87);</p><p> ri=((u3&0x70)>>4)*10+(u3&0x0f);</p><p> write_nyr(8,ri);</p><p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)-智能電子鐘
- 單片機(jī)課程設(shè)計(jì)--智能電子鐘的設(shè)計(jì)
- 電子鐘單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子鐘
- 單片機(jī)課程設(shè)計(jì)(電子鐘)
- 《單片機(jī)技術(shù)》電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 電子鐘課程設(shè)計(jì)--基于單片機(jī)的電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)原理課程設(shè)計(jì)--電子鐘
- 單片機(jī)數(shù)字電子鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字鐘電子鐘
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)單電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-電子鐘設(shè)計(jì)
- 單片機(jī)電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)的電子鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論