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

📄 keyled.lis

📁 avr单片机入门小程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module keyled.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\delay.h
 0000                   .dbfunc e delay_1ms _delay_1ms fV
 0000           ;              i -> R16,R17
                        .even
 0000           _delay_1ms::
 0000                   .dbline -1
 0000                   .dbline 7
 0000           ; /* 1MHz 下延时程序*/
 0000           ; 
 0000           ; #ifndef DELAY_H_H
 0000           ; #define DELAY_H_H
 0000           ; 
 0000           ; void delay_1ms()             //1ms 延时
 0000           ; {
 0000                   .dbline 13
 0000           ;   unsigned int i;
 0000           ;  /*
 0000           ;   for(i=1;i<140;i++)   //1MHz
 0000           ;   ;
 0000           ;   */
 0000           ;   for(i=1331;i>0;i--)   // 8MHz
 0000 03E3              ldi R16,1331
 0002 15E0              ldi R17,5
 0004 02C0              xjmp L5
 0006           L2:
 0006                   .dbline 14
 0006           ; ;
 0006           L3:
 0006                   .dbline 13
 0006 0150              subi R16,1
 0008 1040              sbci R17,0
 000A           L5:
 000A                   .dbline 13
 000A 0030              cpi R16,0
 000C 0107              cpc R16,R17
 000E D9F7              brne L2
 0010           X0:
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r i 16 i
 0012                   .dbend
 0012                   .dbfunc e delay _delay fV
 0012           ;              i -> R20,R21
 0012           ;              n -> R10,R11
                        .even
 0012           _delay::
 0012 0E940000          xcall push_xgset300C
 0016 5801              movw R10,R16
 0018                   .dbline -1
 0018                   .dbline 19
 0018           ; 
 0018           ; }
 0018           ; 
 0018           ; void delay(unsigned int n)
 0018           ; {
 0018                   .dbline 20
 0018           ;  unsigned int i=0;
 0018 4427              clr R20
 001A 5527              clr R21
 001C                   .dbline 21
 001C           ;  for(i=0;i<n;i++)
 001C 03C0              xjmp L10
 001E           L7:
 001E                   .dbline 22
 001E           ;  delay_1ms();
 001E F0DF              xcall _delay_1ms
 0020           L8:
 0020                   .dbline 21
 0020 4F5F              subi R20,255  ; offset = 1
 0022 5F4F              sbci R21,255
 0024           L10:
 0024                   .dbline 21
 0024 4A15              cp R20,R10
 0026 5B05              cpc R21,R11
 0028 D0F3              brlo L7
 002A           X1:
 002A                   .dbline -2
 002A           L6:
 002A                   .dbline 0 ; func end
 002A 0C940000          xjmp pop_xgset300C
 002E                   .dbsym r i 20 i
 002E                   .dbsym r n 10 i
 002E                   .dbend
                        .area lit(rom, con, rel)
 0000           _seg_table::
 0000 C0F9              .byte 192,249
 0002 A4B0              .byte 164,176
 0004 9992              .byte 153,146
 0006 82F8              .byte 130,248
 0008 8090              .byte 128,144
 000A 8883              .byte 136,131
 000C C6A1              .byte 198,161
 000E 868E              .byte 134,142
 0010                   .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
 0010                   .dbsym e seg_table _seg_table A[16:16]kc
                        .area vector(rom, abs)
                        .org 64
 0040 0C940401          jmp _timer0_com_isr
                        .area lit(rom, con, rel)
                        .area text(rom, con, rel)
 002E                   .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
 002E                   .dbfunc e display _display fV
 002E           ;              j -> <dead>
 002E           ;              i -> R20
 002E           ;              k -> R20
                        .even
 002E           _display::
 002E 4A93              st -y,R20
 0030                   .dbline -1
 0030                   .dbline 19
 0030           ; /*跑表和计时  
 0030           ;   8MHz   */
 0030           ; #include <iom128v.h>
 0030           ; #include <macros.h>
 0030           ; #include "delay.h"
 0030           ; unsigned char  temp;
 0030           ; unsigned char timer2;     //the num of 5ms
 0030           ; unsigned int  timer200;  // the num of  1s
 0030           ; unsigned char work_state; //to set the timer or clock,0表示计时,1表示跑表
 0030           ; unsigned char time_change; //to sign the state of change
 0030           ; unsigned char clock_start; // 跑表开始信号,0表示开始,1 表示暂停
 0030           ; unsigned char time[4]; //array of time
 0030           ; unsigned char clock[4]; //array of watch
 0030           ; const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
 0030           ;       0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
 0030           ; #pragma interrupt_handler timer0_com_isr:17  //timer0 compare interrupt
 0030           ; 
 0030           ; void display()
 0030           ; {
 0030                   .dbline 21
 0030           ;  unsigned char i,j,k;
 0030           ;  DDRA=0xff;
 0030 8FEF              ldi R24,255
 0032 8ABB              out 0x1a,R24
 0034                   .dbline 22
 0034           ;  PORTA=0xff;
 0034 8BBB              out 0x1b,R24
 0036                   .dbline 23
 0036           ;  DDRC=0xff;
 0036 84BB              out 0x14,R24
 0038                   .dbline 24
 0038           ;  PORTC=0xff;
 0038 85BB              out 0x15,R24
 003A                   .dbline 26
 003A           ;  
 003A           ;  if(work_state==0)    //计时显示
 003A 20900A00          lds R2,_work_state
 003E 2220              tst R2
 0040 09F0              breq X15
 0042 BDC0              xjmp L12
 0044           X15:
 0044           X2:
 0044                   .dbline 27
 0044           ; { 
 0044                   .dbline 28
 0044           ;  if(time_change==0x00)   // normal 
 0044 20900900          lds R2,_time_change
 0048 2220              tst R2
 004A 01F5              brne L14
 004C           X3:
 004C                   .dbline 29
 004C           ;   {for(i=0;i<4;i++)
 004C                   .dbline 29
 004C 4427              clr R20
 004E 1BC0              xjmp L19
 0050           L16:
 0050                   .dbline 30
 0050           ;    {
 0050                   .dbline 31
 0050           ;    PORTA=seg_table[time[i]];
 0050 80E0              ldi R24,<_time
 0052 90E0              ldi R25,>_time
 0054 E42F              mov R30,R20
 0056 FF27              clr R31
 0058 E80F              add R30,R24
 005A F91F              adc R31,R25
 005C E081              ldd R30,z+0
 005E FF27              clr R31
 0060 80E0              ldi R24,<_seg_table
 0062 90E0              ldi R25,>_seg_table
 0064 E80F              add R30,R24
 0066 F91F              adc R31,R25
 0068 2690              elpm R2,Z
 006A 2BBA              out 0x1b,R2
 006C                   .dbline 32
 006C           ;    PORTC=~(1<<(i+4));
 006C 142F              mov R17,R20
 006E 1C5F              subi R17,252    ; addi 4
 0070 01E0              ldi R16,1
 0072 0E940000          xcall lsl8
 0076 202E              mov R2,R16
 0078 2094              com R2
 007A 25BA              out 0x15,R2
 007C                   .dbline 33
 007C           ;    delay_1ms();
 007C C1DF              xcall _delay_1ms
 007E                   .dbline 34
 007E           ;    PORTC|=0xf0;
 007E 85B3              in R24,0x15
 0080 806F              ori R24,240
 0082 85BB              out 0x15,R24
 0084                   .dbline 35
 0084           ;    }
 0084           L17:
 0084                   .dbline 29
 0084 4395              inc R20
 0086           L19:
 0086                   .dbline 29
 0086 4430              cpi R20,4
 0088 18F3              brlo L16
 008A           X4:
 008A                   .dbline 36
 008A           ;    }
 008A 99C0              xjmp L15
 008C           L14:
 008C                   .dbline 37
 008C           ;  else if(time_change==0x01)  // change second 
 008C 80910900          lds R24,_time_change
 0090 8130              cpi R24,1
 0092 09F0              breq X16
 0094 48C0              xjmp L20
 0096           X16:
 0096           X5:
 0096                   .dbline 38
 0096           ;        {
 0096                   .dbline 39
 0096           ;           if(timer200<100)  //正常显示
 0096 80910B00          lds R24,_timer200
 009A 90910C00          lds R25,_timer200+1
 009E 8436              cpi R24,100
 00A0 E0E0              ldi R30,0
 00A2 9E07              cpc R25,R30
 00A4 00F5              brsh L22
 00A6           X6:
 00A6                   .dbline 40
 00A6           ;          {
 00A6                   .dbline 41
 00A6           ;                 for(i=0;i<4;i++)
 00A6 4427              clr R20
 00A8 1BC0              xjmp L27
 00AA           L24:
 00AA                   .dbline 42
 00AA           ;           {
 00AA                   .dbline 43
 00AA           ;             PORTA=seg_table[time[i]];
 00AA 80E0              ldi R24,<_time
 00AC 90E0              ldi R25,>_time
 00AE E42F              mov R30,R20
 00B0 FF27              clr R31
 00B2 E80F              add R30,R24
 00B4 F91F              adc R31,R25
 00B6 E081              ldd R30,z+0
 00B8 FF27              clr R31
 00BA 80E0              ldi R24,<_seg_table
 00BC 90E0              ldi R25,>_seg_table
 00BE E80F              add R30,R24
 00C0 F91F              adc R31,R25
 00C2 2690              elpm R2,Z
 00C4 2BBA              out 0x1b,R2
 00C6                   .dbline 44
 00C6           ;             PORTC=~(1<<(i+4));
 00C6 142F              mov R17,R20
 00C8 1C5F              subi R17,252    ; addi 4
 00CA 01E0              ldi R16,1
 00CC 0E940000          xcall lsl8
 00D0 202E              mov R2,R16
 00D2 2094              com R2
 00D4 25BA              out 0x15,R2
 00D6                   .dbline 45
 00D6           ;             delay_1ms();
 00D6 94DF              xcall _delay_1ms
 00D8                   .dbline 46
 00D8           ;             PORTC|=0xf0;
 00D8 85B3              in R24,0x15
 00DA 806F              ori R24,240
 00DC 85BB              out 0x15,R24
 00DE                   .dbline 47
 00DE           ;                 }
 00DE           L25:
 00DE                   .dbline 41
 00DE 4395              inc R20
 00E0           L27:
 00E0                   .dbline 41
 00E0 4430              cpi R20,4
 00E2 18F3              brlo L24
 00E4           X7:
 00E4                   .dbline 48
 00E4           ;          }
 00E4 6CC0              xjmp L21
 00E6           L22:
 00E6                   .dbline 50
 00E6           ;          else      //只显示分
 00E6           ;         {for(i=2;i<4;i++)
 00E6                   .dbline 50
 00E6 42E0              ldi R20,2
 00E8 1BC0              xjmp L31
 00EA           L28:
 00EA                   .dbline 51
 00EA           ;          {
 00EA                   .dbline 52
 00EA           ;             PORTA=seg_table[time[i]];
 00EA 80E0              ldi R24,<_time
 00EC 90E0              ldi R25,>_time
 00EE E42F              mov R30,R20
 00F0 FF27              clr R31
 00F2 E80F              add R30,R24
 00F4 F91F              adc R31,R25
 00F6 E081              ldd R30,z+0
 00F8 FF27              clr R31
 00FA 80E0              ldi R24,<_seg_table
 00FC 90E0              ldi R25,>_seg_table
 00FE E80F              add R30,R24
 0100 F91F              adc R31,R25
 0102 2690              elpm R2,Z
 0104 2BBA              out 0x1b,R2
 0106                   .dbline 53
 0106           ;             PORTC=~(1<<(i+4));
 0106 142F              mov R17,R20
 0108 1C5F              subi R17,252    ; addi 4
 010A 01E0              ldi R16,1
 010C 0E940000          xcall lsl8
 0110 202E              mov R2,R16
 0112 2094              com R2
 0114 25BA              out 0x15,R2
 0116                   .dbline 54
 0116           ;             delay_1ms();
 0116 74DF              xcall _delay_1ms
 0118                   .dbline 55
 0118           ;             PORTC|=0xc0;
 0118 85B3              in R24,0x15
 011A 806C              ori R24,192
 011C 85BB              out 0x15,R24
 011E                   .dbline 56
 011E           ;                 }
 011E           L29:
 011E                   .dbline 50
 011E 4395              inc R20
 0120           L31:
 0120                   .dbline 50
 0120 4430              cpi R20,4
 0122 18F3              brlo L28
 0124           X8:
 0124                   .dbline 57
 0124           ;                 }
 0124                   .dbline 58
 0124           ;        }
 0124 4CC0              xjmp L21
 0126           L20:
 0126                   .dbline 59
 0126           ;         else if(time_change==0x02) //正常显示
 0126 80910900          lds R24,_time_change
 012A 8230              cpi R24,2
 012C 09F0              breq X17
 012E 47C0              xjmp L32
 0130           X17:
 0130           X9:
 0130                   .dbline 60
 0130           ;          {  if(timer200<100)
 0130                   .dbline 60
 0130 80910B00          lds R24,_timer200
 0134 90910C00          lds R25,_timer200+1
 0138 8436              cpi R24,100
 013A E0E0              ldi R30,0
 013C 9E07              cpc R25,R30
 013E 00F5              brsh L34
 0140           X10:
 0140                   .dbline 61
 0140           ;            {
 0140                   .dbline 62
 0140           ;                { for(i=0;i<4;i++)
 0140                   .dbline 62
 0140 4427              clr R20
 0142 1BC0              xjmp L39

⌨️ 快捷键说明

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