萬年歷匯編程序_第1頁
萬年歷匯編程序_第2頁
萬年歷匯編程序_第3頁
萬年歷匯編程序_第4頁
萬年歷匯編程序_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上單片機(jī)報(bào)告任務(wù):實(shí)現(xiàn)年、月、日、時間、星期的顯示,通過單鍵轉(zhuǎn)換實(shí)現(xiàn)日期與時間的調(diào)換調(diào)整,同時可通過按鍵來調(diào)整日期與時間。硬件:STC89C52型單片機(jī)、一片頻率為11.0592MHz的晶振片、三片74HC573鎖存器、6塊共陰極數(shù)碼管、8個發(fā)光二極管、4個按鍵、一個壓電式蜂鳴器等。硬件參數(shù):(1)發(fā)光二極管采用共陽極排列方式,一般普通發(fā)光二極管的工作電壓為1.62.1V,工作電流為520mA。在這個單片機(jī)系統(tǒng)上,發(fā)光二極管的工作電壓約為1.8V,工作電流約為4.5mA。(2)74HC573為8輸入8輸出鎖存器,工作電壓為5伏,OE為片選端,LE為鎖存允許端。OE為低電

2、平,LE為高電平時鎖存數(shù)據(jù);當(dāng)LE變?yōu)榈碗娖綍r不允許新數(shù)據(jù)輸入,輸出不變;當(dāng)OE為高電平時,不選中此芯片。(3)壓電式蜂鳴器是以壓電陶瓷的壓電效應(yīng),來帶動金屬片的振動而發(fā)聲的,壓電式蜂鳴器是以方波來驅(qū)動,所以在程序中改變P2.5引腳輸出波形的頻率,就可以調(diào)整控制蜂鳴器音調(diào),產(chǎn)生各種不同音色、音調(diào)的聲音。另外,改變輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小。(4)LED 數(shù)碼管中各段發(fā)光二極管的伏安特性和普通二極管類似,只是正向壓降較大,正向電阻也較大。在一定范圍內(nèi),其正向電流與發(fā)光亮度成正比。由于常規(guī)的數(shù)碼管起輝電流只有12 mA,最大極限電流也只有1030 mA,所以它的輸入端在5

3、 V電源的電路信號相接時,一定要串加限流電阻,以免損壞器件。此板用的是共陰7段數(shù)碼管,由公共端控制位。操作說明:上電后6個數(shù)碼管顯示為時間12.00.00,8個數(shù)碼管顯示為星期一。按下按鍵2不動,數(shù)碼管轉(zhuǎn)而顯示日期00.01.01,前兩位表示年份,中間兩位表示月份,后面兩位表示日,松開按鍵2回到時間顯示;按下按鍵3不動,數(shù)碼管轉(zhuǎn)而顯示設(shè)置鬧鐘的時間00.00. 0,前兩位為鬧鐘的小時,中間為鬧鐘的分,后面一位為是否開啟鬧鈴的標(biāo)志,“0”表示關(guān)鬧鐘,“1”表示開鬧鐘,松開按鍵3回到時間顯示;按鍵4供用戶調(diào)整時間,按下按鍵4大約1秒鐘,當(dāng)聽到“嘀”的一聲說明已進(jìn)入時間調(diào)整程序,此時按鍵1用來調(diào)整小

4、時,按一下小時加1,按鍵2用來調(diào)整分鐘,按一下分鐘加1,按鍵3用來調(diào)整星期,按一下星期加1;繼續(xù)按一下按鍵4,則進(jìn)入調(diào)整日期程序,此時按鍵1用來調(diào)整年份,按鍵2用來調(diào)整月份,按鍵3用來調(diào)整日,按下其中一個按鍵相應(yīng)的位加1;繼續(xù)按一下按鍵4,則進(jìn)入設(shè)置鬧鐘程序,按鍵1用來調(diào)整鬧鐘的小時,按鍵2用來調(diào)整鬧鐘的分鐘,按鍵3用來開啟或是關(guān)閉鬧鐘,按下其中一個按鍵相應(yīng)的位加1;再按一下按鍵4,則跳出調(diào)整時間程序,在此情況下如果時間到達(dá)設(shè)定的鬧鈴時間,鬧鈴響起,要想關(guān)掉鬧鈴可按一下按鍵1即可停止鬧鈴。硬件圖:總程序流程圖如下:本組總程序如下:SECOND EQU 30H MINITE EQU 31H HO

5、UR EQU 32H DAY EQU 33HMOON EQU 34HYEAR_L EQU 35HYEAR_H EQU 36HMINCLK EQU 37HHOURCLK EQU 38HXQ EQU 39HTZK1 BIT P3.4 ;位P3.4為按鍵1TZK2 BIT P3.5 ;位P3.5為按鍵2TZK3 BIT P3.6;位P3.6為按鍵3SWITCH BIT P3.7 ;位P3.7為按鍵4DISPBUF1 EQU 40H DISPBIT EQU 48H T2SCNTA EQU 49H T2SCNTB EQU 4AH DISPBUF2 EQU 50HDISPBUF3 EQU 60H dula

6、 BIT P2.6wala BIT P2.7 ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 START: MOV SECOND,#0;設(shè)置初始時間值 MOV MINITE, #0 MOV HOUR, #12 MOV DAY, #1 MOV MOON, #1 MOV YEAR_L, #00H MOV YEAR_H, #20H MOV HOURCLK, #0 MOV MINCLK, #0 MOV DISPBIT, #6 MOV T2SCNTA, #0 MOV T2SCNTB, #0 MOV 60H,#0 MOV 61H,#0 LCALL DISP MOV TM

7、OD,#01H ;定時器0工作在方式1 MOV TH0,#0F7H;定時器初值設(shè)置 MOV TL0, #0AH SETB TR0 ;開啟定時器 SETB ET0 SETB EA MOV XQ, #0 CLR F0 ;顯示標(biāo)志位MAIN: JB TZK1, CHANGE1 LCALL DELY10MS JB TZK1, CHANGE1 SETB P2.3 ;按鍵1按下停止響鈴CHANGE1:JB TZK2,CHANGE2 ;年月日切換 LCALL DELY10MS JB TZK2, CHANGE2 MOV 60H, #1 JNB TZK2, $ MOV 60H, #0CHANGE2:JB TZK

8、3,ADJUST;鬧鐘切換 LCALL DELY10MS JB TZK3, ADJUST MOV 60H, #2 JNB TZK3, $ MOV 60H, #0ADJUST:JB SWITCH, MAIN LCALL DELAY1S JB SWITCH,MAIN;按鍵4按下1秒確定要調(diào)整時間 CLR P2.3 ;發(fā)出提示音可開始調(diào)整時間 ACALL DELY10MS SETB P2.3 ACALL ADJUST_1 ACALL ADJUST_2ACALL ADJUST_3 AJMP MAIN ;返回主程序;.小時、分、星期鍵盤調(diào)整程序.ADJUST_1:JNB SWITCH,$ ;小時調(diào)整 J

9、B TZK1, NK4 LCALL DELY10MS JB TZK1,NK4 ;按鍵1按下 INC HOUR ;小時寄存器加1 MOV A, HOUR CJNE A, #24, NH24 MOV HOUR,#0 ;小時寄存器滿24變?yōu)?NH24: LCALL DISP ;調(diào)用時間變更子程序 JNB TZK1, $NK4: JB TZK2,NK5 ;分調(diào)整 LCALL DELY10MS JB TZK2,NK5 ;按鍵2按下 INC MINITE ;分鐘寄存器加1 MOV A, MINITE CJNE A, #60, NM60 MOV MINITE,#0 ;分鐘滿60變?yōu)?NM60:LCALL D

10、ISP ;調(diào)用時間變更子程序 JNB TZK2, $NK5: JB TZK3,NK6 ;星期調(diào)整 LCALL DELY10MS JB TZK3,NK6 ;按鍵3按下 INC XQ ;星期寄存器加1 MOV A,XQ CJNE A, #7,NXQ7 MOV XQ,#0 ;星期寄存器滿7變?yōu)?NXQ7: LCALL DISP ;調(diào)用時間變更子程序 JNB TZK3,$NK6: JB SWITCH, ADJUST_1 LCALL DELY10MS JB SWITCH,ADJUST_1 ;退出小時、分、星期調(diào)整程序 INC 60H ;顯示標(biāo)志寄存器加1 RET;.年、月、日鍵盤調(diào)整程序.ADJUST_

11、2:JNB SWITCH,$ ;年低兩位調(diào)整 JB TZK1, NK1 LCALL DELY10MS JB TZK1,NK1 ;按鍵1按下 INC YEAR_L ;年低位加1 MOV A, YEAR_L CJNE A, #64H, NY100 MOV YEAR_L,#00H ;年低位到100變?yōu)?NY100: LCALL DISP ;調(diào)用時間變更子程序 JNB TZK1, $NK1: JB TZK2,NK2 ;月調(diào)整 LCALL DELY10MS JB TZK2,NK2 ;按鍵2按下 INC MOON ;月寄存器加1 MOV A, MOON CJNE A, #13,NM12 MOV MOON,

12、#01H ;月寄存器滿13變?yōu)?NM12: LCALL DISP JNB TZK2, $NK2:JB TZK3,NK3 ;日調(diào)整 LCALL DELY10MS JB TZK3,NK3 ;按鍵3按下 INC DAY ;日寄存器加1 MOV A, MOON CJNE A, #2, N1 LCALL JUDGE_Y1 ;2月則調(diào)用潤、平年判斷子程序 AJMP NSN1:LCALL JUDGE_M1 ;不是2月則調(diào)用月判斷子程序NS:LCALL DISP ;調(diào)用時間變更子程序 JNB TZK3, $NK3:JB SWITCH,ADJUST_2 LCALL DELY10MS JB SWITCH,ADJU

13、ST_2 ;退出年、月、日調(diào)整程序 INC 60H ;顯示標(biāo)志寄存器加1 RET;.鬧鐘小時、分鐘調(diào)整程序.ADJUST_3:JNB SWITCH,$ ;設(shè)置鬧鐘小時 JB TZK1, NK7 LCALL DELY10MS JB TZK1,NK7 ;按鍵1按下 INC HOURCLK ;鬧鐘小時寄存器加1 MOV A, HOURCLK CJNE A, #24, NHC24 MOV HOURCLK,#0 ;鬧鐘小時寄存器滿24清0NHC24: LCALL DISP JNB TZK1, $NK7:JB TZK2,NK8 ;設(shè)置鬧鐘分鐘 LCALL DELY10MS JB TZK2,NK8 ;按鍵2

14、按下 INC MINCLK ;鬧鐘分鐘寄存器加1 MOV A, MINCLK CJNE A, #60, NMC60 MOV MINCLK,#0 ;鬧鐘分鐘寄存器滿60清0NMC60: LCALL DISP JNB TZK2, $NK8:JB TZK3,NK9 ;設(shè)置是否開啟鬧鐘,1表示開,0表示關(guān) LCALL DELY10MS JB TZK3,NK9 ;按鍵3按下 JB F0, CLOSE SETB F0 ;鬧鐘標(biāo)志位置1 MOV 61H,#1 ;鬧鐘開啟顯示1 LCALL DISP ;調(diào)用時間變更子程序 JNB TZK3, $ AJMP NK9CLOSE: CLR F0 MOV 61H, #

15、0 LCALL DISP JNB TZK3, $NK9: JB SWITCH, ADJUST_3 LCALL DELY10MS JB SWITCH, ADJUST_3 MOV 60H,#0 RET;.鍵盤抖動10毫秒延時子程序程序.DELY10MS: MOV R6, #10 D1: MOV R7, #248 DJNZ R7, $ DJNZ R6, D1 RET ;.延時1秒子程序.DELAY1S: MOV R5, #30D2: MOV R4, #100D3: MOV R3, #248 DJNZ R3, $ DJNZ R4, D3 DJNZ R5, D2 RET;.時間變更子程序. DISP:

16、MOV A,#DISPBUF1 ;小時、分、秒的順序存儲 ADD A, #6 MOV R1, A MOV A, HOUR MOV B, #10 DIV AB MOV R1,A ;小時高位數(shù)據(jù)存到46H DEC R1 MOV A, B ORL A, #10H MOV R1,A ;小時低位數(shù)據(jù)存到45H DEC R1 MOV A, MINITE MOV B, #10 DIV AB MOV R1,A ;分鐘高位數(shù)據(jù)存到44H DEC R1 MOV A, B ORL A, #10H MOV R1,A ;分鐘低位數(shù)據(jù)存到43H DEC R1 MOV A, SECOND MOV B, #10 DIV AB

17、 MOV R1,A ;秒高位數(shù)據(jù)存到42H DEC R1 MOV A, B MOV R1,A ;秒低位數(shù)據(jù)存到41H MOV A,#DISPBUF2 ;年月日的順序存儲 ADD A, #6 MOV R1, A MOV A, YEAR_L MOV B, #10 DIV AB MOV R1,A ;年份高位數(shù)據(jù)存到56H DEC R1 MOV A, B ORL A, #10H MOV R1,A ;年份低位數(shù)據(jù)存到55H DEC R1 MOV A, MOON MOV B, #10 DIV AB MOV R1,A ;月份高位數(shù)據(jù)存到54H DEC R1 MOV A, B ORL A, #10H MOV

18、R1,A ;月份低位數(shù)據(jù)存到53H DEC R1 MOV A, DAY MOV B, #10 DIV AB MOV R1,A ;日高位數(shù)據(jù)存到52H DEC R1 MOV A, B MOV R1,A ;日低位數(shù)據(jù)存到51H MOV A,#DISPBUF3 ;鬧鐘小時、分的順序存儲 ADD A, #6 MOV R1, A MOV A, HOURCLK MOV B, #10 DIV AB MOV R1,A ;鬧鐘小時高位存到66H DEC R1 MOV A, B ORL A, #10H MOV R1,A ;鬧鐘小時低位存到65H DEC R1 MOV A, MINCLK MOV B, #10 DI

19、V AB MOV R1,A ;鬧鐘分鐘高位存到64H DEC R1 MOV A, B MOV R1,A ;鬧鐘分鐘低位存到63H RET ;.中斷程序.INT_T0:MOV TH0,#0F7H;重新設(shè)置初值 MOV TL0, #0AH INC T2SCNTA MOV A, T2SCNTA CJNE A, #40, DISPLAY MOV T2SCNTA, #00H INC T2SCNTB MOV A, T2SCNTB CJNE A, #10, DISPLAY MOV T2SCNTB,#00H;到達(dá)1秒T2SCNTB清0 LCALL DISP INC SECOND ;秒寄存器加1 MOV A,

20、SECOND CJNE A, #60, DISPLAY MOV SECOND,#00H;秒寄存器滿60清0 ; SETB P2.3 INC MINITE ;分鐘寄存器加1 JNB F0,NEXT;鬧鐘標(biāo)志位為0則跳轉(zhuǎn)至NEXT MOV 27H, HOUR MOV A, HOURCLKCJNE A,27H,NEXT;時間小時與鬧鐘小時不一樣則跳NEXTMOV 28H, MINITEMOV A, MINCLKCJNE A,28H,NEXT;時間分鐘與鬧鐘分鐘不一樣則跳NEXTCLR P2.3;符合設(shè)定時間則響鈴NEXT: MOV A, MINITE CJNE A, #60, DISPLAY MOV

21、 MINITE,#00H ;分鐘寄存器滿60清0 INC HOUR ;小時寄存器加1 MOV A, HOUR CJNE A, #24, DISPLAY MOV HOUR,#00H;小時寄存器滿24清0 INC DAY;日寄存器加1INC XQ;星期寄存器加1MOV A, XQCJNE A, #7, NEXT1MOV XQ,#0;星期寄存器清0NEXT1:MOV A, MOON CJNE A,#2,NEXT2;不是二月則跳到NEXT2 LCALL JUDGE_Y;二月則跳到JUDGE_Y子程序 AJMP NEXT3NEXT2: LCALL JUDGE_M ;跳到JUDGE_M子程序NEXT3:

22、MOV A, MOON CJNE A,#13,DISPLAY ;月份寄存器不等于13則跳DISPLAY MOV MOON,#1 ;月份到13變?yōu)? INC YEAR_L;年份低位寄存器加1 MOV A, YEAR_L CJNE A,#100,DISPLAY ;不到100則跳DISPLAY INC YEAR_H ;年份高位寄存器加1 MOV A, YEAR_H CJNE A, #100, DISPLAY MOV YEAR_H, #20 AJMP DONEDISPLAY: CLR P2.5 MOV A, XQ MOV DPTR, #TABLEXQ MOVC A,A+DPTR MOV P1, A S

23、ETB P2.5 CLR P2.5 MOV A, 60H CJNE A, #0,Y1;.小時、分、秒顯示程序. MOV A, #DISPBUF1 ADD A, DISPBIT MOV R0, A MOV A,R0 MOV DPTR, #TABLE MOVC A,A+DPTR MOV P0, A SETB dula CLR dula MOV A, DISPBIT MOV DPTR, #TAB MOVC A,A+DPTR MOV P0, A SETB wala CLR wala DEC DISPBIT MOV A, DISPBIT CJNE A, #00H, DONE MOV DISPBIT, #

24、06H AJMP DONE;.年月日顯示程序.Y1: CJNE A, #1,Y2 MOV A, #DISPBUF2 ADD A, DISPBIT MOV R0, A MOV A,R0 MOV DPTR, #TABLE MOVC A,A+DPTR MOV P0, A SETB dula CLR dula MOV A, DISPBIT MOV DPTR, #TAB MOVC A,A+DPTR MOV P0, A SETB wala CLR wala DEC DISPBIT MOV A, DISPBIT CJNE A, #00H,DONE MOV DISPBIT, #06H AJMP DONE;.鬧

25、鐘顯示程序.Y2: MOV A, #DISPBUF3 ADD A, DISPBIT MOV R0, A MOV A,R0 MOV DPTR, #TABLE MOVC A,A+DPTR MOV P0, A SETB dula CLR dula MOV A, DISPBIT MOV DPTR, #TAB1 MOVC A,A+DPTR MOV P0, A SETB wala CLR wala DEC DISPBIT MOV A, DISPBIT CJNE A, #00H, DONE MOV DISPBIT, #06HDONE: RETI;.判斷閏年子程序。JUDGE_Y: MOV A, YEAR_L

26、 ANL A,#01H;年低位寄存器數(shù)值存到A中 CJNE A,#00H,L1;不為0跳L1 MOV A,YEAR_H MOV B,#4 ;為0判斷是否能被4整除 DIV AB MOV A, B CJNE A,#0,PINGNIAN;年份不能被4整除即平年則跳PINGNIAN1 LJMP L2;閏年則跳到L22L1:MOV A, YEAR_L MOV B, #4 DIV AB MOV A, B CJNE A, #0, PINGNIANL2: MOV A,DAY;為0則為閏年 CJNE A,#30,L3;閏年為29天 MOV DAY, #1 INC MOONPINGNIAN: MOV A, DA

27、Y CJNE A,#29,L3;平年為28天 MOV DAY, #1 INC MOONL3: RET ;.判斷月份大小。JUDGE_M: MOV A, MOON CJNE A,#4,V1;不是4月則跳到V1AJMP V0V1: CJNE A,#6,V2;不是6月則跳到V2AJMP V0V2: CJNE A,#9,V3;不是9月則跳到V3AJMP V0V3: CJNE A,#11,V4;不是11月則跳V4V0: MOV A, DAY CJNE A,#31,V5;小月為30天MOV DAY, #1INC MOON;月寄存器加1AJMP V5V4: MOV A, DAY CJNE A,#32,V5;大月為31天MOV DAY, #1INC MOON;月寄存器加1V5:RET;.調(diào)整2月份里日子程序1.JUDGE_Y1:MOV A

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論