📄 万年历.s
字号:
.module _万年历.c
.area data(ram, con, rel)
_week1::
.blkb 2
.area idata
.byte 50,22
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 40,43
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 46,33
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 40
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e week1 _week1 A[7:7]c
_week2::
.blkb 2
.area idata
.byte 27,94
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.blkb 2
.area idata
.byte 93,36
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.blkb 2
.area idata
.byte 'E,'Y
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.blkb 1
.area idata
.byte 53
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e week2 _week2 A[7:7]c
_second::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e second _second c
_minute::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e minute _minute c
_hour::
.blkb 1
.area idata
.byte 12
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e hour _hour c
_week::
.blkb 1
.area idata
.byte 4
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e week _week c
_day::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e day _day c
_month::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e month _month c
_temp::
.blkb 1
.area idata
.byte 15
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e temp _temp c
_year::
.blkb 2
.area idata
.word 2006
.area data(ram, con, rel)
.dbfile F:\调试\万年历.c
.dbsym e year _year i
.area text(rom, con, rel)
.dbfile F:\调试\万年历.c
.dbfunc e time_display _time_display fV
.even
_time_display::
sbiw R28,4
.dbline -1
.dbline 19
; #include<iom128v.h>
; //PD0,PD1,PD2
; extern void delay_ms(unsigned int time);
; extern void ocmj_write(unsigned char data);
; extern void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p);
; extern void write_ASCII(unsigned type,unsigned xx,unsigned yy,unsigned data);
; extern unsigned char table1[];//={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
; unsigned char week1[]={50,22,40,43,46,33,40};
; unsigned char week2[]={27,94,93,36,69,89,53};
; unsigned char count;
; extern unsigned char data;
; unsigned char second=0,minute=0,hour=12,week=4,day=1,month=1,temp=15;
; unsigned char alrm_hour,alrm_minute;
; unsigned int year=2006;
; /**********************************************/
; /* LCD显示小时分钟秒*/
; /**********************************************/
; void time_display(void)
; {hz_tran(2,0,"年");
.dbline 19
ldi R24,<L2
ldi R25,>L2
std y+1,R25
std y+0,R24
clr R18
ldi R16,2
xcall _hz_tran
.dbline 20
; hz_tran(4,0,"月");
ldi R24,<L3
ldi R25,>L3
std y+1,R25
std y+0,R24
clr R18
ldi R16,4
xcall _hz_tran
.dbline 21
; hz_tran(6,0,"日");
ldi R24,<L4
ldi R25,>L4
std y+1,R25
std y+0,R24
clr R18
ldi R16,6
xcall _hz_tran
.dbline 22
; hz_tran(0,1,"星期");
ldi R24,<L5
ldi R25,>L5
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
xcall _hz_tran
.dbline 23
; hz_tran(4,1,"温度");
ldi R24,<L6
ldi R25,>L6
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,4
xcall _hz_tran
.dbline 24
; hz_tran(6,3,"返回");
ldi R24,<L7
ldi R25,>L7
std y+1,R25
std y+0,R24
ldi R18,3
ldi R16,6
xcall _hz_tran
.dbline 25
; write_ASCII(0xf9,13,48,69);//E
ldi R24,69
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,48
std y+1,R25
std y+0,R24
ldi R18,13
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 26
; write_ASCII(0xf9,14,48,115);//s
ldi R24,115
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,48
std y+1,R25
std y+0,R24
ldi R18,14
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 27
; write_ASCII(0xf9,15,48,99);//c
ldi R24,99
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,48
std y+1,R25
std y+0,R24
ldi R18,15
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 28
; write_hazi(4,1,week1[week-1],week2[week-1]);//一,二,三,四,五,六,日
ldi R24,<_week2-1
ldi R25,>_week2-1
lds R30,_week
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,<_week1-1
ldi R25,>_week1-1
lds R30,_week
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+1,R3
std y+0,R2
ldi R18,1
ldi R19,0
ldi R16,4
ldi R17,0
xcall _write_hazi
.dbline 29
; write_ASCII(0xf9,4,0,table1[year/1000]);//年第四位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall div16u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 30
; write_ASCII(0xf9,5,0,table1[year%1000/100]);//年第三位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall div16u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,5
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 31
; write_ASCII(0xf9,6,0,table1[year%1000%100/10]);//年第二位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall mod16u
ldi R18,10
ldi R19,0
xcall div16u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,6
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 32
; write_ASCII(0xf9,7,0,table1[year%1000%100%10]);//年第一位
ldi R18,1000
ldi R19,3
lds R16,_year
lds R17,_year+1
xcall mod16u
ldi R18,100
ldi R19,0
xcall mod16u
ldi R18,10
ldi R19,0
xcall mod16u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,7
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 33
; write_ASCII(0xf9,10,0,table1[month/10]);//月份高位
ldi R18,10
ldi R19,0
lds R16,_month
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,10
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 34
; write_ASCII(0xf9,11,0,table1[month%10]);//月份低位
ldi R18,10
ldi R19,0
lds R16,_month
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,11
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 35
; write_ASCII(0xf9,14,0,table1[day/10]);//日期高位
ldi R18,10
ldi R19,0
lds R16,_day
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,14
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 36
; write_ASCII(0xf9,15,0,table1[day%10]);//日期低位
ldi R18,10
ldi R19,0
lds R16,_day
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
clr R2
std y+1,R3
std y+0,R2
ldi R18,15
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 37
; write_ASCII(0xf9,8,32,table1[hour/10]);//小时高位
ldi R18,10
ldi R19,0
lds R16,_hour
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,8
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 38
; write_ASCII(0xf9,9,32,table1[hour%10]);//小时地位
ldi R18,10
ldi R19,0
lds R16,_hour
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,9
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 39
; write_ASCII(0xf9,10,32,58); //:
ldi R24,58
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,32
std y+1,R25
std y+0,R24
ldi R18,10
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 40
; write_ASCII(0xf9,11,32,table1[minute/10]);//分钟高位
ldi R18,10
ldi R19,0
lds R16,_minute
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,11
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 41
; write_ASCII(0xf9,12,32,table1[minute%10]);//分钟地位
ldi R18,10
ldi R19,0
lds R16,_minute
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,12
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 42
; write_ASCII(0xf9,13,32,58); //:
ldi R24,58
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,32
std y+1,R25
std y+0,R24
ldi R18,13
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 43
; write_ASCII(0xf9,14,32,table1[second/10]);//秒钟高位
ldi R18,10
ldi R19,0
lds R16,_second
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,14
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 44
; write_ASCII(0xf9,15,32,table1[second%10]);//秒钟地位
ldi R18,10
ldi R19,0
lds R16,_second
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,15
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 45
; write_ASCII(0xf9,16,16,table1[temp/10]);//温度高位
ldi R18,10
ldi R19,0
lds R16,_temp
clr R17
xcall div16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,16
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 46
; write_ASCII(0xf9,17,16,table1[temp%10]);//温度地位
ldi R18,10
ldi R19,0
lds R16,_temp
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,17
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline -2
L1:
adiw R28,4
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_days _get_days fc
; tian -> R20
; yue -> R20
.even
_get_days::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 54
;
;
; }
; /**********************************************/
; /* 确定天数*/
; /**********************************************/
; unsigned char get_days(unsigned char yue)
; {
.dbline 56
; unsigned char tian;
; switch(yue)
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L14
cpi R20,2
ldi R30,0
cpc R21,R30
breq L16
cpi R20,3
ldi R30,0
cpc R21,R30
breq L14
cpi R20,4
ldi R30,0
cpc R21,R30
breq L15
cpi R20,5
ldi R30,0
cpc R21,R30
breq L14
cpi R20,6
ldi R30,0
cpc R21,R30
breq L15
cpi R20,7
ldi R30,0
cpc R21,R30
breq L14
cpi R20,8
ldi R30,0
cpc R21,R30
breq L14
cpi R20,9
ldi R30,0
cpc R21,R30
breq L15
cpi R20,10
ldi R30,0
cpc R21,R30
breq L14
cpi R20,11
ldi R30,0
cpc R21,R30
breq L15
cpi R20,12
ldi R30,0
cpc R21,R30
breq L14
xjmp L12
X0:
.dbline 57
; {
L14:
.dbline 64
; case 1:
; case 3:
; case 5:
; case 7:
; case 8:
; case 10:
; case 12:tian=31;break;
ldi R20,31
.dbline 64
xjmp L12
L15:
.dbline 68
; case 4:
; case 6:
; case 9:
; case 11:tian=30;break;
ldi R20,30
.dbline 68
xjmp L12
L16:
.dbline 69
; case 2: if((year%4==0&&year%100!=0)||(year%400==0))tian=29;else tian=28;break;
lds R24,_year
lds R25,_year+1
andi R24,3
andi R25,0
cpi R24,0
cpc R24,R25
brne L20
X1:
ldi R18,100
ldi R19,0
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
brne L19
X2:
L20:
ldi R18,400
ldi R19,1
lds R16,_year
lds R17,_year+1
xcall mod16u
cpi R16,0
cpc R16,R17
brne L17
X3:
L19:
.dbline 69
ldi R20,29
xjmp L12
L17:
.dbline 69
ldi R20,28
.dbline 69
.dbline 70
; default:break;
L12:
.dbline 72
; }
; return tian;
mov R16,R20
.dbline -2
L10:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r tian 20 c
.dbsym r yue 20 c
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 79
; }
;
; /**********************************************/
; /* 定时器初始化 1秒*/
; /**********************************************/
; void timer0_init(void)
; {
.dbline 80
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 81
; ASSR = 0x08; //set async mode
ldi R24,8
out 0x30,R24
.dbline 82
; TCNT0 = 0x00; //set count
out 0x32,R2
.dbline 83
; TCCR0 = 0x05; //start timer 128分频
ldi R24,5
out 0x33,R24
.dbline -2
L21:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 64
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile F:\调试\万年历.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
xcall push_lset
.dbline -1
.dbline 90
; }
; /**********************************************/
; /* 定时器中断服务程序*/
; /**********************************************/
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
.dbline 91
; second=second+1;
lds R24,_second
subi R24,255 ; addi 1
sts _second,R24
.dbline 92
; if(second==60)
cpi R24,60
breq X4
xjmp L23
X4:
.dbline 93
; {
.dbline 94
; second=0;
clr R2
sts _second,R2
.dbline 95
; minute=minute+1;
lds R24,_minute
subi R24,255 ; addi 1
sts _minute,R24
.dbline 96
; if(minute==60)
cpi R24,60
breq X5
xjmp L25
X5:
.dbline 97
; {
.dbline 98
; minute=0;
sts _minute,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -