📄 pager 原代碼.txt
字号:
;;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 + -