📄 display.lis
字号:
.module Display.c
.area lit(rom, con, rel)
0000 _DisTab::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 7940 .byte 'y,64
000C 00 .byte 0
000D .dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
000D .dbsym e DisTab _DisTab A[13:13]kc
.area text(rom, con, rel)
0000 .dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
0000 .dbfunc e Display _Display fV
0000 ; Disi -> R20
0000 ; DisTem -> R22
0000 ; DisNum -> R10
.even
0000 _Display::
0000 00D0 rcall push_gset3
0002 A02E mov R10,R16
0004 .dbline -1
0004 .dbline 29
0004 ; #include<io8515.h>
0004 ; //***************************************************
0004 ; //显示子程序,用于显示一个数字,小数点在最高位。
0004 ; //传递一个0-9的数字
0004 ; //DisPort——显示的端口。DisPortD——端口方向。
0004 ; //DisTab[10]——显示码(const unsigned char)
0004 ; //74ls4093三个输入口 str,dada,clock
0004 ; //and3=str+data+clock.
0004 ; //**************************************************
0004 ; //P0 data
0004 ; //P1 clock
0004 ; //P2 TRO
0004 ; //STR-PB0 CLOCK-PB1 DATA-PB2
0004 ; #define DisPort PORTB
0004 ; #define DisDdr DDRB
0004 ; #define str 0b00000100
0004 ; #define data 0b00000001
0004 ; #define clock 0b00000010
0004 ; #define and3 0b00000111
0004 ;
0004 ; //===============================================================
0004 ; unsigned char num[4];
0004 ; //最后三条为"E""-""全灭"
0004 ; const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
0004 ; 0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
0004 ;
0004 ; //===============================================================
0004 ; void Display(unsigned char DisNum)
0004 ; { unsigned char DisTem;
0004 .dbline 30
0004 ; unsigned char Disi=8;
0004 48E0 ldi R20,8
0006 .dbline 31
0006 ; DisTem= DisNum;
0006 6A2D mov R22,R10
0008 .dbline 32
0008 ; DisTem=DisTem&0b01111111;
0008 6F77 andi R22,127
000A .dbline 33
000A ; DisTem=DisTab[DisTem];
000A 80E0 ldi R24,<_DisTab
000C 90E0 ldi R25,>_DisTab
000E E62F mov R30,R22
0010 FF27 clr R31
0012 E80F add R30,R24
0014 F91F adc R31,R25
0016 6491 lpm R22,Z
0018 .dbline 34
0018 ; DisNum=DisNum&0b10000000;
0018 8A2D mov R24,R10
001A 8078 andi R24,128
001C A82E mov R10,R24
001E .dbline 35
001E ; DisNum=DisNum|DisTem;
001E A62A or R10,R22
0020 .dbline 36
0020 ; DisNum=~DisNum;
0020 A094 com R10
0022 .dbline 37
0022 ; DisDdr=and3;
0022 87E0 ldi R24,7
0024 87BB out 0x17,R24
0026 .dbline 38
0026 ; DisPort=DisPort|str;//set str=1
0026 C29A sbi 0x18,2
0028 10C0 rjmp L3
002A L2:
002A .dbline 40
002A ; while(Disi)
002A ; {DisTem=DisNum;
002A .dbline 40
002A 6A2D mov R22,R10
002C .dbline 41
002C ; DisPort=DisPort&~clock;//clock=0
002C C198 cbi 0x18,1
002E .dbline 42
002E ; DisTem=DisTem>>(Disi-1);
002E 142F mov R17,R20
0030 1150 subi R17,1
0032 062F mov R16,R22
0034 00D0 rcall lsr8
0036 602F mov R22,R16
0038 .dbline 43
0038 ; DisTem=DisTem&0b00000001;
0038 6170 andi R22,1
003A .dbline 44
003A ; if(DisTem==1)
003A 6130 cpi R22,1
003C 19F4 brne L5
003E .dbline 45
003E ; {DisPort=DisPort|data;
003E .dbline 45
003E C09A sbi 0x18,0
0040 .dbline 46
0040 ; DisPort=DisPort|clock;}
0040 C19A sbi 0x18,1
0042 .dbline 46
0042 02C0 rjmp L6
0044 L5:
0044 .dbline 48
0044 ; else
0044 ; {DisPort=DisPort&~data;
0044 .dbline 48
0044 C098 cbi 0x18,0
0046 .dbline 49
0046 ; DisPort=DisPort|clock;}
0046 C19A sbi 0x18,1
0048 .dbline 49
0048 L6:
0048 .dbline 50
0048 4A95 dec R20
004A .dbline 51
004A L3:
004A .dbline 39
004A 4423 tst R20
004C 71F7 brne L2
004E .dbline -2
004E L1:
004E 00D0 rcall pop_gset3
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r Disi 20 c
0052 .dbsym r DisTem 22 c
0052 .dbsym r DisNum 10 c
0052 .dbend
.area lit(rom, con, rel)
000D L8:
000D 0000 .byte 0,0
000F 00 .byte 0
.area text(rom, con, rel)
0052 .dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
0052 .dbfunc e Cacu_Display _Cacu_Display fV
0052 ; num -> y+0
0052 ; temp -> R20
.even
0052 _Cacu_Display::
0052 00D0 rcall push_gset1
0054 402F mov R20,R16
0056 2397 sbiw R28,3
0058 .dbline -1
0058 .dbline 57
0058 ; Disi--;
0058 ; }
0058 ; }
0058 ; //=============================================================
0058 ; //***************************************************************
0058 ; //计算显示一个不带小数点的四位数
0058 ; void Cacu_Display(unsigned char temp)
0058 ; { unsigned char num[3]={0,0,0};
0058 .dbline 57
0058 80E0 ldi R24,<L8
005A 90E0 ldi R25,>L8
005C FE01 movw R30,R28
005E 03E0 ldi R16,3
0060 10E0 ldi R17,0
0062 FA93 st -y,R31
0064 EA93 st -y,R30
0066 9A93 st -y,R25
0068 8A93 st -y,R24
006A 00D0 rcall asgncblk
006C 04C0 rjmp L10
006E L9:
006E .dbline 60
006E .dbline 61
006E 485E subi R20,232
0070 .dbline 62
0070 8A81 ldd R24,y+2
0072 8F5F subi R24,255 ; addi 1
0074 8A83 std y+2,R24
0076 .dbline 63
0076 L10:
0076 .dbline 59
0076 ;
0076 ; while(temp>=1000)
0076 483E cpi R20,232
0078 D4F7 brge L9
007A 04C0 rjmp L15
007C L14:
007C .dbline 65
007C .dbline 66
007C 4456 subi R20,100
007E .dbline 67
007E 8981 ldd R24,y+1
0080 8F5F subi R24,255 ; addi 1
0082 8983 std y+1,R24
0084 .dbline 68
0084 L15:
0084 .dbline 64
0084 ; {
0084 ; temp=temp-1000;
0084 ; num[2]=num[2]+1;
0084 ; }
0084 ; while(temp>=100)
0084 4436 cpi R20,100
0086 D0F7 brsh L14
0088 04C0 rjmp L20
008A L19:
008A .dbline 70
008A .dbline 71
008A 4A50 subi R20,10
008C .dbline 72
008C 8881 ldd R24,y+0
008E 8F5F subi R24,255 ; addi 1
0090 8883 std y+0,R24
0092 .dbline 73
0092 L20:
0092 .dbline 69
0092 ; {
0092 ; temp=temp-100;
0092 ; num[1]=num[1]+1;
0092 ; }
0092 ; while(temp>=10)
0092 4A30 cpi R20,10
0094 D0F7 brsh L19
0096 .dbline 74
0096 ; {
0096 ; temp=temp-10;
0096 ; num[0]=num[0]+1;
0096 ; }
0096 ; Display(temp);
0096 042F mov R16,R20
0098 B3DF rcall _Display
009A .dbline 75
009A ; Display(num[0]);
009A 0881 ldd R16,y+0
009C B1DF rcall _Display
009E .dbline 76
009E ; Display(num[1]);
009E 0981 ldd R16,y+1
00A0 AFDF rcall _Display
00A2 .dbline 77
00A2 ; Display(num[2]);
00A2 0A81 ldd R16,y+2
00A4 ADDF rcall _Display
00A6 .dbline -2
00A6 L7:
00A6 2396 adiw R28,3
00A8 00D0 rcall pop_gset1
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbsym l num 0 A[3:3]c
00AC .dbsym r temp 20 c
00AC .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
0000 _num::
0000 .blkb 4
0004 .dbsym e num _num A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -