📄 display.s
字号:
.module Display.c
.area text(rom, con, rel)
.dbfile F:\IccAvr_Pro\Display.c
.dbfunc e display _display fV
; DispContent -> R20,R21
; i -> R22
; gate -> R10
; content -> R12,R13
.even
_display::
xcall push_gset5
mov R10,R18
movw R12,R16
.dbline -1
.dbline 7
; #include <iom16v.h>
; #include <macros.h>
;
; #include "Display.h"
;
; void display(unsigned int content,unsigned char gate)
; {
.dbline 8
; unsigned int DispContent=0;
clr R20
clr R21
.dbline 10
; unsigned char i;
; for(i=0;i<4;i++) //gain the BCD code of the number
clr R22
xjmp L5
L2:
.dbline 11
.dbline 12
movw R2,R20
lsr R3
ror R2
lsr R3
ror R2
lsr R3
ror R2
lsr R3
ror R2
movw R20,R2
.dbline 13
ldi R18,10
ldi R19,0
movw R16,R12
xcall mod16u
ldi R18,12
ldi R19,0
xcall lsl16
or R20,R16
or R21,R17
.dbline 14
ldi R18,10
ldi R19,0
movw R16,R12
xcall div16u
movw R12,R16
.dbline 15
L3:
.dbline 10
inc R22
L5:
.dbline 10
cpi R22,4
brlo L2
.dbline 17
; {
; DispContent>>=4;
; DispContent|=(content%10)<<12;
; content=content/10;
; }
;
; switch(gate)
mov R14,R10
clr R15
tst R14
brne X0
tst R15
breq L9
X0:
movw R24,R14
cpi R24,1
ldi R30,0
cpc R25,R30
breq L10
cpi R24,2
ldi R30,0
cpc R25,R30
breq L11
cpi R24,3
ldi R30,0
cpc R25,R30
breq L12
xjmp L6
X1:
.dbline 18
; {
L9:
.dbline 19
; case 0: PORTB&=~BIT(Gate0);break; //Open the gate
cbi 0x18,4
.dbline 19
xjmp L7
L10:
.dbline 20
; case 1: PORTB&=~BIT(Gate1);break;
cbi 0x18,5
.dbline 20
xjmp L7
L11:
.dbline 21
; case 2: PORTB&=~BIT(Gate2);break;
cbi 0x18,6
.dbline 21
xjmp L7
L12:
.dbline 22
; case 3: PORTB&=~BIT(Gate3);break;
cbi 0x18,7
.dbline 22
xjmp L7
L6:
.dbline 23
; default: PORTB|=0xF0;break;
in R24,0x18
ori R24,240
out 0x18,R24
.dbline 23
L7:
.dbline 25
; }
; for (i=0;i<=15;i++) //Send the number by serial
clr R22
xjmp L16
L13:
.dbline 26
; {
.dbline 27
; PORTC|=BIT(DispClk);
sbi 0x15,6
.dbline 28
; NOP();
nop
.dbline 29
; NOP();
nop
.dbline 30
; if(DispContent&0x01)
sbrs R20,0
rjmp L17
.dbline 31
; PORTC|=BIT(DispData);
sbi 0x15,7
xjmp L18
L17:
.dbline 33
; else
; PORTC&=~BIT(DispData);
cbi 0x15,7
L18:
.dbline 34
nop
.dbline 35
nop
.dbline 36
nop
.dbline 37
nop
.dbline 38
clc
.dbline 39
lsr R21
ror R20
.dbline 40
cbi 0x15,6
.dbline 41
L14:
.dbline 25
inc R22
L16:
.dbline 25
ldi R24,15
cp R24,R22
brsh L13
.dbline 42
; NOP();
; NOP();
; NOP();
; NOP();
; asm("clc");
; DispContent>>=1;
; PORTC&=~BIT(DispClk);
; }
; PORTB|=0xF0;
in R24,0x18
ori R24,240
out 0x18,R24
.dbline -2
.dbline 43
; }
L1:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r DispContent 20 i
.dbsym r i 22 c
.dbsym r gate 10 c
.dbsym r content 12 i
.dbend
.dbfunc e disp_init _disp_init fV
.even
_disp_init::
.dbline -1
.dbline 46
;
; void disp_init(void) //Set all control signal high
; {
.dbline 47
; DDRB|=0xFF;
in R24,0x17
ori R24,255
out 0x17,R24
.dbline 48
; PORTB|=0xF0;
in R24,0x18
ori R24,240
out 0x18,R24
.dbline 49
; PORTC|=BIT(DispData)|BIT(DispClk);
in R24,0x15
ori R24,192
out 0x15,R24
.dbline 50
; DDRC|=BIT(DispData)|BIT(DispClk);
in R24,0x14
ori R24,192
out 0x14,R24
.dbline -2
.dbline 51
; }
L19:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -