版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 系統(tǒng)方案介紹系統(tǒng)以AT89S52單片機(jī)作為核心控制器件,外圍主要有實(shí)時(shí)時(shí)鐘芯片DS1307和LCD128*64液晶顯示器,通過(guò)C語(yǔ)言編寫程序來(lái)實(shí)現(xiàn)對(duì)校園作息時(shí)間進(jìn)行控制。系統(tǒng)結(jié)構(gòu)框圖1所示。1.1 單片機(jī)選型當(dāng)今單片機(jī)廠商琳瑯滿目,產(chǎn)品性能各異。常用的單片機(jī)有很多種:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、臺(tái)灣Winbond(華邦)W78系列、荷蘭Pilips的PCF80C51系列、Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韓國(guó)三星公司的KS57C系列4位單片機(jī)、臺(tái)灣義隆的EM-78系列等。我們最
2、終選用了ATMEL公司的AT89C52單片機(jī)。AT89C52是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機(jī),片內(nèi)含8Kbytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和256bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及8052產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲(chǔ)單元,功能強(qiáng)大AT89C52單片機(jī)適用于許多較為復(fù)雜控制應(yīng)用場(chǎng)合。1.2. 時(shí)鐘芯片選型DS1307是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,它是一款總線接口的時(shí)鐘日歷芯片,采用兩線與CPU進(jìn)行
3、通信,片內(nèi)含有8個(gè)特殊功能寄存器和56bit的SRAM。DS1307的備用電源,以便在沒(méi)有主電源的情況下能夠保存時(shí)間信息和一些重要的數(shù)據(jù);兩個(gè)電阻為總線的上拉電阻。與其它型號(hào)的芯片比較更加適合本次設(shè)計(jì)。1.3 顯示器選型系統(tǒng)中采用LCD128*64作為顯示器件輸出信息。與傳統(tǒng)的LED數(shù)碼管顯示器件相比,液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等優(yōu)點(diǎn),而且不需要外加驅(qū)動(dòng)電路,現(xiàn)在液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的顯示器件了。LCD128*64可以顯示4行8個(gè)漢字,并行工作時(shí)具有8位數(shù)據(jù)總線D0-D7,和RS、R/W、E三個(gè)控制端口,串行工作時(shí)只有CS,SID,CLK三個(gè)通信口,本次設(shè)
4、計(jì)就是采用串行通信,可以節(jié)省單片機(jī)IO口的使用,工作電壓為5V,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光設(shè)置。1.4 作息時(shí)間表根據(jù)學(xué)校實(shí)際情況對(duì)上下課打鈴在一天內(nèi)的控制時(shí)間列表如下:表1-1 作息時(shí)間表上午下午時(shí)間事件時(shí)間事件6:50起床鈴1:20第五節(jié)課預(yù)備鈴8:20第一節(jié)課預(yù)備鈴1:30第五節(jié)上課鈴8:30第一節(jié)上課鈴2:15第五節(jié)下課鈴9:15第一節(jié)下課鈴2:25第六節(jié)上課鈴9:25第二節(jié)上課鈴3:10第六節(jié)下課鈴10:10第二節(jié)下課鈴3:30第七節(jié)上課鈴10:30第三節(jié)上課鈴4:15第七節(jié)上課鈴11:15第三節(jié)下課鈴4:25第八節(jié)上課鈴11:25第四節(jié)上課鈴5:10第八節(jié)下課鈴12:10第四節(jié)下
5、課鈴第2章 系統(tǒng)的硬件介紹2.1單片機(jī)模塊2.1.1單片機(jī)芯片 圖2-1 芯片AT89S52外部管腳圖如圖2-1所示AT89S52引腳與功能 1) 引腳信號(hào)介紹:P00P07 P0口8位雙向口線;P10P17 P0口8位雙向口線;P20P27 P0口8位雙向口線;P30P37 P0口8位雙向口線,ALE地址鎖存控制信號(hào)在系統(tǒng)擴(kuò)展時(shí),ALE用于控制把P0口輸出低8位地址送鎖存器鎖存起來(lái),以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離。此外由于ALE是以晶振六分之一的固定頻率輸出的正脈沖,因此可作為外部時(shí)鐘或外部定時(shí)脈沖作用。/PSEN外部程序儲(chǔ)器讀選取通信號(hào)在讀外部ROM時(shí)/PSEN有效(低電平),以實(shí)現(xiàn)外部ROM
6、單元的讀操作。/EA訪問(wèn)程序存儲(chǔ)器控制信號(hào):當(dāng)/EA信號(hào)為低電平時(shí),對(duì)ROM的讀操作限定在外部程序存儲(chǔ)器;而當(dāng)/EA信號(hào)為高電平時(shí),則對(duì)ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開始,并可延至外部程序存儲(chǔ)器。RST 復(fù)位信號(hào):當(dāng)輸入的復(fù)位信號(hào)延續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作。XTAL1和XTAL2外接晶體引線端:當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線端用于外接石英晶體和微調(diào)電空;當(dāng)使用外部時(shí)鐘時(shí),用于拉外部的時(shí)鐘脈沖信號(hào)。GND:地線VCC:+5V電源2)信號(hào)引腳的第二功能:由于工藝及標(biāo)準(zhǔn)化等原因,芯片的引腳數(shù)目是有限制的,例如MCS51系列把芯片引腳數(shù)目限定為40條,但單片
7、機(jī)為實(shí)現(xiàn)其功能所需要的信號(hào)數(shù)目卻遠(yuǎn)遠(yuǎn)超過(guò)此數(shù),因此就出現(xiàn)了需要與可能的矛盾。因此,給一些信號(hào)引腳賦以雙重功能。2.1.2單片機(jī)主控模塊系統(tǒng)采用AT89S52單片機(jī)作為控制核心。AT89S52單片機(jī)與MCS_51系列單片機(jī)產(chǎn)品兼容,采用了Flash存儲(chǔ)器結(jié)構(gòu),可以在線下載程序,易于日后的升級(jí)。它主要負(fù)責(zé)各個(gè)模塊的初始化工作;設(shè)置定時(shí)器、寄存器的初值;讀取并處理時(shí)間、溫度等信息;處理按鍵響應(yīng);控制液晶實(shí)時(shí)顯示等。硬件電路連接如圖2-2所示。系統(tǒng)采用12M晶振;P2.0,P2.1,P2.2口為單片機(jī)與液晶顯示器連接的控制和通信的數(shù)據(jù)端口;C_RESET和R_RESET組成系統(tǒng)上電復(fù)位電路; P2.6
8、和P2.7為單片機(jī)與時(shí)鐘芯片DS1307通信的端口; P2.3為鬧鈴的控制端口;P1.6為單片機(jī)與溫度傳感器DS18B20的通信端口;P1.0,P1.1為按鍵模塊的接口。圖2-2 單片機(jī)主控電路2.2實(shí)時(shí)時(shí)鐘日歷模塊2.2.1 DS1307實(shí)時(shí)時(shí)鐘芯片介紹Y2為32.768kHz的晶振,為時(shí)鐘芯片提供計(jì)時(shí)脈沖;Vbat為DS1307的備用電源,以便在沒(méi)有主電源的情況下能夠保存時(shí)間信息和一些重要的數(shù)據(jù);兩個(gè)電阻為總線的上拉電阻。DS1307是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,它是一款總線接口的時(shí)鐘日歷芯片,采用兩線與CPU進(jìn)行通信,片內(nèi)含有8個(gè)特殊功能寄存器和56bit
9、的SRAM。2.2.2 DS1307的引腳功能和主要技術(shù)性能指標(biāo)具有秒、分、時(shí)、日、星期、月、年的計(jì)數(shù)功能,并且具有12小時(shí)制和24小時(shí)制的計(jì)數(shù)模式,可自動(dòng)調(diào)整每月的天數(shù),具有閏年調(diào)整的功能,具有自動(dòng)掉電保護(hù)和上電復(fù)位的功能。DS1307的引腳圖如圖2-3所示,采用8引腳雙列直插dip封裝,芯片內(nèi)部結(jié)構(gòu)圖如圖2-4所示。各個(gè)引腳功能如下:Vcc:主電源;Vbat:備份電源。當(dāng)Vbat>Vcc+0.2V時(shí),由Vcc2向DS1307供電,當(dāng)Vbat< Vcc時(shí),由Vcc向DS1307供電;GND:邏輯地;SCL:總線時(shí)鐘線;SDA:總線數(shù)據(jù)線;SQW/OUT: 圖2-3 DS1307的
10、引腳分配圖2-4 DS1307的內(nèi)部結(jié)構(gòu)2.2.3 DS1307的內(nèi)部寄存器DS1307有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h8Dh,寫時(shí)80h8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如表2-1所示。小時(shí)寄存器(85h、84h)的位7用于定義DS1307是運(yùn)行于12小時(shí)模式還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí),位5是,當(dāng)為1時(shí),表示PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位。秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1307處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。控制寄存器(8Fh
11、、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。表2-1 DS1307的時(shí)間寄存器2.3 DS1307硬件設(shè)計(jì)DS1307采用與CPU進(jìn)行通信,電路連接簡(jiǎn)單。DS1307的內(nèi)部振蕩電路結(jié)構(gòu)如圖3-1所示,在芯片內(nèi)部連接有兩個(gè)電容,目的是為了使晶振起振,所以在電路設(shè)計(jì)中就不需要另外再加電容了,電路圖如3-2所示,其中晶振為32.768kHz,經(jīng)內(nèi)部電路分頻后可 圖3-1 DS1307的內(nèi)部振蕩電路 獲得一個(gè)標(biāo)準(zhǔn)的秒脈沖信號(hào);電阻R_SCL、R_SDA是總線的上拉電阻。圖3-2 DS1307
12、的電路連接2.4 打鈴模塊設(shè)計(jì)系統(tǒng)采用蜂鳴器作為鬧鈴輸出。電路連接如圖3-3所示。電路中采用PNP管9012來(lái)控制蜂鳴器的開關(guān),由圖可以看出當(dāng)Bell引腳為高電平時(shí),PNP管截止,蜂鳴器不工作;當(dāng)Bell引腳為低電平時(shí),PNP管導(dǎo)通,蜂鳴器工作。其中R2為限流電阻。圖3-3 鬧鈴電路2.5 時(shí)鐘電路設(shè)計(jì)時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào),而時(shí)序所研究的是指令執(zhí)行中各信號(hào)之間的相互關(guān)系。單片機(jī)本身就如一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地作。 圖 3-4 時(shí)鐘電路單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳
13、XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。電容器C1和C2的作用是穩(wěn)定頻率和快速起振,電容值的范圍在5pF30pF,典型值為30pF。晶振的頻率選擇12MHz。只要在單片機(jī)的XTAL1和XTAL2引腳外接晶體振蕩器就構(gòu)成了自激振蕩器并在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號(hào)。2.6 復(fù)位電路設(shè)計(jì)復(fù)位電路是使單片機(jī)的CPU或系統(tǒng)中的其他部件處于某一確定的初始狀態(tài),并從這上狀態(tài)開始工作。上電復(fù)位是單片機(jī)上電時(shí)復(fù)位操作,保證單片機(jī)上電后立即進(jìn)入規(guī)定的復(fù)位狀態(tài)。上電復(fù)位要求接通電源后,單片機(jī)自動(dòng)實(shí)現(xiàn)復(fù)位操作。而按鍵復(fù)位是通過(guò)使復(fù)位端經(jīng)電阻與VCC
14、電源接通而實(shí)現(xiàn)的,上電和按鍵瞬間RST引腳獲得高電平,隨著電容的充電,RST引腳的高電平將逐漸下降。RST引腳的高電平只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),若采用12MHz的晶振,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過(guò)2S單片機(jī)就可以進(jìn)行復(fù)位操作。 圖 3-5 復(fù)位電路2.7 鍵盤模塊設(shè)計(jì)鍵盤模塊設(shè)置了4個(gè)按鍵:KEY1,KEY2,KEY3,KEY4。其中用KEY1來(lái)控制菜單的主模式, KEY2,KEY3來(lái)調(diào)整,KEY4返回電路連接如圖2所示。2個(gè)上拉電阻可以保證在沒(méi)有按鍵輸入時(shí),進(jìn)入單片機(jī)四個(gè)I/O口的按鍵狀態(tài)均為高電平,防止干擾產(chǎn)生;當(dāng)有按鍵按下時(shí),相應(yīng)的口線被拉低。軟件上采用查詢的方式,用定時(shí)器定時(shí)對(duì)
15、按鍵狀態(tài)進(jìn)行掃描,確保系統(tǒng)的實(shí)時(shí)性。2.8 液晶顯示模塊設(shè)計(jì)系統(tǒng)中采用LCD128*64作為顯示器件輸出信息。與傳統(tǒng)的LED數(shù)碼管顯示器件相比,液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等優(yōu)點(diǎn),而且不需要外加驅(qū)動(dòng)電路,現(xiàn)在液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的顯示器件了。LCD128*64可以顯示4行8個(gè)漢字,并行工作時(shí)具有8位數(shù)據(jù)總線D0-D7,和RS、R/W、E三個(gè)控制端口,串行工作時(shí)只有CS,SID,CLK三個(gè)通信口,本次設(shè)計(jì)就是采用串行通信,可以節(jié)省單片機(jī)IO口的使用,工作電壓為5V,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光設(shè)置。管腳功能簡(jiǎn)介:引腳號(hào) 引腳名稱 方向 功能說(shuō)明1 VSS 模塊
16、的電源地2 VDD 模塊的電源正端3 V0 LCD 驅(qū)動(dòng)電壓輸入端4 RS(CS) H/L 并行的指令/數(shù)據(jù)選擇信號(hào);串行的片選信號(hào)5 R/W(SID) H/L 并行的讀寫選擇信號(hào);串行的數(shù)據(jù)口6 E(CLK) H/L 并行的使能信號(hào);串行的同步時(shí)鐘7 DB0 H/L 數(shù)據(jù)08 DB1 H/L 數(shù)據(jù)19 DB2 H/L 數(shù)據(jù)210 DB3 H/L 數(shù)據(jù)311 DB4 H/L 數(shù)據(jù)412 DB5 H/L 數(shù)據(jù)513 DB6 H/L 數(shù)據(jù)614 DB7 H/L 數(shù)據(jù)715 PSB H/L 并/串行接口選擇:H-并行;L-串行16 NC 空腳17 /RET H/L 復(fù)位 低電平有效18 NC 空腳1
17、9 LED_A - 背光源正極(LED+5V)20 LED_K - 背光源負(fù)極(LED-OV)電路連接圖圖3-6 液晶顯示電路2.9 硬件原理圖:(見(jiàn)附錄1) 2.10 PCB圖:(見(jiàn)附錄2)第3章 元件清單3.1 元件清單表3-1 元件清單參數(shù)名稱注釋1KR15KR-SCL5KR-SDA10KR310KR610KR510KR422FC330PC132.786KY2103JR20排阻-9AT89S52DIP40BELLDS1307LCD12864HDR1X20PNP 90121KR8SW-PB10KR19WR12MY1第4章 系統(tǒng)的軟件設(shè)計(jì)系統(tǒng)的軟件設(shè)計(jì)可以分為幾個(gè)部分,首先是各個(gè)模塊的底層驅(qū)
18、動(dòng)程序編寫,而后是系統(tǒng)聯(lián)機(jī)調(diào)試,編寫上層系統(tǒng)程序。本系統(tǒng)軟件程序主要包括:液晶LCD128*64的底層驅(qū)動(dòng)模塊、時(shí)鐘芯片DS1307的底層驅(qū)動(dòng)模塊、鍵盤掃描模塊,鬧鐘模塊等。系統(tǒng)的軟件流程圖如圖下:4.1主程序圖4-1 主程序流程圖如上圖所示程序開始后進(jìn)入定時(shí)初始化,然后進(jìn)入是否調(diào)時(shí)間、是否響鈴和顯示的死循環(huán)。進(jìn)入調(diào)時(shí)間程序則可按S4調(diào)時(shí),S3調(diào)分,S2調(diào)秒,調(diào)時(shí)完畢則到是否響鈴、顯示程序。4.1.1按鍵及調(diào)時(shí)間程序數(shù)字鍵,功能鍵.鍵處理程序返回判是否有鍵按下?開始鍵處理散轉(zhuǎn)地址判確有鍵按下?調(diào)延時(shí)子程序YYNN圖4-2 按鍵流程圖圖 如上圖所示此圖是處理按鍵程序的。判斷是否有鍵按下,有的話,
19、去抖動(dòng),和判斷按鍵釋放。調(diào)整時(shí)間流程圖如下圖所示,先判斷有鍵按下,有的話則進(jìn)入調(diào)整秒、分、時(shí)的循環(huán)直到有S1按下為止才退出。 圖4-3 調(diào)整時(shí)間流程圖4.2 定時(shí)中斷程序把定時(shí)器設(shè)為工作方式1,定時(shí)時(shí)間為50mS,則計(jì)數(shù)溢出20次即得時(shí)鐘計(jì)時(shí)最小單位秒,而20次計(jì)數(shù)可用軟件方法實(shí)現(xiàn)。采用中斷方式進(jìn)行溢出次數(shù)累計(jì),計(jì)滿8次為秒計(jì)時(shí)(1秒),從秒到分和從分到時(shí)的計(jì)時(shí)是通過(guò)累加和數(shù)值比較實(shí)現(xiàn)。 其程序流程圖如下:圖4-4 定時(shí)中斷程序流程圖4.3 顯示程序執(zhí)行高,低四位字符串是否完畢為8次串行口發(fā)送字節(jié)串行口接受字節(jié)清屏AC歸零顯示ONAC歸起始位 返回開始NY 圖4-5 顯示子程序流程圖如下圖所示
20、其顯示是液晶顯示,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光設(shè)置。4.4 打鈴程序如下圖所示,進(jìn)入程序先要判斷是否需要打鈴,也就是是否到了打鈴時(shí)間,如果到了則執(zhí)行打鈴程序,執(zhí)行完后跳出,等下次再判,再執(zhí)行。 圖4-6系統(tǒng)軟件流程圖 第5章 程序清單#include<reg52.h> /定義庫(kù)函數(shù)#defineuint unsigned int /定義函數(shù)#defineuchar unsigned charucharst,mt,ht, stg, sts,mtg, mts,htg,hts ,j,i; /定義變量uchar pm11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d
21、,0x07,0x7f,0x6f,0x40; /定義出一個(gè)顯示數(shù)組sbit k1=P33; /定義位函數(shù)sbit k2=P34;sbit P1_7=P17;sbit P1_5=P15;/*延時(shí)子程序*/delay (uint v)while(v!=0) v-;/*中斷處理程序*/pint0()interrupt 1 using 2 /采用中斷0方式TH0=0x3c; /設(shè)置計(jì)數(shù)初值 TL0=0xb0; if(j!=0) /查詢計(jì)數(shù)次數(shù)是否滿20次 j-; /不滿減1 else j=20; /重新設(shè)置計(jì)數(shù)次數(shù) st+; /秒加1if(st=60) /查詢秒是否等于60st=0; /等于60秒,秒清
22、0 mt+; /分加1 if(mt=60) /查詢分是否等于60mt=0; /等于60分,分清0 ht+; /時(shí)加1 if(ht=24) /查詢時(shí)是否等于24 ht=0; /等于24,時(shí)清0 /*顯示程序*/xscl() int a,b; /定義變量 P2=0xfe; /設(shè)置數(shù)碼管顯示位,即秒個(gè)位 P0=pmstg; /秒個(gè)位顯示值delay(300);/延時(shí)a=P2<<1; /左移一位顯示位,即秒十位b=P2>>7;P2=a|b;P0=pmsts;/秒十位顯示值delay(300);/延時(shí)a=P2<<1; /左移一位顯示位,即無(wú)用位b=P2>>
23、7;P2=a|b;P0=pm10; /無(wú)用位顯示delay(300);/延時(shí)a=P2<<1; /左移一位顯示位,即分個(gè)位b=P2>>7;P2=a|b;P0=pmmtg;/分個(gè)位顯示值delay(300);/延時(shí)a=P2<<1; /左移一位顯示位,即分十位b=P2>>7;P2=a|b;P0=pmmts; /分十位顯示值delay(300); /延時(shí)a=P2<<1; /左移一位顯示位,即無(wú)用位b=P2>>7;P2=a|b;P0=pm10; /無(wú)用位顯示delay(300); /延時(shí)a=P2<<1; /左移一位顯示位
24、,即時(shí)個(gè)位b=P2>>7;P2=a|b;P0=pmhtg; /時(shí)個(gè)位顯示值delay(300); /延時(shí)a=P2<<1; /左移一位顯示位,即時(shí)十位b=P2>>7;P2=a|b;P0=pmhts; /時(shí)十位顯示值delay(300); /延時(shí)a=P2<<1;b=P2>>7;P2=a|b; /*顯示處理程序*/xs() sts=st/10; stg=st%10; /把秒緩沖值處理,分別給秒個(gè)位和十位 mts=mt/10;mtg=mt%10; /把分緩沖值處理,分別給分個(gè)位和十位 hts=ht/10;htg=ht%10; /把時(shí)緩沖值處理
25、,分別給時(shí)個(gè)位和十位 xscl(); /顯示子程序 /*按鍵處理程序,即時(shí)間調(diào)整程序*/key() if(k1=0) /判斷k1是否為0,即判斷S1是否按下 xs(); xs(); /調(diào)顯示程序,即延時(shí) if(k1=0) /去抖動(dòng) xs(); while(1) xs();if(k1=1)break;/判斷鍵釋放 TR0=0; /釋放則關(guān)中斷while(1) /調(diào)時(shí)間 xs(); /調(diào)顯示程序 if(k2=0) /判斷k2是否為0,即判斷S2是否按下 xs();xs();/調(diào)顯示程序,即延時(shí) if(k2=0) /去抖動(dòng) st+; /秒加1 if(st=60) /查詢秒是否等于60 st=0; /
26、等于60,秒清0 if(k3=0) /判斷k3是否為0,即判斷S3是否按下 xs(); xs();/調(diào)顯示程序,即延時(shí) if(k2=0) /去抖動(dòng)mt+; /分加1 if(mt=60)/查詢分是否等于60 mt=0; /等于60,分清0 if(k4=0) /判斷k2是否為0,即判斷S4是否按下 xs();xs();/調(diào)顯示程序,即延時(shí) if(k4=0) /去抖動(dòng) ht+; /時(shí)加1 if(ht=24)/查詢時(shí)是否等于24 ht=0; /等于24,時(shí)清0 if(k1=0) /判斷k2是否為0,即判斷S6是否按下 xs();xs();/調(diào)顯示程序,即延時(shí) if(k1=0) /去抖動(dòng) xs();wh
27、ile(1) xs();if(k1=1)break;/判斷鍵釋放 break ; /跳出調(diào)時(shí)間循環(huán)程序 TR0=1; /開中斷,返回 /* DS1307驅(qū)動(dòng)程序*/* DS1307 PART START */unsigned char Write1307(unsigned char add,dat) unsigned char temp; temp=dat/10; temp<<=4; temp=dat%10+temp; I2C_start(); I2C_write_byte(0xD0); I2C_send_ack(0); I2C_write_byte(add); I2C_send_
28、ack(0); I2C_write_byte(temp); I2C_send_ack(1); I2C_stop(); return (0);/*/unsigned char Read1307(unsigned char add) unsigned char temp,dat; I2C_start(); I2C_write_byte(0xD0); I2C_send_ack(0); I2C_write_byte(add); I2C_send_ack(1); I2C_stop(); I2C_start(); I2C_write_byte(0xD1); I2C_send_ack(0); dat=I2C
29、_read_byte(); I2C_send_ack(1); I2C_stop(); temp=dat/16; dat=dat%16; dat=dat+temp*10; return (dat);/*/void Read_RTC(void) unsigned char i,*p; p=rtc_address; for(i=0;i<7;i+) read_rtc_codei=Read1307(*p); p+; /*/void Set_RTC(void) unsigned char i,*p; p=rtc_address; for(i=0;i<7;i+) Write1307(*p,set
30、_rtc_codei); p+; /* LCD128*64驅(qū)動(dòng)程序*/* LCD PART START */ unsigned char code AC_TABLE=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, /第一行漢字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, /第二行漢字位置0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, /第三行漢字位置0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, /第四行漢字位置 ; /串口發(fā)送一個(gè)字節(jié)void Send
31、Byte(unsigned char Dbyte) unsigned char i ; for(i=0 ;i<8 ;i+) SCK = 0 ; Dbyte=Dbyte<<1 ; /左移一位 SID = CY ; /移出的位給SID SCK = 1 ; SCK = 0 ; /串口接收一個(gè)字節(jié)/僅在讀取數(shù)據(jù)的時(shí)候用到/而讀出的數(shù)據(jù)是一次只能讀出4bit的unsigned char ReceiveByte(void) unsigned char n,x,y ; x=y=0 ; for(n=0 ;n<8 ;n+) x=x<<1 ; SCK = 0 ; SCK = 1
32、 ; SCK = 0 ; if(SID) x+ ; for(n=0 ;n<8 ;n+) y=y<<1 ; SCK = 0 ; SCK = 1 ; SCK = 0 ; if(SID) y+ ; return (0xf0&x)+(0x0f&y) ; void CheckBusy( void ) do SendByte(0xfc) ; /11111,RW(1),RS(0),0 while(0x80&ReceiveByte() ; /BF(.7)=1 Busyvoid WriteCommand( unsigned char Cbyte ) CS = 1 ; C
33、heckBusy() ; SendByte(0xf8) ; /11111,RW(0),RS(0),0 SendByte(0xf0&Cbyte) ; /高四位 SendByte(0xf0&Cbyte<<4) ;/低四位(先執(zhí)行<< ;) CS = 0 ;void WriteData( unsigned char Dbyte ) CS = 1 ; CheckBusy() ; SendByte(0xfa) ; /11111,RW(0),RS(1),0 SendByte(0xf0&Dbyte) ; /高四位 SendByte(0xf0&Dbyte
34、<<4) ;/低四位(先執(zhí)行<< ;) CS = 0 ; /*unsigned char ReadData( void ) CheckBusy() ; SendByte(0xfe) ; /11111,RW(1),RS(1),0 return ReceiveByte() ;*/void Delay(unsigned int MS) unsigned char us,usn ; while(MS!=0) /for 12M usn = 2 ; while(usn!=0) us=0xf5 ; while (us!=0)us- ; ; usn- ; MS- ; void LcmI
35、nit( void ) WriteCommand(0x30) ; /8BitMCU,基本指令集合 WriteCommand(0x03) ; /AC歸0,不改變DDRAM內(nèi)容 WriteCommand(0x0C) ; /顯示ON,游標(biāo)OFF,游標(biāo)位反白OFF WriteCommand(0x01) ; /清屏,AC歸0 WriteCommand(0x06) ; /寫入時(shí),游標(biāo)右移動(dòng)void lcd_clear_one(void)unsigned char i;for(i=0;i<16;i+)WriteData(' ');/文本區(qū)清RAM函數(shù)void LcmClearTXT(
36、void ) unsigned char i ; WriteCommand(0x30) ; /8BitMCU,功能設(shè)定,基本指令集合 WriteCommand(0x80) ; /AC歸起始位 for(i=0 ;i<64 ;i+) WriteData(0x20) ;void setadd(unsigned char row,unsigned char col) WriteCommand(AC_TABLE8*row+col) ;void writeword(unsigned char row,unsigned char col,unsigned char * puts) WriteComma
37、nd(0x30) ; /8BitMCU,基本指令集合 WriteCommand(AC_TABLE8*row+col) ; /起始位置 while(*puts) != '0') /判斷字符串是否顯示完畢 WriteData(*puts) ; puts+ ; void LCD_prints(unsigned char *puts)WriteCommand(0x30) ; while(*puts) != '0') /判斷字符串是否顯示完畢 WriteData(*puts) ; puts+ ; void PutStr(unsigned char row,unsigned
38、 char col,unsigned char *puts) WriteCommand(0x30) ; /8BitMCU,基本指令集合 WriteCommand(AC_TABLE8*row+col) ; /起始位置 while(*puts != '0') /判斷字符串是否顯示完畢 if(col=8) /判斷換行 /若不判斷,則自動(dòng)從第一行到第三行 col=0 ; row+ ; if(row=4) row=0 ; /一屏顯示完,回到屏左上角 WriteCommand(AC_TABLE8*row+col) ; WriteData(*puts) ; /一個(gè)漢字要寫兩次 puts+ ;
39、 WriteData(*puts) ; puts+ ; col+ ; /*判斷是否打鈴程序*/pan() if(ht=6)&(mt=00)&(st=00) chge();xs(); /判斷是否到了打鈴時(shí)間,到了則給 if(ht=6)&(mt=20)&(st=00) chge();xs(); /執(zhí)行響鈴程序 if(ht=6)&(mt=40)&(st=00) chge();xs(); if(ht=7)&(mt=30)&(st=00) chge();xs(); if(ht=8)&(mt=20)&(st=00) chge(
40、);xs(); if(ht=8)&(mt=30)&(st=00) chge();xs(); if(ht=9)&(mt=15)&(st=00) chge();xs(); if(ht=9)&(mt=25)&(st=00) chge();xs(); if(ht=10)&(mt=10)&(st=00) chge();xs(); if(ht=10)&(mt=30)&(st=00) chge();xs(); if(ht=11)&(mt=15)&(st=00) chge();xs(); if(ht=11)&
41、;(mt=25)&(st=00) chge();xs(); if(ht=12)&(mt=10)&(st=00) chge();xs(); if(ht=13)&(mt=20)&(st=00) chge();xs(); if(ht=13)&(mt=30)&(st=00) chge();xs(); if(ht=14)&(mt=15)&(st=00) chge();xs(); if(ht=14)&(mt=25)&(st=00) chge();xs(); if(ht=15)&(mt=10)&(st=0
42、0) chge();xs(); if(ht=15)&(mt=30)&(st=00) chge();xs(); if(ht=16)&(mt=15)&(st=00) chge();xs(); if(ht=16)&(mt=25)&(st=00) chge();xs(); if(ht=17)&(mt=10)&(st=00) chge();xs(); if(ht=18)&(mt=00)&(st=00) chge();xs(); if(ht=18)&(mt=45)&(st=00) chge();xs(); if(ht=19)&(mt=40)&(st=00) chge();xs(); if(ht=19)&(mt=50)&(st=00) chge();xs(); if(ht=20)&(mt=35)&(st=00) ch
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)嬰幼兒營(yíng)養(yǎng)米粉行業(yè)營(yíng)銷模式及未來(lái)5發(fā)展趨勢(shì)報(bào)告
- 2024-2030年中國(guó)地鐵廣告行業(yè)趨勢(shì)研究與投資價(jià)值分析報(bào)告
- 2024年度健身房裝修設(shè)計(jì)合同范本6篇
- 2024年物聯(lián)網(wǎng)平臺(tái)建設(shè)合同
- 眉山藥科職業(yè)學(xué)院《冶金資源綜合利用》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版礦物材料交易合同
- 2024年標(biāo)準(zhǔn)版噴漿作業(yè)人員勞動(dòng)協(xié)議一
- 閱讀是一個(gè)專門的領(lǐng)域
- 四川省樂(lè)山市2019-2020學(xué)年高二下學(xué)期期末考試化學(xué)試題(解析版)
- 2024停薪留職員工技能提升與職業(yè)發(fā)展合同范本3篇
- 公園保潔服務(wù)投標(biāo)方案
- 2024年高考英語(yǔ)作文預(yù)測(cè):倡議書(附答案解析)
- 安徽省2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 2024年人教版八年級(jí)生物(上冊(cè))期末試卷及答案(各版本)
- 農(nóng)作物病蟲害防治的社會(huì)經(jīng)濟(jì)效益分析考核試卷
- 2023年全國(guó)職業(yè)院校技能大賽-商務(wù)數(shù)據(jù)分析賽項(xiàng)規(guī)程
- 第五單元 大單元教學(xué)設(shè)計(jì)-【大單元教學(xué)】2024-2025學(xué)年七年級(jí)語(yǔ)文上冊(cè)同步備課系列(統(tǒng)編版2024)
- 《林火生態(tài)與管理》實(shí)驗(yàn)報(bào)告
- 【課件】紀(jì)念與象征-空間中的實(shí)體藝術(shù)+課件-高中美術(shù)人美版(2019)美術(shù)鑒賞
- JB∕T 11864-2014 長(zhǎng)期堵轉(zhuǎn)力矩電動(dòng)機(jī)式電纜卷筒
- SL352水工混凝土試驗(yàn)規(guī)程
評(píng)論
0/150
提交評(píng)論