📄 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 F:\应用\拷贝应用\icc-avr-lcd\Display.c
.dbsym e DisTab _DisTab A[13:13]kc
.area text(rom, con, rel)
.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
.dbfunc e Display _Display fV
; 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 R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
.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
L1:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Disi 20 c
.dbsym r DisTem 22 c
.dbsym r DisNum 10 c
.dbend
.area lit(rom, con, rel)
L8:
.byte 0,0
.byte 0
.area text(rom, con, rel)
.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
.dbfunc e Cacu_Display _Cacu_Display fV
; num -> y+0
; temp -> R20
.even
_Cacu_Display::
rcall push_gset1
mov R20,R16
sbiw R28,3
.dbline -1
.dbline 57
; Disi--;
; }
; }
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的四位数
; void Cacu_Display(unsigned char temp)
; { unsigned char num[3]={0,0,0};
.dbline 57
ldi R24,<L8
ldi R25,>L8
movw R30,R28
ldi R16,3
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
rjmp L10
L9:
.dbline 60
.dbline 61
subi R20,232
.dbline 62
ldd R24,y+2
subi R24,255 ; addi 1
std y+2,R24
.dbline 63
L10:
.dbline 59
;
; while(temp>=1000)
cpi R20,232
brge L9
rjmp L15
L14:
.dbline 65
.dbline 66
subi R20,100
.dbline 67
ldd R24,y+1
subi R24,255 ; addi 1
std y+1,R24
.dbline 68
L15:
.dbline 64
; {
; temp=temp-1000;
; num[2]=num[2]+1;
; }
; while(temp>=100)
cpi R20,100
brsh L14
rjmp L20
L19:
.dbline 70
.dbline 71
subi R20,10
.dbline 72
ldd R24,y+0
subi R24,255 ; addi 1
std y+0,R24
.dbline 73
L20:
.dbline 69
; {
; temp=temp-100;
; num[1]=num[1]+1;
; }
; while(temp>=10)
cpi R20,10
brsh L19
.dbline 74
; {
; temp=temp-10;
; num[0]=num[0]+1;
; }
; Display(temp);
mov R16,R20
rcall _Display
.dbline 75
; Display(num[0]);
ldd R16,y+0
rcall _Display
.dbline 76
; Display(num[1]);
ldd R16,y+1
rcall _Display
.dbline 77
; Display(num[2]);
ldd R16,y+2
rcall _Display
.dbline -2
L7:
adiw R28,3
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l num 0 A[3:3]c
.dbsym r temp 20 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
_num::
.blkb 4
.dbsym e num _num A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -