📄 测试.s
字号:
; p+=y;//再加上y列
add R20,R10
.dbline 192
; writecomd(p) ;
mov R16,R20
xcall _writecomd
.dbline 193
; delay_ms(1);
ldi R16,1
ldi R17,0
xcall _delay_ms
.dbline -2
L30:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r p 20 c
.dbsym r y 10 c
.dbsym r x 22 c
.dbend
.dbfunc e zhiti _zhiti fV
; data -> R20,R21
.even
_zhiti::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 199
; }
; //****************************************************
; /*写入字体*/
; //**************************************************
; void zhiti(uchar *data)
; {
xjmp L41
L40:
.dbline 202
;
; while(*data!='\0')
; {
.dbline 203
; writedata(*data);
movw R30,R20
ldd R16,z+0
xcall _writedata
.dbline 204
; delay_ms(5);
ldi R16,5
ldi R17,0
xcall _delay_ms
.dbline 205
; data++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 206
; }
L41:
.dbline 201
movw R30,R20
ldd R2,z+0
tst R2
brne L40
X10:
.dbline -2
L39:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r data 20 pc
.dbend
.dbfunc e frist1 _frist1 fV
.even
_frist1::
.dbline -1
.dbline 212
; }
; //********************************************************
; /*基本指令初始化*/
; //*******************************************************
; void frist1()
; {
.dbline 213
; writecomd(0x01);//清屏显示
ldi R16,1
xcall _writecomd
.dbline 214
; writecomd(0x30);//8位并口,基本指令
ldi R16,48
xcall _writecomd
.dbline 215
; delay_us(10);
ldi R16,10
ldi R17,0
xcall _delay_us
.dbline 216
; writecomd(0x0c);//整体显示,无游标,无反百,
ldi R16,12
xcall _writecomd
.dbline 217
; delay_us(10);
ldi R16,10
ldi R17,0
xcall _delay_us
.dbline 218
; writecomd(0x02);//地址归位
ldi R16,2
xcall _writecomd
.dbline 219
; delay_us(10);
ldi R16,10
ldi R17,0
xcall _delay_us
.dbline 220
; writecomd(0x40);//设置CGRAM地址
ldi R16,64
xcall _writecomd
.dbline -2
L43:
.dbline 0 ; func end
ret
.dbend
.dbfunc e frist2 _frist2 fV
.even
_frist2::
.dbline -1
.dbline 227
;
; }
; //*****************************************************
; /*扩充指令*/
; //*****************************************************
; void frist2()
; {
.dbline 228
; writecomd(0x01);//清屏显示
ldi R16,1
xcall _writecomd
.dbline 229
; delay_us(10);
ldi R16,10
ldi R17,0
xcall _delay_us
.dbline 230
; writecomd(0x36);//8位控制,扩充指令,绘图开
ldi R16,54
xcall _writecomd
.dbline 231
; delay_ms(5);
ldi R16,5
ldi R17,0
xcall _delay_ms
.dbline -2
L44:
.dbline 0 ; func end
ret
.dbend
.dbfunc e drwa _drwa fV
; k -> R22
; temp_y -> R10
; temp_x -> y+0
; i -> R12
; j -> R20
; data -> y+11
.even
_drwa::
st -y,r17
st -y,r16
xcall push_xgsetF0FC
sbiw R28,1
.dbline -1
.dbline 237
; }
; //*****************************************************
; /*绘图程序,整页显示*/
; //*****************************************************
; void drwa(const uchar *data)
; {
.dbline 239
; uchar i,j,k,temp_x,temp_y;
; temp_x=0x80;
ldi R24,128
std y+0,R24
.dbline 240
; temp_y=0x80;
mov R10,R24
.dbline 241
; for(i=0;i<32;i++)
clr R12
xjmp L49
L46:
.dbline 242
; {
.dbline 243
; writecomd(temp_y++);
mov R2,R10
mov R24,R2
subi R24,255 ; addi 1
mov R10,R24
mov R16,R2
xcall _writecomd
.dbline 244
; writecomd(temp_x);
ldd R16,y+0
xcall _writecomd
.dbline 245
; for(j=0;j<16;j++)
clr R20
xjmp L53
L50:
.dbline 246
; {
.dbline 247
; writedata(*data);
ldd R30,y+11
ldd R31,y+12
lpm R16,Z
xcall _writedata
.dbline 248
; data++;
ldd R24,y+11
ldd R25,y+12
adiw R24,1
std y+12,R25
std y+11,R24
.dbline 249
; }
L51:
.dbline 245
inc R20
L53:
.dbline 245
cpi R20,16
brlo L50
X11:
.dbline 250
; }
L47:
.dbline 241
inc R12
L49:
.dbline 241
mov R24,R12
cpi R24,32
brlo L46
X12:
.dbline 251
; temp_x=0x88;
ldi R24,136
std y+0,R24
.dbline 252
; temp_y=0x80;
ldi R24,128
mov R10,R24
.dbline 253
; for(i=0;i<32;i++)
clr R12
xjmp L57
L54:
.dbline 254
; {
.dbline 255
; writecomd(temp_y++);
mov R2,R10
mov R24,R2
subi R24,255 ; addi 1
mov R10,R24
mov R16,R2
xcall _writecomd
.dbline 256
; writecomd(temp_x);
ldd R16,y+0
xcall _writecomd
.dbline 257
; for(j=0;j<16;j++)
clr R20
xjmp L61
L58:
.dbline 258
; {
.dbline 259
; writedata(*data);
ldd R30,y+11
ldd R31,y+12
lpm R16,Z
xcall _writedata
.dbline 260
; data++;
ldd R24,y+11
ldd R25,y+12
adiw R24,1
std y+12,R25
std y+11,R24
.dbline 261
; }
L59:
.dbline 257
inc R20
L61:
.dbline 257
cpi R20,16
brlo L58
X13:
.dbline 262
; }
L55:
.dbline 253
inc R12
L57:
.dbline 253
mov R24,R12
cpi R24,32
brlo L54
X14:
.dbline 263
; for(k=0;k<11;k++) ////下面程序是为了实现动画的
clr R22
xjmp L65
L62:
.dbline 264
; {
.dbline 265
; temp_x=0x98;
ldi R24,152
std y+0,R24
.dbline 266
; temp_y=0x9B;
ldi R24,155
mov R10,R24
.dbline 267
; for(i=0;i<3;i++)
clr R12
xjmp L69
L66:
.dbline 268
; {
.dbline 269
; writecomd(temp_y++);
mov R14,R10
mov R24,R14
subi R24,255 ; addi 1
mov R10,R24
mov R16,R14
xcall _writecomd
.dbline 270
; writecomd(temp_x);
ldd R16,y+0
xcall _writecomd
.dbline 271
; for(j=0;j<16;j++)
clr R20
xjmp L73
L70:
.dbline 272
; {
.dbline 273
; writedata(*data);
ldd R30,y+11
ldd R31,y+12
lpm R16,Z
xcall _writedata
.dbline 274
; data++;
ldd R24,y+11
ldd R25,y+12
adiw R24,1
std y+12,R25
std y+11,R24
.dbline 275
; }
L71:
.dbline 271
inc R20
L73:
.dbline 271
cpi R20,16
brlo L70
X15:
.dbline 276
; }
L67:
.dbline 267
inc R12
L69:
.dbline 267
mov R24,R12
cpi R24,3
brlo L66
X16:
.dbline 277
; delay_ms(100);
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 278
; }
L63:
.dbline 263
inc R22
L65:
.dbline 263
cpi R22,11
brlo L62
X17:
.dbline -2
L45:
.dbline 0 ; func end
adiw R28,1
xcall pop_xgsetF0FC
adiw R28,2
ret
.dbsym r k 22 c
.dbsym r temp_y 10 c
.dbsym l temp_x 0 c
.dbsym r i 12 c
.dbsym r j 20 c
.dbsym l data 11 pkc
.dbend
.dbfunc e kaiji _kaiji fV
.even
_kaiji::
.dbline -1
.dbline 284
; }
; /*********************************************
; 开机画面
; ***********************************************/
; void kaiji(void)
; {
.dbline 285
; frist2();
xcall _frist2
.dbline 286
; drwa(data00);
ldi R16,<_data00
ldi R17,>_data00
xcall _drwa
.dbline 287
; frist1();
xcall _frist1
.dbline 288
; writecomd(0x01);//清屏显示
ldi R16,1
xcall _writecomd
.dbline 289
; wezhi(1,2);
ldi R18,2
ldi R16,1
xcall _wezhi
.dbline 290
; zhiti(data01);
ldi R16,<_data01
ldi R17,>_data01
xcall _zhiti
.dbline 291
; wezhi(2,0);
clr R18
ldi R16,2
xcall _wezhi
.dbline 292
; zhiti(data02);
ldi R16,<_data02
ldi R17,>_data02
xcall _zhiti
.dbline -2
L74:
.dbline 0 ; func end
ret
.dbend
.dbfile E:\写的程序\AVR(C)\4X4键盘.c
.dbfunc e key_scan _key_scan fc
; j -> R10
; key -> R20
; i -> R22
.even
_key_scan::
xcall push_xgsetF00C
.dbline -1
.dbline 13
; /*********************************************************************
; 注意在调用时要初始化DDRA=0xff;
; 这最好是用中断扫描键盘,在中断里先保存以前DDRA的数值;
; 扫描完后再恢复以前的DDRA的值
; ***********************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; //#include"延时子程序.c"
; #define uchar unsigned char
; #define uint unsigned int
;
; uchar key_scan()
; {
.dbline 14
; uchar i=0X7F,key,j=0;
ldi R22,127
.dbline 14
clr R10
.dbline 15
; delay_ms(1);
ldi R16,1
ldi R17,0
xcall _delay_ms
L76:
.dbline 17
; do
; {
.dbline 18
; i=(i<<1|i>>7);
mov R2,R22
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
mov R3,R22
lsl R3
or R3,R2
mov R22,R3
.dbline 19
; PORTD=i;
out 0x12,R3
.dbline 20
; DDRD=0x0F;
ldi R24,15
out 0x11,R24
.dbline 21
; key=PIND;
in R20,0x10
.dbline 22
; j=key&0xF0;
mov R24,R20
andi R24,240
mov R10,R24
.dbline 23
; }while(j==0xF0);
L77:
.dbline 23
mov R24,R10
cpi R24,240
breq L76
X18:
.dbline 24
; switch(key)
mov R22,R20
clr R23
cpi R22,183
ldi R30,0
cpc R23,R30
brne X37
xjmp L89
X37:
X19:
cpi R22,187
ldi R30,0
cpc R23,R30
brne X38
xjmp L88
X38:
X20:
cpi R22,189
ldi R30,0
cpc R23,R30
brne X39
xjmp L87
X39:
X21:
cpi R22,190
ldi R30,0
cpc R23,R30
brne X40
xjmp L86
X40:
X22:
ldi R24,190
ldi R25,0
cp R24,R22
cpc R25,R23
brlt L99
X23:
L98:
cpi R22,119
ldi R30,0
cpc R23,R30
brne X41
xjmp L85
X41:
X24:
cpi R22,123
ldi R30,0
cpc R23,R30
breq L84
X25:
cpi R22,125
ldi R30,0
cpc R23,R30
breq L83
X26:
cpi R22,126
ldi R30,0
cpc R23,R30
breq L82
X27:
xjmp L79
L99:
cpi R22,215
ldi R30,0
cpc R23,R30
brne X42
xjmp L93
X42:
X28:
cpi R22,219
ldi R30,0
cpc R23,R30
brne X43
xjmp L92
X43:
X29:
cpi R22,221
ldi R30,0
cpc R23,R30
breq L91
X30:
cpi R22,222
ldi R30,0
cpc R23,R30
breq L90
X31:
cpi R22,215
ldi R30,0
cpc R23,R30
brge X44
xjmp L79
X44:
X32:
L100:
cpi R22,231
ldi R30,0
cpc R23,R30
breq L97
X33:
cpi R22,235
ldi R30,0
cpc R23,R30
breq L96
X34:
cpi R22,237
ldi R30,0
cpc R23,R30
breq L95
X35:
cpi R22,238
ldi R30,0
cpc R23,R30
breq L94
X36:
xjmp L79
L82:
.dbline 25
; { case 0x7E:key=0;break;//0
clr R20
.dbline 25
xjmp L80
L83:
.dbline 26
; case 0x7D:key=10;break;//.
ldi R20,10
.dbline 26
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -