📄 salve.lis
字号:
.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 + -