📄 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 C:\icc\project\cs5532\Display.c
000D .dbsym s DisTab _DisTab A[13:13]c
.area text(rom, con, rel)
0000 .dbfile C:\icc\project\cs5532\Display.c
0000 .dbfunc s Display _Display fI
; Disi -> R20
; DisTem -> R22
; DisNum -> R10
.even
0000 _Display::
0000 00D0 rcall push_gset3
0002 A02E mov R10,R16
0004 .dbline -1
0004 .dbline 29
; #include<io8515.h>
; //***************************************************
; //显示子程序,用于显示一个数字,小数点在最高位。
; //传递一个0-9的数字
; //DisPort——显示的端口。DisPortD——端口方向。
; //DisTab[10]——显示码(const unsigned char)
; //74ls4093三个输入口 str,dada,clock
; //and3=str+data+clock.
; //**************************************************
; //P0 data
; //P1 clock
; //P2 TRO
; //STR-PB0 CLOCK-PB1 DATA-PB2
; #define DisPort PORTB
; #define DisDdr DDRB
; #define str 0b00000100
; #define data 0b00000001
; #define clock 0b00000010
; #define and3 0b00000111
;
; //===============================================================
; unsigned char num[4];
; //最后三条为"E""-""全灭"
; const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
; 0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
;
; //===============================================================
; void Display(unsigned char DisNum)
; { unsigned char DisTem;
0004 .dbline 30
; unsigned char Disi=8;
0004 48E0 ldi R20,8
0006 .dbline 31
; DisTem= DisNum;
0006 6A2D mov R22,R10
0008 .dbline 32
; DisTem=DisTem&0b01111111;
0008 6F77 andi R22,127
000A .dbline 33
; DisTem=DisTab[DisTem];
000A 80E0 ldi R24,<_DisTab
000C 90E0 ldi R25,>_DisTab
000E 262E mov R2,R22
0010 3324 clr R3
0012 280E add R2,R24
0014 391E adc R3,R25
0016 E22D mov R30,R2
0018 F32D mov R31,R3
001A C895 lpm
001C 602D mov R22,R0
001E .dbline 34
; DisNum=DisNum&0b10000000;
001E 8A2D mov R24,R10
0020 8078 andi R24,128
0022 A82E mov R10,R24
0024 .dbline 35
; DisNum=DisNum|DisTem;
0024 A62A or R10,R22
0026 .dbline 36
; DisNum=~DisNum;
0026 A094 com R10
0028 .dbline 37
; DisDdr=and3;
0028 87E0 ldi R24,7
002A 87BB out 0x17,R24
002C .dbline 38
; DisPort=DisPort|str;//set str=1
002C C29A sbi 0x18,2
002E 10C0 rjmp L3
0030 L2:
0030 .dbline 40
; while(Disi)
; {DisTem=DisNum;
0030 .dbline 40
0030 6A2D mov R22,R10
0032 .dbline 41
; DisPort=DisPort&~clock;//clock=0
0032 C198 cbi 0x18,1
0034 .dbline 42
; DisTem=DisTem>>(Disi-1);
0034 142F mov R17,R20
0036 1150 subi R17,1
0038 062F mov R16,R22
003A 00D0 rcall lsr8
003C 602F mov R22,R16
003E .dbline 43
; DisTem=DisTem&0b00000001;
003E 6170 andi R22,1
0040 .dbline 44
; if(DisTem==1)
0040 6130 cpi R22,1
0042 19F4 brne L5
0044 .dbline 45
; {DisPort=DisPort|data;
0044 .dbline 45
0044 C09A sbi 0x18,0
0046 .dbline 46
; DisPort=DisPort|clock;}
0046 C19A sbi 0x18,1
0048 .dbline 46
0048 02C0 rjmp L6
004A L5:
004A .dbline 48
; else
; {DisPort=DisPort&~data;
004A .dbline 48
004A C098 cbi 0x18,0
004C .dbline 49
; DisPort=DisPort|clock;}
004C C19A sbi 0x18,1
004E .dbline 49
004E L6:
004E .dbline 50
004E 4A95 dec R20
0050 .dbline 51
0050 L3:
0050 .dbline 39
0050 4423 tst R20
0052 71F7 brne L2
0054 .dbline -2
0054 .dbline 52
; Disi--;
; }
; }
0054 L1:
0054 00D0 rcall pop_gset3
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r Disi 20 c
0058 .dbsym r DisTem 22 c
0058 .dbsym r DisNum 10 c
.area lit(rom, con, rel)
000D L8:
000D 0000 .byte 0,0
000F 0000 .byte 0,0
.area text(rom, con, rel)
0058 .dbfile C:\icc\project\cs5532\Display.c
0058 .dbfunc s Cacu_Display _Cacu_Display fI
; num -> y+0
; Cacu_num -> R20,R21
; tempCaL -> R22
; tempCaH -> R20
.even
0058 _Cacu_Display::
0058 00D0 rcall push_gset2
005A 622F mov R22,R18
005C 402F mov R20,R16
005E 2497 sbiw R28,4
0060 .dbline -1
0060 .dbline 57
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的数
; void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
; {
0060 .dbline 60
;
; unsigned int Cacu_num;
; unsigned char num[4]={0,0,0,0};
0060 80E0 ldi R24,<L8
0062 90E0 ldi R25,>L8
0064 EC2F mov R30,R28
0066 FD2F mov R31,R29
0068 04E0 ldi R16,4
006A 10E0 ldi R17,0
006C FA93 st -y,R31
006E EA93 st -y,R30
0070 9A93 st -y,R25
0072 8A93 st -y,R24
0074 00D0 rcall asgncblk
0076 .dbline 61
; Cacu_num=tempCaH*256+tempCaL;
0076 262E mov R2,R22
0078 3324 clr R3
007A 442E mov R4,R20
007C 5524 clr R5
007E 542C mov R5,R4
0080 4424 clr R4
0082 420C add R4,R2
0084 531C adc R5,R3
0086 442D mov R20,R4
0088 552D mov R21,R5
008A 05C0 rjmp L10
008C L9:
008C .dbline 63
008C .dbline 64
008C 4051 subi R20,16
008E 5742 sbci R21,39
0090 .dbline 65
0090 8B81 ldd R24,y+3
0092 8F5F subi R24,255 ; addi 1
0094 8B83 std y+3,R24
0096 .dbline 66
0096 L10:
0096 .dbline 62
; while(Cacu_num>=10000)
0096 4031 cpi R20,16
0098 E7E2 ldi R30,39
009A 5E07 cpc R21,R30
009C B8F7 brsh L9
009E 05C0 rjmp L15
00A0 L14:
00A0 .dbline 68
00A0 .dbline 69
00A0 485E subi R20,232
00A2 5340 sbci R21,3
00A4 .dbline 70
00A4 8A81 ldd R24,y+2
00A6 8F5F subi R24,255 ; addi 1
00A8 8A83 std y+2,R24
00AA .dbline 71
00AA L15:
00AA .dbline 67
; {
; Cacu_num=Cacu_num-10000;
; num[3]=num[3]+1;
; }
; while(Cacu_num>=1000)
00AA 483E cpi R20,232
00AC E3E0 ldi R30,3
00AE 5E07 cpc R21,R30
00B0 B8F7 brsh L14
00B2 05C0 rjmp L20
00B4 L19:
00B4 .dbline 73
00B4 .dbline 74
00B4 4456 subi R20,100
00B6 5040 sbci R21,0
00B8 .dbline 75
00B8 8981 ldd R24,y+1
00BA 8F5F subi R24,255 ; addi 1
00BC 8983 std y+1,R24
00BE .dbline 76
00BE L20:
00BE .dbline 72
; {
; Cacu_num=Cacu_num-1000;
; num[2]=num[2]+1;
; }
; while(Cacu_num>=100)
00BE 4436 cpi R20,100
00C0 E0E0 ldi R30,0
00C2 5E07 cpc R21,R30
00C4 B8F7 brsh L19
00C6 05C0 rjmp L25
00C8 L24:
00C8 .dbline 78
00C8 .dbline 79
00C8 4A50 subi R20,10
00CA 5040 sbci R21,0
00CC .dbline 80
00CC 8881 ldd R24,y+0
00CE 8F5F subi R24,255 ; addi 1
00D0 8883 std y+0,R24
00D2 .dbline 81
00D2 L25:
00D2 .dbline 77
; {
; Cacu_num=Cacu_num-100;
; num[1]=num[1]+1;
; }
; while(Cacu_num>=10)
00D2 4A30 cpi R20,10
00D4 E0E0 ldi R30,0
00D6 5E07 cpc R21,R30
00D8 B8F7 brsh L24
00DA .dbline 83
; {
; Cacu_num=Cacu_num-10;
; num[0]=num[0]+1;
; }
;
; Display(12);
00DA 0CE0 ldi R16,12
00DC 91DF rcall _Display
00DE .dbline 84
; Display(12);
00DE 0CE0 ldi R16,12
00E0 8FDF rcall _Display
00E2 .dbline 85
; Display(12);
00E2 0CE0 ldi R16,12
00E4 8DDF rcall _Display
00E6 .dbline 86
; Display(Cacu_num);
00E6 042F mov R16,R20
00E8 8BDF rcall _Display
00EA .dbline 87
; Display(num[0]);
00EA 0881 ldd R16,y+0
00EC 89DF rcall _Display
00EE .dbline 88
; Display(num[1]);
00EE 0981 ldd R16,y+1
00F0 87DF rcall _Display
00F2 .dbline 89
; Display(num[2]);
00F2 0A81 ldd R16,y+2
00F4 85DF rcall _Display
00F6 .dbline 90
; Display(num[3]);
00F6 0B81 ldd R16,y+3
00F8 83DF rcall _Display
00FA .dbline 91
; Display(12);
00FA 0CE0 ldi R16,12
00FC 81DF rcall _Display
00FE .dbline 92
; Display(12);
00FE 0CE0 ldi R16,12
0100 7FDF rcall _Display
0102 .dbline 93
; Display(12);
0102 0CE0 ldi R16,12
0104 7DDF rcall _Display
0106 .dbline 94
; Display(12);
0106 0CE0 ldi R16,12
0108 7BDF rcall _Display
010A .dbline -2
010A .dbline 96
;
; }
010A L7:
010A 2496 adiw R28,4
010C 00D0 rcall pop_gset2
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym l num 0 A[4:4]c
0110 .dbsym r Cacu_num 20 i
0110 .dbsym r tempCaL 22 c
0110 .dbsym r tempCaH 20 c
.area bss(ram, con, rel)
0000 .dbfile C:\icc\project\cs5532\Display.c
0000 _num::
0000 .blkb 4
0004 .dbsym s num _num A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -