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

📄 t6963.s

📁 LCD菜单的仿真及程序AVR_T6963.rar
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 193
;     {
	.dbline 194
;         return 1;
	ldi R16,1
	xjmp L51
L52:
	.dbline 196
;     }
;     WR_DAT(uData);
	mov R16,R20
	xcall _WR_DAT
	.dbline 197
;     return(0); // 返回0 成功
	clr R16
	.dbline -2
L51:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r uData 20 c
	.dbend
	.dbfunc e fnPR2 _fnPR2 fc
;           temp -> R20
	.even
_fnPR2::
	xcall push_gset1
	.dbline -1
	.dbline 203
; }
; /************************/
; /* 读数据*/
; /************************/
; unsigned char fnPR2(void)
; {
	.dbline 205
;     unsigned char temp;
;     if(fnSTA01() == 0)
	xcall _fnSTA01
	tst R16
	brne L55
	.dbline 206
;     {
	.dbline 207
;          return 1; // 获取状态如果状态错
	ldi R16,1
	xjmp L54
L55:
	.dbline 209
;     }
;     temp=RD_DAT();
	xcall _RD_DAT
	mov R20,R16
	.dbline 210
;     return(temp); // 返回数据
	.dbline -2
L54:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbend
	.dbfunc e fnSetPos _fnSetPos fV
;           iPos -> R10,R11
;           ucol -> R20
;           urow -> R22
	.even
_fnSetPos::
	xcall push_gset3
	mov R20,R18
	mov R22,R16
	sbiw R28,1
	.dbline -1
	.dbline 216
; }
; /************************/
; /* 设置当前地址*/
; /************************/
; void fnSetPos(unsigned char urow, unsigned char ucol)
; {
	.dbline 218
;     unsigned int iPos;
;     iPos = (unsigned int)urow * 30 + ucol;
	ldi R24,30
	mul R24,R22
	movw R10,R0
	mov R2,R20
	clr R3
	add R10,R2
	adc R11,R3
	.dbline 219
;     fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
	movw R2,R10
	mov R2,R3
	clr R3
	std y+0,R2
	mov R18,R10
	andi R19,0
	ldi R16,36
	xcall _fnPR1
	.dbline 220
;     gCurRow = urow;
	sts _gCurRow,R22
	.dbline 221
;     gCurCol = ucol;
	sts _gCurCol,R20
	.dbline -2
	.dbline 222
; }
L57:
	adiw R28,1
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r iPos 10 i
	.dbsym r ucol 20 c
	.dbsym r urow 22 c
	.dbend
	.dbfunc e cursor _cursor fV
;           uCol -> R22
;           uRow -> R20
	.even
_cursor::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 227
; /**********************/
; /* 设置当前显示行列*/
; /**********************/
; void cursor(unsigned char uRow, unsigned char uCol)
; {
	.dbline 228
;     fnSetPos(uRow * 16, uCol);
	mov R18,R22
	ldi R24,16
	mul R24,R20
	mov R16,R0
	xcall _fnSetPos
	.dbline -2
	.dbline 229
; }
L58:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r uCol 22 c
	.dbsym r uRow 20 c
	.dbend
	.dbfunc e cls _cls fV
;              i -> R20,R21
	.even
_cls::
	xcall push_gset1
	sbiw R28,1
	.dbline -1
	.dbline 234
; /*********************/
; /* 清屏*/
; /*********************/
; void cls(void)
; {
	.dbline 236
;     unsigned int i;
;     fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
	clr R2
	std y+0,R2
	clr R18
	ldi R16,36
	xcall _fnPR1
	.dbline 237
;     fnPR12(LC_AUT_WR); // 自动写
	ldi R16,176
	xcall _fnPR12
	.dbline 238
;     for(i=0;i<240*128/8;i++) // 清一屏
	clr R20
	clr R21
	xjmp L63
L60:
	.dbline 239
	.dbline 240
	xcall _fnSTA3
	.dbline 241
	clr R16
	xcall _fnPR13
	.dbline 242
L61:
	.dbline 238
	subi R20,255  ; offset = 1
	sbci R21,255
L63:
	.dbline 238
	cpi R20,0
	ldi R30,15
	cpc R21,R30
	brlo L60
	.dbline 243
;     {
;         fnSTA3();
;         fnPR13(0x0); // 写数据实际使用时请将0x55 改成0x0
;     }
;     fnPR12(LC_AUT_OVR); // 自动写结束
	ldi R16,178
	xcall _fnPR12
	.dbline 244
;     fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
	clr R2
	std y+0,R2
	clr R18
	ldi R16,36
	xcall _fnPR1
	.dbline 245
;     gCurRow = 0; // 置地址指针存储变量
	clr R2
	sts _gCurRow,R2
	.dbline 246
;     gCurCol = 0;
	sts _gCurCol,R2
	.dbline -2
	.dbline 247
; }
L59:
	adiw R28,1
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend
	.dbfunc e fnLCMInit _fnLCMInit fc
	.even
_fnLCMInit::
	sbiw R28,1
	.dbline -1
	.dbline 252
