📄 3dtesting.s
字号:
; if(x>127 | y>63)
ldi R24,127
cp R24,R12
brsh L45
X16:
ldi R22,1
ldi R23,0
xjmp L46
L45:
clr R22
clr R23
L46:
ldi R24,63
cp R24,R10
brsh L47
X17:
ldi R20,1
ldi R21,0
xjmp L48
L47:
clr R20
clr R21
L48:
movw R2,R22
or R2,R20
or R3,R21
tst R2
brne X18
tst R3
breq L43
X18:
.dbline 138
; return;
xjmp L42
L43:
.dbline 139
; temp1 = y / 8; /* GET VALUE OF WHICH PAGE */
mov R14,R10
lsr R14
lsr R14
lsr R14
.dbline 140
; temp2 = y % 8; /* GET VALUE OF WHICH Y-OFFSET */
ldi R17,8
mov R16,R10
xcall mod8u
mov R20,R16
.dbline 141
; a = displaybuffer[temp1][x]; /* READ NOW SEGMENT VALUE */
ldi R24,128
mul R24,R14
movw R2,R0
ldi R24,<_displaybuffer
ldi R25,>_displaybuffer
add R2,R24
adc R3,R25
mov R30,R12
clr R31
add R30,R2
adc R31,R3
ldd R10,z+0
.dbline 143
;
; if(color == 0) /* DOT ON/OFF */
ldd R0,y+10
tst R0
brne L49
X19:
.dbline 144
; a&=~(1<<temp2);
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
and R10,R2
xjmp L50
L49:
.dbline 146
; else
; a|=(1<<temp2);
ldi R16,1
mov R17,R20
xcall lsl8
or R10,R16
L50:
.dbline 148
;
; displaybuffer[temp1][x] = a; /* WRITE SEGMENT */
ldi R24,128
mul R24,R14
movw R2,R0
ldi R24,<_displaybuffer
ldi R25,>_displaybuffer
add R2,R24
adc R3,R25
mov R30,R12
clr R31
add R30,R2
adc R31,R3
std z+0,R10
.dbline -2
L42:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r temp2 20 c
.dbsym r a 10 c
.dbsym r temp1 14 c
.dbsym l color 10 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e DisplyLine _DisplyLine fV
; signy -> R14
; signx -> R12
; dy -> R22,R23
; dx -> y+3
; temp -> R20
; y -> y+2
; x -> y+1
; p -> R10,R11
; color -> y+23
; y2 -> y+21
; x2 -> y+19
; y1 -> R10
; x1 -> y+15
.even
_DisplyLine::
xcall push_arg4
xcall push_xgsetF0FC
mov R10,R18
sbiw R28,5
.dbline -1
.dbline 156
; }
;
; /***************************************
; * FUNCTION NAME: DisplyLine
; * DESCRIPTION:
; /***************************************/
; void DisplyLine(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char color)
; {
.dbline 165
; unsigned char temp;
; int p; /* p-取值判断因子 */
; unsigned char x; /* x-坐标 */
; unsigned char y; /* y-坐标 */
; int dx; /* x方向差值 */
; int dy; /* y方向差值 */
; char signx; /* x方向标识 */
; char signy; /* Y方向标识 */
; if(x1>123 | y1>63 | x2>123 | y2>63)
ldi R24,123
ldd R0,y+15
cp R24,R0
brsh L54
X20:
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L55
L54:
clr R14
clr R15
L55:
ldi R24,63
cp R24,R10
brsh L56
X21:
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L57
L56:
clr R12
clr R13
L57:
ldi R24,123
ldd R0,y+19
cp R24,R0
brsh L58
X22:
ldi R22,1
ldi R23,0
xjmp L59
L58:
clr R22
clr R23
L59:
ldi R24,63
ldd R0,y+21
cp R24,R0
brsh L60
X23:
ldi R20,1
ldi R21,0
xjmp L61
L60:
clr R20
clr R21
L61:
movw R2,R14
or R2,R12
or R3,R13
or R2,R22
or R3,R23
or R2,R20
or R3,R21
tst R2
brne X24
tst R3
breq L52
X24:
.dbline 166
; return;
xjmp L51
L52:
.dbline 167
; x = x1;
ldd R0,y+15
std y+1,R0
.dbline 168
; y = y1;
std y+2,R10
.dbline 170
; /* 1.计算X方向的参数 */
; if(x2 > x1)
ldd R2,y+15
clr R3
ldd R4,y+19
clr R5
cp R2,R4
cpc R3,R5
brge L62
X25:
.dbline 171
; {
.dbline 172
; dx = x2 - x1;
clr R3
clr R5
sub R4,R2
sbc R5,R3
std y+4,R5
std y+3,R4
.dbline 173
; signx = 1;
clr R12
inc R12
.dbline 174
; }
xjmp L63
L62:
.dbline 175
; else if(x2 < x1)
ldd R0,y+19
ldd R16,y+15
cp R0,R16
brsh L64
X26:
.dbline 176
; {
.dbline 177
; dx = x1 - x2;
mov R2,R0
clr R3
mov R4,R16
clr R5
sub R4,R2
sbc R5,R3
std y+4,R5
std y+3,R4
.dbline 178
; signx = -1;
ldi R24,255
mov R12,R24
.dbline 179
; }
xjmp L65
L64:
.dbline 181
; else
; {
.dbline 182
; dx = 0;
clr R0
clr R1
std y+4,R1
std y+3,R0
.dbline 183
; signx = 0;
clr R12
.dbline 184
; }
L65:
L63:
.dbline 186
; /* 2.计算Y方向的参数 */
; if(y2 > y1)
mov R2,R10
clr R3
ldd R4,y+21
clr R5
cp R2,R4
cpc R3,R5
brge L66
X27:
.dbline 187
; {
.dbline 188
; dy = y2 - y1;
clr R3
mov R22,R4
clr R23
sub R22,R2
sbc R23,R3
.dbline 189
; signy = 1;
clr R14
inc R14
.dbline 190
; }
xjmp L67
L66:
.dbline 191
; else if(y2 < y1)
ldd R0,y+21
cp R0,R10
brsh L68
X28:
.dbline 192
; {
.dbline 193
; dy = y1 - y2;
mov R2,R0
clr R3
mov R22,R10
clr R23
sub R22,R2
sbc R23,R3
.dbline 194
; signy = -1;
ldi R24,255
mov R14,R24
.dbline 195
; }
xjmp L69
L68:
.dbline 197
; else
; {
.dbline 198
; dy = 0;
clr R22
clr R23
.dbline 199
; signy = 0;
clr R14
.dbline 200
; }
L69:
L67:
.dbline 202
; /* 3.计算首个判断因子 */
; p = 2*dy -dx;
movw R10,R22
lsl R10
rol R11
ldd R0,y+3
ldd R1,y+4
sub R10,R0
sbc R11,R1
.dbline 204
; /* 4a.以X方向增长画图 */
; if(dx >= dy)
cp R0,R22
cpc R1,R23
brlt L70
X29:
.dbline 205
; {
.dbline 206
; for(temp=0; temp<dx; temp++)
clr R20
xjmp L75
L72:
.dbline 207
; {
.dbline 208
; WriteDot(x,y,color); /* 画点 */
ldd R0,y+23
std y+0,R0
ldd R18,y+2
ldd R16,y+1
xcall _WriteDot
.dbline 209
; if(p >= 0) /* 根据P来判断画哪一点 */
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L76
X30:
.dbline 210
; {
.dbline 211
; x = x + signx;
ldd R0,y+1
add R0,R12
std y+1,R0
.dbline 212
; y = y + signy;
ldd R0,y+2
add R0,R14
std y+2,R0
.dbline 213
; p = p + 2*(dy - dx); /* dy,dx需要定义定义成有符号的,才能得到正确的值 */
movw R2,R22
ldd R0,y+3
ldd R1,y+4
sub R2,R0
sbc R3,R1
lsl R2
rol R3
add R10,R2
adc R11,R3
.dbline 214
; }
xjmp L77
L76:
.dbline 216
; else
; {
.dbline 217
; x = x + signx;
ldd R0,y+1
add R0,R12
std y+1,R0
.dbline 218
; y = y;
.dbline 219
; p = p + 2*dy;
movw R2,R22
lsl R2
rol R3
add R10,R2
adc R11,R3
.dbline 220
; }
L77:
.dbline 221
; }
L73:
.dbline 206
inc R20
L75:
.dbline 206
mov R2,R20
clr R3
ldd R0,y+3
ldd R1,y+4
cp R2,R0
cpc R3,R1
brlt L72
X31:
.dbline 222
; }
xjmp L71
L70:
.dbline 224
; else
; {
.dbline 225
; for(temp=0; temp<dy; temp++)
clr R20
xjmp L81
L78:
.dbline 226
; {
.dbline 227
; WriteDot(x,y,color); /* 画点 */
ldd R0,y+23
std y+0,R0
ldd R18,y+2
ldd R16,y+1
xcall _WriteDot
.dbline 228
; if(p >= 0) /* 根据P来判断画哪一点 */
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L82
X32:
.dbline 229
; {
.dbline 230
; y = y + signy;
ldd R0,y+2
add R0,R14
std y+2,R0
.dbline 231
; x = x + signx;
ldd R0,y+1
add R0,R12
std y+1,R0
.dbline 232
; p = p + 2*(dx - dy);
ldd R2,y+3
ldd R3,y+4
sub R2,R22
sbc R3,R23
lsl R2
rol R3
add R10,R2
adc R11,R3
.dbline 233
; }
xjmp L83
L82:
.dbline 235
; else
; {
.dbline 236
; y = y + signy;
ldd R0,y+2
add R0,R14
std y+2,R0
.dbline 237
; x = x;
.dbline 238
; p = p + 2*dx;
ldd R2,y+3
ldd R3,y+4
lsl R2
rol R3
add R10,R2
adc R11,R3
.dbline 239
; }
L83:
.dbline 240
; }
L79:
.dbline 225
inc R20
L81:
.dbline 225
mov R2,R20
clr R3
cp R2,R22
cpc R3,R23
brlt L78
X33:
.dbline 241
; }
L71:
.dbline 242
; WriteDot(x2,y2,color); /* 画最后一个点 */
ldd R0,y+23
std y+0,R0
ldd R18,y+21
ldd R16,y+19
xcall _WriteDot
.dbline -2
L51:
.dbline 0 ; func end
adiw R28,5
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym r signy 14 c
.dbsym r signx 12 c
.dbsym r dy 22 I
.dbsym l dx 3 I
.dbsym r temp 20 c
.dbsym l y 2 c
.dbsym l x 1 c
.dbsym r p 10 I
.dbsym l color 23 c
.dbsym l y2 21 c
.dbsym l x2 19 c
.dbsym r y1 10 c
.dbsym l x1 15 c
.dbend
.dbfunc e ClrDisplyBuffer _ClrDisplyBuffer fV
; temp1 -> R16
; temp2 -> R18
.even
_ClrDisplyBuffer::
.dbline -1
.dbline 251
; //LcdDsiplayRefresh();
; }
;
; /***************************************
; * FUNCTION NAME: ClrDisplyBuffer
; * DESCRIPTION:
; /***************************************/
; void ClrDisplyBuffer(void)
; {
.dbline 253
; unsigned char temp1,temp2;
; for(temp1=0; temp1<8; temp1++)
clr R16
xjmp L88
L85:
.dbline 254
; {
.dbline 255
; for(temp2=0; temp2<128; temp2++)
clr R18
xjmp L92
L89:
.dbline 256
; {
.dbline 257
; displaybuffer[temp1][temp2] = 0x00;
ldi R24,128
mul R24,R16
movw R2,R0
ldi R24,<_displaybuffer
ldi R25,>_displaybuffer
add R2,R24
adc R3,R25
mov R30,R18
clr R31
add R30,R2
adc R31,R3
clr R2
std z+0,R2
.dbline 258
; }
L90:
.dbline 255
inc R18
L92:
.dbline 255
cpi R18,128
brlo L89
X34:
.dbline 259
; }
L86:
.dbline 253
inc R16
L88:
.dbline 253
cpi R16,8
brlo L85
X35:
.dbline -2
L84:
.dbline 0 ; func end
ret
.dbsym r temp1 16 c
.dbsym r temp2 18 c
.dbend
.dbfunc e Delayms _Delayms fV
; i -> R20,R21
; temp -> R22,R23
; time -> R16,R17
.even
_Delayms::
xcall push_xgsetF000
.dbline -1
.dbline 267
; }
;
; /***************************************
; * FUNCTION NAME: Delayms
; * DESCRIPTION:
; /***************************************/
; void Delayms(unsigned int time)
; {
.dbline 270
; unsigned int temp;
; unsigned int i;
; for(i=0;i<time;i++)
clr R20
clr R21
xjmp L97
L94:
.dbline 271
; {
.dbline 272
; for(temp=10; temp>0;temp--) /* Delay About 1ms */
ldi R22,10
ldi R23,0
xjmp L101
L98:
.dbline 273
; {
.dbline 274
; NOP;
nop
.dbline 275
; }
L99:
.dbline 272
subi R22,1
sbci R23,0
L101:
.dbline 272
cpi R22,0
cpc R22,R23
brne L98
X36:
.dbline 276
; }
L95:
.dbline 270
subi R20,255 ; offset = 1
sbci R21,255
L97:
.dbline 270
cp R20,R16
cpc R21,R17
brlo L94
X37:
.dbline -2
L93:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r i 20 i
.dbsym r temp 22 i
.dbsym r time 16 i
.dbend
.dbfunc e action _action fV
; temp1 -> R20
; temp -> y+8
.even
_action::
xcall push_xgset300C
sbiw R28,12
.dbline -1
.dbline 281
; }
;
;
; void action(void)
; {
.dbline 285
; float temp;
; unsigned char temp1;
;
; for(temp1=0; temp1<50; temp1++)
clr R20
xjmp L106
L103:
.dbline 286
; {
.dbline 287
; cube(0.0,0.0,15.0);
ldi R16,<L107
ldi R17,>L107
xcall elpm32
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
ldi R16,<L108
ldi R17,>L108
xcall elpm32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -