天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

四位數(shù)碼管時(shí)鐘顯示(24小時(shí)),可調(diào).

更新時(shí)間: 2019-03-26
閱讀量:3107

;************************************** ;四位數(shù)碼管時(shí)鐘顯示(24小時(shí)),按下RB1后按RB2小時(shí)閃爍,調(diào)整小時(shí),再次按下RB1 ;RB2分鐘閃爍調(diào)整分鐘,再按RB1小時(shí)、分鐘不閃爍,退出小時(shí)分鐘調(diào)整。 ;文件名為:TIME2.ASM ;************************************** list p=16f877A #include ;************變量定義****************** DIGIT EQU 20H ;5MS計(jì)數(shù)器 MIN_L EQU 21H ;分鐘 MIN_H EQU 22H ; HOU_L EQU 23H ;小時(shí) HOU_H EQU 24H ; SEC EQU 25H ;秒位 FLAG EQU 26H ;4位為小時(shí)調(diào)整標(biāo)志位,第5位為分鐘調(diào)整標(biāo)志位 W_T EQU 27H ;W現(xiàn)場(chǎng)保護(hù)寄存器 ST_T EQU 28H ;STATUS現(xiàn)場(chǎng)保護(hù)寄存器 TABADD EQU 29H ;轉(zhuǎn)換數(shù)碼管地址 C1 EQU 30H ; C2 EQU 31H ; COUNT1 EQU 33H ; COUNT2 EQU 34H ; COUNT3 EQU 35H ; COUNT4 EQU 36H ; COUNT5 EQU 37H ; ;***************************************** ORG 000H GOTO MAIN ;**************中斷服務(wù)子程序************* ORG 004H ; TIME MOVWF W_T ;WSTATUS現(xiàn)場(chǎng)保護(hù) SWAPF STATUS,W ; MOVWF ST_T ; MOVLW D'100' ;TMR0重賦初值 MOVWF TMR0 ; BCF INTCON,T0IF ;TMR0中斷溢出標(biāo)志清0 MOVLW 0FFH ;先熄滅數(shù)碼管以免閃爍 MOVWF PORTC ; BSF PORTA,2 BSF PORTA,3 ; BSF PORTA,4 BSF PORTA,5 INCF COUNT1,F ; MOVLW 01H ; XORWF COUNT1,W BTFSC STATUS,Z ; GOTO DISPMIN_L ;COUNT11,轉(zhuǎn)分鐘低位MIN_L顯示 MOVLW 02H ; XORWF COUNT1,W ; BTFSC STATUS,Z ; GOTO DISPMIN_H ;COUNT12,轉(zhuǎn)分鐘高位MIN_H顯示

MOVLW 03H ; XORWF COUNT1,W ; BTFSC STATUS,Z ; GOTO DISPHOU_L ;COUNT13,轉(zhuǎn)小時(shí)低位HOU_L顯示 ;*********************小時(shí)高位HOU_H顯示******************************* MOVLW 04H ; XORWF COUNT1,W ; BTFSC STATUS,Z ; GOTO DISPHOU_H ;COUNT14,轉(zhuǎn)小時(shí)低位HOU_H顯示 DISPHOU_H CLRF COUNT1 BTFSS FLAG,4 GOTO DISP4 SETDISP4 INCF COUNT5,F ; MOVLW D'25' ; SUBWF COUNT5,W ;COUNT5-WBTFSS STATUS,C ; GOTO DISP4 ;COUNT5<25C=0,轉(zhuǎn)DISP4 MOVLW D'50' ; XORWF COUNT5,W ; BTFSC STATUS,Z ; GOTO M4 ;=50COUNT50,轉(zhuǎn) MOVLW 0FFH MOVWF PORTA ;25<count5<50,小時(shí)高位不亮>

;*****************分鐘低位MIN_L顯示*************************** DISPMIN_L BTFSS FLAG,5 ; GOTO DISP1 ;分鐘不調(diào)整,轉(zhuǎn)DISP1 SETDISP1 INCF COUNT2,F ; MOVLW D'25' ; SUBWF COUNT2,W ; BTFSS STATUS,C ; GOTO DISP1 ;COUNT2<25,C=0 MOVLW D'50' ; XORWF COUNT2,W ; BTFSC STATUS,Z ; GOTO M1 ;=50COUNT20,轉(zhuǎn)點(diǎn)亮分鐘低位 MOVLW 0FFH ;25<count5<50,分鐘低位不亮>

BCF PORTA,4 ;點(diǎn)亮分鐘低位 BSF PORTA,2 BSF PORTA,3 BSF PORTA,5 MOVF MIN_L,W ; GOTO DISP ;

M1 CLRF COUNT2 GOTO SETDISP1

;*********************分鐘高位MIN_H顯示******************************** DISPMIN_H BTFSS FLAG,5 ; GOTO DISP2 ; SETDISP2 INCF COUNT3,F ; MOVLW D'25' ; SUBWF COUNT3,W ; BTFSS STATUS,C ; GOTO DISP2 ; MOVLW D'50' ; XORWF COUNT3,W ; BTFSC STATUS,Z ; GOTO M2 MOVLW 0FFH ;25<count5<50,分鐘高位不亮>

BCF PORTA,5 ;點(diǎn)亮分鐘高位 BSF PORTA,2 BSF PORTA,3 ; BSF PORTA,4 MOVF MIN_H,W ; GOTO DISP ;

M2 CLRF COUNT3 GOTO SETDISP2

;*********************小時(shí)低位HOU_L顯示****************************** DISPHOU_L BTFSS FLAG,4 ; GOTO DISP3 ; SETDISP3 INCF COUNT4,F ; MOVLW D'25' ; SUBWF COUNT4,W ; BTFSS STATUS,C ; GOTO DISP3 ; MOVLW D'50' ; XORWF COUNT4,W ; BTFSC STATUS,Z ; GOTO M3 MOVLW B'01111111' ; MOVWF PORTC ; BCF PORTA,2 ;點(diǎn)亮小時(shí)低位 BSF PORTA,3 BSF PORTA,4 BSF PORTA,5 GOTO LOOP2 ; DISP3

BCF PORTA,2 ;點(diǎn)亮小時(shí)低位 BSF PORTA,3 ; BSF PORTA,4 BSF PORTA,5 MOVF HOU_L,W ; CALL CONVERT ; MOVWF PORTC ; BCF PORTC,7 ;DP GOTO LOOP2

M3 CLRF COUNT4 GOTO SETDISP3 ;********************顯示

************************************ DISP CALL CONVERT ; MOVWF PORTC ;RC口顯示 LOOP2 INCF DIGIT,F MOVLW D'200' ; XORWF DIGIT,W ; BTFSS STATUS,Z ; GOTO TIMEND ; CLRF DIGIT ; INCF SEC,F ; MOVLW D'60' ; XORWF SEC,W ; BTFSS STATUS,Z ; GOTO TIMEND ; CLRF SEC ; INCF MIN_L,F MOVLW D'10' ; XORWF MIN_L,W ; BTFSS STATUS,Z ; GOTO TIMEND ; CLRF MIN_L INCF MIN_H,F ;

MOVLW D'6' ; XORWF MIN_H,W ; BTFSS STATUS,Z ; GOTO TIMEND ; CLRF MIN_H ;

MOVLW D'2' ; XORWF HOU_H,W ; BTFSC STATUS,Z ; GOTO HOU1 ; INCF HOU_L,F ;

MOVLW D'10' XORWF HOU_L,W ; BTFSS STATUS,Z ; GOTO TIMEND ; CLRF HOU_L ; INCF HOU_H,F ; GOTO TIMEND ; HOU1 INCF HOU_L,F MOVLW D'4' ; XORWF 

HOU_L,W ; BTFSS STATUS,Z GOTO TIMEND ; CLRF HOU_L CLRF HOU_H ; GOTO TIMEND ; TIMEND SWAPF ST_T,W MOVWF STATUS SWAPF W_T,F SWAPF W_T,W RETFIE ;**************************************************** CONVERT ADDWF PCL,F ;W寄存器內(nèi)的7段顯示碼地址放入PCL ;PCL執(zhí)行新地址指令, 跳到相對(duì)的地址執(zhí)行? RETLW 0C0H ;0 ,RETLW指令,將七段顯示碼存入W后返回 RETLW 0F9H ;1 RETLW 0A4H ;2 RETLW 0B0H ;3 RETLW 099H ;4 RETLW 092H ;5 RETLW 082H ;6 RETLW 0F8H ;7 RETLW 080H ;8 RETLW 090H ;9 ;*******************主程序*********************************** MAIN CLRF PORTC ;初始化I/OCLRF PORTA ; BSF STATUS,RP0 ;選體1 MOVLW 06H MOVWF ADCON1 ;定義RA所有相關(guān)引腳全部為普通數(shù)字I/OMOVLW 00H ;RARC定義為輸出 MOVWF TRISC ; MOVWF TRISA ; MOVLW 0FFH ;RB定義為輸入 MOVWF TRISB ; MOVLW B'00000100' ; MOVWF OPTION_REG ;啟用上拉電阻,定時(shí)器分配給TMRO,分頻比為1:32 BCF STATUS,RP0 ;選體0

MOVLW D'100' ;定時(shí)器送初值100,定時(shí)(256-100)*32US=4.992MS MOVWF TMR0 ;每隔4992MS一次中斷

MOVLW 0FFH ;先熄滅數(shù)碼管以免閃爍 MOVWF PORTC ; BSF PORTA,2 BSF PORTA,3 ; BSF PORTA,4 BSF PORTA,5

CLRF DIGIT CLRF MIN_L CLRF MIN_H CLRF HOU_L CLRF HOU_H CLRF COUNT1 CLRF COUNT2 CLRF COUNT3 CLRF COUNT4 CLRF COUNT5 CLRF SEC CLRF FLAG

BCF INTCON,T0IF ;定時(shí)器溢出中斷標(biāo)志清0 BSF INTCON,T0IE ;開放總中斷和TMR0中斷使能 BSF INTCON,GIE ;

;******************分鐘/小時(shí)調(diào)整***************************** LOOP6 BTFSS PORTB,2 ;必須保證RB2松開 GOTO LOOP6 CALL DELAY BTFSS PORTB,2 GOTO LOOP6 LOOP7 BTFSS PORTB,1 ;RB1是否松開? GOTO LOOP7 CALL DELAY BTFSS PORTB,1 GOTO LOOP7 

LOOP BCF FLAG,4 ;小時(shí)調(diào)整標(biāo)志位清0 BCF FLAG,5 ;分鐘調(diào)整標(biāo)志位清0

LOOP1 BTFSC PORTB,1 ;RB1按下否? GOTO LOOP1 ; CALL DELAY ; BTFSC PORTB,1 ;再判RB1按下否? GOTO LOOP1 ;********************小時(shí)調(diào)整***********************************

BSF FLAG,4 ;小時(shí)調(diào)整標(biāo)志位置1 LOOP3 BTFSS PORTB,1 ;RB1是否松開?不松開不允許執(zhí)行RB2按下 GOTO LOOP3 CALL DELAY BTFSS PORTB,1 GOTO LOOP3 SET_1 BTFSC PORTB,2 ;RB2按下否? GOTO CLOCK1 ;未按下 CALL DELAY BTFSC PORTB,2 GOTO CLOCK1

MOVLW 02H XORWF HOU_H,W BTFSC STATUS,Z GOTO HOU2 ;小時(shí)高位等于2轉(zhuǎn)HOU2 INCF HOU_L,F ;不等于2,小時(shí)低位加1

MOVLW D'10' XORWF HOU_L,W BTFSS STATUS,Z GOTO CLOCK1 ;小時(shí)低位不等于10,等待RB2再次按下 CLRF HOU_L ;等于10小時(shí)低位清0INCF HOU_H,F ;小時(shí)高位加1 ;等待再次按RB2

CLOCK1 BTFSC PORTB,1 ;CLOCK按下否? GOTO SET_1 ;CLOCK未按下,判斷SET是否按下? CALL DELAY BTFSC PORTB,1 GOTO SET_1 GOTO LOOP5 ;CLOCK按下進(jìn)行分鐘調(diào)整 

HOU2 INCF HOU_L,F ;小時(shí)低位加1 MOVLW D'4' ; XORWF HOU_L,W ; BTFSS STATUS,Z GOTO CLOCK1 ;小時(shí)低位不等于4 CLRF HOU_L ;小時(shí)低位等于4,小時(shí)高低位清0,等待RB2按下 CLRF HOU_H ; GOTO CLOCK1 

;*******************分鐘調(diào)整******************************** LOOP5 BTFSS PORTB,2 ;必須保證RB2松開 GOTO LOOP5 CALL DELAY BTFSS PORTB,2 GOTO LOOP5

BCF FLAG,4 ;小時(shí)調(diào)整標(biāo)志位清0 BSF FLAG,5 ;分鐘調(diào)整標(biāo)志位置1 LOOP4 BTFSS PORTB,1 ;RB1是否松開?不松開不允許執(zhí)行RB2按下 GOTO LOOP4 CALL DELAY BTFSS PORTB,1 GOTO LOOP4

SET_2 BTFSC PORTB,2 ;RB2按下? GOTO CLOCK2 ;未按下 CALL DELAY BTFSC PORTB,2 GOTO CLOCK2 INCF MIN_L,F ;RB2按下,分鐘低位加1

MOVLW D'10' XORWF MIN_L,W BTFSS STATUS,Z GOTO CLOCK2 ;不等于10CLRF MIN_L ;等于10,分鐘低位清0 INCF MIN_H,F ;高位加1

MOVLW 06H XORWF MIN_H,W BTFSS STATUS,Z GOTO CLOCK2 CLRF MIN_H ;等于6,分鐘高位清0 ;等待RB2再次按下 CLOCK2 BTFSC PORTB,1 ;CLOCK按下否? GOTO SET_2 ;CLOCK未按下,判斷SET是否按下? CALL DELAY BTFSC PORTB,1 GOTO SET_2 GOTO LOOP6 ;*****************0.1S延時(shí)子程序******************* DELAY MOVLW D'150' MOVWF C1 L2 MOVLW D'255' MOVWF C2 L3 DECFSZ C2,F GOTO L3 DECFSZ C1,F GOTO L2 RETLW 0 ;**************************************************** END 



联系我们: 田林县| 镇巴县| 辽宁省| 韶关市| 水城县| 高尔夫| 铜鼓县| 阳新县| 长白| 甘洛县| 云浮市| 溆浦县| 松江区| 色达县| 武乡县| 同心县| 民权县| 凤阳县| 滕州市| 新邵县| 皮山县| 崇阳县| 怀远县| 平阴县| 茌平县| 大兴区| 浮梁县| 彭阳县| 新龙县| 来安县| 甘泉县| 深圳市| 砚山县| 华蓥市| 南丹县| 南溪县| 阳曲县| 磴口县| 肃宁县| 宾阳县| 吴旗县|