⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pager 原代碼.txt

📁 机器上存的以前的
💻 TXT
📖 第 1 页 / 共 5 页
字号:

;;initial time value

        stz    sec
      ; lda    #12
        stz    hour
        stz    alm_h1
        stz    alm_h2
        stz    alm_h3
        stz    auto_on_h
        stz    auto_off_h
        stz    min
        stz    alm_m1
        stz    alm_m2
        stz    alm_m3

        stz    auto_on_m
        stz    auto_off_m

        msmb   f_24hr            ;dsp 24hr
;;inital date value
       stz     year
       lda     #01h
       sta     month
       sta     day
;;set system to stand by
       msmb    stand_by
;;set to tone mode
       msmb    tone_mode
       mrmb    motor_mode
       mrmb    mute_mode
;;set out of range
       mrmb    f_ant
       mrmb    ant_once

       lda     #btlot1     ;;dectec 2 min after power on
       sta     batlow_cnt

     ;;  msmb    ma7x_lcd   ;for test
      ;; lda     #05h       ;;for test
       stz     song_no
       rts

;=======clear all ram ========
clr_ram:
        lda    #0
        ldy    #60h
clr_ram1:
        sta    0,y             ;clr ram 60h-ffh
        iny
        bne    clr_ram1

        ldy    #0ffh
clr_ram2:
        sta    0100h,y
        dey
        cpy    #03fh
        bne    clr_ram2

        ldy    #0h
clr_ram3:
        sta    0200h,y          ;clear 200h - 3ffh
        sta    0300h,y
        iny
        bne    clr_ram3

        ldy    #0h
clr_ram4:
        sta    0400h,y
        iny
        cpy    #60h
        bne    clr_ram4
        rts
;;******** show all dash on digit *******
;;for power on test
;;***************************************
show_all_dash:
        jsr    clr_lcd
        motor_off
        buzzer_out_off
        disable int_tm1
        disable int_tempo
        mrmb    music_ply
        jsr     clr_dspbuf

        stz    cnt_05s
        lda    #FONT_DASH
        ldx    #0
show_all_dash1:
        sta    lcd_left,x
        inx
        cpx    #12
        bne    show_all_dash1
        jsr    lcd_dr
        mrmb   f_newkey
show_all_dash2:
;;      jsr    chk_batfail
        mbbs   f_newkey,end_show_dash
        lda    cnt_05s
        cmp    #04
        bne    show_all_dash2
end_show_dash:
        jsr    clr_lcd
        jsr    show_watch_c
        jsr    show_date_c
        jsr    ck_system_icon
        jsr    lcd_dr
        mrmb   f_newkey
        rts

;;******** show adjust date *******
show_adj_date:
        jsr    clr_dspbuf
        bin_bcd day
        sty    dsp_buf2
        sta    dsp_buf3
        lda    #FONT_DASH
        sta    dsp_buf4

        bin_bcd month
        cpy    #0               ;check zero
        beq    show_adj_date1
        sty    dsp_buf5
        sta    dsp_buf6
        bra    $+4

show_adj_date1:
        sta    dsp_buf5

        lda    #FONT_DASH
        sta    dsp_buf7
        lda    year
        asl    A
        tax
        lda    year_table,x
        sta    tempa
        and    #f0h
        swap
        sta    dsp_buf8
        lda    tempa
        and    #0fh
        sta    dsp_buf9
        rts
;;********** shift time dspbuf ***********
shift_time_dspbuf:
       ldx     #0
shift_time_dspbuf1:
       lda     lcd_left,x
       sta     lcd_left+1,x
       inx
       cpx     #06
       bne     shift_time_dspbuf1
       rts
;;******** initial dummy value ***********
init_dummy:
       lda     #5ah
       sta     dummy1
       lda     #a5h
       sta     dummy2
       rts
;;===============================================
;; check out of range
;;=============================================
;; SYNC TO DETECT OUT OF RANGE

check_ant_range:

        push_all
        clr_int int_ant
        lda     dec_stat1
        asl     A
        bcs     in_range            ;check decoder status register

        mbbs    ant_once,out_range
        lda     #or_time
        sta     or_cnt             ;RESET OUT OF RANGE COUNTER
        msmb    ant_once

        bra     out_range

in_range:
        mrmb    ant_once
        mrmb    f_ant                  ;clr count flag

out_range:

        pop_all
        rti

;;========= porta key wake up ============================
key_wakeup:

        push_all                        ;;PUSH ALL REG.

        disable  int_key               ;disable wakeup key int
        enable   int_scankey             ;enable  rtc0 for scankey int

        lda      #ffh
        sta      key_code

        lda      #2
        sta      keycnt

        mrmb     f_newkey             ;;CLEAR KEY FLAG
        mrmb     f_dbkey
        clr_int  int_key

        pop_all
        rti
;======================================
;; RTC 0 : 64 Hz   for scan key
;;=====================================
;pa3:read key
;pa1:func key
;pa2:slect key
;;====================================
rtc0_scankey:
        push_all
        clr_int     int_scankey           ;clr scankey int flag

        lda     porta
        and     #key_mask            ;mask porta
        cmp     #key_mask            ;compare with old key
        bne     ck_key

rtc0_scankey1:
        mrmb    f_dbkey
        disable int_scankey          ;disable  rtc0 for scankey int
        lda     key_code
        cmp     #light_key
        beq     ck_release_key

        enable  int_key              ;enable wakeup key int
        bra     scanend

;;check new key
ck_key:
        mbbs    f_dbkey,cnt_func_key
        dec     keycnt
        bne     scanend

;;new key in
        lda     porta
        and     #key_mask
        sta     key_code
        msmb    f_dbkey             ;set debounce key flag

        lda     key_code
        cmp     #light_key
        beq     load_fcnt_value

new_key_in:
        msmb    f_newkey            ;set main check key
        mrmb    stand_by

scanend:

        clr_int  int_key                ;clr porta wake_up key bit
        pop_all
        rti
release_dbkey:
        mrmb     f_dbkey
        lda      #01
        sta      keycnt
        bra      scanend

;;***********************************
;;count function key
;;***********************************

load_fcnt_value:
        lda    #04
        sta    keycnt
        bra    scanend

cnt_func_key:
        lda    porta
        and    #key_mask
        cmp    key_code
        bne    release_dbkey

        lda    key_code
        cmp    #light_key
        bne    scanend

        lda     keycnt
        bne     ck_release_key
        bbr2    portc,trun_off_light
        led_on
        light_on
        smb1    key_code
        lda     #16
        sta     light_cnt
        jmp     rtc0_scankey1

ck_release_key:
        mbbs    f_dbkey,scanend     ;;check release key

        msmb    f_newkey
        mrmb    stand_by
        enable  int_key
        jmp     scanend

trun_off_light:
        light_off
        led_off
        smb1    key_code
        jmp     rtc0_scankey1

;;************ watch timer *********************
rtc1_watch:
        push_all
        clr_int    int_watch
        msmb    f_05s               ;set 0.5sec flag
        msmb    rd_lcd              ;

        inc     sec
        lda     sec
        cmp     #60d*2
        bcc     no_adjust

        stz     sec

;;inc min
        inc     min
        lda     min
        cmp     #60d
        bcc     no_adjust
;;inc hour
        stz     min
        inc     hour
        lda     hour
        cmp     #24d
        bcc     no_adjust
;;inc  day
        stz     hour
        inc     day
        jsr     ck_day_range
        bcc     no_adjust

;;inc  month
        jsr     inc_month
        bcc     no_adjust
;;inc   year
        jsr     inc_year

no_adjust:
        inc     cnt_05s
        inc     cnt_05s1
        inc     flash_c
        lda     unread_cnt
        beq     no_adjust1
        dec     unread_cnt

no_adjust1:
        lda     batlow_cnt
        beq     no_adjust2
        dec     batlow_cnt
        bne     no_adjust2
        lda     #01000000b
        eor     flag4        ;reverse batlow flag
        sta     flag4


no_adjust2:
        lda     keycnt          ;check light key
        beq     no_adjust3
        dec     keycnt

no_adjust3:

        lda     light_cnt       ;check light key
        beq     no_adjust4
        dec     light_cnt
        bne     no_adjust4
        light_off
        led_off

no_adjust4:
        mbbs    f_ant,end_watch
        lda     or_cnt
        beq     end_watch
        dec     or_cnt
        bne     end_watch
        msmb    f_ant

;;check out of range counter

end_watch:
        pop_all
        rti
;;**********************************
;;check day range and inc month
;;**********************************
ck_day_range:
        mbbs   leap_year,ck_day29
day29_out:
        lda    month
        dec    A
        tax
        lda    day_range_table,x
ck_day29_range:
        cmp    day
        beq    ck_day_range1
        clc
        rts
ck_day_range1:
        lda    #01
        sta    day
        sec
        rts

ck_day29:
        lda    month
        cmp    #02
        bne    day29_out
        dec    A
        tax
        lda    day_range_table,x
        inc    A                   ;day is 29 and year is leap
        bra    ck_day29_range

day_range_table:
       db   32,29,32,31,32,31
       db   32,32,31,32,31,32

;;********* check adj month for day of change ********
ck_month_range:
        mbbs   leap_year,ck_month29
month29_out:
        lda    month
        dec    A
        tax
        lda    month_range_table,x
ck_month29_range:
        cmp    day
        bcc    ck_month_range1
        rts
ck_month_range1:
        lda    month_range_table,x
        sta    day
        rts

ck_month29:
        lda    month
        cmp    #02
        bne    month29_out
        dec    A
        tax
        lda    month_range_table,x
        inc    A                   ;day is 29 and year is leap
        cmp    day
        bcc    ck_month29_1
        rts
ck_month29_1:
        lda    #29
        sta    day
        rts


month_range_table:
       db   31,28,31,30,31,30
       db   31,31,30,31,30,31



;;**************************************
;;inc month
;;**************************************

inc_month:
        inc    month
        lda    month
        cmp    #13
        bne    inc_month1
        lda    #01
        sta    month
        sec
        rts
inc_month1:
        clc
        rts

;;***************************************
;;inc year and check leap year
;;***************************************
inc_year:
        inc    year
        lda    year
        cmp    #21
        bne    ck_leap_year
        stz    year

ck_leap_year:

        lda    year
        asl    A
        tax
        inx
        mrmb   leap_year
        lda    year_table,x
        beq    inc_year2
        msmb   leap_year

inc_year2:
        lda    month
        cmp    #02
        bne    inc_year3
        jsr    ck_month_range

inc_year3:

        rts

year_table:
        db  99h,00    ;;99 year
        db  00h,01    ;;2000 year and year is leap
        db  01h,00
        db  02h,00
        db  03h,00
        db  04h,01
        db  05h,00
        db  06h,00
        db  07h,00
        db  08h,01
        db  09h,00
        db  10h,00
        db  11h,00
        db  12h,01
        db  13h,00
        db  14h,00
        db  15h,00
        db  16h,01
        db  17h,00
        db  18h,00
        db  19h,00
;*************************************
;;************************************

tm_base:

        push_all
        clr_int   int_tempo         ;clr time base int flag
        mbbs     motor_mode,cnt_motor
        mbbr     music_ply,music_stop     ;music stop by user

play_data:
        inc_addr  song_ptr1,song_ptr
        lda     (song_ptr)      ;get tempo of value
        bne     next_data

        dec     song_repeat
        beq     music_stop
        buzzer_stp
        mbbs    f_alarm,alarm_again
        jsr     get_song_ptr     ;get song start address again
play_data1
        buzzer_on
        enable  int_tempo
        bra     play_data

next_data:

        sta     tb_d
        inc_addr song_ptr1,song_ptr   ;;SET TEMPO
        lda     (song_ptr)   ;get song of data
        beq     music_mute

        sta     tm1_d        ;;set key  value
        buzzer_on
        bra     tempo_end

music_mute:

        stz     cnt_05s
        buzzer_stp
        bra     tempo_end

music_stop:
        buzzer_out_off
        disable int_tm1
        disable int_tempo
        mrmb    music_ply
        mbbs    entry,tempo_end   ;for alert select
        mbbs    read_mode,tempo_end1
        msmb    stand_by
        mrmb    f_alarm

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -