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

📄 funcs.lis

📁 本程序中用到DS1302以及液晶等模块
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01CC                   .dbline 131
 01CC 6330              cpi R22,3
 01CE 98F3              brlo L35
 01D0                   .dbline 136
 01D0           ;     {
 01D0           ;         time[i*2]=DS1302_readD(addr|RD);    // 秒 分 时 日 月 星期 年        
 01D0           ;         addr+=2;
 01D0           ;     }
 01D0           ;     PORTB&=~BIT(RTC_CLK);                                       //拉低时钟端(时钟端在不操作时为低)
 01D0 C798              cbi 0x18,7
 01D2                   .dbline -2
 01D2                   .dbline 137
 01D2           ; }
 01D2           L34:
 01D2 0E940000          xcall pop_gset3
 01D6                   .dbline 0 ; func end
 01D6 0895              ret
 01D8                   .dbsym r addr 20 c
 01D8                   .dbsym r i 22 c
 01D8                   .dbsym r time 10 pc
 01D8                   .dbend
 01D8                   .dbfunc e One_smg_display _One_smg_display fV
 01D8           ;         number -> R20
 01D8           ;           data -> R22
                        .even
 01D8           _One_smg_display::
 01D8 0E940000          xcall push_gset2
 01DC 422F              mov R20,R18
 01DE 602F              mov R22,R16
 01E0                   .dbline -1
 01E0                   .dbline 147
 01E0           ; 
 01E0           ; /*******************************************
 01E0           ; 函数名称: One_smg_display
 01E0           ; 功    能: 指定的数码管显示指定的内容
 01E0           ; 参    数: data--显示的内容(0-15)
 01E0           ;                 number--指定的数码管(1-6)
 01E0           ; 返回值  : 无
 01E0           ; /********************************************/
 01E0           ; void One_smg_display(uchar data,uchar number)
 01E0           ; { 
 01E0                   .dbline 148
 01E0           ;  PORTB|=0x3F;                    //输出位选
 01E0 88B3              in R24,0x18
 01E2 8F63              ori R24,63
 01E4 88BB              out 0x18,R24
 01E6                   .dbline 149
 01E6           ;  PORTA|=BIT(BITLK);              //更新位选
 01E6 DC9A              sbi 0x1b,4
 01E8                   .dbline 151
 01E8           ;  //Delayus(50);                          //调整时序
 01E8           ;  PORTA&=~BIT(BITLK);     //锁存位选
 01E8 DC98              cbi 0x1b,4
 01EA                   .dbline 153
 01EA           ; 
 01EA           ;  PORTB=SEGMENT[data];    //输出段选
 01EA 82E0              ldi R24,2
 01EC 869F              mul R24,R22
 01EE F001              movw R30,R0
 01F0 80E0              ldi R24,<_SEGMENT
 01F2 90E0              ldi R25,>_SEGMENT
 01F4 E80F              add R30,R24
 01F6 F91F              adc R31,R25
 01F8 0590              lpm R0,Z+
 01FA 1490              lpm R1,Z
 01FC F001              movw R30,R0
 01FE E8BB              out 0x18,R30
 0200                   .dbline 154
 0200           ;  PORTA|=BIT(SEGLK);              //更新段选
 0200 DB9A              sbi 0x1b,3
 0202                   .dbline 156
 0202           ;  //Delayus(50);                          //调整时序
 0202           ;  PORTA&=~BIT(SEGLK);     //锁存段选
 0202 DB98              cbi 0x1b,3
 0204                   .dbline 158
 0204           ;  
 0204           ;  number=~BIT(number-1);          //调整位选(指定时是1~6,而操作的时候是0~5)
 0204 142F              mov R17,R20
 0206 1150              subi R17,1
 0208 01E0              ldi R16,1
 020A 0E940000          xcall lsl8
 020E 402F              mov R20,R16
 0210 4095              com R20
 0212                   .dbline 159
 0212           ;  PORTB=number;                           //输出位选
 0212 48BB              out 0x18,R20
 0214                   .dbline 160
 0214           ;  PORTA|=BIT(BITLK);              //更新位选
 0214 DC9A              sbi 0x1b,4
 0216                   .dbline 162
 0216           ;  //Delayus(50);                                  //调整时序
 0216           ;  PORTA&=~BIT(BITLK);     //锁存位选
 0216 DC98              cbi 0x1b,4
 0218                   .dbline -2
 0218                   .dbline 163
 0218           ; }
 0218           L39:
 0218 0E940000          xcall pop_gset2
 021C                   .dbline 0 ; func end
 021C 0895              ret
 021E                   .dbsym r number 20 c
 021E                   .dbsym r data 22 c
 021E                   .dbend
 021E                   .dbfunc e All_smg_display _All_smg_display fV
 021E           ;              i -> R20
 021E           ;          pdata -> R22,R23
                        .even
 021E           _All_smg_display::
 021E 0E940000          xcall push_gset2
 0222 B801              movw R22,R16
 0224                   .dbline -1
 0224                   .dbline 171
 0224           ; /*******************************************
 0224           ; 函数名称: All_smg_display
 0224           ; 功    能: 6个数码管显示指定的内容
 0224           ; 参    数: *pdata--显示内容数组地址
 0224           ; 返回值  : 无
 0224           ; /********************************************/
 0224           ; void All_smg_display(uchar *pdata)
 0224           ; {
 0224                   .dbline 173
 0224           ;  uchar i;
 0224           ;  for(i=0;i<6;i++)
 0224 4427              clr R20
 0226 10C0              xjmp L44
 0228           L41:
 0228                   .dbline 174
 0228                   .dbline 175
 0228 242F              mov R18,R20
 022A 2F5F              subi R18,255    ; addi 1
 022C 242E              mov R2,R20
 022E 3324              clr R3
 0230 E5E0              ldi R30,5
 0232 F0E0              ldi R31,0
 0234 E219              sub R30,R2
 0236 F309              sbc R31,R3
 0238 E60F              add R30,R22
 023A F71F              adc R31,R23
 023C 0081              ldd R16,z+0
 023E CCDF              xcall _One_smg_display
 0240                   .dbline 176
 0240 03E0              ldi R16,3
 0242 10E0              ldi R17,0
 0244 F5DE              xcall _Delayms
 0246                   .dbline 177
 0246           L42:
 0246                   .dbline 173
 0246 4395              inc R20
 0248           L44:
 0248                   .dbline 173
 0248 4630              cpi R20,6
 024A 70F3              brlo L41
 024C                   .dbline -2
 024C                   .dbline 178
 024C           ;       {
 024C           ;        One_smg_display(pdata[5-i],i+1);
 024C           ;        Delayms(3);
 024C           ;       }
 024C           ; }
 024C           L40:
 024C 0E940000          xcall pop_gset2
 0250                   .dbline 0 ; func end
 0250 0895              ret
 0252                   .dbsym r i 20 c
 0252                   .dbsym r pdata 22 pc
 0252                   .dbend
 0252                   .dbfunc e One_led _One_led fV
 0252           ;              i -> <dead>
 0252           ;          light -> R22
 0252           ;         number -> R20
                        .even
 0252           _One_led::
 0252 0E940000          xcall push_gset2
 0256 622F              mov R22,R18
 0258 402F              mov R20,R16
 025A                   .dbline -1
 025A                   .dbline 188
 025A           ; 
 025A           ; /*******************************************
 025A           ; 函数名称: One_led
 025A           ; 功    能: 点亮或者熄灭指定的LED
 025A           ; 参    数: number--指定的LED
 025A           ;                 light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED
 025A           ; 返回值  : 无
 025A           ; /********************************************/
 025A           ; void One_led(uchar number,uchar light)
 025A           ; {
 025A                   .dbline 190
 025A           ;  uchar i;
 025A           ;  if(light==TRUE)                 //点亮操作
 025A 6130              cpi R22,1
 025C 61F4              brne L46
 025E                   .dbline 191
 025E           ;  {
 025E                   .dbline 192
 025E           ;   PORTB&=~BIT(number);           //输出数据
 025E 01E0              ldi R16,1
 0260 142F              mov R17,R20
 0262 0E940000          xcall lsl8
 0266 202E              mov R2,R16
 0268 2094              com R2
 026A 38B2              in R3,0x18
 026C 3220              and R3,R2
 026E 38BA              out 0x18,R3
 0270                   .dbline 193
 0270           ;   PORTA|=BIT(LEDLK);     //更新数据
 0270 DA9A              sbi 0x1b,2
 0272                   .dbline 195
 0272           ;   //Delayms(5);                          //调整时序
 0272           ;   PORTA&=~BIT(LEDLK);    //锁存数据
 0272 DA98              cbi 0x1b,2
 0274                   .dbline 196
 0274           ;  }
 0274 09C0              xjmp L47
 0276           L46:
 0276                   .dbline 198
 0276                   .dbline 199
 0276 01E0              ldi R16,1
 0278 142F              mov R17,R20
 027A 0E940000          xcall lsl8
 027E 28B2              in R2,0x18
 0280 202A              or R2,R16
 0282 28BA              out 0x18,R2
 0284                   .dbline 200
 0284 DA9A              sbi 0x1b,2
 0286                   .dbline 202
 0286 DA98              cbi 0x1b,2
 0288                   .dbline 203
 0288           L47:
 0288                   .dbline -2
 0288                   .dbline 204
 0288           ;  else
 0288           ;  {
 0288           ;   PORTB|=BIT(number);    //输出数据
 0288           ;   PORTA|=BIT(LEDLK);     //更新数据
 0288           ;   //Delayms(5);                          //调整时序
 0288           ;   PORTA&=~BIT(LEDLK);    //锁存数据
 0288           ;  }
 0288           ; }
 0288           L45:
 0288 0E940000          xcall pop_gset2
 028C                   .dbline 0 ; func end
 028C 0895              ret
 028E                   .dbsym l i 1 c
 028E                   .dbsym r light 22 c
 028E                   .dbsym r number 20 c
 028E                   .dbend
 028E                   .dbfunc e All_led _All_led fV
 028E           ;          light -> R16
                        .even
 028E           _All_led::
 028E                   .dbline -1
 028E                   .dbline 212
 028E           ; /*******************************************
 028E           ; 函数名称: All_led
 028E           ; 功    能: 点亮或者熄灭全部LED
 028E           ; 参    数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
 028E           ; 返回值  : 无
 028E           ; /********************************************/
 028E           ; void All_led(uchar light)
 028E           ; {
 028E                   .dbline 213
 028E           ;  if(light)
 028E 0023              tst R16
 0290 31F0              breq L49
 0292                   .dbline 214
 0292           ;  {
 0292                   .dbline 215
 0292           ;   PORTB&=~ALLLED;
 0292 88B3              in R24,0x18
 0294 8070              andi R24,0
 0296 88BB              out 0x18,R24
 0298                   .dbline 216
 0298           ;   PORTA|=BIT(LEDLK);
 0298 DA9A              sbi 0x1b,2
 029A                   .dbline 218
 029A           ;   //Delayms(5);
 029A           ;   PORTA&=~BIT(LEDLK);
 029A DA98              cbi 0x1b,2
 029C                   .dbline 219
 029C           ;  }
 029C 05C0              xjmp L50
 029E           L49:
 029E                   .dbline 221
 029E                   .dbline 222
 029E 88B3              in R24,0x18
 02A0 8F6F              ori R24,255
 02A2 88BB              out 0x18,R24
 02A4                   .dbline 223
 02A4 DA9A              sbi 0x1b,2
 02A6                   .dbline 225
 02A6 DA98              cbi 0x1b,2
 02A8                   .dbline 226
 02A8           L50:
 02A8                   .dbline -2
 02A8                   .dbline 227
 02A8           ;  else
 02A8           ;  {
 02A8           ;   PORTB|=ALLLED;
 02A8           ;   PORTA|=BIT(LEDLK);
 02A8           ;   //Delayms(5);
 02A8           ;   PORTA&=~BIT(LEDLK);
 02A8           ;  }
 02A8           ; }
 02A8           L48:
 02A8                   .dbline 0 ; func end
 02A8 0895              ret
 02AA                   .dbsym r light 16 c
 02AA                   .dbend

⌨️ 快捷键说明

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