久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4236|回復(fù): 4
收起左側(cè)

急求用匯編寫基于AT89s52和zlg7289A的可調(diào)時(shí)鐘(6個(gè)按鍵)

[復(fù)制鏈接]
ID:69703 發(fā)表于 2014-11-30 16:36 | 顯示全部樓層 |閱讀模式
8黑幣
求用匯編寫基于AT89s52和zlg7289A 8位數(shù)碼管顯示的可調(diào)時(shí)鐘(6個(gè)按鍵)一個(gè)鍵進(jìn)入時(shí)間設(shè)置模式,一個(gè)鍵確定時(shí)間調(diào)整好,還有兩個(gè)鍵是在時(shí)分秒上左移右移,最后兩個(gè)鍵加減移動(dòng)的位置。時(shí)分秒之間用——隔開。

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2014-11-30 20:30 來自手機(jī) | 顯示全部樓層
最好是發(fā)一個(gè)電路圖上來,因?yàn)椴恢烙布B接
回復(fù)

使用道具 舉報(bào)

ID:69703 發(fā)表于 2014-12-1 10:54 | 顯示全部樓層
admin 發(fā)表于 2014-11-30 20:30
最好是發(fā)一個(gè)電路圖上來,因?yàn)椴恢烙布B接

只有連好的板子圖片
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2014-12-1 12:34 | 顯示全部樓層
那沒有用 ,,這個(gè)對(duì)你應(yīng)該有幫助http://wenku.baidu.com/link?url= ... 6RVKdmeBUzSuuX5pd9W
回復(fù)

使用道具 舉報(bào)

ID:69703 發(fā)表于 2014-12-2 19:21 | 顯示全部樓層
admin 發(fā)表于 2014-12-1 12:34
那沒有用 ,,這個(gè)對(duì)你應(yīng)該有幫助http://wenku.baidu.com/link?url=hvlJ2Il5BwEoLvpMHyIm7WiIw2gqR8eVqTbeA ...

        ;*******ZLG7289 PARAMETERS*******
        ZLG_BIT_CNT        EQU        30H        ;The number of data sended
        ZLG_REC_BUF        EQU        31H        ;The buffer of data received
        ZLG_SEND_BUF        EQU        32H        ;The buffer of data sended

        SECOND                EQU        33H
        MINUTE                EQU        34H
        HOUR                EQU         35H
        CURR_SECOND        EQU        36H
        CURR_MINUTE        EQU        37H
        CURR_HOUR        EQU         38H
        VAR_TIMER        EQU        39H
        SELECTION        EQU        3AH
        SETTING_FLAG        EQU        00H

        ZLG_CS                EQU        P0.0        ;/CS  of ZLG7289
        ZLG_CLK                EQU        P0.1        ;CLK  of ZLG7289
        ZLG_DATA        EQU        P0.2        ;DIO  of ZLG7289
        ZLG_KEY                EQU        P0.3        ;/KEY of ZLG7289

        ;*******DELAY PARAMETERS*******
        VAR_DELAY        EQU        71H        ;The variable for delay function

        org        0000H
        ljmp        MAIN
        org        000BH
        ljmp         int_TIMER                ;Interrupt for Timer

        org        0030H
MAIN:
        mov         SECOND,#00                ;Initialize the value
        mov        MINUTE,#30
        mov         HOUR,#23
        mov        VAR_TIMER,#00H
        clr        SETTING_FLAG                ;Not setting

        mov        TMOD,#01H
        mov        TH0,#0B1H                ;20ms,load number
        mov        TL0,#0E0H
        setb        TR0                        ;Start T0
        setb        ET0                        ;Enable T0 inerrupt
        setb        EA                        ;Enable interrupt

        setb        ZLG_CS
        setb        ZLG_KEY
        setb        ZLG_DATA
        lcall        delay_50

        mov        ZLG_SEND_BUF,#10100100B        ;Initialize ZLG7289
        lcall        zlg_send
        setb        ZLG_CS                        ;Set standby mode

MAIN_LOOP:
        jb        ZLG_KEY,$                ;Wait for keyboard

        mov        ZLG_SEND_BUF,#00010101B        ;Send the command of reading keyboard
        lcall        zlg_send
        lcall        zlg_receive                ;Read the data of keyboard
        setb        ZLG_CS                        ;Set standby mode
        jnb        ZLG_KEY,$                ;Wait the key to pop

        mov         a,ZLG_REC_BUF
        cjne        a,#15,MAIN_LOOP
        lcall        SET_TIME

        ajmp        MAIN_LOOP

        ret                                ;main return

;*****************************************************************
int_TIMER:
        push        acc                        ;Pay attention to here
        push        psw

        ;Reset T0,must be done
        mov        TH0,#0B1H                ;20ms,reload number
        mov        TL0,#0E0H

        inc        VAR_TIMER                ;Add 20ms
        mov        a,VAR_TIMER
        cjne        a,#50,INT_TIMER_EXIT
        mov        VAR_TIMER,#00H
        lcall        TIME_ADD

        jb        SETTING_FLAG,INT_TIMER_EXIT
        lcall        DISPLAY_TIME

INT_TIMER_EXIT:
        pop        psw
        pop        acc

        reti

;*****************************************************************
TIME_ADD:
        inc         SECOND
        mov        a,SECOND
        cjne        a,#60,TIME_ADD_EXIT
        mov        SECOND,#00H

        inc        MINUTE
        mov        a,MINUTE
        cjne        a,#60,TIME_ADD_EXIT
        mov        MINUTE,#00H

        inc        HOUR
        mov         a,HOUR
        cjne        a,#24,TIME_ADD_EXIT
        mov        HOUR,#00H

TIME_ADD_EXIT:
        ret

;*****************************************************************
DISPLAY_TIME:
        mov         a,SECOND                ;Display second
        mov        ZLG_SEND_BUF,#10000000B
        lcall        DISPLAY_NUM

        mov        ZLG_SEND_BUF,#10000010B        ;Display separation
        lcall        DISPLAY_SEP

        mov         a,MINUTE                ;Display minute
        mov        ZLG_SEND_BUF,#10000011B
        lcall        DISPLAY_NUM

        mov         ZLG_SEND_BUF,#10000101B        ;Display separation
        lcall         DISPLAY_SEP

        mov        a,HOUR
        mov        ZLG_SEND_BUF,#10000110B        ;Display hour
        lcall        DISPLAY_NUM

        ret

;*****************************************************************
DISPLAY_NUM:
        mov        b,#0AH
        div        ab

        push        ZLG_SEND_BUF                ;Save position value
        lcall        zlg_send                ;Specify position
        mov        ZLG_SEND_BUF,b                ;Display low value
        lcall        zlg_send
        setb        ZLG_CS

        pop        ZLG_SEND_BUF
        inc        ZLG_SEND_BUF
        lcall        zlg_send
        mov        ZLG_SEND_BUF,a                ;Display high value
        lcall        zlg_send
        setb        ZLG_CS

        ret

;*****************************************************************
DISPLAY_SEP:
        lcall        zlg_send                ;Specify position
        mov        ZLG_SEND_BUF,#0AH        ;Separation
        lcall        zlg_send
        setb        ZLG_CS

        ret

;*****************************************************************
SET_TIME:
        setb        SETTING_FLAG
        mov        CURR_SECOND,SECOND
        mov        CURR_MINUTE,MINUTE
        mov        CURR_HOUR,HOUR
        mov        SELECTION,#1

WAIT_OPERATION_KEY:
        lcall        SET_SELECTION                ;Change target to modify
        jb        ZLG_KEY,$                ;Wait for keyboard

        mov        ZLG_SEND_BUF,#00010101B        ;Send the command of reading keyboard
        lcall        zlg_send
        lcall        zlg_receive                ;Read the data of keyboard
        setb        ZLG_CS                        ;Set standby mode
        jnb        ZLG_KEY,$                ;Wait the key to pop

        mov         r0,ZLG_REC_BUF
        cjne        r0,#15,NOT_OK
        mov        SECOND,CURR_SECOND
        mov        MINUTE,CURR_MINUTE
        mov        HOUR,CURR_HOUR
        dec        SECOND                        ;Reduce error
        jmp        SET_TIME_EXIT

NOT_OK:
        cjne        r0,#14,NOT_FORWARD        ;Not forward key
        inc        SELECTION
        mov        a,SELECTION
        cjne        a,#4,WAIT_OPERATION_KEY
        mov        SELECTION,#1
        jmp        WAIT_OPERATION_KEY

NOT_FORWARD:
        cjne        r0,#13,NOT_BACK                ;Not back key
        dec        SELECTION
        mov        a,SELECTION
        cjne        a,#0,WAIT_OPERATION_KEY
        mov        SELECTION,#3
        jmp        WAIT_OPERATION_KEY

NOT_BACK:
        cjne        r0,#7,NOT_CANCEL        ;Not cancel key
        jmp        SET_TIME_EXIT                ;Quit without modify

NOT_CANCEL:
        cjne        r0,#6,NOT_DEC                ;Not decrease key
        lcall        SET_DEC_TIME
        lcall        SET_DISPLAY_TIME
        jmp        WAIT_OPERATION_KEY
       
NOT_DEC:
        cjne        r0,#5,WAIT_OPERATION_KEY;Not add key
        lcall        SET_ADD_TIME
        lcall        SET_DISPLAY_TIME
        jmp        WAIT_OPERATION_KEY

SET_TIME_EXIT:
        mov        ZLG_SEND_BUF,#10001000B        ;Disable selection
        lcall        zlg_send
        mov        ZLG_SEND_BUF,#11111111B
        lcall        zlg_send
        clr        SETTING_FLAG                ;Set finished

        ret

;*****************************************************************
SET_SELECTION:
        mov        ZLG_SEND_BUF,#10001000B
        lcall        zlg_send
        ;setb        ZLG_CS

        mov        a,SELECTION
        cjne        a,#1,SEL_NOT_HOUR
        mov        ZLG_SEND_BUF,#00111111B
        jmp        HIGHLIGHT

SEL_NOT_HOUR:
        cjne        a,#2,SEL_NOT_MINUTE
        mov        ZLG_SEND_BUF,#11100111B
        jmp         HIGHLIGHT

SEL_NOT_MINUTE:
        mov        ZLG_SEND_BUF,#11111100B
        jmp         HIGHLIGHT

HIGHLIGHT:
        lcall        zlg_send
        setb        ZLG_CS

        ret

;*****************************************************************
SET_DEC_TIME:
        mov        a,SELECTION
        cjne        a,#1,DEC_NOT_HOUR
        dec        CURR_HOUR
        mov        a,CURR_HOUR
        cjne        a,#0FFH,DEC_EXIT
        mov        CURR_HOUR,#23
        jmp        DEC_EXIT

DEC_NOT_HOUR:
        cjne        a,#2,DEC_NOT_MINUTE
        dec        CURR_MINUTE
        mov        a,CURR_MINUTE
        cjne        a,#0FFH,DEC_EXIT
        mov        CURR_MINUTE,#59
        jmp         DEC_EXIT

DEC_NOT_MINUTE:
        dec        CURR_SECOND
        mov        a,CURR_SECOND
        cjne        a,#0FFH,DEC_EXIT
        mov        CURR_SECOND,#59
        jmp         DEC_EXIT
       
DEC_EXIT:
        ret

;*****************************************************************
SET_ADD_TIME:
        mov        a,SELECTION
        cjne        a,#1,ADD_NOT_HOUR
        inc        CURR_HOUR
        mov        a,CURR_HOUR
        cjne        a,#24,ADD_EXIT
        mov        CURR_HOUR,#0
        jmp        ADD_EXIT

ADD_NOT_HOUR:
        cjne        a,#2,ADD_NOT_MINUTE
        inc        CURR_MINUTE
        mov        a,CURR_MINUTE
        cjne        a,#60,ADD_EXIT
        mov        CURR_MINUTE,#0
        jmp         ADD_EXIT

ADD_NOT_MINUTE:
        inc        CURR_SECOND
        mov        a,CURR_SECOND
        cjne        a,#60,ADD_EXIT
        mov        CURR_SECOND,#0
        jmp         ADD_EXIT
       
ADD_EXIT:
        ret

;*****************************************************************
SET_DISPLAY_TIME:
        mov         a,CURR_SECOND                ;Display second
        mov        ZLG_SEND_BUF,#10000000B
        lcall        DISPLAY_NUM

        mov         a,CURR_MINUTE                ;Display minute
        mov        ZLG_SEND_BUF,#10000011B
        lcall        DISPLAY_NUM

        mov        a,CURR_HOUR
        mov        ZLG_SEND_BUF,#10000110B        ;Display hour
        lcall        DISPLAY_NUM

        ret

;*****************************************************************
;Send a byte to MCU with higer bit first
zlg_send:
        push         acc

        mov        ZLG_BIT_CNT,#8                ;Set the number of data sended
        clr        ZLG_CS                        ;Set set ZLG7289 ready,T1
        call        delay_50;T1

ZLG_SEND_LP:
        ;Send a bit
        mov        a,ZLG_SEND_BUF
        rlc        a
        mov        ZLG_SEND_BUF,a
        mov        ZLG_DATA,c
        nop                                ;Wait for data to ready
        nop

        setb        ZLG_CLK                        ;T2
        lcall        delay_8
        clr        ZLG_CLK                        ;T3
        lcall        delay_8
       
        djnz        ZLG_BIT_CNT,ZLG_SEND_LP        ;Loop to next bit
       
        pop        acc
        ;clr        ZLG_DATA

        ret

;*****************************************************************
;Receive a byte to ZLG7289 with higer bit first
zlg_receive:
        mov        ZLG_BIT_CNT,#8                ;Set the number of data received
        clr        ZLG_CS                        ;Set set ZLG7289 ready,T1
        lcall        delay_50

ZLG_REC_LP:
        ;Receive a bit
        setb        ZLG_CLK                        ;T2
        lcall        delay_8

        mov        c,ZLG_DATA
        mov        a,ZLG_REC_BUF
        rlc        a
        mov        ZLG_REC_BUF,acc

        clr        ZLG_CLK                        ;T3
        lcall        delay_8

        djnz        ZLG_BIT_CNT,ZLG_REC_LP        ;Loop to next bit

        clr        ZLG_DATA

        ret
;*****************************************************************
;Delay for (50+2) us
delay_50:
        mov        VAR_DELAY,#25
        djnz        VAR_DELAY,$
        ret
;*****************************************************************
;Delay for (8+2) us
delay_8:
        mov        VAR_DELAY,#4
        djnz        VAR_DELAY,$
        ret
;*****************************************************************
END








我寫了,但是用編程器燒到s52上時(shí),zlg顯示不出來是怎么回事
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产高清美女一级a毛片久久w | 黄色亚洲网站 | 性福视频在线观看 | 九色 在线 | 国产亚洲一区二区三区在线观看 | av一级毛片 | 精精国产视频 | 中国一级特黄真人毛片免费观看 | 亚洲日本中文字幕在线 | 日韩欧美中文字幕在线观看 | 日韩精品久久 | 国产国拍亚洲精品av | 国产高清在线视频 | 午夜日韩视频 | 中文字幕亚洲无线 | 国内精品成人 | 国产乱码精品一品二品 | 久久久国产精品 | 亚洲精品一区中文字幕 | 少妇一级淫片aaaaaaaaa | 日韩精品在线一区 | 国产精品99免费视频 | 亚洲成人福利 | 成人精品一区二区 | 欧美极品在线观看 | 天堂综合网 | 最近日韩中文字幕 | 九九九久久国产免费 | av中文字幕在线播放 | 亚洲精品亚洲人成人网 | 日韩欧美理论片 | 成人欧美一区二区三区黑人孕妇 | 久久高清 | 红色av社区 | 欧美在线视频观看 | 羞羞视频在线观免费观看 | 狠狠久| 日本精品视频一区二区 | 日韩国产一区二区三区 | 7777奇米影视 | 欧美一区二区网站 |