📄 jhd12864.s
字号:
.dbline 261
; for(j=0;j<16;j++)
clr R14
rjmp L64
L61:
.dbline 262
; {
.dbline 263
; W_1byte(0,1,*Draw++); //
movw R30,R12
ld R2,Z+
movw R12,R30
std y+0,R2
ldi R18,1
clr R16
rcall _W_1byte
.dbline 264
; }
L62:
.dbline 261
inc R14
L64:
.dbline 261
mov R24,R14
cpi R24,16
brlo L61
X19:
.dbline 265
; }
L58:
.dbline 257
inc R10
L60:
.dbline 257
mov R24,R10
cpi R24,64
brlo L57
X20:
.dbline -2
L48:
.dbline 0 ; func end
adiw R28,1
rjmp pop_xgsetF0FC
.dbsym r temp_y 20 c
.dbsym r temp_x 22 c
.dbsym r i 10 c
.dbsym r j 14 c
.dbsym r Draw 12 pc
.dbsym r y 10 c
.dbsym r x 14 c
.dbend
.dbfunc e Set_White _Set_White fV
; clr_y -> R10
; clr_x -> R20
; white_y -> y+2
; white_x -> y+1
; i -> R22
; white_end_x -> R12
; j -> R14
; clear -> y+15
; end_x -> y+13
; y -> R14
; x -> R22
.even
_Set_White::
rcall push_xgsetF0FC
mov R14,R18
mov R22,R16
sbiw R28,3
.dbline -1
.dbline 276
;
; }
; /**************************************************/
;
;
; //设定哪一行,从那一个位置开始到那一个位置结束使用反白
; //x=液晶屏上汉字的位置(1~8);end_x=汉字结束的地址(1~8);y=1~4行
; //clear=1:清除反白;clear=0:设置反白;
; /**************************************************/
; void Set_White(uchar x,uchar y,uchar end_x,uchar clear)
; {
.dbline 278
; uchar i, j, white_x, white_y,white_end_x,clr_x,clr_y; //
; white_end_x = (end_x-x+1);
ldd R24,y+13
sub R24,R22
subi R24,255 ; addi 1
mov R12,R24
.dbline 279
; white_end_x <<= 1;
lsl R12
.dbline 280
; if(y==1)
mov R24,R14
cpi R24,1
brne L66
X21:
.dbline 281
; {
.dbline 282
; white_x = (0x80+x-1);
mov R24,R22
subi R24,128 ; addi 128
subi R24,1
std y+1,R24
.dbline 283
; white_y = 0x80;
ldi R24,128
std y+2,R24
.dbline 284
; clr_x = 0x80;
ldi R20,128
.dbline 285
; clr_y = 0x80;
mov R10,R24
.dbline 286
; }
rjmp L67
L66:
.dbline 287
; else if(y==2)
mov R24,R14
cpi R24,2
brne L68
X22:
.dbline 288
; {
.dbline 289
; white_x = (0x80+x-1);
mov R24,R22
subi R24,128 ; addi 128
subi R24,1
std y+1,R24
.dbline 290
; white_y = 0x90;
ldi R24,144
std y+2,R24
.dbline 291
; clr_x = 0x80;
ldi R20,128
.dbline 292
; clr_y = 0x90;
mov R10,R24
.dbline 293
; }
rjmp L69
L68:
.dbline 294
; else if(y==3)
mov R24,R14
cpi R24,3
brne L70
X23:
.dbline 295
; {
.dbline 296
; white_x = (0x88+x-1);
mov R24,R22
subi R24,120 ; addi 136
subi R24,1
std y+1,R24
.dbline 297
; white_y = 0x80;
ldi R24,128
std y+2,R24
.dbline 298
; clr_x = 0x88;
ldi R20,136
.dbline 299
; clr_y = 0x80;
mov R10,R24
.dbline 300
; }
rjmp L71
L70:
.dbline 301
; else if(y==4)
mov R24,R14
cpi R24,4
brne L72
X24:
.dbline 302
; {
.dbline 303
; white_x = (0x88+x-1);
mov R24,R22
subi R24,120 ; addi 136
subi R24,1
std y+1,R24
.dbline 304
; white_y = 0x90;
ldi R24,144
std y+2,R24
.dbline 305
; clr_x = 0x88;
ldi R20,136
.dbline 306
; clr_y = 0x90;
mov R10,R24
.dbline 307
; }
L72:
L71:
L69:
L67:
.dbline 308
; if(clear==0)//要反白时,先将整行的液晶全部清成不反白(此处行指y)
ldd R0,y+15
tst R0
brne L74
X25:
.dbline 309
; {
.dbline 310
; for(i=0;i<16;i++ ) //16行
clr R22
rjmp L79
L76:
.dbline 311
; {
.dbline 312
; W_1byte(0,0,clr_y++); //设置绘图区的Y地址坐标0
mov R2,R10
mov R24,R2
subi R24,255 ; addi 1
mov R10,R24
std y+0,R2
clr R18
clr R16
rcall _W_1byte
.dbline 313
; W_1byte(0,0,clr_x); //设置绘图区的X地址坐标0
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 314
; for(j=0;j<16;j++) //
clr R14
rjmp L83
L80:
.dbline 315
; {
.dbline 316
; W_1byte(0,1,0x00); //清成不反白
clr R2
std y+0,R2
ldi R18,1
clr R16
rcall _W_1byte
.dbline 317
; asm("nop");
nop
.dbline 318
; }
L81:
.dbline 314
inc R14
L83:
.dbline 314
mov R24,R14
cpi R24,16
brlo L80
X26:
.dbline 319
; }
L77:
.dbline 310
inc R22
L79:
.dbline 310
cpi R22,16
brlo L76
X27:
.dbline 320
; }
L74:
.dbline 321
; asm("nop");
nop
.dbline 322
; for(i=0;i<16;i++ ) //16行,因为是16*16汉字
clr R22
rjmp L87
L84:
.dbline 323
; {
.dbline 324
; W_1byte(0,0,white_y++); //设置绘图区的Y地址坐标0
ldd R2,y+2
mov R24,R2
subi R24,255 ; addi 1
std y+2,R24
std y+0,R2
clr R18
clr R16
rcall _W_1byte
.dbline 325
; W_1byte(0,0,white_x); //设置绘图区的X地址坐标0
ldd R0,y+1
std y+0,R0
clr R18
clr R16
rcall _W_1byte
.dbline 326
; for(j=0;j<white_end_x;j++) //
clr R14
rjmp L91
L88:
.dbline 327
; {
.dbline 328
; if(clear==1)
ldd R24,y+15
cpi R24,1
brne L92
X28:
.dbline 329
; {
.dbline 330
; W_1byte(0,1,0x00); //取消这一行的8个点的反白,液晶地址自动加1
clr R2
std y+0,R2
ldi R18,1
clr R16
rcall _W_1byte
.dbline 332
; //(此处行指一个一个液晶点所组成的行)
; }
rjmp L93
L92:
.dbline 334
; else
; {
.dbline 335
; W_1byte(0,1,0xff); //反白这一行的8个点,液晶地址自动加1
ldi R24,255
std y+0,R24
ldi R18,1
clr R16
rcall _W_1byte
.dbline 337
; //(此处行指一个一个液晶点所组成的行)
; }
L93:
.dbline 338
; asm("nop");
nop
.dbline 339
; }
L89:
.dbline 326
inc R14
L91:
.dbline 326
cp R14,R12
brlo L88
X29:
.dbline 340
; }
L85:
.dbline 322
inc R22
L87:
.dbline 322
cpi R22,16
brlo L84
X30:
.dbline -2
L65:
.dbline 0 ; func end
adiw R28,3
rjmp pop_xgsetF0FC
.dbsym r clr_y 10 c
.dbsym r clr_x 20 c
.dbsym l white_y 2 c
.dbsym l white_x 1 c
.dbsym r i 22 c
.dbsym r white_end_x 12 c
.dbsym r j 14 c
.dbsym l clear 15 c
.dbsym l end_x 13 c
.dbsym r y 14 c
.dbsym r x 22 c
.dbend
.dbfunc e LCD_Init _LCD_Init fV
; cmd -> R20
.even
_LCD_Init::
st -y,R20
sbiw R28,1
.dbline -1
.dbline 361
; }
;
;
;
;
;
;
; //上面是通用函数,与项目有关的函数在此
;
; /*
; void lcd_port_init(void)
; {
; PORTB |=((1<<CS)|(1<<SID)|(1<<SCLK)|(1<<RST)); //
; DDRB |= ((1<<CS)|(1<<SID)|(1<<SCLK)|(1<<PSB)|(1<<RST)); //PB口全部设为输出模式
; }
;
; */
;
; /******************************************************************/
; void LCD_Init(void)
; {
.dbline 365
; uchar cmd;
;
; //Clr_PSB();
; Clr_CS();
cbi 0x15,5
.dbline 366
; Clr_SID();
cbi 0x15,6
.dbline 367
; Clr_SCLK();
cbi 0x15,7
.dbline 369
;
; cmd=0x30; //功能设置 8位数据,基本指令
ldi R20,48
.dbline 370
; W_1byte(0,0,cmd);
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 371
; delay_1ms(2);
ldi R16,2
ldi R17,0
rcall _delay_1ms
.dbline 372
; cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
ldi R20,12
.dbline 373
; W_1byte(0,0,cmd); //写指令
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 374
; delay_1ms(2);
ldi R16,2
ldi R17,0
rcall _delay_1ms
.dbline 375
; cmd=0x01; //清除显示
ldi R20,1
.dbline 376
; W_1byte(0,0,cmd); //写指令
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 377
; delay_1ms(2);
ldi R16,2
ldi R17,0
rcall _delay_1ms
.dbline 378
; cmd=0x02; //地址归位
ldi R20,2
.dbline 379
; W_1byte(0,0,cmd); //写指令
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 380
; delay_1ms(2);
ldi R16,2
ldi R17,0
rcall _delay_1ms
.dbline 381
; cmd=0x80; //设置DDRAM地址
ldi R20,128
.dbline 382
; W_1byte(0,0,cmd); //写指令
std y+0,R20
clr R18
clr R16
rcall _W_1byte
.dbline 383
; delay_1ms(2); //延时
ldi R16,2
ldi R17,0
rcall _delay_1ms
.dbline -2
L94:
.dbline 0 ; func end
adiw R28,1
ld R20,y+
ret
.dbsym r cmd 20 c
.dbend
.dbfunc e variable_display _variable_display fV
; word -> R20,R21
; Y_position -> R12
; X_position -> R10
.even
_variable_display::
rcall push_xgset303C
mov R12,R18
mov R10,R16
sbiw R28,2
ldd R20,y+8
ldd R21,y+9
.dbline -1
.dbline 450
; }
;
; /*
; void main()
; {
;
; DDRC=0xFF;
; PORTC=0xFF;
; // port_init();
; LCD_Init();
; delay_1ms(50);
; LCD_Init(); //初始化两边是关键,否则液晶上电重起将不能显示
;
; while(1)
; {
;
;
; asm("nop");
; asm("nop");
; delay_1ms(500);
; Char_Set_XY(0,0,"ST7920_3_wires");
; Char_Set_XY(2,1,"反白练习");
; Char_Set_XY(0,2,"可以单字反白或不");
; Char_Set_XY(3,3,"反白");
; delay_1ms(1000);
;
; Set_Draw(); //不加此句将不能正常反白
; delay_1ms(100);
; Set_White(1,1,8,0); //第1行,第1个汉字位置到第8汉字位置反白
; Set_White(1,2,8,0); //第2行,第3个汉字位置到第6汉字位置反白
; Set_White(1,3,8,0); //第3行,第1个汉字位置到第8汉字位置反白
; Set_White(1,4,8,0); //第4行,第4个汉字位置到第5汉字位置反白
; delay_1ms(2000);
;
; Set_White(1,1,1,1); //第1行,第4个汉字位置等取消反白
; delay_1ms(1000);
; Set_White(2,2,2,1); //第2行,第5个汉字位置等取消反白
; delay_1ms(1000);
; Set_White(3,3,3,1); //第3行,第6个汉字位置等取消反白
; delay_1ms(1000);
; Set_White(4,4,4,1); //第4行,第4个汉字位置等取消反白
; delay_1ms(1000);
;
; //Set_White(1,1,1,1); //
; //Set_White(3,2,3,1); //
; //Set_White(2,3,2,1); //
; //Set_White(5,4,5,1); //
; //delay_1ms(1000);
;
; //Set_White(1,1,8,1); //第1行,第1个汉字位置到第8汉字位置取消反白
; //Set_White(1,2,8,1); //第2行,第1个汉字位置到第8汉字位置取消反白
; //Set_White(1,3,8,1); //第3行,第1个汉字位置到第8汉字位置取消反白
; //Set_White(1,4,8,1); //第4行,第1个汉字位置到第8汉字位置取消反白
; //Set_Char();
;
;
; }
;
; }
; */
;
;
; /*
; 在任一位置显示一数字变量
; */
; void variable_display(uchar X_position ,uchar Y_position , uint word )
; {
.dbline 451
; switch(word)
cpi R20,0
cpc R20,R21
brne X41
rjmp L98
X41:
X31:
cpi R20,1
ldi R30,0
cpc R21,R30
brne X42
rjmp L100
X42:
X32:
cpi R20,2
ldi R30,0
cpc R21,R30
brne X43
rjmp L102
X43:
X33:
cpi R20,3
ldi R30,0
cpc R21,R30
brne X44
rjmp L104
X44:
X34:
cpi R20,4
ldi R30,0
cpc R21,R30
brne X45
rjmp L106
X45:
X35:
cpi R20,5
ldi R30,0
cpc R21,R30
brne X46
rjmp L108
X46:
X36:
cpi R20,6
ldi R30,0
cpc R21,R30
brne X47
rjmp L110
X47:
X37:
cpi R20,7
ldi R30,0
cpc R21,R30
brne X48
rjmp L112
X48:
X38:
cpi R20,8
ldi R30,0
cpc R21,R30
brne X49
rjmp L114
X49:
X39:
cpi R20,9
ldi R30,0
cpc R21,R30
brne X50
rjmp L116
X50:
X40:
rjmp L97
L98:
.dbline 453
; {
; case 0 : Char_Set_XY(X_position,Y_position,"0");break;
ldi R24,<L99
ldi R25,>L99
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 453
rjmp L97
L100:
.dbline 454
; case 1 : Char_Set_XY(X_position,Y_position,"1");break;
ldi R24,<L101
ldi R25,>L101
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 454
rjmp L97
L102:
.dbline 455
; case 2 : Char_Set_XY(X_position,Y_position,"2");break;
ldi R24,<L103
ldi R25,>L103
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 455
rjmp L97
L104:
.dbline 456
; case 3 : Char_Set_XY(X_position,Y_position,"3");break;
ldi R24,<L105
ldi R25,>L105
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 456
rjmp L97
L106:
.dbline 457
; case 4 : Char_Set_XY(X_position,Y_position,"4");break;
ldi R24,<L107
ldi R25,>L107
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 457
rjmp L97
L108:
.dbline 458
; case 5 : Char_Set_XY(X_position,Y_position,"5");break;
ldi R24,<L109
ldi R25,>L109
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 458
rjmp L97
L110:
.dbline 459
; case 6 : Char_Set_XY(X_position,Y_position,"6");break;
ldi R24,<L111
ldi R25,>L111
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 459
rjmp L97
L112:
.dbline 460
; case 7 : Char_Set_XY(X_position,Y_position,"7");break;
ldi R24,<L113
ldi R25,>L113
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 460
rjmp L97
L114:
.dbline 461
; case 8 : Char_Set_XY(X_position,Y_position,"8");break;
ldi R24,<L115
ldi R25,>L115
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 461
rjmp L97
L116:
.dbline 462
; case 9 : Char_Set_XY(X_position,Y_position,"9");break;
ldi R24,<L117
ldi R25,>L117
std y+1,R25
std y+0,R24
mov R18,R12
mov R16,R10
rcall _Char_Set_XY
.dbline 462
.dbline 463
; default: break;
L97:
.dbline -2
L95:
.dbline 0 ; func end
adiw R28,2
rjmp pop_xgset303C
.dbsym r word 20 i
.dbsym r Y_position 12 c
.dbsym r X_position 10 c
.dbend
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L117:
.blkb 2
.area idata
.byte 57,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L115:
.blkb 2
.area idata
.byte 56,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L113:
.blkb 2
.area idata
.byte 55,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L111:
.blkb 2
.area idata
.byte 54,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L109:
.blkb 2
.area idata
.byte 53,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L107:
.blkb 2
.area idata
.byte 52,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L105:
.blkb 2
.area idata
.byte 51,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L103:
.blkb 2
.area idata
.byte 50,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L101:
.blkb 2
.area idata
.byte 49,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
L99:
.blkb 2
.area idata
.byte 48,0
.area data(ram, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
; }
;
; }
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -