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

📄 1602_8563.lis

📁 avr单片机的程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -