




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、東 北 石 油 大 學(xué)課 程 設(shè) 計(jì)課 程 單片機(jī)的控制系統(tǒng)課程設(shè)計(jì) 題 目 電子日歷設(shè)計(jì) 院 系 電氣信息工程學(xué)院 專業(yè)班級(jí) 自動(dòng)化2010級(jí) 1 班 學(xué)生姓名 戈晶宇 學(xué)生學(xué)號(hào) 100601140106 指導(dǎo)教師 李艷輝 邵克勇 2013年 7 月 7上邊的紅字改成黑色的 日東北石油大學(xué)課程設(shè)計(jì)任務(wù)書課程: 單片機(jī)的控制系統(tǒng)課程設(shè)計(jì) 題目: 電子日歷設(shè)計(jì) 專業(yè): 自動(dòng)化 姓名: 戈晶宇 學(xué)號(hào): 100601140106 主要內(nèi)容、基本要求、主要參考資料等主要內(nèi)容:利用開發(fā)板編程實(shí)現(xiàn)“電子日歷+電子時(shí)鐘系統(tǒng)”。具體要求如下: 1)日歷顯示格式為“××××
2、;.××.××”,分別對(duì)應(yīng)“年.月.日”; 2)時(shí)鐘顯示格式為“××-××-××”,分別對(duì)應(yīng)“時(shí)-分-秒”;3)日期和時(shí)間可通過(guò)鍵盤調(diào)整;4)日歷與時(shí)間輪流顯示,間隔1秒?;疽螅?、熟悉MCS單片機(jī)系統(tǒng)的基本構(gòu)成和工作原理。 2、設(shè)計(jì)并實(shí)現(xiàn)具有復(fù)位功能的單片機(jī)最小系統(tǒng)。 3、掌握 MCS-51系列單片機(jī)I/O、定時(shí)器等操作方法。 4、掌握單片機(jī)的一般編程技巧。 參考資料:1、張毅剛單片機(jī)原理及應(yīng)用北京:高等教育出版社,2010.2、蔡美琴M(fèi)CS-51系列單片機(jī)系統(tǒng)及其應(yīng)用北京:高等教育出版社
3、,2004.完成期限 2013-7-7 指導(dǎo)教師 專業(yè)負(fù)責(zé)人 2013年6月28日目 錄第1章 緒 論11.1 概述11.2 單片機(jī)的發(fā)展歷程1第2章 系統(tǒng)結(jié)構(gòu)及主要元器件22.1系統(tǒng)結(jié)構(gòu)22.2主要元器件2第3章 硬件設(shè)計(jì)33.1主控制模塊33.2復(fù)位電路33.3晶振電路43.4 DS1302時(shí)鐘模塊43.5按鍵調(diào)節(jié)電路53.6顯示模塊5第4章 軟件設(shè)計(jì)74.2程序設(shè)計(jì)7第5章 系統(tǒng)仿真及調(diào)試20結(jié) 論21參考文獻(xiàn)22單片機(jī)的控制系統(tǒng)課程設(shè)計(jì)第1章 緒 論不所有一級(jí)標(biāo)題加黑1.1 概述隨著電子技術(shù)的迅速發(fā)展,特別是隨著大規(guī)模集成電路產(chǎn)生而出現(xiàn)的微型計(jì)算機(jī),給人類生活帶來(lái)了極大的方便。走入家庭
4、,從洗衣機(jī)、微波爐到音響、汽車,到處都可以見到單片機(jī)應(yīng)用的蹤影。如果說(shuō)微型計(jì)算機(jī)技術(shù)的出現(xiàn)使現(xiàn)代科學(xué)研究得到了質(zhì)的飛躍,那么也可以毫不夸張的說(shuō):“單片機(jī)技術(shù)的出現(xiàn)則是給現(xiàn)代工業(yè)測(cè)控領(lǐng)域帶來(lái)了一次新的工業(yè)革命”。目前,單片機(jī)以其可靠性高和智能性等特點(diǎn)被廣泛應(yīng)用到工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、辦公自動(dòng)化等領(lǐng)域中,并已經(jīng)進(jìn)入家庭。因此,單片機(jī)技術(shù)的開發(fā)和應(yīng)用水平已經(jīng)逐步成為一個(gè)國(guó)家自動(dòng)化發(fā)展水平的標(biāo)志之一。1.2 單片機(jī)的發(fā)展歷程單片機(jī)是微型計(jì)算機(jī)的一個(gè)重要分支,也是一種非?;钴S和頗具生命力的機(jī)種,特別適用于工業(yè)控制領(lǐng)域。1971年微處理器研制成功不久,就出現(xiàn)了單片機(jī),但最早的單片機(jī)是
5、1位的,處理能力有限。單片機(jī)的發(fā)展共分四個(gè)階段:第一階段是初級(jí)階段,功能非常簡(jiǎn)單;第二階段是低性能階段,以INTEL公司制造的MSC-48系列單片機(jī)為代表。第三階段為高性能單片機(jī)階段,這個(gè)階段推出的單片機(jī)普遍帶有穿行接口,多級(jí)中斷系統(tǒng),16位定時(shí)器/計(jì)數(shù)器,片內(nèi)ROM、RAM容量加大,直到現(xiàn)在仍被廣泛應(yīng)用,是目前應(yīng)用數(shù)量較多的單片機(jī)。第四階段是8位單片機(jī)鞏固發(fā)展以及16位單片機(jī)、32位單片機(jī)推出階段,以滿足不同的用戶需要??v觀單片機(jī)幾十年的發(fā)展歷程,單片機(jī)的今后發(fā)展方向?qū)⑾蚨喙δ堋⒏咝阅?、高速度、低功耗、低價(jià)格、外圍電路內(nèi)裝化以及內(nèi)存儲(chǔ)器容量增加和FLASH存儲(chǔ)器化方向發(fā)展。第2章 系統(tǒng)結(jié)構(gòu)及
6、主要元器件第二章也太簡(jiǎn)潔了!最少得三四頁(yè),分別介紹一下你用元器件2.1系統(tǒng)結(jié)構(gòu)此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來(lái)設(shè)計(jì)電子日歷,系統(tǒng)由主控制器AT89s51、時(shí)鐘電路DS1302、顯示電路、按鍵電路、和復(fù)位電路等部分構(gòu)成,能實(shí)現(xiàn)時(shí)鐘日歷顯示的功能,能進(jìn)行時(shí)、分、秒的顯示。如圖2-1系統(tǒng)總體結(jié)構(gòu)圖:圖2-1系統(tǒng)總體結(jié)構(gòu)圖圖里的字要求為五號(hào)2.2主要元器件本系統(tǒng)的主要元器件有AT89S51單片機(jī),DS1302時(shí)鐘芯片,LED數(shù)碼管或LM1602液晶顯示屏。 第3章 硬件設(shè)計(jì)3.1主控制模塊AT89S51系列單片機(jī)中有PDIP,PLCC,TQFP多種封裝形式。本設(shè)計(jì)采用的是PDIP封裝40管腳的單片機(jī)。如圖3
7、-1所示:圖3-1 AT89S51引腳圖3.2復(fù)位電路復(fù)位是單片機(jī)的初始化操作。單片機(jī)啟運(yùn)運(yùn)行時(shí),都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。因而,復(fù)位是一個(gè)很重要的操作方式。但單片機(jī)本身是不能自動(dòng)進(jìn)行復(fù)位的,必須配合相應(yīng)的外部電路才能實(shí)現(xiàn)。復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號(hào)。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時(shí)才撤銷復(fù)位信號(hào),以防電源開關(guān)或電源插頭分-合過(guò)程中引起的抖動(dòng)而影響復(fù)位。 圖3-2 復(fù)位電路圖3.3晶振電路晶體振蕩器電路給數(shù)字鐘提供一個(gè)頻率穩(wěn)定準(zhǔn)確的32768Hz的方波信號(hào),可保證數(shù)字鐘的
8、走時(shí)準(zhǔn)確及穩(wěn)定。如圖3-3所示:圖3-3 晶振電路圖3.4 DS1302時(shí)鐘模塊3.4.1 DS1302時(shí)鐘模塊圖3-4 DS1302時(shí)鐘模塊圖3.4.2 DS1302 的引腳排列圖3-5所示出DS1302 的引腳排列,其中Vcc1 為后備電源,VCC2 為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302 由Vcc1 或Vcc2 兩者中的較大者供電。當(dāng)Vcc2 大于Vcc10.2V 時(shí),Vcc2 給DS1302供電。當(dāng)Vcc2 小于Vcc1 時(shí),DS1302 由Vcc1 供電。X1和X2 是振蕩源,外接32.768kHz 晶振。RST 是復(fù)位/片選線,通過(guò)把RST 輸入驅(qū)動(dòng)置
9、高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST 提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST 為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302 進(jìn)行操作。如果在傳送過(guò)程中RST 置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O 引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc2.5V 之前,RST 必須保持低電平。只有在SCLK 為低電平時(shí),才能將RST 置為高電平。I/O 為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說(shuō)明。SCLK 始終是輸入端。數(shù)據(jù)輸入輸出(I/O) 在控制指令字輸入后的下一個(gè)SCLK 時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS
10、1302,數(shù)據(jù)輸入從低位即從0 開始。同樣,在緊跟8 位的控制指令字后的下一個(gè)SCLK 脈沖的下降沿讀出DS1302 的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0 位到高位7。圖3-5 DS1302 的引腳圖3.5按鍵調(diào)節(jié)電路本設(shè)計(jì)總的用了三個(gè)按扭開關(guān)作為鍵盤,其中兩個(gè)是調(diào)整時(shí)間增加、減少的鍵,第三個(gè)是切換年、月、日及時(shí)、分、秒的顯示狀態(tài)并在所切換的顯示狀態(tài)下配合加減兩個(gè)鍵調(diào)整時(shí)間。如圖3-6所示:圖3-6 按鍵調(diào)節(jié)電路圖3.6顯示模塊LCM1602采用標(biāo)準(zhǔn)的16腳接口,其中: 第1腳:VSS為地電源第2腳:VDD接5V正電源第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比最高,對(duì)比度
11、過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度 第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平選擇指令寄存器。 第5腳:RW為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RSRW共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫入數(shù)據(jù).第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。 第1516腳:空腳。如圖3-7所示:圖3-7顯示模塊圖第4章 軟件設(shè)計(jì)4.1系統(tǒng)流程不加粗圖圖4-1系統(tǒng)流程圖圖里的字為5號(hào)4.2程序設(shè)計(jì)程序放在附錄里
12、#include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar a,sec,hour,min,day,moon,year,week,flag,key1n,ZJL; /ZJL為中間量#define yh 0x80 /LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)#define er 0x80+0x40 /LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40) /液晶屏的與C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0口) sbit r
13、s=P35; sbit en=P37; sbit rw=P36; /如果硬件上rw接地,就不用寫這句和后面的rw=0了 /DS1302時(shí)鐘芯片與C51之間的引腳連接定義 sbit IO=P22; sbit SCLK=P21; sbit RST=P20; sbit ACC0=ACC0; sbit ACC7=ACC7; /* ACC累加器=A ACC.0=E0H ACC.0就是ACC的第0位。Acc可以位尋址。*/ /校時(shí)按鍵與C51的引腳連接定義 sbit key1=P25; /設(shè)置鍵sbit key2=P26; /加鍵sbit key3=P27; /減鍵/*/ uchar code tab1=
14、"20 - - " /年顯示的固定字符uchar code tab2=" : : "/時(shí)間顯示的固定字符/延時(shí)函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時(shí)函數(shù),有參函數(shù) uint x,y; for(x=xms;x>0;x-) for(y=110;y>0;y-); /*液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用*/ /*在這個(gè)程序中,液晶寫入有關(guān)函數(shù)會(huì)在DS1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/ write_1602com(uchar com)/*液晶寫入指令函數(shù)* rs=0;/數(shù)據(jù)/指令選擇置為指令rw=0; /
15、讀寫選擇置為寫P1=com;/送入數(shù)據(jù)delay(1); en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1); en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令 write_1602dat(uchar dat)/*液晶寫入數(shù)據(jù)函數(shù)* rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫選擇置為寫P1=dat;/送入數(shù)據(jù)delay(1); en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1); en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令 lcd_init()/*液晶初始化函數(shù)* write_1602com(0x38);/設(shè)置液晶工作模式,意思:16*2行顯示,
16、5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動(dòng),光標(biāo)自動(dòng)右移write_1602com(0x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開始顯示for(a=0;a<14;a+) write_1602dat(tab1a);/向液晶屏寫日歷顯示的固定符號(hào)部分/delay(3); write_1602com(er+2);/時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示for(a=0;a<8;a+) write_1602dat(tab2a);/寫顯示時(shí)間
17、固定符號(hào),兩個(gè)冒號(hào)/delay(3); /*over*/ /*DS1302有關(guān)子函數(shù)*/ void write_byte(uchar dat)/寫一個(gè)字節(jié) ACC=dat; RST=1; for(a=8;a>0;a-) IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; uchar read_byte()/讀一個(gè)字節(jié) RST=1; for(a=8;a>0;a-) ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; return (ACC); /- void write_1302(uchar add,uchar da
18、t)/向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù) RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0; uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址 uchar ZJL; RST=0; SCLK=0;RST=1; write_byte(add); ZJL=read_byte(); SCLK=1; RST=0; return(ZJL); uchar BCD_Decimal(uchar bcd)/BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制 uchar Deci
19、mal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F); /- void ds1302_init() /1302芯片初始化子函數(shù)(2012-06-17,00:00:00,week7) RST=0; SCLK=0; write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù)/write_1302(0x80,0x12); /向DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)00 /write_1302(0x82,0x12);/向DS1302內(nèi)寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00 /write_1302(0x84,0
20、x12);/向DS1302內(nèi)寫小時(shí)寄存器84H寫入初始小時(shí)數(shù)據(jù)00 /write_1302(0x8a,0x04);/向DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù)7 /write_1302(0x86,0x08);/向DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)17 /write_1302(0x88,0x08);/向DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù)06 /write_1302(0x8c,0x12);/向DS1302內(nèi)寫年份寄存器8cH寫入初始年份數(shù)據(jù)12 write_1302(0x8e,0x80); /打開寫保護(hù) /- /時(shí)分秒顯示子函數(shù)void write_sfm(ucha
21、r add,uchar dat)/向LCD寫時(shí)分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個(gè)參數(shù) uchar gw,sw; gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40 write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼 /- /年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向LCD寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個(gè)參數(shù) u
22、char gw,sw; gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個(gè)位置+add write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼 /- void write_week(uchar week)/寫星期函數(shù)write_1602com(yh+0x0c);/星期字符的顯示位置 switch(week) case 1:write_1602dat('M');/ 星期數(shù)為
23、1時(shí),顯示 write_1602dat('O'); write_1602dat('N'); break; case 2:write_1602dat('T');/星期數(shù)據(jù)為2時(shí)顯示 write_1602dat('U'); write_1602dat('E'); break; case 3:write_1602dat('W');/星期數(shù)據(jù)為3時(shí)顯示 write_1602dat('E'); write_1602dat('D'); break; case 4:write_16
24、02dat('T');/星期數(shù)據(jù)為4時(shí)顯示 write_1602dat('H'); write_1602dat('U'); break; case 5:write_1602dat('F');/星期數(shù)據(jù)為5時(shí)顯示 write_1602dat('R'); write_1602dat('I'); break; case 6:write_1602dat('S');/星期數(shù)據(jù)為6時(shí)顯示 write_1602dat('T'); write_1602dat('A')
25、; break; case 7:write_1602dat('S');/星期數(shù)據(jù)為7時(shí)顯示 write_1602dat('U'); write_1602dat('N'); break; /*鍵盤掃描有關(guān)函數(shù)* void keyscan() if(key1=0)/-key1為功能鍵(設(shè)置鍵)- delay(9);/延時(shí),用于消抖動(dòng)if(key1=0)/延時(shí)后再次確認(rèn)按鍵按下delay(20); while(!key1); key1n+; if(key1n=9) key1n=1;/設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán)switc
26、h(key1n) case 1: TR0=0;/關(guān)閉定時(shí)器/TR1=0; write_1602com(er+0x09);/設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍ZJL=(sec)/10*16+(sec)%10;/秒數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|ZJL);/sec write_1302(0x8e,0x80); break; case 2: write_1602com(er+6);/按2次min位置顯示光標(biāo)write_1602com(0x0f); break; case
27、 3: write_1602com(er+3);/按動(dòng)3次,hour 位置顯示光標(biāo)write_1602com(0x0f); break; case 4: write_1602com(yh+0x0e);/按動(dòng)4次,week /write_1602com(0x0f); break; case 5: write_1602com(yh+0x0a);/按動(dòng)5次,day write_1602com(0x0f); break;case 6: write_1602com(yh+0x07);/按動(dòng)6次,moonwrite_1602com(0x0f); break;case 7: write_1602com(yh
28、+0x04);/按動(dòng)7次,year write_1602com(0x0f); break;case 8: write_1602com(0x0c);/按動(dòng)到第8次,設(shè)置光標(biāo)不閃爍TR0=1;/打開定時(shí)器ZJL=(sec)/10*16+(sec)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|ZJL);/sec數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x80); break; /-加鍵key2- if(key1n!=0)/當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零) if(key2=0) /上調(diào)鍵 delay(10); i
29、f(key2=0) delay(20); while(!key2); switch(key1n) case 1:sec+;/設(shè)置鍵按動(dòng)1次,調(diào)秒if(sec=60) sec=0;/秒超過(guò)59,再加1,就歸零write_sfm(0x08,sec);/令LCD在正確位置顯示"加"設(shè)定好的秒數(shù)ZJL=(sec)/10*16+(sec)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù)write_1302(0x80,ZJL); /向DS1302內(nèi)寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼write_1302(0x8e,
30、0x80); /打開寫保護(hù)write_1602com(er+0x09);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,光標(biāo)自動(dòng)右移,所以要指定返回/write_1602com(0x0b); break;case 2:min+; if(min=60) min=0; write_sfm(0x05,min);/令LCD在正確位置顯示"加"設(shè)定好的分?jǐn)?shù)據(jù)ZJL=(min)/10*16+(min)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x82,ZJL);/向DS1302內(nèi)寫分寄存器82H寫入調(diào)整后的分
31、數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置break;case 3:hour+; if(hour=24) hour=0; write_sfm(2,hour);/令LCD在正確的位置顯示"加"設(shè)定好的小時(shí)數(shù)據(jù)ZJL=(hour)/10*16+(hour)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x84,ZJL);/向DS1302內(nèi)寫小時(shí)寄存器84H寫
32、入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 4:week+; if(week=8) week=1; write_1602com(yh+0x0C);/指定'加'后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容ZJL=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8a
33、,ZJL);/向DS1302內(nèi)寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCDwrite_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+0x0e);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 5:day+;if(moon=1) if(day=32) day=1; if(moon=2) if(year/4=0&&year/100!=0)|(year/400=0)/判斷是否閏年if(day=29) day=1; else if(day=28)day=1; if(moon=3) if(day=32) day=1; i
34、f(moon=4) if(day=31) day=1;if(moon=5) if(day=32) day=1; if(moon=6) if(day=31) day=1; if(moon=7) if(day=32) day=1; if(moon=8) if(day=32) day=1; if(moon=9) if(day=31) day=1; if(moon=10) if(day=32) day=1; if(moon=11)if(day=31) day=1; if(moon=12) if(day=32) day=1;/設(shè)定,1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,二
35、月閏年有29天,平年有28天write_nyr(9,day);/令LCD在正確的位置顯示"加"設(shè)定好的日期數(shù)據(jù)ZJL=(day)/10*16+(day)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x86,ZJL);/向DS1302內(nèi)寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 6:moon+; if(
36、moon=13) moon=1; write_nyr(6,moon);/令LCD在正確的位置顯示"加"設(shè)定好的月份數(shù)據(jù)ZJL=(moon)/10*16+(moon)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x88,ZJL);/向DS1302內(nèi)寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 7:year+
37、; if(year=100) year=0; write_nyr(3,year);/令LCD在正確的位置顯示"加"設(shè)定好的年份數(shù)據(jù)ZJL=(year)/10*16+(year)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8c,ZJL);/向DS1302內(nèi)寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; /-減鍵ke
38、y3,各句功能參照'加鍵'注釋- if(key3=0) delay(10);/調(diào)延時(shí),消抖動(dòng)if(key3=0) delay(20); while(!key3); switch(key1n)case 1:sec-; if(sec=-1) sec=59;/秒數(shù)據(jù)減到-1時(shí)自動(dòng)變成59 write_sfm(0x08,sec);/在LCD的正確位置顯示改變后新的秒數(shù)ZJL=(sec)/10*16+(sec)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù)write_1302(0x80,ZJL); /向DS1302內(nèi)寫秒
39、寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼write_1302(0x8e,0x80); /打開寫保護(hù)write_1602com(er+0x09);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置/write_1602com(0x0b); break; case 2:min-; if(min=-1) min=59; write_sfm(5,min); ZJL=(min)/10*16+(min)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x82,ZJL);/向DS1302內(nèi)寫分寄存器82H
40、寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置break; case 3:hour-; if(hour=-1) hour=23; write_sfm(2,hour); ZJL=(hour)/10*16+(hour)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x84,ZJL);/向DS1302內(nèi)寫小時(shí)寄存器84H寫入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼write_1302(
41、0x8e,0x80);/打開寫保護(hù)write_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 4:week-; if(week=0) week=7; write_1602com(yh+0x0C);/指定'加'后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容ZJL=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8a,ZJL);/向DS1302內(nèi)寫周寄存器8aH寫
42、入調(diào)整后的周數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+0x0e);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 5:day-; if(moon=1)if(day=0) day=31; if(moon=2) if(year/4=0&&year/100!=0)|(year/400=0) if(day=0) day=29; else if(day=0) day=28; if(moon=3) if(day=0) day=31; if(moon=4) if(day=0) day=30;
43、if(moon=5) if(day=0) day=31; if(moon=6) if(day=0) day=30; if(moon=7) if(day=0) day=31; if(moon=8) if(day=0) day=31; if(moon=9) if(day=0) day=30;if(moon=10) if(day=0) day=31; if(moon=11) if(day=0) day=30; if(moon=12) if(day=0) day=31;/同上加鍵write_nyr(9,day); ZJL=(day)/10*16+(day)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB
44、碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x86,ZJL);/向DS1302內(nèi)寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要回位break; case 6:moon-; if(moon=0) moon=12; write_nyr(6,moon); ZJL=(moon)/10*16+(moon)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁
45、止寫保護(hù)write_1302(0x88,ZJL);/向DS1302內(nèi)寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; case 7:year-; if(year=-1) year=99;write_nyr(3,year); ZJL=(year)/10*16+(year)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù)write_1302(0x8c,ZJL);/向DS1302內(nèi)寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break; /- void init() /定時(shí)器、計(jì)數(shù)器設(shè)置函數(shù) TMOD=0x11; /指定定時(shí)/計(jì)數(shù)器的工作方式為3 TH0=0; /定時(shí)器T0的高四位=0 TL0=0; /定時(shí)器T0的低四位=0 EA=1; /系統(tǒng)允許有開放的中斷ET0=1; /
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年西安從業(yè)資格證模擬考試題貨運(yùn)考題
- 2025年四平貨車叢業(yè)資格證考試題
- 2024年技術(shù)開發(fā)合同
- 《轉(zhuǎn)動(dòng)的摩天輪》幼兒園小學(xué)少兒美術(shù)教育繪畫課件創(chuàng)意教程教案
- 班會(huì)學(xué)生發(fā)言稿
- 2024-2025學(xué)年天津市部分區(qū)高一上學(xué)期期末考試地理試題(解析版)
- 《先秦諸子思想比較:大一語(yǔ)文古代文學(xué)教案》
- 2025年濮陽(yáng)道路貨運(yùn)駕駛員從業(yè)資格證考試
- 三農(nóng)園區(qū)綠色生態(tài)農(nóng)業(yè)示范基地建設(shè)方案
- 走進(jìn)乘機(jī)服務(wù)課堂知到課后答案智慧樹章節(jié)測(cè)試答案2025年春山東外貿(mào)職業(yè)學(xué)院
- 2024年08月河北唐山銀行第二批社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 小學(xué)生拗九節(jié)課件
- 巨量千川中級(jí)營(yíng)銷師認(rèn)證考試題(附答案)
- 2025中智集團(tuán)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《智能制造技術(shù)基礎(chǔ)》課件-第2章 智能系統(tǒng)方案與設(shè)計(jì)
- 人教版PEP小學(xué)五年級(jí)英語(yǔ)下冊(cè)全冊(cè)教案(含計(jì)劃)
- 2025年幼兒園膳食工作計(jì)劃
- 《基于二維激光SLAM的AGV導(dǎo)航系統(tǒng)設(shè)計(jì)》
- 金融公司早會(huì)內(nèi)容
- 《下載-綜合布線》課件
- 可穿戴生理傳感器驅(qū)動(dòng)的深度學(xué)習(xí)情緒識(shí)別模型在心理健康評(píng)估中的應(yīng)用
評(píng)論
0/150
提交評(píng)論