📄 display.s
字号:
.module Display.c
.area lit(rom, con, rel)
_DisTab::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 'y,64
.byte 0
.dbfile C:\icc\project\cs5532\Display.c
.dbsym s DisTab _DisTab A[13:13]c
.area text(rom, con, rel)
.dbfile C:\icc\project\cs5532\Display.c
.dbfunc s Display _Display fI
; Disi -> R20
; DisTem -> R22
; DisNum -> R10
.even
_Display::
rcall push_gset3
mov R10,R16
.dbline -1
.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;
.dbline 30
; unsigned char Disi=8;
ldi R20,8
.dbline 31
; DisTem= DisNum;
mov R22,R10
.dbline 32
; DisTem=DisTem&0b01111111;
andi R22,127
.dbline 33
; DisTem=DisTab[DisTem];
ldi R24,<_DisTab
ldi R25,>_DisTab
mov R2,R22
clr R3
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
mov R22,R0
.dbline 34
; DisNum=DisNum&0b10000000;
mov R24,R10
andi R24,128
mov R10,R24
.dbline 35
; DisNum=DisNum|DisTem;
or R10,R22
.dbline 36
; DisNum=~DisNum;
com R10
.dbline 37
; DisDdr=and3;
ldi R24,7
out 0x17,R24
.dbline 38
; DisPort=DisPort|str;//set str=1
sbi 0x18,2
rjmp L3
L2:
.dbline 40
; while(Disi)
; {DisTem=DisNum;
.dbline 40
mov R22,R10
.dbline 41
; DisPort=DisPort&~clock;//clock=0
cbi 0x18,1
.dbline 42
; DisTem=DisTem>>(Disi-1);
mov R17,R20
subi R17,1
mov R16,R22
rcall lsr8
mov R22,R16
.dbline 43
; DisTem=DisTem&0b00000001;
andi R22,1
.dbline 44
; if(DisTem==1)
cpi R22,1
brne L5
.dbline 45
; {DisPort=DisPort|data;
.dbline 45
sbi 0x18,0
.dbline 46
; DisPort=DisPort|clock;}
sbi 0x18,1
.dbline 46
rjmp L6
L5:
.dbline 48
; else
; {DisPort=DisPort&~data;
.dbline 48
cbi 0x18,0
.dbline 49
; DisPort=DisPort|clock;}
sbi 0x18,1
.dbline 49
L6:
.dbline 50
dec R20
.dbline 51
L3:
.dbline 39
tst R20
brne L2
.dbline -2
.dbline 52
; Disi--;
; }
; }
L1:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Disi 20 c
.dbsym r DisTem 22 c
.dbsym r DisNum 10 c
.area lit(rom, con, rel)
L8:
.byte 0,0
.byte 0,0
.area text(rom, con, rel)
.dbfile C:\icc\project\cs5532\Display.c
.dbfunc s Cacu_Display _Cacu_Display fI
; num -> y+0
; Cacu_num -> R20,R21
; tempCaL -> R22
; tempCaH -> R20
.even
_Cacu_Display::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,4
.dbline -1
.dbline 57
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的数
; void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
; {
.dbline 60
;
; unsigned int Cacu_num;
; unsigned char num[4]={0,0,0,0};
ldi R24,<L8
ldi R25,>L8
mov R30,R28
mov R31,R29
ldi R16,4
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 61
; Cacu_num=tempCaH*256+tempCaL;
mov R2,R22
clr R3
mov R4,R20
clr R5
mov R5,R4
clr R4
add R4,R2
adc R5,R3
mov R20,R4
mov R21,R5
rjmp L10
L9:
.dbline 63
.dbline 64
subi R20,16
sbci R21,39
.dbline 65
ldd R24,y+3
subi R24,255 ; addi 1
std y+3,R24
.dbline 66
L10:
.dbline 62
; while(Cacu_num>=10000)
cpi R20,16
ldi R30,39
cpc R21,R30
brsh L9
rjmp L15
L14:
.dbline 68
.dbline 69
subi R20,232
sbci R21,3
.dbline 70
ldd R24,y+2
subi R24,255 ; addi 1
std y+2,R24
.dbline 71
L15:
.dbline 67
; {
; Cacu_num=Cacu_num-10000;
; num[3]=num[3]+1;
; }
; while(Cacu_num>=1000)
cpi R20,232
ldi R30,3
cpc R21,R30
brsh L14
rjmp L20
L19:
.dbline 73
.dbline 74
subi R20,100
sbci R21,0
.dbline 75
ldd R24,y+1
subi R24,255 ; addi 1
std y+1,R24
.dbline 76
L20:
.dbline 72
; {
; Cacu_num=Cacu_num-1000;
; num[2]=num[2]+1;
; }
; while(Cacu_num>=100)
cpi R20,100
ldi R30,0
cpc R21,R30
brsh L19
rjmp L25
L24:
.dbline 78
.dbline 79
subi R20,10
sbci R21,0
.dbline 80
ldd R24,y+0
subi R24,255 ; addi 1
std y+0,R24
.dbline 81
L25:
.dbline 77
; {
; Cacu_num=Cacu_num-100;
; num[1]=num[1]+1;
; }
; while(Cacu_num>=10)
cpi R20,10
ldi R30,0
cpc R21,R30
brsh L24
.dbline 83
; {
; Cacu_num=Cacu_num-10;
; num[0]=num[0]+1;
; }
;
; Display(12);
ldi R16,12
rcall _Display
.dbline 84
; Display(12);
ldi R16,12
rcall _Display
.dbline 85
; Display(12);
ldi R16,12
rcall _Display
.dbline 86
; Display(Cacu_num);
mov R16,R20
rcall _Display
.dbline 87
; Display(num[0]);
ldd R16,y+0
rcall _Display
.dbline 88
; Display(num[1]);
ldd R16,y+1
rcall _Display
.dbline 89
; Display(num[2]);
ldd R16,y+2
rcall _Display
.dbline 90
; Display(num[3]);
ldd R16,y+3
rcall _Display
.dbline 91
; Display(12);
ldi R16,12
rcall _Display
.dbline 92
; Display(12);
ldi R16,12
rcall _Display
.dbline 93
; Display(12);
ldi R16,12
rcall _Display
.dbline 94
; Display(12);
ldi R16,12
rcall _Display
.dbline -2
.dbline 96
;
; }
L7:
adiw R28,4
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l num 0 A[4:4]c
.dbsym r Cacu_num 20 i
.dbsym r tempCaL 22 c
.dbsym r tempCaH 20 c
.area bss(ram, con, rel)
.dbfile C:\icc\project\cs5532\Display.c
_num::
.blkb 4
.dbsym s num _num A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -