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

📄 salve.lis

📁 用两片AVR(ATmega16)单片机
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module salve.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.c
 0000                   .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\display.c
 0000                   .dbfunc e SEND _SEND fV
 0000           ;              i -> R10,R11
 0000           ;              x -> y+0
 0000           ;              j -> R14
 0000           ;            ads -> R12
 0000           ;            dat -> R18
 0000           ;            add -> y+7
                        .even
 0000           _SEND::
 0000 0E940000          xcall push_arg4
 0004 0E940000          xcall push_xgset00FC
 0008 2197              sbiw R28,1
 000A                   .dbline -1
 000A                   .dbline 5
 000A           ; #include "display.h"
 000A           ; 
 000A           ; //===================MAX7219的核心函数,接收单片机的数据===================== 
 000A           ; void SEND(unsigned char add,unsigned char dat)//发送2个字节的子函数,第一个字节为地址,第二个字节为操作数  
 000A           ; {  
 000A                   .dbline 8
 000A           ; unsigned char ads,j,x;  
 000A           ; unsigned int i;  
 000A           ; i=0;  
 000A AA24              clr R10
 000C BB24              clr R11
 000E                   .dbline 9
 000E           ; MAX7219_LOAD_0;//load=0  
 000E C198              cbi 0x18,1
 0010 1EC0              xjmp L3
 0012           L2:
 0012                   .dbline 11
 0012           ;    while(i<16)  
 0012           ;    {
 0012                   .dbline 13
 0012           ; //   if(add==1||add==5) dat=dat|0x80; //小数点问题解决
 0012           ;    if (i<8){ads=add;}   
 0012 C501              movw R24,R10
 0014 8830              cpi R24,8
 0016 E0E0              ldi R30,0
 0018 9E07              cpc R25,R30
 001A 10F4              brsh L5
 001C           X0:
 001C                   .dbline 13
 001C                   .dbline 13
 001C CF80              ldd R12,y+7
 001E                   .dbline 13
 001E 01C0              xjmp L6
 0020           L5:
 0020                   .dbline 14
 0020           ;    else {ads=dat;}   
 0020                   .dbline 14
 0020 C22E              mov R12,R18
 0022                   .dbline 14
 0022           L6:
 0022                   .dbline 15
 0022           ;       for(j=8;j>=1;j--)  
 0022 88E0              ldi R24,8
 0024 E82E              mov R14,R24
 0026 0DC0              xjmp L10
 0028           L7:
 0028                   .dbline 16
 0028           ;       {  
 0028                   .dbline 17
 0028           ;       x=ads&0x80;  
 0028 8C2D              mov R24,R12
 002A 8078              andi R24,128
 002C 8883              std y+0,R24
 002E                   .dbline 18
 002E           ;          if (x==0){MAX7219_DIN_0;}  
 002E 082E              mov R0,R24
 0030 8823              tst R24
 0032 11F4              brne L11
 0034           X1:
 0034                   .dbline 18
 0034                   .dbline 18
 0034 C298              cbi 0x18,2
 0036                   .dbline 18
 0036 01C0              xjmp L12
 0038           L11:
 0038                   .dbline 19
 0038           ;          else {MAX7219_DIN_1;}  
 0038                   .dbline 19
 0038 C29A              sbi 0x18,2
 003A                   .dbline 19
 003A           L12:
 003A                   .dbline 20
 003A           ;             ads=ads<<1;  
 003A CC0C              lsl R12
 003C                   .dbline 21
 003C           ;       MAX7219_CLK_1;//clk=1  
 003C C09A              sbi 0x18,0
 003E                   .dbline 22
 003E           ;          MAX7219_CLK_0;//clk=0  
 003E C098              cbi 0x18,0
 0040                   .dbline 23
 0040           ;       }  
 0040           L8:
 0040                   .dbline 15
 0040 EA94              dec R14
 0042           L10:
 0042                   .dbline 15
 0042 8E2D              mov R24,R14
 0044 8130              cpi R24,1
 0046 80F7              brsh L7
 0048           X2:
 0048                   .dbline 24
 0048           ;    i=i+8;  
 0048 C501              movw R24,R10
 004A 0896              adiw R24,8
 004C 5C01              movw R10,R24
 004E                   .dbline 25
 004E           ;    }  
 004E           L3:
 004E                   .dbline 10
 004E C501              movw R24,R10
 0050 8031              cpi R24,16
 0052 E0E0              ldi R30,0
 0054 9E07              cpc R25,R30
 0056 E8F2              brlo L2
 0058           X3:
 0058                   .dbline 26
 0058           ; MAX7219_LOAD_1;//load=1  
 0058 C19A              sbi 0x18,1
 005A                   .dbline -2
 005A           L1:
 005A                   .dbline 0 ; func end
 005A 2196              adiw R28,1
 005C 0E940000          xcall pop_xgset00FC
 0060 2496              adiw R28,4
 0062 0895              ret
 0064                   .dbsym r i 10 i
 0064                   .dbsym l x 0 c
 0064                   .dbsym r j 14 c
 0064                   .dbsym r ads 12 c
 0064                   .dbsym r dat 18 c
 0064                   .dbsym l add 7 c
 0064                   .dbend
 0064                   .dbfunc e SEG_LIGHT _SEG_LIGHT fV
 0064           ;          light -> R10,R11
                        .even
 0064           _SEG_LIGHT::
 0064 AA92              st -y,R10
 0066 5801              movw R10,R16
 0068                   .dbline -1
 0068                   .dbline 32
 0068           ; }  
 0068           ; //===================================== 
 0068           ; 
 0068           ; //==============SEG亮度================ 
 0068           ; void SEG_LIGHT(unsigned light) 
 0068           ; { 
 0068                   .dbline 33
 0068           ; SEND(0x0a,light&0x0f); 
 0068 2A2D              mov R18,R10
 006A 2F70              andi R18,15
 006C 3070              andi R19,0
 006E 0AE0              ldi R16,10
 0070 C7DF              xcall _SEND
 0072                   .dbline -2
 0072           L13:
 0072                   .dbline 0 ; func end
 0072 A990              ld R10,y+
 0074 0895              ret
 0076                   .dbsym r light 10 i
 0076                   .dbend
 0076                   .dbfunc e SEG_OPEN _SEG_OPEN fV
                        .even
 0076           _SEG_OPEN::
 0076                   .dbline -1
 0076                   .dbline 39
 0076           ; } 
 0076           ; //=================================== 
 0076           ; 
 0076           ; //==============SEG开================ 
 0076           ; void SEG_OPEN(void) 
 0076           ; { 
 0076                   .dbline 40
 0076           ; SEND(0x0c,0x01); 
 0076 21E0              ldi R18,1
 0078 0CE0              ldi R16,12
 007A C2DF              xcall _SEND
 007C                   .dbline -2
 007C           L14:
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbend
 007E                   .dbfunc e SEG_CLOSE _SEG_CLOSE fV
                        .even
 007E           _SEG_CLOSE::
 007E                   .dbline -1
 007E                   .dbline 46
 007E           ; } 
 007E           ; //=================================== 
 007E           ; 
 007E           ; //==============SEG关================ 
 007E           ; void SEG_CLOSE(void) 
 007E           ; { 
 007E                   .dbline 47
 007E           ; SEND(0x0c,0x00); 
 007E 2227              clr R18
 0080 0CE0              ldi R16,12
 0082 BEDF              xcall _SEND
 0084                   .dbline -2
 0084           L15:
 0084                   .dbline 0 ; func end
 0084 0895              ret
 0086                   .dbend
 0086                   .dbfunc e SEG_CLEAR _SEG_CLEAR fV
 0086           ;           part -> R10
                        .even
 0086           _SEG_CLEAR::
 0086 AA92              st -y,R10
 0088 BA92              st -y,R11
 008A A02E              mov R10,R16
 008C                   .dbline -1
 008C                   .dbline 53
 008C           ; } 
 008C           ; //=================================== 
 008C           ; 
 008C           ; //==============SEG清屏==============
 008C           ; void SEG_CLEAR(unsigned char part) 
 008C           ; { 
 008C                   .dbline 54
 008C           ; switch(part) 
 008C BB24              clr R11
 008E AA20              tst R10
 0090 11F4              brne X4
 0092 BB20              tst R11
 0094 31F0              breq L20
 0096           X4:
 0096 C501              movw R24,R10
 0098 8130              cpi R24,1
 009A E0E0              ldi R30,0
 009C 9E07              cpc R25,R30
 009E 71F0              breq L21
 00A0           X5:
 00A0 1AC0              xjmp L17
 00A2           L20:
 00A2                   .dbline 57
 00A2           ;         { 
 00A2           ;         case 0://左 
 00A2           ;                 { 
 00A2                   .dbline 58
 00A2           ;                 SEND(0x01,0x0f);  
 00A2 2FE0              ldi R18,15
 00A4 01E0              ldi R16,1
 00A6 ACDF              xcall _SEND
 00A8                   .dbline 59
 00A8           ;                 SEND(0x02,0x0f);  
 00A8 2FE0              ldi R18,15
 00AA 02E0              ldi R16,2
 00AC A9DF              xcall _SEND
 00AE                   .dbline 60
 00AE           ;                 SEND(0x03,0x0f);  
 00AE 2FE0              ldi R18,15
 00B0 03E0              ldi R16,3
 00B2 A6DF              xcall _SEND
 00B4                   .dbline 61
 00B4           ;                 SEND(0x04,0x0f); 
 00B4 2FE0              ldi R18,15
 00B6 04E0              ldi R16,4
 00B8 A3DF              xcall _SEND
 00BA                   .dbline 62
 00BA           ;                 }break; 
 00BA                   .dbline 62
 00BA 25C0              xjmp L18
 00BC           L21:
 00BC                   .dbline 64
 00BC           ;         case 1://右 
 00BC           ;                 { 
 00BC                   .dbline 65
 00BC           ;                 SEND(0x05,0x0f);  
 00BC 2FE0              ldi R18,15
 00BE 05E0              ldi R16,5
 00C0 9FDF              xcall _SEND
 00C2                   .dbline 66
 00C2           ;                 SEND(0x06,0x0f);  
 00C2 2FE0              ldi R18,15
 00C4 06E0              ldi R16,6
 00C6 9CDF              xcall _SEND
 00C8                   .dbline 67
 00C8           ;                 SEND(0x07,0x0f);  
 00C8 2FE0              ldi R18,15
 00CA 07E0              ldi R16,7
 00CC 99DF              xcall _SEND
 00CE                   .dbline 68
 00CE           ;                 SEND(0x08,0x0f); 
 00CE 2FE0              ldi R18,15
 00D0 08E0              ldi R16,8
 00D2 96DF              xcall _SEND
 00D4                   .dbline 69
 00D4           ;                 }break; 
 00D4                   .dbline 69
 00D4 18C0              xjmp L18
 00D6           L17:
 00D6                   .dbline 71
 00D6           ;         default://全部 
 00D6           ;                 { 
 00D6                   .dbline 72
 00D6           ;                 SEND(0x01,0x0f);  
 00D6 2FE0              ldi R18,15
 00D8 01E0              ldi R16,1
 00DA 92DF              xcall _SEND
 00DC                   .dbline 73
 00DC           ;                 SEND(0x02,0x0f);  
 00DC 2FE0              ldi R18,15
 00DE 02E0              ldi R16,2
 00E0 8FDF              xcall _SEND
 00E2                   .dbline 74
 00E2           ;                 SEND(0x03,0x0f);  
 00E2 2FE0              ldi R18,15
 00E4 03E0              ldi R16,3
 00E6 8CDF              xcall _SEND
 00E8                   .dbline 75
 00E8           ;                 SEND(0x04,0x0f); 
 00E8 2FE0              ldi R18,15
 00EA 04E0              ldi R16,4
 00EC 89DF              xcall _SEND
 00EE                   .dbline 76
 00EE           ;                 SEND(0x05,0x0f);  
 00EE 2FE0              ldi R18,15
 00F0 05E0              ldi R16,5
 00F2 86DF              xcall _SEND
 00F4                   .dbline 77
 00F4           ;                 SEND(0x06,0x0f);  
 00F4 2FE0              ldi R18,15
 00F6 06E0              ldi R16,6
 00F8 83DF              xcall _SEND
 00FA                   .dbline 78
 00FA           ;                 SEND(0x07,0x0f);  

⌨️ 快捷键说明

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