基于51單片機(jī)數(shù)字鐘設(shè)計(jì)說明
《基于51單片機(jī)數(shù)字鐘設(shè)計(jì)說明》由會員分享,可在線閱讀,更多相關(guān)《基于51單片機(jī)數(shù)字鐘設(shè)計(jì)說明(41頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 . . . 大學(xué)電子信息學(xué)院 電子系統(tǒng)綜合設(shè)計(jì)課程論文 基于51單片機(jī)的數(shù)字鐘設(shè)計(jì) 專 業(yè): 年 級: 作 者: 指導(dǎo)教師: 2010 年 6 月 20日 目 錄 1 作品的背景與意義1 2 功能指標(biāo)設(shè)計(jì)1 3 作品方案設(shè)計(jì)2 4軟件設(shè)計(jì)3 附錄1 系統(tǒng)電路圖6 附錄2 系統(tǒng)軟件代碼7 39 / 41 1 作品的背景與意義 時鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時間的推移,科學(xué)技術(shù)的不斷發(fā)展,人們對時間計(jì)量的精度要求越來越
2、高,應(yīng)用越來越廣。怎樣讓時鐘更好的為人民服務(wù),怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設(shè)計(jì)出新型時鐘。 現(xiàn)今,高精度的計(jì)時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校,數(shù)字式電子鐘用集成電路計(jì)時時,譯碼代替機(jī)械式傳動,用LED顯示器代替指針顯示進(jìn)而顯示時間,減小了計(jì)時誤差,這種表具有時,分,秒顯示時間的功能,還可以進(jìn)行時和分的校對,片選的靈活性好。現(xiàn)在我們利用單片機(jī)實(shí)現(xiàn)數(shù)字時鐘計(jì)時功能的主要容,其中AT89C51是核心元件同時采用數(shù)碼管動態(tài)顯示“時”,“分”,“秒”的現(xiàn)代計(jì)時裝置。與傳統(tǒng)機(jī)械表相比,它具
3、有走時精確,顯示直觀等特點(diǎn)。它的計(jì)時周期為24小時,顯滿刻度為“23時59分59秒”,另外具有校時功能,斷電后有記憶功能,恢復(fù)供電時可實(shí)現(xiàn)計(jì)時同步等特點(diǎn),除此外還實(shí)現(xiàn)了萬年歷和鬧鐘等的功能。 時鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個單片機(jī)應(yīng)用系統(tǒng)中,時鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時時鐘,即定時時間,它通常有兩種實(shí)現(xiàn)方法:一是用軟件實(shí)現(xiàn),即用單片機(jī)部的可編程定時/計(jì)數(shù)器來實(shí)現(xiàn),但誤差很大,主要用在對時間精度要求不高的場合;二是用專門的時鐘芯片
4、實(shí)現(xiàn),在對時間精度要求很高的情況下,通常采用這種方法,典型的時鐘芯片有:DS1302,DS12887,X1203等都可以滿足高精度的要求。 單片計(jì)算機(jī)即單片微型計(jì)算機(jī)。(Single-Chip Microcomputer ),是集CPU、RAM、ROM、定時、計(jì)數(shù)和多種接口于一體的微控制器。他體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。而51單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。所以綜上所述,此次實(shí)驗(yàn)中所完成的數(shù)字鐘有著強(qiáng)大的功能和良好的市場前景,復(fù)合電子類產(chǎn)品的發(fā)展趨勢。 2 功能指標(biāo)設(shè)計(jì) 2.1 基本功能 1.設(shè)計(jì)一個精確的1秒定時器; 2.根據(jù)1秒定時器
5、,設(shè)計(jì)一個帶小時、分鐘、秒的時鐘,并將小時、分鐘、秒顯示在LED上; 3.設(shè)計(jì)小時、分鐘、秒的修改按鍵,可分別調(diào)整小時、分鐘、秒(按鍵設(shè)計(jì)參考電子表); 2.2 拓展功能 1.增加小時、分鐘、秒的鍵盤直接修改功能; 2.設(shè)計(jì)鬧鐘功能,最多支持5個鬧鐘,可分別查看和修改鬧鐘時間,可分別設(shè)置鬧鐘開關(guān)。 3.增加萬年歷功能。 3 作品方案設(shè)計(jì) 3.1設(shè)計(jì)要求 基本設(shè)計(jì) 1.設(shè)計(jì)一個精確的一秒定時器 2.運(yùn)用一秒的定時器設(shè)計(jì)出有時、分、秒的數(shù)字鐘,并顯示在LED數(shù)碼管上 3.設(shè)置按鍵,能夠修改數(shù)字鐘時間 擴(kuò)展設(shè)計(jì): 1. 設(shè)計(jì)鬧鐘功能,能夠查看和修改鬧鐘時間與開關(guān)狀
6、態(tài) 2. 設(shè)計(jì)萬年歷功能,實(shí)現(xiàn)日→月→年的正常進(jìn)位,能夠查看和修改年月日,能夠自動區(qū)分大小月和平閏年 3.2模塊劃分 ●初始化程序 設(shè)定初值,中斷初始化 ●主程序 程序主要執(zhí)行部分,對子程序(顯示、按鍵設(shè)置,鬧鐘、萬年歷功能)進(jìn)行調(diào)用 ●定時器中斷服務(wù) 中斷走時:秒→分→時 ●顯示程序 刷新8位數(shù)碼管來顯示時間、日期與擴(kuò)展功能設(shè)置界面 ●按鍵設(shè)置 通過對按鍵的操作實(shí)現(xiàn)時間與擴(kuò)展功能的設(shè)置。 ●鬧鐘功能 修改鬧鈴時間,鬧鈴開關(guān)的置換,修改位閃爍加以區(qū)分 ●萬年歷功能 修改日期,同樣的修改位閃爍加以區(qū)分 3.3模塊設(shè)計(jì)概述 1
7、.按鍵設(shè)置 通過調(diào)整選擇鍵SET_KEY選擇調(diào)整位,選中位開始閃爍,此時再按增加鍵ADD_KEY或減少鍵DEC_KEY調(diào)整選中位,如果長按ADD_KEY或DEC_KEY,系統(tǒng)識別后則進(jìn)行調(diào)時快進(jìn),此時停止閃爍,方便人眼觀察。同時還增加了調(diào)秒功能:如果選中位是秒,則按增加鍵或減少鍵都是將秒清零。 3. 時間設(shè)置 進(jìn)入時間設(shè)置界面后,通過調(diào)整選擇鍵SET_KEY選擇調(diào)整位,選中位閃爍。按增加鍵ADD_KEY或減少鍵DEC_KEY設(shè)置所需要的時間。 4. 鬧鐘設(shè)置 進(jìn)入鬧鐘設(shè)置界面后,通過調(diào)整選擇鍵SET_KEY選擇調(diào)整位,選中位閃爍。按增加鍵ADD_KEY或減少鍵DEC_KEY設(shè)置所需要
8、的時間。與時間設(shè)置不同的是,鬧鐘設(shè)置里增加了開關(guān)設(shè)置。 5. 萬年歷設(shè)置 進(jìn)入萬年歷設(shè)置界面后,通過調(diào)整選擇鍵SET_KEY選擇調(diào)整位,選中位閃爍。按增加鍵ADD_KEY或減少鍵DEC_KEY設(shè)置所需要的時間。萬年歷設(shè)置里增加了大小月和平閏年的判別。 4軟件設(shè)計(jì) 4.1 主程序流程圖 4.2鬧鐘程序流程 4.3萬年歷程序流程 4.4中斷系統(tǒng)結(jié)構(gòu)圖 附錄一 附錄二 /*****************************************************************************/ //初始化
9、 MOV SP,#60H;棧指針地址賦值 MOV 3CH,#0CH;設(shè)置界面修改位的閃爍頻率 具體代碼在SERVE 1秒中斷服務(wù)中 MOV 37H,#0FFH ;臨時地址 預(yù)留給39H MOV 39H,#0FFH ;段位標(biāo)志 8位數(shù)據(jù)對應(yīng)8個數(shù)碼管 為0的那位數(shù)碼管始終暗 MOV 3AH,#11111101B;界面轉(zhuǎn)換標(biāo)志 ******01為時間界面 取反后 ******10為萬年歷界面 ******00為設(shè)置鬧鐘界面 CLR A ;時間萬年歷初始化 時間00:00:00 萬年歷2000。01。01 MOV 23H,A;時 MOV 22H,A ;分 MO
10、V 21H,A ;秒 MOV 33H,#01H;日 MOV 34H,#01H ;月 MOV 35H,A;年 只能顯示2000-2099的時間 MOV 3DH,A ;數(shù)碼管閃爍開關(guān) 初始化為關(guān)閉狀態(tài) 取反后 11111111 打開 MOV 40H,A ;鬧鐘設(shè)置界面預(yù)留地址地址 MOV 41H,A MOV 42H,A MOV 43H,A MOV 44H,A MOV 45H,A MOV 46H,A MOV 47H,A MOV 50H,A ;鬧鐘1 時 MOV 51H,A ;鬧鐘1 分 MO
11、V 52H,A ;鬧鐘1 秒 MOV 0AH,A ;鬧鐘1 開關(guān) 00000000為關(guān)閉狀態(tài) 取反后打開鬧鐘1 MOV 53H,A ;同上 MOV 54H,A MOV 55H,A MOV 0BH,A MOV 56H,A MOV 57H,A ;同上 MOV 58H,A MOV 0CH,A MOV 59H,A ;同上 MOV 5AH,A MOV 5BH,A MOV 0DH,A MOV 5CH,A ;同上 MOV 5DH,A MOV 5EH,A MOV 0EH,A ****************
12、**********************************************/ ??ORG 0000H???;程序入口地址 ??LJMP START ??ORG 000BH???;定時器0中斷入口地址 ??LJMP TIMER_0 ??ORG 0300H /*****程序開始,初始化*****/?? START: ??SETB 48H???;使用一個bit位用于調(diào)時閃爍標(biāo)志 ??SETB 47H???;使用一個bit位用于產(chǎn)生脈沖用于調(diào)時快進(jìn)時基 ??MOV R1,#0???;調(diào)整選擇鍵功能標(biāo)志:0正常走時、1調(diào)時、2調(diào)分、3調(diào)秒 ??MOV 2
13、0H,#00H??;用于控制秒基準(zhǔn)時鐘源的產(chǎn)生 ??MOV 21H,#00H??;清零秒寄存器 ??MOV 22H,#00H??;清零分寄存器 ??MOV 23H,#00H??;清零時寄存器 ??MOV 24H,#00H??;用于控制調(diào)時閃爍的基準(zhǔn)時鐘的產(chǎn)生 ? ??MOV IP,#02H???;IP,IE初始化 ??MOV IE,#82H ??MOV TMOD,#01H??;設(shè)定定時器0工作方式1 ??MOV TH0,#3CH ??MOV TL0,#0B0H??;賦定時初值,定時50ms ?? ??SETB TR0???;啟動定時器0 ??MOV SP,#4
14、0H???;重設(shè)堆棧指針 /*****主程序*****/?? MAIN: ??LCALL DISPLAY ??;調(diào)用顯示子程序 ??LCALL KEY_SCAN ??;調(diào)用按鍵檢測子程序 ??JZ MAIN????;無鍵按下則返回重新循環(huán) ??LCALL SET_KEY ??;調(diào)用選擇鍵處理子程序 ?? 46H,MAIN???;如果已進(jìn)行長按調(diào)整(調(diào)時快進(jìn)),則不再執(zhí)行下面的單步調(diào)整???? ??LCALL ADD_KEY??;調(diào)用增加鍵處理子程序,加一 ??LCALL DEC_KEY??;調(diào)用減少鍵處理子程序,減一 ??LJMP MAIN ???;重新循環(huán)
15、 ? /*****定時器中斷服務(wù)程序*****/ TIMER_0: ??PUSH ACC ??? ??PUSH PSW ???;保護(hù)現(xiàn)場 ??MOV TH0,#3CH ??MOV TL0,#0B0H ??;重新賦定時初值 ??CPL 47H????;產(chǎn)生脈沖用于調(diào)時快進(jìn)時基 ??INC 24H ??MOV A,24H???????? ??CJNE A,#10,ADD_TIME?;產(chǎn)生0.5秒基準(zhǔn)時鐘,用于調(diào)時閃爍 ??CPL 48H????;取反調(diào)時閃爍標(biāo)志位 ??MOV 24H,#00H ADD_TIME:?????;走時 ??INC 20H ??? ?
16、?MOV A,20H ??CJNE A,#20,RETI1?;產(chǎn)生1秒基準(zhǔn)時鐘 ??MOV 20H,#00H ??;一秒鐘時間到,清零20H ??MOV A,21H ??ADD A,#01H ??DA A?????;作十進(jìn)制調(diào)整 ??MOV 21H,A ??CJNE A,#60H,RETI1 ??MOV 21H,#00H ??;一分鐘到 ??MOV A,22H ??ADD A,#01H ??DA A ??MOV 22H,A ??CJNE A,#60H,RETI1 ??MOV 22H,#00H ??;一小時到 ??MOV A,23H ??A
17、DD A,#01H ??DA A ??MOV 23H,A ??CJNE A,#24H,RETI1 ??MOV 23H,#00H ??;到24點(diǎn),清零小時 ? RETI1: ??POP PSW ??? ??POP ACC ???;恢復(fù)現(xiàn)場 ??RETI ????;中斷返回 /*****顯示處理*****/ DISPLAY: ??MOV A,21H ???;秒 ??ANL A,#0FH ??MOV 2FH,A???;轉(zhuǎn)換出秒個位,存入2FH ??MOV A,21H ??ANL A,#0F0H ??SWAP A ??MOV 2EH,A???;
18、轉(zhuǎn)換出秒十位,存入2EH ?? 46H,MIN???;如果長按按鍵(調(diào)時快進(jìn)),則跳過閃爍處理程序 ??CJNE R1,#3,MIN??;如果R1為3,閃爍秒位待調(diào)整 ?? 48H,MIN ??MOV 2FH,#0AH??;使該位為10,查表得到使該位不顯示的輸出 ??MOV 2EH,#0AH MIN: ??MOV A,22H ???;分 ??ANL A,#0FH ??MOV 2DH,A???;轉(zhuǎn)換出分個位,存入2DH ??MOV A,22H ??ANL A,#0F0H ??SWAP A ??MOV 2CH,A???;轉(zhuǎn)換出分十位,存入2CH ?? 46H
19、,HOUR???;如果長按按鍵(調(diào)時快進(jìn)),則跳過閃爍處理程序 ??CJNE R1,#2,HOUR??;如果R1為2,閃爍分位待調(diào)整 ?? 48H,HOUR ??MOV 2DH,#0AH??;使該位為10,查表得到使該位不顯示的輸出 ??MOV 2CH,#0AH HOUR: ??MOV A,23H ???;時 ??ANL A,#0FH? ??MOV 2BH,A???;轉(zhuǎn)換出時個位,存入2BH ??MOV A,23H ??ANL A,#0F0H ??SWAP A ??MOV 2AH,A???;轉(zhuǎn)換出時十位,存入2AH ?? 46H,DISP???;如果長按按
20、鍵(調(diào)時快進(jìn)),則跳過閃爍處理程序 ??CJNE R1,#1,DISP??;如果R1為1,閃爍時位待調(diào)整 ? ?? 48H,DISP ??MOV 2BH,#0AH??;使該位為10,查表得到使該位不顯示的輸出 ??MOV 2AH,#0AH /*****數(shù)碼管動態(tài)掃描顯示*****/ DISP: ??MOV DPTR,#TABLE ??MOV A,2FH ??MOVC A,A+DPTR ??MOV P0,A ??CLR P2.7 ??LCALL DELAY ??SETB P2.7???;顯示秒個位 ??MOV A,2EH ??MOVC A,A+DPTR ??MOV
21、 P0,A ??CLR P2.6 ??LCALL DELAY ??SETB P2.6???;顯示秒十位 ??MOV A,#0BFH ??MOV P0,A ??CLR P2.5 ??LCALL DELAY ??SETB P2.5???;顯示“-” ??MOV A,2DH ??MOVC A,A+DPTR ??MOV P0,A ??CLR P2.4 ??LCALL DELAY ??SETB P2.4???;顯示分個位 ??MOV A,2CH ??MOVC A,A+DPTR ??MOV P0,A ??CLR P2.3 ??LCALL DELAY ??SETB P
22、2.3???;顯示分十位 ??MOV A,#0BFH ??MOV P0,A ??CLR P2.2 ??LCALL DELAY ??SETB P2.2???;顯示“-” ??MOV A,2BH ??MOVC A,A+DPTR ??MOV P0,A ??CLR P2.1 ??LCALL DELAY ??SETB P2.1???;顯示時個位 ??MOV DPTR,#TABLE1?;該位使用TABLE1以消除前置0 ??MOV A,2AH ??MOVC A,A+DPTR ??MOV P0,A ??CLR P2.0 ??LCALL DELAY ??SETB P2.0?
23、??;顯示時十位 ??RET ?? /*****按鍵檢測子程序*****/ KEY_SCAN: ??CLR 46H????;關(guān)閉長按調(diào)整(調(diào)時快進(jìn))標(biāo)志 ??MOV P1,#0FFH ??;將P1口設(shè)置成輸入狀態(tài) ??MOV A,P1 ??CPL A ??ANL A,#07H???;P1口低3位連接3個按鍵,只判斷該3位 ??JZ EXIT_KEY ??;無鍵按下則返回 ??LCALL DELAY???;延時去抖動 ??MOV A,P1???;重新判斷 ??CPL A ??ANL A,#07H ??JZ EXIT_KEY ??;鍵盤去抖動
24、 ??MOV R5,A ???;臨時將鍵值存入R5 ??MOV R4,#00H???;用于控制調(diào)時快進(jìn)速度 ??;設(shè)置為00H是為了在進(jìn)入長按處理前加長延時區(qū)分用戶的長按與短按,防止誤快進(jìn) ?? LOOP:??????;進(jìn)入長按處理 ??LCALL DISPLAY??;使長按時顯示正常? ??MOV A,P1 ??CPL A ??ANL A,#07H ?? 47H,LOOP1 ??INC R4????;調(diào)時快進(jìn)間隔時間基準(zhǔn)加1 LOOP1: ??CJNE R1,#03H,LOOP2?;如果調(diào)秒時長按,則不處理 ??LJMP LOOP3 LOOP2: ??C
25、JNE R4,#99H,LOOP3? ??MOV R4,#70H???;確認(rèn)用戶長按后,重新設(shè)定起始值,加快調(diào)時快進(jìn)速度 ??SETB 46H???;長按調(diào)整(調(diào)時快進(jìn))標(biāo)志??? ??LCALL ADD_KEY ??LCALL DEC_KEY LOOP3: ??JNZ LOOP ???;等待鍵釋放 ??MOV A,R5???;輸出鍵值 ??RET??? EXIT_KEY: ??RET /*****延時子程序*****/ DELAY:?? ??MOV R7,#150? ??DJNZ R7,$ ??RET ?? /*****選擇鍵處理子程序*****/
26、SET_KEY: ??CJNE R5,#01H,EXIT?;選擇鍵鍵值 ??INC R1????;調(diào)整選擇功能標(biāo)志加一 ??CJNE R1,#4,EXIT ??MOV R1,#0 ??MOV 24H,#00H??;調(diào)時閃爍基準(zhǔn)清零 ??RET /*****增加鍵處理子程序*****/ ADD_KEY: ??CJNE R5,#02H,EXIT?;增加鍵鍵值 ??CJNE R1,#01H,NEXT1?;選擇鍵功能標(biāo)志為1,調(diào)時,否則跳出 ??MOV A,23H ??ADD A,#01H ??DA A ??MOV 23H,A ??CJNE A,#24H,EXIT
27、 ??MOV 23H,#00H NEXT1: ??CJNE R1,#02H,NEXT2?;選擇鍵功能標(biāo)志為2,調(diào)分,否則跳出 ??MOV A,22H ??ADD A,#01H ??DA A ??MOV 22H,A ??CJNE A,#60H,EXIT ??MOV 22H,#00H NEXT2: ??CJNE R1,#03H,EXIT?;選擇鍵功能標(biāo)志為3,調(diào)秒,否則跳出 ??MOV 21H,#00H??;如增加鍵按下直接清零秒 ??RET /*****減少鍵處理子程序*****/ DEC_KEY: ??CJNE R5,#04H,EXIT?;減少鍵鍵值 ??
28、CJNE R1,#01H,NEXT3?;選擇鍵功能標(biāo)志為1,調(diào)時,否則跳出 ??MOV A,23H ??ADD A,#99H ??DA A ??MOV 23H,A ??CJNE A,#99H,EXIT ??MOV 23H,#23H ? NEXT3: ??CJNE R1,#02H,NEXT4?;選擇鍵功能標(biāo)志為2,調(diào)分,否則跳出 ??MOV A,22H ??ADD A,#99H ??DA A ??MOV 22H,A ??CJNE A,#99H,EXIT ??MOV 22H,#59H NEXT4: ??CJNE R1,#03H,EXIT?;選擇鍵功能標(biāo)志為3,調(diào)秒
29、,否則跳出 ??MOV 21H,#00H??;如較少鍵按下直接清零秒 ??RET /*****萬用返回子程序*****/?? EXIT: ??RET /*****數(shù)碼管字形編碼表*****/ TABLE: ??DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;字形顯示編碼 TABLE1: ??DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小時位的十位數(shù)編碼,該位如果為0則不顯示 //鬧鐘檢測 MOV A,0AH JZ NAO2 ;檢
30、測鬧鐘開關(guān) 若關(guān)檢測下一個鬧鐘,否則檢測時間是否為鬧鐘設(shè)定時間 MOV A,30H CJNE A,50H,NAO2 MOV A,31H CJNE A,51H,NAO2 MOV A,32H CJNE A,52H,NAO2 AJMP XIANG ;時間為鬧鐘設(shè)定時間吻合 進(jìn)入鬧鈴程序 下同 NAO2: MOV A,0BH JZ NAO3 MOV A,30H CJNE A,53H,NAO3 MOV A,31H CJNE A,54H,NAO3 MOV A,32H CJNE A,55H,NAO3 AJMP XIANG NAO3: MOV A,0CH
31、 JZ NAO4 MOV A,30H CJNE A,56H,NAO4 MOV A,31H CJNE A,57H,NAO4 MOV A,32H CJNE A,58H,NAO4 AJMP XIANG NAO4: MOV A,0DH JZ NAO5 MOV A,30H CJNE A,59H,NAO5 MOV A,31H CJNE A,5AH,NAO5 MOV A,32H CJNE A,5BH,NAO5 AJMP XIANG NAO5: MOV A,0EH JZ BU MOV A,30H CJNE A,5CH,BU MOV A,31H CJNE
32、A,5DH,BU MOV A,32H CJNE A,5EH,BU AJMP XIANG //檢測獨(dú)立按鍵 BU: T0,ZHU1 ;檢測s19是否按下 按下進(jìn)入萬年歷界面,否則檢測矩陣鍵盤 MOV A,3AH ;界面轉(zhuǎn)換標(biāo)志取反即可使得時間和萬年歷界面相互轉(zhuǎn)換 CPL A MOV 3AH,A //檢測矩陣鍵盤 //檢測到按鍵1,2,3,4,5時進(jìn)入對應(yīng)的鬧鐘設(shè)置界面 檢測到0BH(對應(yīng)s11)進(jìn)入時間設(shè)置界面 檢測到0CH(對應(yīng)s12)進(jìn)入萬年歷設(shè)置界面 //若未檢測到按鍵 則跳回主程序繼續(xù)下一個檢測周期 ZHU1: MOV R7,#0FH ACAL
33、L JIANCEANJIAN ;矩陣鍵盤檢測子程序 將檢測到的鍵值存入r7 CJNE R7,#0FH,ZHU2 AJMP ZHUXUNHUAN ZHU2: CJNE R7,#0BH,ZHU3 AJMP SHIJIANSHEZHI ZHU3: CJNE R7,#0CH,ZHU4 AJMP WANNIANLISHEZHI ZHU4: CJNE R7,#01H,ZHU5 AJMP NAOZHONGSHEZHI ZHU5: CJNE R7,#02H,ZHU6 AJMP NAOZHONGSHEZHI ZHU6: CJNE R7,#03H,ZHU7
34、 AJMP NAOZHONGSHEZHI ZHU7: CJNE R7,#04H,ZHU8 AJMP NAOZHONGSHEZHI ZHU8: CJNE R7,#05H,ZHUXUNHUAN0 AJMP NAOZHONGSHEZHI ZHUXUNHUAN0: AJMP ZHUXUNHUAN //年月日校正子程序 用于萬年歷進(jìn)位和萬年歷設(shè)置 防止出現(xiàn)不存在的時間 NYR: MOV A,33H CJNE A,#32,MONTH ;日為32時,月進(jìn)位日置1 MOV 33H,#01H AJMP MONTH0 MONTH: CJNE A,#3
35、1,MONTH1 ;日為31時 分辨大小月與2月 MOV A,34H CJNE A,#4,MONTH2 MOV 33H,#01H AJMP MONTH0 MONTH2: CJNE A,#2,MONTH6 MOV 33H,#01H AJMP MONTH0 MONTH6: CJNE A,#6,MONTH9 MOV 33H,#01H AJMP MONTH0 MONTH9: CJNE A,#9,MONTH11 MOV 33H,#01H AJMP MONTH0 MONTH11: CJNE A,#11,RETURN0 MOV 33H,#01H
36、AJMP MONTH0 MONTH1: CJNE A,#30,MONTH29 ;日為30時分辨2月 MOV A,34H CJNE A,#02H,RETURN0 MOV 33H,#01H AJMP MONTH0 MONTH29: CJNE A,#29,RETURN0 ;日為29時分辨閏平年2月 MOV A,34H CJNE A,#02H,RETURN0 MOV A,35H MOV B,#04H DIV AB MOV A,B JNZ MONO AJMP RETURN0 MONO: MOV 33H,#01H MONTH0:
37、MOV A,#01H ;月進(jìn)位 ADD A,34H MOV 34H,A CJNE A,#0DH,RETURN0 MOV 34H,#01H MOV A,#01H ADD A,35H MOV 35H,A CJNE A,#100,RETURN0 ;年最多只能99 MOV 35H,#00 RETURN0: RET /******************************************************************/ //屏幕刷新中斷 XIANSHI: PUSH B PUSH DPH PUSH DPL
38、 PUSH PSW PUSH ACC MOV TH1,#0DFH MOV TL1,#0E0H MOV A,3AH JNB ACC.0,WANNIANLI ;界面顯示判斷 //時間界面 MOV A,21H MOV B,#0AH DIV AB MOV 10H,B MOV 11H,A MOV A,22H MOV B,#0AH DIV AB MOV 12H,B MOV 13H,A MOV A,23H MOV B,#0AH DIV AB MOV 14H,B MOV 15H,A MOV 16H,#0
39、AH MOV 17H,#0AH AJMP LIANG //萬年歷界面 WANNIANLI: JNB ACC.1,SHEZHI MOV A,33H MOV B,#0AH DIV AB MOV 10H,B MOV 11H,A MOV A,34H MOV B,#0AH DIV AB MOV 12H,B MOV 13H,A MOV A,35H MOV B,#0AH DIV AB MOV 14H,B MOV 15H,A MOV 16H,#00H MOV 17H,#02H AJMP LIANG //鬧鐘設(shè)置界面 SHEZHI: MOV 1
40、0H,40H MOV 11H,41H MOV 12H,42H MOV 13H,43H MOV 14H,44H MOV 15H,45H MOV 16H,46H MOV 17H,47H //萬年歷設(shè)置 WANNIANLISHEZHI: MOV 3AH,#0FEH ;轉(zhuǎn)換設(shè)置界面 MOV 39H,#11011111B ;設(shè)置閃爍位 MOV 37H,39H MOV 3DH,#0FFH ;開閃爍開關(guān) WM: ACALL NYR ;校正 萬年歷 T1,WS1 ;s20 按下 退出設(shè)置界面 MOV 39H,#0FFH
41、 ;關(guān)閃爍 MOV 3DH,#00H ;閃爍開關(guān) 關(guān) MOV 3AH,#11111101B ;轉(zhuǎn)換成時間設(shè)置界面 AJMP ZHUXUNHUAN WS1: INT0,WS2 ;修改位 右移 同上 MOV A,37H CJNE A,#11111110B,WSS0 RR A RR A RR A MOV 37H,A S20: JNB INT0,S20 AJMP WM WSS0: RR A MOV 37H,A S21: JNB INT0,S21 AJMP WM WS2: INT1,WM1 ;修改位左移
42、 MOV A,37H CJNE A,#11011111B,WSS1 RL A RL A RL A MOV 37H,A S23: JNB INT1,S23 AJMP WM WSS1: RL A MOV 37H,A S24: JNB INT1,S24 AJMP WM //矩陣鍵盤檢測 修改萬年歷 WM1: MOV R7,#0FH ACALL JIANCEANJIAN CJNE R7,#0FH,WSJSZ1 AJMP WM WSJSZ1: MOV A,37H ;檢測修改位 ACC.5,WSJSZ2 /
43、/修改年十位 MOV A,35H MOV B,#0AH DIV AB MOV 1FH,B MOV A,R7 MOV B,#0AH MUL AB ADD A,1FH MOV 35H,A MOV A,37H RR A MOV 37H,A AJMP WM WSJSZ2: ACC.4,WSJSZ3 //修改年個位 MOV A,35H MOV B,#0AH DIV AB MOV B,#0AH MUL AB ADD A,R7 MOV 35H,A MOV A,37H RR A MOV 37H,A AJMP WM WSJSZ3: ACC
44、.3,WSJSZ4 //修改月十位 只能為0,1 但月個位不為0,1,2是不能修改為1 月個位為0時不能修改為0 CJNE R7,#00H,WSJ1 MOV A,34H MOV B,#0AH DIV AB MOV A,B CJNE A,#00H,WLED4 AJMP WMMM WSJ1: CJNE R7,#01H,WMMM MOV A,34H MOV B,#0AH DIV AB MOV A,B CJNE A,#00H,L1 AJMP WLED4 L1: CJNE A,#01H,L2 AJMP WLED4 L2: CJNE A,#02H,WMMM
45、 AJMP WLED4 WMMM:LJMP WM WLED4: MOV A,34H MOV B,#0AH DIV AB MOV 1FH,B MOV A,R7 MOV B,#0AH MUL AB ADD A,1FH MOV 34H,A MOV A,37H RR A MOV 37H,A AJMP WM WSJSZ4: ACC.2,WSJSZ5 //修改月個位 但月十位為1時只能修改為0,1,2 月十位為0時不能修改為0 MOV A,34H MOV B,#0AH DIV AB CJNE A,#00H,WJ0 CJNE R7,#00H,WLED
46、3 AJMP WWM WJ0: CJNE R7,#00H,WJ1 AJMP WLED3 WJ1: CJNE R7,#01H,WJ2 AJMP WLED3 WJ2: CJNE R7,#02H,WWM AJMP WLED3 WLED3: MOV B,#0AH MUL AB ADD A,R7 MOV 34H,A MOV A,37H RR A MOV 37H,A WWM: AJMP WM WSJSZ5: ACC.1,WSJSZ6 //修改日十位 只能為0,1,2,3 日個位不為0,1時不能修改為3 CJNE R7,#00H,WSJ10 AJM
47、P WLED2 WSJ10: CJNE R7,#01H,WSJ20 AJMP WLED2 WSJ20: CJNE R7,#02H,WSJ30 AJMP WLED2 WSJ30: CJNE R7,#03H,WWM MOV A,33H MOV B,#0AH DIV AB MOV A,B CJNE A,#00H,L3 AJMP WLED2 L3: CJNE A,#01H,WWM AJMP WLED2 WLED2: MOV A,33H MOV B,#0AH DIV AB MOV 1FH,B MOV A,R7 MOV B,#0AH MUL AB AD
48、D A,1FH MOV 33H,A MOV A,37H RR A MOV 37H,A AJMP WM WSJSZ6: //修改日個位 日十位為3時 只能修改為0,1 MOV A,33H MOV B,#0AH DIV AB CJNE A,#00H,LL4 CJNE R7,#00H,WLED1 AJMP WM LL4: CJNE A,#03H,WLED1 CJNE R7,#00H,WJ4 AJMP WLED1 WJ4: CJNE R7,#01H,WWM AJMP WLED1 WLED1: MOV B,#0AH MUL AB ADD A,R
49、7 MOV 33H,A MOV 37H,#11011111B AJMP WM /***************************************************************/ //矩陣按鍵檢測子程序 JIANCEANJIAN: MOV DPTR,#8000H MOV A,#0F0H MOVX DPTR,A MOV DPTR,#8000H MOVX A,DPTR CPL A JNZ XIAODOU RET XIAODOU: //ACALL DELAY MOV A,#0F0H MOV DPTR,#
50、8000H MOVX A,DPTR CPL A JNZ PAN RET PAN: MOV DPTR,#8000H MOV A,#11111110B MOVX DPTR,A MOV DPTR,#8000H MOVX A,DPTR JNB ACC.0,KEY10 ;低電位說明按鍵在該位 JNB ACC.1,KEY20 JNB ACC.2,KEY30 JNB ACC.3,KEY40 MOV DPTR,#8000H MOV A,#11111101B MOVX DPTR,A MOV DPTR,#8000H MOVX A,D
51、PTR JNB ACC.0,KEY50 JNB ACC.1,KEY60 JNB ACC.2,KEY70 JNB ACC.3,KEY80 MOV DPTR,#8000H MOV A,#11111011B MOVX DPTR,A MOV DPTR,#8000H MOVX A,DPTR JNB ACC.0,KEY90 JNB ACC.1,KEY00 JNB ACC.2,TUI JNB ACC.3,KEY0C0 RET KEY10: MOV R7,#01H RET KEY20: MOV R7,#02H RET KEY30: MOV R7,#
52、03H RET KEY40: MOV R7,#04H RET KEY50: MOV R7,#05H RET KEY60: MOV R7,#06H RET KEY70: MOV R7,#07H RET KEY80: MOV R7,#08H RET KEY90: MOV R7,#09H RET KEY00: MOV R7,#00H RET TUI: MOV R7,#0BH RET KEY0C0: MOV R7,#0CH RET /*************************************************
53、***/ //鬧鈴響 XIANG: CLR P1.0 //ACALL MDELAY //SETB P1.0 T1,XIANG ;s20 退出鬧鈴 跳回主循環(huán) SETB P1.0 AJMP ZHUXUNHUAN /****************************************************/ //鬧鐘設(shè)置 NAOZHONGSHEZHI: //檢測是哪個鬧鐘 并初始化鬧鐘設(shè)置 CJNE R7,#01H,NZ2 MOV A,50H MOV B,#0AH DIV AB MOV 45H,A MOV 44H,B MOV A
54、,51H MOV B,#0AH DIV AB MOV 43H,A MOV 42H,B MOV A,52H MOV B,#0AH DIV AB MOV 41H,A MOV 40H,B MOV 09H,#50H MOV 47H,#01H MOV 08H,#0AH AJMP NANJIAN NZ2: CJNE R7,#02H,NZ3 MOV A,53H MOV B,#0AH DIV AB MOV 45H,A MOV 44H,B MOV A,54H MOV B,#0AH DIV AB MOV 43H,A MOV 42H,B MOV A,55H MO
55、V B,#0AH DIV AB MOV 41H,A MOV 40H,B MOV 09H,#53H MOV 47H,#02H MOV 08H,#0BH AJMP NANJIAN NZ3: CJNE R7,#03H,NZ4 MOV A,56H MOV B,#0AH DIV AB MOV 45H,A MOV 44H,B MOV A,57H MOV B,#0AH DIV AB MOV 43H,A MOV 42H,B MOV A,58H MOV B,#0AH DIV AB MOV 41H,A MOV 40H,B MOV 09H,#56H MOV 47H
56、,#03H MOV 08H,#0CH AJMP NANJIAN NZ4: CJNE R7,#04H,NZ5 MOV A,59H MOV B,#0AH DIV AB MOV 45H,A MOV 44H,B MOV A,5AH MOV B,#0AH DIV AB MOV 43H,A MOV 42H,B MOV A,5BH MOV B,#0AH DIV AB MOV 41H,A MOV 40H,B MOV 09H,#59H MOV 47H,#04H MOV 08H,#0DH AJMP NANJIAN NZ5: MOV A,5CH MOV B,
57、#0AH DIV AB MOV 45H,A MOV 44H,B MOV A,5DH MOV B,#0AH DIV AB MOV 43H,A MOV 42H,B MOV A,5EH MOV B,#0AH DIV AB MOV 41H,A MOV 40H,B MOV 09H,#5CH MOV 47H,#05H MOV 08H,#0EH AJMP NANJIAN NANJIAN: MOV 3AH,#11111100B ;界面轉(zhuǎn)換成鬧鐘設(shè)置界面 MOV 39H,#11011111B MOV 37H,39H MOV 3DH,#0FFH
58、 ;開閃爍 NM: MOV R1,08H T0,XIA1 ;s19 鬧鐘開關(guān) MOV A,R1 CPL A MOV R1,A XIA1: MOV A,R1 JZ XIA2 MOV 46H,#0BH JMP XIA3 XIA2: MOV 46H,#0AH XIA3: T1,NS1 ;s20 退出鬧鐘設(shè)置 跳回主程序 //鬧鐘數(shù)據(jù)保存 MOV 39H,#0FFH MOV 3DH,#00H MOV 3AH,#11111101B MOV R1,09H MOV A,45H MOV B,#0AH MUL AB ADD A
59、,44H MOV R1,A INC R1 MOV A,43H MOV B,#0AH MUL AB ADD A,42H MOV R1,A INC R1 MOV A,41H MOV B,#0AH MUL AB ADD A,40H MOV R1,A AJMP ZHUXUNHUAN NS1: INT0,NS2 ;修改位右移 同上 MOV A,37H CJNE A,#11111110B,NSS0 RR A RR A RR A MOV 37H,A S30: JNB INT0,S30 AJMP NM NSS0: RR A MOV 37
60、H,A S31: JNB INT0,S31 AJMP NM NNM:AJMP NM NS2: INT1,NM1 ;修改位左移 同上 MOV A,37H CJNE A,#11011111B,NSS1 RL A RL A RL A MOV 37H,A S32: JNB INT1,S32 LJMP NM NSS1: RL A MOV 37H,A S33: JNB INT1,S33 LJMP NM NM1: //矩陣鍵盤檢測 修改鬧鐘 同時間設(shè)置 MOV R7,#0FH LCALL JIANCEANJIAN CJNE
61、 R7,#0FH,NSJSZ1 LJMP NM NSJSZ1: MOV A,37H ACC.5,NSJSZ2 CJNE R7,#00H,NSJS1 LJMP NLED6 NSJS1: CJNE R7,#01H,NSJS2 LJMP NLED6 NSJS2: CJNE R7,#02H,NMM AJMP NLED6 NLED6: MOV 45H,R7 MOV A,37H RR A MOV 37H,A LJMP NM NSJSZ2: ACC.4,NSJSZ3 MOV A,45H CJNE A,#02H,NLED5 CJNE R7,#00H,N
62、SJS4 AJMP NLED5 NSJS4: CJNE R7,#01H,NSJS5 AJMP NLED5 NSJS5: CJNE R7,#02H,NSJS6 AJMP NLED5 NSJS6: CJNE R7,#03H,NMM1 AJMP NLED5 NMM1:LJMP NNM NLED5: MOV 44H,R7 MOV A,37H RR A MOV 37H,A LJMP NM NSJSZ3: ACC.3,NSJSZ4 CJNE R7,#00H,NSJ1 LJMP NLED4 NSJ1: CJNE R7,#01H,NSJ2 AJMP NLED
63、4 NSJ2: CJNE R7,#02H,NSJ3 AJMP NLED4 NSJ3: CJNE R7,#03H,NSJ4 AJMP NLED4 NSJ4: CJNE R7,#04H,NSJ5 AJMP NLED4 NSJ5: CJNE R7,#05H,NMM AJMP NLED4 NMM:LJMP NM NLED4: MOV 43H,R7 MOV A,37H RR A MOV 37H,A LJMP NM NSJSZ4: ACC.2,NSJSZ5 MOV 42H,R7 MOV A,37H RR A MOV 37H,A AJMP NMM0
64、 NSJSZ5: ACC.1,NSJSZ6 CJNE R7,#00H,NSJ10 AJMP NLED2 NSJ10: CJNE R7,#01H,NSJ20 AJMP NLED2 NSJ20: CJNE R7,#02H,NSJ30 AJMP NLED2 NSJ30: CJNE R7,#03H,NSJ40 AJMP NLED2 NSJ40: CJNE R7,#04H,NSJ50 AJMP NLED2 NSJ50: CJNE R7,#05H,NMM0 AJMP NLED2 NMM0:LJMP NM NLED2: MOV 41H,R7 MOV A,37H RR A MOV 37H,A LJMP NM NSJSZ6: MOV 40H,R7 MOV 37H,#11011111B LJMP NM END
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對照實(shí)驗(yàn)專題復(fù)習(xí)課件
- 初中物理資源九年級第十五單元課件串并聯(lián)識別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級上冊美術(shù)第15課-剪雪花教學(xué)ppt課件
- 蘇教版六年級下冊數(shù)學(xué)正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計(jì)圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復(fù)習(xí)-課件2
- 太陽能發(fā)展趨勢課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計(jì)劃-PPT
- 新冠肺炎疫情期間醫(yī)務(wù)人員防護(hù)技術(shù)指南