⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jhd12864.s

📁 ds1302事实时钟+12864液晶显示 4094
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -