📄 1602_8563.lis
字号:
00F2 ; if((timer[5]&0x80)==0)
00F2 DA98 cbi 0x1b,2
00F4 .dbline 76
00F4 ; timer[7]=0x20; //世纪位为0,是21世纪
00F4 DB9A sbi 0x1b,3
00F6 .dbline 77
00F6 ; else timer[7]=0x19; //世纪位不为0,是20世纪
00F6 4F60 ori R20,15
00F8 .dbline 78
00F8 ; timer[5]=timer[5]&0x1F;
00F8 8BB3 in R24,0x1b
00FA 806F ori R24,240
00FC 8423 and R24,R20
00FE 8BBB out 0x1b,R24
0100 .dbline 79
0100 ; timer[6]=read_tim(); //读出年数据
0100 02E3 ldi R16,50
0102 10E0 ldi R17,0
0104 8CDF xcall _delay_us
0106 .dbline 80
0106 ; stop();
0106 DB98 cbi 0x1b,3
0108 .dbline 81
0108 ; return I2C_CRR;
0108 01E0 ldi R16,1
010A 10E0 ldi R17,0
010C 92DF xcall _delay_ms
010E .dbline -2
010E L17:
010E 0E940000 xcall pop_gset1
0112 .dbline 0 ; func end
0112 0895 ret
0114 .dbsym r a 20 c
0114 .dbsym r data 20 c
0114 .dbend
0114 .dbfunc e lcd_init _lcd_init fV
.even
0114 _lcd_init::
0114 .dbline -1
0114 .dbline 86
0114 ; }
0114 ;
0114 ; /**********************************
0114 ; * 写入时钟函数 *
0114 ; **********************************/
0114 .dbline 87
0114 ; uchar write_timer(void)
0114 02E0 ldi R16,2
0116 10E0 ldi R17,0
0118 8CDF xcall _delay_ms
011A .dbline 88
011A ; {
011A 00E2 ldi R16,32
011C E7DF xcall _lcd_comm_b
011E .dbline 89
011E ; start(); //启动总线
011E 00E9 ldi R16,400
0120 11E0 ldi R17,1
0122 7DDF xcall _delay_us
0124 .dbline 90
0124 ; waitack(); //等待启动完成
0124 08E2 ldi R16,40
0126 BDDF xcall _lcd_comm
0128 .dbline 91
0128 ; if(chkack()!=START)return I2C_ERR; //检查是否启动成功
0128 08EC ldi R16,200
012A 10E0 ldi R17,0
012C 78DF xcall _delay_us
012E .dbline 92
012E ; write_tim(SLA_W); //发送写地址
012E 0CE0 ldi R16,12
0130 B8DF xcall _lcd_comm
0132 .dbline 93
0132 ; write_tim(0x00); //写数据首地址
0132 08EC ldi R16,200
0134 10E0 ldi R17,0
0136 73DF xcall _delay_us
0138 .dbline 94
0138 ; write_tim(0x20); //写控制/状态寄存器1,暂停计时
0138 06E0 ldi R16,6
013A B3DF xcall _lcd_comm
013C .dbline 95
013C ; write_tim(0x00); //写控制/状态寄存器2
013C 04E6 ldi R16,100
013E 10E0 ldi R17,0
0140 6EDF xcall _delay_us
0142 .dbline 96
0142 ; write_tim(0x00); //写秒数据为0
0142 01E0 ldi R16,1
0144 AEDF xcall _lcd_comm
0146 .dbline 97
0146 ; write_tim(timer[1]); //写分数据
0146 0AE0 ldi R16,10
0148 10E0 ldi R17,0
014A 73DF xcall _delay_ms
014C .dbline -2
014C L18:
014C .dbline 0 ; func end
014C 0895 ret
014E .dbend
014E .dbfunc e cls _cls fV
.even
014E _cls::
014E .dbline -1
014E .dbline 102
014E ; write_tim(timer[2]); //写时数据
014E ; write_tim(timer[3]); //写日数据
014E ; write_tim(timer[4]); //写周数据
014E ; write_tim(timer[5]); //写月数据
014E ; write_tim(timer[6]); //写年数据
014E .dbline 103
014E ; stop();
014E 01E0 ldi R16,1
0150 A8DF xcall _lcd_comm
0152 .dbline 104
0152 ; return I2C_CRR;
0152 05E0 ldi R16,5
0154 10E0 ldi R17,0
0156 6DDF xcall _delay_ms
0158 .dbline -2
0158 L19:
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbend
015A .dbfunc e locate _locate fV
015A ; x -> R20
015A ; b -> R22
015A ; a -> R10
.even
015A _locate::
015A 0E940000 xcall push_gset3
015E 622F mov R22,R18
0160 A02E mov R10,R16
0162 .dbline -1
0162 .dbline 109
0162 ; }
0162 ;
0162 ; /**********************************
0162 ; * 启动时钟函数 *
0162 ; **********************************/
0162 .dbline 111
0162 ; uchar start_timer(void)
0162 ; {
0162 8A2D mov R24,R10
0164 8130 cpi R24,1
0166 19F4 brne L21
0168 .dbline 112
0168 ; start(); //启动总线
0168 462F mov R20,R22
016A 4058 subi R20,128 ; addi 128
016C 4150 subi R20,1
016E L21:
016E .dbline 113
016E ; waitack(); //等待启动完成
016E 8A2D mov R24,R10
0170 8230 cpi R24,2
0172 19F4 brne L23
0174 .dbline 114
0174 ; if(chkack()!=START)return I2C_ERR; //检查是否启动成功
0174 462F mov R20,R22
0176 4054 subi R20,64 ; addi 192
0178 4150 subi R20,1
017A L23:
017A .dbline 115
017A ; write_tim(SLA_W); //发送写地址
017A 042F mov R16,R20
017C 92DF xcall _lcd_comm
017E .dbline 116
017E ; write_tim(0x00); //写数据首地址
017E 05E0 ldi R16,5
0180 10E0 ldi R17,0
0182 57DF xcall _delay_ms
0184 .dbline -2
0184 L20:
0184 0E940000 xcall pop_gset3
0188 .dbline 0 ; func end
0188 0895 ret
018A .dbsym r x 20 c
018A .dbsym r b 22 c
018A .dbsym r a 10 c
018A .dbend
018A .dbfunc e lcd _lcd fV
018A ; i -> R20
.even
018A _lcd::
018A 0E940000 xcall push_gset1
018E 402F mov R20,R16
0190 .dbline -1
0190 .dbline 121
0190 ; write_tim(0x00); //写控制/状态寄存器1,暂停计时
0190 ; stop();
0190 ; return I2C_CRR;
0190 ; }
0190 ;
0190 .dbline 122
0190 ; /**********************************
0190 042F mov R16,R20
0192 62DF xcall _lcd_da
0194 .dbline -2
0194 L25:
0194 0E940000 xcall pop_gset1
0198 .dbline 0 ; func end
0198 0895 ret
019A .dbsym r i 20 c
019A .dbend
019A .dbfunc e xs_lcd _xs_lcd fV
019A ; s -> R20,R21
.even
019A _xs_lcd::
019A 0E940000 xcall push_gset1
019E A801 movw R20,R16
01A0 .dbline -1
01A0 .dbline 130
01A0 ; * 将时钟数据转换后在LCD上显示 *
01A0 ; **********************************/
01A0 ; void timer_lcd(void)
01A0 ; {
01A0 ; locate(1,4); //写指令:第1行第4列地址
01A0 ;
01A0 ; lcd_da((timer[7]>>4)+0x30);
01A0 ; lcd_da((timer[7]&0x0f)+0x30);
01A0 05C0 xjmp L28
01A2 L27:
01A2 .dbline 132
01A2 .dbline 133
01A2 FA01 movw R30,R20
01A4 0081 ldd R16,z+0
01A6 F1DF xcall _lcd
01A8 .dbline 134
01A8 4F5F subi R20,255 ; offset = 1
01AA 5F4F sbci R21,255
01AC .dbline 135
01AC L28:
01AC .dbline 131
01AC ; lcd_da((timer[6]>>4)+0x30); //显示年
01AC FA01 movw R30,R20
01AE 2080 ldd R2,z+0
01B0 2220 tst R2
01B2 B9F7 brne L27
01B4 .dbline -2
01B4 L26:
01B4 0E940000 xcall pop_gset1
01B8 .dbline 0 ; func end
01B8 0895 ret
01BA .dbsym r s 20 pc
01BA .dbend
01BA .dbfunc e tonghe _tonghe fV
.even
01BA _tonghe::
01BA .dbline -1
01BA .dbline 144
01BA ; lcd_da((timer[6]&0x0f)+0x30);
01BA ; lcd_da('/');
01BA ; lcd_da((timer[5]>>4)+0x30); //显示月
01BA ; lcd_da((timer[5]&0x0f)+0x30);
01BA ; lcd_da('/');
01BA ; lcd_da((timer[3]>>4)+0x30); //显示日
01BA ; lcd_da((timer[3]&0x0f)+0x30);
01BA ;
01BA ; locate(2,2); //写指令:第2行地址
01BA ;
01BA ; lcd_da((timer[2]>>4)+0x30); //时
01BA ; lcd_da((timer[2]&0x0f)+0x30);
01BA ; lcd_da(':');
01BA .dbline 145
01BA ; lcd_da((timer[1]>>4)+0x30); //分
01BA C9DF xcall _cls
01BC .dbline 146
01BC ; lcd_da((timer[1]&0x0f)+0x30);
01BC 25E0 ldi R18,5
01BE 01E0 ldi R16,1
01C0 CCDF xcall _locate
01C2 .dbline 147
01C2 ; lcd_da(':');
01C2 00E0 ldi R16,<L31
01C4 10E0 ldi R17,>L31
01C6 E9DF xcall _xs_lcd
01C8 .dbline 148
01C8 ; lcd_da((timer[0]>>4)+0x30); //秒
01C8 21E0 ldi R18,1
01CA 02E0 ldi R16,2
01CC C6DF xcall _locate
01CE .dbline 149
01CE ; lcd_da((timer[0]&0x0f)+0x30);
01CE 00E0 ldi R16,<L32
01D0 10E0 ldi R17,>L32
01D2 E3DF xcall _xs_lcd
01D4 .dbline -2
01D4 L30:
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 .dbend
01D6 .dbfile D:\PCF8563\1602_time\TWI_8563.h
01D6 .dbfunc e Twi_Init _Twi_Init fV
.even
01D6 _Twi_Init::
01D6 .dbline -1
01D6 .dbline 56
01D6 .dbline 57
01D6 8EE0 ldi R24,14
01D8 80B9 out 0x0,R24
01DA .dbline 58
01DA 2224 clr R2
01DC 21B8 out 0x1,R2
01DE .dbline -2
01DE L33:
01DE .dbline 0 ; func end
01DE 0895 ret
01E0 .dbend
01E0 .dbfunc e write_tim _write_tim fc
01E0 ; a -> R16
.even
01E0 _write_tim::
01E0 .dbline -1
01E0 .dbline 63
01E0 .dbline 64
01E0 .dbline 64
01E0 03B9 out 0x3,R16
01E2 .dbline 64
01E2 84E8 ldi R24,132
01E4 86BF out 0x36,R24
01E6 .dbline 64
01E6 .dbline 64
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -