基于單片機(jī)的萬(wàn)歷設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的萬(wàn)歷設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的萬(wàn)歷設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的萬(wàn)歷設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的萬(wàn)歷設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于單片機(jī)的萬(wàn)歷設(shè)計(jì)PAGE14-基于單片機(jī)的萬(wàn)年歷設(shè)計(jì)一.題目要求1.能星期、時(shí)、分,年、月、日正常顯示,且秒閃。2.按下KEY1,進(jìn)入設(shè)置狀態(tài),根據(jù)按鍵次數(shù)可判斷調(diào)整哪個(gè)(星期、時(shí)、分、年、月、日)。調(diào)整星期、時(shí)、分時(shí),對(duì)應(yīng)位閃爍且四燈滅。調(diào)整年、月、日時(shí),對(duì)應(yīng)位閃爍且四燈滅。3.在設(shè)置狀態(tài)下按下KEY2,加時(shí)間。4.在設(shè)置狀態(tài)下按下KEY3,減時(shí)間。5.在設(shè)置狀態(tài)下按下KEY4,返回(正常顯示)。二.題目分析1.硬件部分設(shè)計(jì)。首先要設(shè)計(jì)一個(gè)最小系統(tǒng),包括晶振電路,按鍵復(fù)位電路。然后是按鍵電路和ISP電路,顯示電路。其中顯示電路就要考慮各端口的分配。包括片選,輸出端口。2.軟件部分設(shè)計(jì)。根據(jù)硬件電路分析,要考慮怎么顯示,考慮中斷,定時(shí)等。還要考慮年月日的算法問(wèn)題。三.功能描述1.能正常顯示時(shí)間(星期、時(shí)、分,年、月、日),兩種狀態(tài)以10S時(shí)間切換。2.能調(diào)整時(shí)間。四.方案論證1.單片機(jī)芯片的選擇方案和論證方案一:基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第1頁(yè)。采用89C51芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞?;趩纹瑱C(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第1頁(yè)。方案二:采用AT89S52,片內(nèi)ROM全都采用FlashROM;能以3V的超底壓工作;同時(shí)也與MCS-51系列單片機(jī)完全該芯片內(nèi)部存儲(chǔ)器為8KBROM存儲(chǔ)空間,同樣具有89C51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞。所以選擇采用AT89S52作為主控制系統(tǒng).2.顯示模塊選擇方案和論證方案一:采用LED發(fā)光二極管,讀書較困難。方案二:采用LCD12864,價(jià)格太貴,經(jīng)濟(jì)方面不予考慮。方案三:采用LCD1602,編程較困難。方案四:采用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字最合適,而且采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),占用的單片機(jī)口線少。所以采用了LED數(shù)碼管作為顯示。五.元器件清單1.AT89S52單片機(jī)1個(gè)2.芯片底座1個(gè)3.ISP插口1個(gè)4.USB接口1個(gè)5.30pF瓷片電容2個(gè)、10μF電容1個(gè)6.12M晶振1個(gè)7.兩連LED數(shù)碼管3個(gè)8.1K電阻11個(gè)、330Ω電阻8個(gè)、10K電阻1個(gè)9.紅色發(fā)光二極管5個(gè)10.C8550三極管6個(gè)基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第2頁(yè)。11.按鍵5個(gè)基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第2頁(yè)。12.撥動(dòng)開關(guān)1個(gè)13.萬(wàn)用板一塊14.排線若干六.電路圖1.最小系統(tǒng)電路圖2.ISP電路111029384756P1.7P1.6RSTP1.5vcc3.顯示電路數(shù)碼管片選數(shù)碼管片選1K1KP2.0~P2.5P2.0~P2.5基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第3頁(yè)?;趩纹瑱C(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第3頁(yè)。+5V+5V七.相關(guān)參數(shù)1.本設(shè)計(jì)采用共陽(yáng)數(shù)碼管,其驅(qū)動(dòng)電路采用三極管低電平驅(qū)動(dòng)。2.最小系統(tǒng)其構(gòu)成簡(jiǎn)單,可靠。復(fù)位電路有兩種方式。一種是上電復(fù)位,一種是按鈕復(fù)位。本設(shè)計(jì)采用電平按鈕復(fù)位,通過(guò)RST端接電阻與電源Vcc接通實(shí)現(xiàn)。晶振電路中晶振采用12MHZ。八.程序;/////////開始自定義及初始化////////////////cBufTh0 equ 42h ;定時(shí)器TH0基數(shù)存儲(chǔ)單元cBufTl0 equ43h ;定時(shí)器TL0基數(shù)存儲(chǔ)單元shuchu equ P3 ;定義P3口為數(shù)據(jù)輸出口送數(shù)碼管顯示pianxuan equ P2 ;定義P2口位片選口cxingqi equ 30h ;星期存儲(chǔ)單元cshi equ 31h ;時(shí)存儲(chǔ)單元cfen equ 32h ;分存儲(chǔ)單元cnian1 equ 33H ;年后兩位存儲(chǔ)單元cyue equ 34h ;月存儲(chǔ)單元cri equ 35h ;日存儲(chǔ)單元cmiao equ 36h ;秒存儲(chǔ)單元cnian2 equ 37h ;年前兩位cribj equ 38h ;最大天數(shù)key1 bit 20h.1 ;已經(jīng)按下一次的標(biāo)志位key2 bit 20h.2 ;已經(jīng)按下一次的標(biāo)志位key3 bit 0h.3;已經(jīng)按下一次的標(biāo)志位key4 bit 20h.4;已經(jīng)按下一次的標(biāo)志位bt0 bit 20h.5 ;時(shí)間到了標(biāo)志位shezhi bit P1.0 ;自動(dòng)切換顯示jia bit P1.1 ;加按鍵jian bit P1.2 ;減按鍵returnbitP1.3;返回鍵 org0000hajmpstart org000bhljmpT0Serorg0030h基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第4頁(yè)。start:movr0,#07fh基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第4頁(yè)。l0:mov@r0,#0djnzr0,l0call chushihua;///////////////十秒切換//////////////////main:calljianpancallzuidashucjner4,#0,lei4mova,cmiaomovb,#10divabmovb,#2divabmova,bjzxianshi2;十位為偶數(shù)顯示年月日l(shuí)jmplei3;否則顯示星期時(shí)分lei4:mova,r4subba,#4jnbpsw.7,xianshi2lei3:call display1 ljmp mainxianshi2: call display2 ljmp mainchushihua: movsp,#60hmovtmod,#01h ;設(shè)定定時(shí)器的工作狀態(tài)movdptr,#65536-20000;20ms產(chǎn)生一次中斷movth0,dphmovtl0,dplmovcBufTh0,dphmovcBufTl0,dplsetbtr0setbet0setbea mov r0,#0 ;用來(lái)判斷是否到了1S mov r4,#0;按鍵初始化 mov cmiao,#50;50*20ms為一秒 mov cfen,#59;設(shè)定初始時(shí)間 mov cshi,#23 mov cxingqi,#7 mov cri,#28 mov cyue,#2 mov cnian1,#08 mov cnian2,#20基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第5頁(yè)。clrkey1;按鍵清零基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第5頁(yè)。clrkey2clrkey3clrkey4retdisplay1:setbp2.6;前兩燈滅cjner4,#0,leiclrp2.6lei: mov a,cxingqi mov b,#10 div ab mov dptr,#tab1 ;星期高位 movc a,@a+dptrcjne r4,#0,shanshuo ;是否需要閃爍 ljmp zhengchang1 ;不需要閃爍跳正常顯示shanshuo:clrp2.7cjne r4,#3,zhengchang1;判斷星期是否要閃爍 jb bt0,cc1zhengchang1: clrp2.0;點(diǎn)亮第一個(gè)數(shù)碼管mov shuchu,acc1: lcall delay setbp2.0;閃爍 mov dptr,#tab1;星期低位 mov a,b movc a,@a+dptrcjne r4,#3,zhengchang2;判斷是否星期需要閃爍 jb bt0,cc2zhengchang2: clrp2.1 mov shuchu,acc2: call delay setbp2.1;閃爍 mov a,cshi mov b,#10 div ab mov dptr,#tab1;顯示時(shí)高位 movc a,@a+dptrcjne r4,#2,zhengchang3;判斷時(shí)是否需要閃爍 jb bt0,cc3zhengchang3: clrp2.2 mov shuchu,a基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第6頁(yè)。cc3: call delay基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第6頁(yè)。 setbp2.2;閃爍 mov dptr,#tab1;顯示時(shí)低位 mov a,b movc a,@a+dptr cjne r4,#2,zhengchang4;判斷時(shí)是否需要閃爍 jb bt0,cc4zhengchang4: clrp2.3 mov shuchu,acc4: call delay setbp2.3;閃爍 mov a,cfen mov b,#10 div ab mov dptr,#tab1;分高位 movc a,@a+dptrcjne r4,#1,zhengchang5;判斷分是否需要閃爍 jb bt0,cc5zhengchang5: clrp2.4 mov shuchu,acc5:call delay setbp2.4;閃爍 mov dptr,#tab1;分低位 mov a,b movc a,@a+dptrcjne r4,#1,zhengchang6;判斷分是否需要閃爍 jb bt0,cc6zhengchang6: clrp2.5 mov shuchu,acc6: call delay setbp2.5;閃爍 retdisplay2:clrp2.6;點(diǎn)亮四個(gè)二極管clrp2.7mov a,cnian1 mov b,#10 div abmov dptr,#tab1;年高位 movc a,@a+dptrcjne r4,#6,zhengchang7;判斷年是否需要閃爍 jb bt0,cc7基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第7頁(yè)。zhengchang7:基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第7頁(yè)。 clrp2.0 mov shuchu,acc7: lcall delay setbp2.0;閃爍 mov dptr,#tab1;年低位 mov a,b movc a,@a+dptrcjne r4,#6,zhengchang8;判斷年是否需要閃爍 jb bt0,cc8zhengchang8: clrp2.1 mov shuchu,acc8: call delay setbp2.1;閃爍 mov a,cyue mov b,#10 div ab mov dptr,#tab1;月高位 movc a,@a+dptrcjne r4,#5,zhengchang9;判斷月是否需要閃爍 jb bt0,cc9zhengchang9: clrp2.2 mov shuchu,acc9: call delay setbp2.2;閃爍 mov dptr,#tab1;月低位 mov a,b movc a,@a+dptrcjne r4,#5,zhengchang10;判斷月是否需要閃爍 jb bt0,cc10zhengchang10: clrp2.3 mov shuchu,acc10: call delay setbp2.3;閃爍 mov a,cri mov b,#10 div ab mov dptr,#tab1;日高位 movc a,@a+dptrcjne r4,#4,zhengchang11;判斷日是否需要閃爍 jb bt0,cc11zhengchang11:基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第8頁(yè)。 clrp2.4基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第8頁(yè)。 mov shuchu,acc11: call delay setbp2.4;閃爍 mov dptr,#tab1;日低位 mov a,b movc a,@a+dptr cjne r4,#4,zhengchang12;判斷日是否需要閃爍 jb bt0,cc12zhengchang12: clrp2.5 mov shuchu,acc12:call delay setbp2.5;閃爍 ret;///////////////按鍵子程序///////////////////jianpan: jb shezhi,taiqi1 ;設(shè)置按鍵 jb key1,taiqi1 setb key1 inc r4 ;設(shè)置哪個(gè)按鍵 cjne r4,#7,taiqi1 mov r4,#0taiqi1:jnb shezhi,pan1 clr key1pan1: jb jia,taiqi2;加按鍵 jb key2,taiqi2 setb key2 cjne r4,#0,jiaxingqi ;是否需要加 ljmp taiqi2jiaxingqi:cjne r4,#3,jiashi;判斷星期是否需要加一 inc cxingqi ljmp taiqi2jiashi: cjne r4,#2,jiafen;判斷時(shí)是否需要加一 inc cshi ljmp taiqi2jiafen:cjne r4,#1,jianian;判斷分是否需要加一 inc cfen ljmp taiqi2jianian: cjne r4,#6,jiayue;判斷年是否需要加一 inc cnian1基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第9頁(yè)。 ljmp taiqi2基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第9頁(yè)。jiayue: cjne r4,#5,jiar;判斷月是否需要加一 inc cyue ljmp taiqi2jiar: cjne r4,#4,taiqi2;判斷日是否需要加一 inc critaiqi2: jnb jia,pan2 clr key2pan2: jb jian,taiqi3;減按鍵 jb key3,taiqi3 setb key3 cjne r4,#0,jianxingqi ;是否需要減 ljmp taiqi2jianxingqi: cjne r4,#3,jianshi;星期是否需要減 dec cxingqi ljmp taiqi3jianshi:cjne r4,#2,jianfen;時(shí)是否需要減 dec cshi ljmp taiqi3jianfen: cjne r4,#1,jiannian;分是否需要減 dec cfen ljmp taiqi3jiannian: cjne r4,#6,jianyue;年是否需要減 dec cnian1 ljmp taiqi2jianyue: cjne r4,#5,jianr;月是否需要減 dec cyue ljmp taiqi2jianr: cjne r4,#4,taiqi2;日是否需要減 dec critaiqi3: jnb jian,pan3 clr key3pan3: jbreturn,taiqi4基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第10頁(yè)。jb key4,taiqi4基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第10頁(yè)。jb setb key4taiqi4:jnbreturn,loop1clrkey4ajmploop2loop1:movr4,#00loop2:retzuidashu: mov a,cxingqi cjne a,#0,qq1;星期減到0則顯示7 mov cxingqi,#7qq1: cjne a,#8,dashi;星期加到8則顯示1 mov cxingqi,#1 mov cxingqi,#1dashi: mov a,cshi cjne a,#255,qq2;時(shí)減到0則顯示23 mov cshi,#23qq2: cjne a,#24,dafen;時(shí)加到24則顯示0 mov cshi,#00dafen:mov a,cfen cjne a,#255,qq3;分減到0則顯示59 mov cfen,#59qq3: cjne a,#60,danian;分加到60則顯示0 mov cfen,#00danian:mov a,cnian1 cjne a,#255,qq4;年減到0則顯示99 mov cnian1,#99qq4: cjne a,#100,dayue;年加到100則顯示0 mov cnian1,#00dayue: mov a,cyue cjne a,#0,qq5;月減到0則顯示12 mov cyue,#12qq5: cjne a,#13,dari;月加到13則顯示1 mov cyue,#01dari: lcallpanduan;調(diào)用panduanmov a,cri mov40h,cribjcjne a,#0,qq6;日減到0則顯示最大數(shù)減一deccribj mov cri,cribjqq6: cjne a,40h,out;日加到最大值則顯示1 mov cri,#01out: ret基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第11頁(yè)。;///////////////定時(shí)中斷程序///////////////////基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第11頁(yè)。;輸入:"無(wú)";輸出:""T0Ser: push acc clr tr0 call jisuan movtl0,cBufTl0movth0,cBufTh0 setb tr0 pop acc reti;///////////////計(jì)算子程序///////////////////;輸入:;輸出:;實(shí)現(xiàn)的功能:SECMINHOUR計(jì)算jisuan: inc r0 cjne r0,#50,tiaochu ;是否來(lái)了一秒鐘 mov r0,#0cplbt0 lcall panduan inc cmiao ;秒加一cjner4,#0,lei1cplp2.7lei1: mov a,cmiao cjne a,#60,tiaochu ;是否加到了60 mov cmiao,#00h ;加到了60回0 inc cfen ;分加一 mov a,cfen cjne a,#60,tiaochu ;是否加到60 mov cfen,#00h ;加到了60回0 inc cshi ;時(shí)加一 mov a,cshi cjne a,#24,tiaochu ;是否加到了24 mov cshi,#00h ;加到了24回0 inc cxingqi ;星期加一 mov a,cxingqi cjne a,#8,jiari ;是否加到了8 mov cxingqi,#01h ;加到了8回1jiari: inc cri mov a,cri cjne a,cribj,tiaochu;是否加到了最大數(shù) mov cri,#01;加到了回到1 inc cyue基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第12頁(yè)。 mov a,cyue基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第12頁(yè)。 cjne a,#13,tiaochu;是否加到了13 mov cyue,#01;加到了回到1 inc cnian1 mov a,cnian1 cjne a,#100,tiaochu;是否加到了100 mov cnian1,#00;加到了回到0 inc cnian2 mov a,cnian2 cjne a,#100,tiaochu mov cnian2,#00tiaochu:retpanduan:clr psw.7 mov a,cyue subb a,#8 jnb psw.7,dayupanduan ;C=0表示大月 mov a,cyue ;小月 mov b,#2 div ab mov a,b jz pdyue2 ;等于0表示為雙月 mov cribj,#32 ;小月的單月最大為31天 retpdyue2:mov a,cyue cjne a,#2,yuefuzhi call runianpd ;是2月進(jìn)行閏年判斷 retrunianpd:mov a,cnian1 mov b,#4 div ab mov a,b jz tiaochuc mov cribj,#29 ;不是閏年最大為28天 rettiaochuc: mov cribj,#30 ;是閏年最大為29天 retyuefuzhi: mov cribj,#31 ;不是2月最大為30天 retdayupanduan: mov b,#2 mov a,cyue div ab基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第13頁(yè)。 mov a,b基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第13頁(yè)。 jnz yuefuzhi ;大月單月最大為30天 mov cribj,#32 ;大月雙月最大為31天 ret;///////////延時(shí)子程序/////////////delay: mov r6,#30d1: mov r7,#40 djnz r7,$ djnz r6,d1 rettab1: DB0C0H;0 DB0F9H;1 DB0A4H;2 DB0B0H;3 DB099H;4 DB092H;5 DB082H;6 DB0F8H;7 DB080H;8 DB090H;9 end九.流程圖(涉及到軟件)1.主流程圖中斷中斷程序主程序顯示時(shí)間1S改變時(shí)間定時(shí)50ms*20次算加1S是否60S?加分基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共16頁(yè),當(dāng)前為第14頁(yè)。2.陽(yáng)歷算法流程圖基于單片機(jī)的萬(wàn)歷設(shè)計(jì)全文共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ù)覽,若沒(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論