; /************************/
; /* LCM 初始化*/
; /************************/
; char fnLCMInit(void)
; {
	.dbline 253
;     if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
	clr R2
	std y+0,R2
	clr R18
	ldi R16,64
	xcall _fnPR1
	tst R16
	breq L65
	.dbline 254
;     {
	.dbline 255
;         return (0xff);
	ldi R16,255
	xjmp L64
L65:
	.dbline 257
;     }
;     fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
	clr R2
	std y+0,R2
	ldi R18,30
	ldi R16,65
	xcall _fnPR1
	.dbline 258
;     fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
	clr R2
	std y+0,R2
	clr R18
	ldi R16,66
	xcall _fnPR1
	.dbline 259
;     fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
	clr R2
	std y+0,R2
	ldi R18,30
	ldi R16,67
	xcall _fnPR1
	.dbline 260
;     fnPR12(LC_CUR_SHP | 0x01); // 光标形状
	ldi R16,161
	xcall _fnPR12
	.dbline 261
;     fnPR12(LC_MOD_OR); // 显示方式设置
	ldi R16,128
	xcall _fnPR12
	.dbline 262
;     fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
	ldi R16,152
	xcall _fnPR12
	.dbline 263
;     return(0);
	clr R16
	.dbline -2
L64:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e dprintf _dprintf fc
;          cData -> y+3
;           uLen -> y+2
;              i -> y+1
;             c2 -> R22
;           uRow -> y+0
;           uCol -> R14
;             c1 -> R20
;              k -> R10,R11
;              j -> R12
;            ptr -> y+14
;              y -> R22
;              x -> R20
	.even
_dprintf::
	xcall push_gset5
	mov R22,R18
	mov R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 269
; }
; /********************************************************/
; /* ASCII(8*16) 及 汉字(16*16) 显示函数      */
; /********************************************************/
; unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
; {
	.dbline 273
;     unsigned char c1,c2,cData;
;     unsigned char i,j,uLen,uRow,uCol;
;     unsigned int  k;
;     uLen=0;
	clr R0
	std y+2,R0
	.dbline 274
;     i=0;
	std y+1,R0
	.dbline 275
;     uRow = y;
	std y+0,R22
	.dbline 276
;     uCol = x;
	mov R14,R20
	.dbline 277
;     fnSetPos(uRow*16,uCol);      //起点定位
	mov R18,R14
	ldi R24,16
	mov R0,R22
	mul R24,R0
	mov R16,R0
	xcall _fnSetPos
	xjmp L69
L68:
	.dbline 279
	.dbline 280
	ldd R0,y+2
	inc R0
	std y+2,R0
	.dbline 281
L69:
	.dbline 278
;     while (ptr[uLen]!=0) //探测字串长度
	ldd R30,y+2
	clr R31
	ldd R0,y+14
	ldd R1,y+15
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	tst R2
	brne L68
	xjmp L72
L71:
	.dbline 283
;     {
;         uLen++;
;     }	
;     while(i<uLen)
;     {
	.dbline 284
;     	c1 = ptr[i];
	ldd R30,y+1
	clr R31
	ldd R0,y+14
	ldd R1,y+15
	add R30,R0
	adc R31,R1
	ldd R20,z+0
	.dbline 285
;     	c2 = ptr[i+1];
	ldd R30,y+1
	clr R31
	add R30,R0
	adc R31,R1
	ldd R22,z+1
	.dbline 287
;         //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
;     	uRow = fnGetRow();    
	xcall _fnGetRow
	std y+0,R16
	.dbline 288
;     	uCol = fnGetCol();
	xcall _fnGetCol
	mov R14,R16
	.dbline 289
;     	if(c1 <=128)	// ASCII
	ldi R24,128
	cp R24,R20
	brlo L74
	.dbline 290
;       	{
	.dbline 291
;             for(j=0;j<16;j++) //写16行
	clr R12
	xjmp L79
L76:
	.dbline 292
;             {
	.dbline 293
;         	fnPR12(LC_AUT_WR);    			// 写数据(命令)
	ldi R16,176
	xcall _fnPR12
	.dbline 294
;         	if (c1 >= 0x20)
	cpi R20,32
	brlo L80
	.dbline 295
;           	{
	.dbline 296
;             	    fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
	ldi R24,16
	mul R24,R20
	movw R30,R0
	subi R30,0
	sbci R31,2
	mov R2,R12
	clr R3
	add R30,R2
	adc R31,R3
	ldi R24,<_ASC_MSK
	ldi R25,>_ASC_MSK
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _fnPR13
	.dbline 297
;           	}
	xjmp L81
L80:
	.dbline 299
;         	else
;         	{
	.dbline 300
;           	    fnPR13(cData);
	ldd R16,y+3
	xcall _fnPR13
	.dbline 301
;           	}
L81:
	.dbline 302
	ldi R16,178
	xcall _fnPR12
	.dbline 303
	mov R18,R14
	ldd R16,y+0
	add R16,R12
	subi R16,255    ; addi 1
	xcall _fnSetPos
	.dbline 304
L77:
	.dbline 291
	inc R12
L79:
	.dbline 291
	mov R24,R12
	cpi R24,16
	brlo L76
	.dbline 305
;          	fnPR12(LC_AUT_OVR);  			//写数据结束
;                 fnSetPos(uRow+j+1,uCol);
;              }
;             if(c1 != BS)  	// 非退格
	cpi R20,8
	brne X0
	xjmp L75
X0:
	.dbline 306
;             {
	.dbline 307
;                 uCol++;   // 列数加1
	inc R14
	.dbline 308
;             }
	.dbline 310
;           			   				
;         }
	xjmp L75
L74:
	.dbline 312
;     	else    	// 中文
;       	{
	.dbline 313
;             for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)  	// 查找定位
	clr R12
	xjmp L87
L84:
	.dbline 314
;             {
	.dbline 315
;                 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
	ldi R24,34
	mul R24,R12
	movw R2,R0
	ldi R24,<_GB_16
	ldi R25,>_GB_16
	movw R30,R2
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R20,R30
	brne L88
	ldi R24,<_GB_16+1
	ldi R25,>_GB_16+1
	movw R30,R2
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R22,R30
	brne L88
	.dbline 316
;                 {
	.dbline 317
;                     break;
	xjmp L86
L88:
	.dbline 320
L85:
	.dbline 313
	inc R12
L87:
	.dbline 313
	mov R24,R12
	cpi R24,4
	brlo L84
L86:
	.dbline 321
;                 }
;           				
;             }
;             for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
	clr R10
	clr R11
	xjmp L94
L91:
	.dbline 322
;             {
	.dbline 323
;                 fnSetPos(uRow+k,uCol);
	mov R18,R14
	ldd R16,y+0
	clr R17
	add R16,R10
	adc R17,R11
	xcall _fnSetPos
	.dbline 324
;         	fnPR12(LC_AUT_WR);      		// 写数据
	ldi R16,176
	xcall _fnPR12
	.dbline 325
;         	if(j < sizeof(GB_16)/sizeof(GB_16[0]))
	mov R24,R12
	cpi R24,4
	brsh L96
	.dbline 326
;           	{
	.dbline 327
;           	    fnPR13(GB_16[j].Msk[k*2]);
	ldi R24,34
	mul R24,R12
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _fnPR13
	.dbline 328
;           	    fnPR13(GB_16[j].Msk[k*2+1]);
	ldi R24,34
	mul R24,R12
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	adiw R30,1
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _fnPR13
	.dbline 329
;           	}
	xjmp L97
L96:
	.dbline 331
;         	else   		// 未找到该字
;           	{
	.dbline 332
;           	    if(k < sizeof(GB_16[0].Msk)/4)
	movw R24,R10
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brsh L100
	.dbline 333
;             	    {
	.dbline 334
;                         fnPR13(0x00);
	clr R16
	xcall _fnPR13
	.dbline 335
;             		fnPR13(0x00);
	clr R16
	xcall _fnPR13
	.dbline 336
;             	     }
	xjmp L101
L100:
	.dbline 338
;          	    else
;             	    {
	.dbline 339
;             		fnPR13(0xff);
	ldi R16,255
	xcall _fnPR13
	.dbline 340
; 			fnPR13(0xff);
	ldi R16,255
	xcall _fnPR13
	.dbline 341
;             	    }
L101:
	.dbline 342
;                 }
L97:
	.dbline 343
	ldi R16,178
	xcall _fnPR12
	.dbline 344
L92:
	.dbline 321
	movw R24,R10
	adiw R24,1
	movw R10,R24
L94:
	.dbline 321
	movw R24,R10
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brsh X1
	xjmp L91
X1:
	.dbline 345
;         	fnPR12(LC_AUT_OVR);
;             }
;       	    uCol += 2;
	mov R24,R14
	subi R24,254    ; addi 2
	mov R14,R24
	.dbline 346
;       	    i++;
	ldd R0,y+1
	inc R0
	std y+1,R0
	.dbline 347
L75:
	.dbline 347
;         };
	.dbline 348
;     	if(uCol >= 30)      					// 光标后移
	mov R24,R14
	cpi R24,30
	brlo L103
	.dbline 349
;       	{
	.dbline 350
;       	    uRow += 16;
	ldd R24,y+0
	subi R24,240    ; addi 16
	std y+0,R24
	.dbline 351
;             if(uRow < 0x80)
	cpi R24,128
	brsh L105
	.dbline 352
;             {
	.dbline 353
;                 uCol -= 30;
	mov R24,R14
	subi R24,30
	mov R14,R24
	.dbline 354
;             }
	xjmp L106
L105:
	.dbline 356
;       	    else
;             {
	.dbline 357
;         	uRow = 0;
	clr R0
	std y+0,R0
	.dbline 358
;         	uCol = 0;
	clr R14
	.dbline 359
;             }
L106:
	.dbline 360
;       	 }
L103:
	.dbline 361
	mov R18,R14
	ldd R16,y+0
	xcall _fnSetPos
	.dbline 362
	ldd R0,y+1
	inc R0
	std y+1,R0
	.dbline 363
L72:
	.dbline 282
	ldd R0,y+1
	ldd R16,y+2
	cp R0,R16
	brsh X2
	xjmp L71

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -