📄 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\LCD\Display.c
000D .dbsym s DisTab _DisTab A[13:13]c
.area text(rom, con, rel)
0000 .dbfile C:\icc\project\LCD\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 00 .byte 0
.area text(rom, con, rel)
0058 .dbfile C:\icc\project\LCD\Display.c
0058 .dbfunc s Cacu_Display _Cacu_Display fI
; num -> y+0
; temp -> R20
.even
0058 _Cacu_Display::
0058 00D0 rcall push_gset1
005A 402F mov R20,R16
005C 2397 sbiw R28,3
005E .dbline -1
005E .dbline 57
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的四位数
; void Cacu_Display(unsigned char temp)
; { unsigned char num[3]={0,0,0};
005E .dbline 57
005E 80E0 ldi R24,<L8
0060 90E0 ldi R25,>L8
0062 EC2F mov R30,R28
0064 FD2F mov R31,R29
0066 03E0 ldi R16,3
0068 10E0 ldi R17,0
006A FA93 st -y,R31
006C EA93 st -y,R30
006E 9A93 st -y,R25
0070 8A93 st -y,R24
0072 00D0 rcall asgncblk
0074 04C0 rjmp L10
0076 L9:
0076 .dbline 60
0076 .dbline 61
0076 485E subi R20,232
0078 .dbline 62
0078 8A81 ldd R24,y+2
007A 8F5F subi R24,255 ; addi 1
007C 8A83 std y+2,R24
007E .dbline 63
007E L10:
007E .dbline 59
;
; while(temp>=1000)
007E 483E cpi R20,232
0080 D0F7 brsh L9
0082 04C0 rjmp L15
0084 L14:
0084 .dbline 65
0084 .dbline 66
0084 4456 subi R20,100
0086 .dbline 67
0086 8981 ldd R24,y+1
0088 8F5F subi R24,255 ; addi 1
008A 8983 std y+1,R24
008C .dbline 68
008C L15:
008C .dbline 64
; {
; temp=temp-1000;
; num[2]=num[2]+1;
; }
; while(temp>=100)
008C 4436 cpi R20,100
008E D0F7 brsh L14
0090 04C0 rjmp L20
0092 L19:
0092 .dbline 70
0092 .dbline 71
0092 4A50 subi R20,10
0094 .dbline 72
0094 8881 ldd R24,y+0
0096 8F5F subi R24,255 ; addi 1
0098 8883 std y+0,R24
009A .dbline 73
009A L20:
009A .dbline 69
; {
; temp=temp-100;
; num[1]=num[1]+1;
; }
; while(temp>=10)
009A 4A30 cpi R20,10
009C D0F7 brsh L19
009E .dbline 74
; {
; temp=temp-10;
; num[0]=num[0]+1;
; }
; Display(temp);
009E 042F mov R16,R20
00A0 AFDF rcall _Display
00A2 .dbline 75
; Display(num[0]);
00A2 0881 ldd R16,y+0
00A4 ADDF rcall _Display
00A6 .dbline 76
; Display(num[1]);
00A6 0981 ldd R16,y+1
00A8 ABDF rcall _Display
00AA .dbline 77
; Display(num[2]);
00AA 0A81 ldd R16,y+2
00AC A9DF rcall _Display
00AE .dbline -2
00AE .dbline 80
;
;
; }
00AE L7:
00AE 2396 adiw R28,3
00B0 00D0 rcall pop_gset1
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym l num 0 A[3:3]c
00B4 .dbsym r temp 20 c
.area bss(ram, con, rel)
0000 .dbfile C:\icc\project\LCD\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 + -