test_lcd.lss

来自「在WinAVR下的ST7565圖形點陣的驅動程序」· LSS 代码 · 共 1,839 行 · 第 1/5 页

LSS
1,839
字号
	
   	dptr = &ASCII[(XH_Dig-0x20)*16];
	
	LCD_SetPageAddress(adrPage);
	LCD_SetColumnAddress(adrColumn);
	for(i=0; i< 8; i++)
     a2a:	c8 30       	cpi	r28, 0x08	; 8
     a2c:	d1 05       	cpc	r29, r1
     a2e:	a9 f7       	brne	.-22     	; 0xa1a <LCD_DisplayASCII+0x38>
     a30:	e8 01       	movw	r28, r16
     a32:	28 96       	adiw	r28, 0x08	; 8
	{
    	LCD_WriteData(pgm_read_byte(dptr));
    	dptr = dptr + 1;
	}
	
	LCD_SetPageAddress(adrPage+1);
     a34:	8f 2d       	mov	r24, r15
     a36:	8f 5f       	subi	r24, 0xFF	; 255
     a38:	0e 94 52 04 	call	0x8a4	; 0x8a4 <LCD_SetPageAddress>
	LCD_SetColumnAddress(adrColumn);
     a3c:	8e 2d       	mov	r24, r14
     a3e:	0e 94 45 04 	call	0x88a	; 0x88a <LCD_SetColumnAddress>
	for(i=0; i< 8; i++)
     a42:	00 5f       	subi	r16, 0xF0	; 240
     a44:	1f 4f       	sbci	r17, 0xFF	; 255
	{
    	LCD_WriteData(pgm_read_byte(dptr));
     a46:	fe 01       	movw	r30, r28
     a48:	84 91       	lpm	r24, Z+
     a4a:	0e 94 b2 04 	call	0x964	; 0x964 <LCD_WriteData>
    	dptr = dptr + 1;
     a4e:	21 96       	adiw	r28, 0x01	; 1
    	dptr = dptr + 1;
	}
	
	LCD_SetPageAddress(adrPage+1);
	LCD_SetColumnAddress(adrColumn);
	for(i=0; i< 8; i++)
     a50:	c0 17       	cp	r28, r16
     a52:	d1 07       	cpc	r29, r17
     a54:	c1 f7       	brne	.-16     	; 0xa46 <LCD_DisplayASCII+0x64>
	{
    	LCD_WriteData(pgm_read_byte(dptr));
    	dptr = dptr + 1;
	}
} 
     a56:	df 91       	pop	r29
     a58:	cf 91       	pop	r28
     a5a:	1f 91       	pop	r17
     a5c:	0f 91       	pop	r16
     a5e:	ff 90       	pop	r15
     a60:	ef 90       	pop	r14
     a62:	08 95       	ret

00000a64 <LCD_DisplayHZ>:
//-----------------------------------------------------------------------------
// LCD : Display Chinese.
// Size: 16x16
//-----------------------------------------------------------------------------
uint8 LCD_DisplayHZ(char* XH_HZ, uint8 adrPage, uint8 adrColumn)
{
     a64:	cf 92       	push	r12
     a66:	df 92       	push	r13
     a68:	ef 92       	push	r14
     a6a:	ff 92       	push	r15
     a6c:	0f 93       	push	r16
     a6e:	1f 93       	push	r17
     a70:	cf 93       	push	r28
     a72:	df 93       	push	r29
     a74:	fc 01       	movw	r30, r24
     a76:	d6 2e       	mov	r13, r22
     a78:	c4 2e       	mov	r12, r20
   	uint8 *dptr;               // dptr_adderss for HZ code.
   	uint8 i, j;
	char charH, charL;

	charH = *XH_HZ++;
     a7a:	60 81       	ld	r22, Z
	charL = *XH_HZ;
     a7c:	51 81       	ldd	r21, Z+1	; 0x01
     a7e:	20 e0       	ldi	r18, 0x00	; 0
     a80:	30 e0       	ldi	r19, 0x00	; 0
     a82:	42 2f       	mov	r20, r18
	
    for(j=0; j<sizeof(HZ_Table)/sizeof(HZ_t); j++)
    {
    	dptr = &HZ_Table[j].Hz_Data[0];
        if(charH == pgm_read_byte(dptr) && charL == pgm_read_byte(dptr+1))
     a84:	c9 01       	movw	r24, r18
     a86:	fc 01       	movw	r30, r24
     a88:	15 e0       	ldi	r17, 0x05	; 5
     a8a:	ee 0f       	add	r30, r30
     a8c:	ff 1f       	adc	r31, r31
     a8e:	1a 95       	dec	r17
     a90:	e1 f7       	brne	.-8      	; 0xa8a <LCD_DisplayHZ+0x26>
     a92:	88 0f       	add	r24, r24
     a94:	99 1f       	adc	r25, r25
     a96:	e8 0f       	add	r30, r24
     a98:	f9 1f       	adc	r31, r25
     a9a:	e4 58       	subi	r30, 0x84	; 132
     a9c:	f9 4f       	sbci	r31, 0xF9	; 249
     a9e:	e4 91       	lpm	r30, Z+
     aa0:	6e 17       	cp	r22, r30
     aa2:	81 f4       	brne	.+32     	; 0xac4 <LCD_DisplayHZ+0x60>
     aa4:	c9 01       	movw	r24, r18
     aa6:	fc 01       	movw	r30, r24
     aa8:	a5 e0       	ldi	r26, 0x05	; 5
     aaa:	ee 0f       	add	r30, r30
     aac:	ff 1f       	adc	r31, r31
     aae:	aa 95       	dec	r26
     ab0:	e1 f7       	brne	.-8      	; 0xaaa <LCD_DisplayHZ+0x46>
     ab2:	88 0f       	add	r24, r24
     ab4:	99 1f       	adc	r25, r25
     ab6:	e8 0f       	add	r30, r24
     ab8:	f9 1f       	adc	r31, r25
     aba:	e3 58       	subi	r30, 0x83	; 131
     abc:	f9 4f       	sbci	r31, 0xF9	; 249
     abe:	e4 91       	lpm	r30, Z+
     ac0:	5e 17       	cp	r21, r30
     ac2:	51 f0       	breq	.+20     	; 0xad8 <LCD_DisplayHZ+0x74>
            break;
     ac4:	4f 5f       	subi	r20, 0xFF	; 255
     ac6:	2f 5f       	subi	r18, 0xFF	; 255
     ac8:	3f 4f       	sbci	r19, 0xFF	; 255
	char charH, charL;

	charH = *XH_HZ++;
	charL = *XH_HZ;
	
    for(j=0; j<sizeof(HZ_Table)/sizeof(HZ_t); j++)
     aca:	29 30       	cpi	r18, 0x09	; 9
     acc:	31 05       	cpc	r19, r1
     ace:	c9 f6       	brne	.-78     	; 0xa82 <LCD_DisplayHZ+0x1e>
    {
    	dptr = &HZ_Table[j].Hz_Data[0];
        if(charH == pgm_read_byte(dptr) && charL == pgm_read_byte(dptr+1))
            break;
    }
	if(j<sizeof(HZ_Table)/sizeof(HZ_t))
     ad0:	49 30       	cpi	r20, 0x09	; 9
     ad2:	10 f0       	brcs	.+4      	; 0xad8 <LCD_DisplayHZ+0x74>
     ad4:	80 e0       	ldi	r24, 0x00	; 0
     ad6:	3f c0       	rjmp	.+126    	; 0xb56 <LCD_DisplayHZ+0xf2>
   		dptr = HZ_Table[j].Table;
     ad8:	e4 2e       	mov	r14, r20
     ada:	ff 24       	eor	r15, r15
     adc:	87 01       	movw	r16, r14
     ade:	44 e0       	ldi	r20, 0x04	; 4
     ae0:	00 0f       	add	r16, r16
     ae2:	11 1f       	adc	r17, r17
     ae4:	4a 95       	dec	r20
     ae6:	e1 f7       	brne	.-8      	; 0xae0 <LCD_DisplayHZ+0x7c>
     ae8:	0e 0d       	add	r16, r14
     aea:	1f 1d       	adc	r17, r15
     aec:	00 0f       	add	r16, r16
     aee:	11 1f       	adc	r17, r17
     af0:	02 58       	subi	r16, 0x82	; 130
     af2:	19 4f       	sbci	r17, 0xF9	; 249
	else 
		return FALSE;
	
	LCD_SetPageAddress(adrPage); 
     af4:	8d 2d       	mov	r24, r13
     af6:	0e 94 52 04 	call	0x8a4	; 0x8a4 <LCD_SetPageAddress>
    LCD_SetColumnAddress(adrColumn);
     afa:	8c 2d       	mov	r24, r12
     afc:	0e 94 45 04 	call	0x88a	; 0x88a <LCD_SetColumnAddress>
     b00:	c0 e0       	ldi	r28, 0x00	; 0
     b02:	d0 e0       	ldi	r29, 0x00	; 0
   	for(i=0; i< 16; i++)    
  	{
     	LCD_WriteData(pgm_read_byte(dptr));
     b04:	f8 01       	movw	r30, r16
     b06:	ec 0f       	add	r30, r28
     b08:	fd 1f       	adc	r31, r29
     b0a:	e4 91       	lpm	r30, Z+
     b0c:	8e 2f       	mov	r24, r30
     b0e:	0e 94 b2 04 	call	0x964	; 0x964 <LCD_WriteData>
     b12:	21 96       	adiw	r28, 0x01	; 1
	else 
		return FALSE;
	
	LCD_SetPageAddress(adrPage); 
    LCD_SetColumnAddress(adrColumn);
   	for(i=0; i< 16; i++)    
     b14:	c0 31       	cpi	r28, 0x10	; 16
     b16:	d1 05       	cpc	r29, r1
     b18:	a9 f7       	brne	.-22     	; 0xb04 <LCD_DisplayHZ+0xa0>
     b1a:	e7 01       	movw	r28, r14
     b1c:	25 e0       	ldi	r18, 0x05	; 5
     b1e:	cc 0f       	add	r28, r28
     b20:	dd 1f       	adc	r29, r29
     b22:	2a 95       	dec	r18
     b24:	e1 f7       	brne	.-8      	; 0xb1e <LCD_DisplayHZ+0xba>
     b26:	ee 0c       	add	r14, r14
     b28:	ff 1c       	adc	r15, r15
     b2a:	ce 0d       	add	r28, r14
     b2c:	df 1d       	adc	r29, r15
     b2e:	c2 57       	subi	r28, 0x72	; 114
     b30:	d9 4f       	sbci	r29, 0xF9	; 249
  	{
     	LCD_WriteData(pgm_read_byte(dptr));
     	dptr ++;
  	}
	
	LCD_SetPageAddress(adrPage+1); 
     b32:	8d 2d       	mov	r24, r13
     b34:	8f 5f       	subi	r24, 0xFF	; 255
     b36:	0e 94 52 04 	call	0x8a4	; 0x8a4 <LCD_SetPageAddress>
    LCD_SetColumnAddress(adrColumn);
     b3a:	8c 2d       	mov	r24, r12
     b3c:	0e 94 45 04 	call	0x88a	; 0x88a <LCD_SetColumnAddress>
    for(i=0; i< 16; i++)    
     b40:	00 5e       	subi	r16, 0xE0	; 224
     b42:	1f 4f       	sbci	r17, 0xFF	; 255
  	{
     	LCD_WriteData(pgm_read_byte(dptr));
     b44:	fe 01       	movw	r30, r28
     b46:	84 91       	lpm	r24, Z+
     b48:	0e 94 b2 04 	call	0x964	; 0x964 <LCD_WriteData>
     	dptr ++;
     b4c:	21 96       	adiw	r28, 0x01	; 1
     	dptr ++;
  	}
	
	LCD_SetPageAddress(adrPage+1); 
    LCD_SetColumnAddress(adrColumn);
    for(i=0; i< 16; i++)    
     b4e:	c0 17       	cp	r28, r16
     b50:	d1 07       	cpc	r29, r17
     b52:	c1 f7       	brne	.-16     	; 0xb44 <LCD_DisplayHZ+0xe0>
     b54:	81 e0       	ldi	r24, 0x01	; 1
     	LCD_WriteData(pgm_read_byte(dptr));
     	dptr ++;
  	}

    return TRUE;
}
     b56:	df 91       	pop	r29
     b58:	cf 91       	pop	r28
     b5a:	1f 91       	pop	r17
     b5c:	0f 91       	pop	r16
     b5e:	ff 90       	pop	r15
     b60:	ef 90       	pop	r14
     b62:	df 90       	pop	r13
     b64:	cf 90       	pop	r12
     b66:	08 95       	ret

00000b68 <LCD_DisplayString>:
//-----------------------------------------------------------------------------
// LCD  : lcd Display String.
// ASCII(8*16) 及汉字(16*16) 显示函数
//-----------------------------------------------------------------------------
uint8 LCD_DisplayString(char *String, uint8 adrPage, uint8 adrColumn)
{
     b68:	af 92       	push	r10
     b6a:	bf 92       	push	r11
     b6c:	df 92       	push	r13
     b6e:	ef 92       	push	r14
     b70:	ff 92       	push	r15
     b72:	0f 93       	push	r16
     b74:	1f 93       	push	r17
     b76:	df 93       	push	r29
     b78:	cf 93       	push	r28
     b7a:	00 d0       	rcall	.+0      	; 0xb7c <LCD_DisplayString+0x14>
     b7c:	cd b7       	in	r28, 0x3d	; 61
     b7e:	de b7       	in	r29, 0x3e	; 62
     b80:	7c 01       	movw	r14, r24
    char cData[2];
    uint8 uLen,uPage,uCol;
	
	uLen = strlen(String);
     b82:	fc 01       	movw	r30, r24
     b84:	01 90       	ld	r0, Z+
     b86:	00 20       	and	r0, r0
     b88:	e9 f7       	brne	.-6      	; 0xb84 <LCD_DisplayString+0x1c>
     b8a:	31 97       	sbiw	r30, 0x01	; 1
     b8c:	de 2e       	mov	r13, r30
     b8e:	d8 1a       	sub	r13, r24
     b90:	06 2f       	mov	r16, r22
     b92:	14 2f       	mov	r17, r20
			uLen --;
		}
		else
		{
			cData[1] = *String++;
			LCD_DisplayHZ(cData,  uPage, uCol);
     b94:	5e 01       	movw	r10, r28
     b96:	08 94       	sec
     b98:	a1 1c       	adc	r10, r1
     b9a:	b1 1c       	adc	r11, r1
     b9c:	1f c0       	rjmp	.+62     	; 0xbdc <LCD_DisplayString+0x74>
    uPage = adrPage;
    uCol = adrColumn;

    while(uLen)
    {
        cData[0] = *String++;
     b9e:	f7 01       	movw	r30, r14
     ba0:	81 91       	ld	r24, Z+
     ba2:	7f 01       	movw	r14, r30
     ba4:	89 83       	std	Y+1, r24	; 0x01
		if(cData[0] <= 0x80)
     ba6:	81 38       	cpi	r24, 0x81	; 129
     ba8:	38 f4       	brcc	.+14     	; 0xbb8 <LCD_DisplayString+0x50>
		{
			LCD_DisplayASCII(cData[0], uPage, uCol);
     baa:	41 2f       	mov	r20, r17
     bac:	60 2f       	mov	r22, r16
     bae:	0e 94 f1 04 	call	0x9e2	; 0x9e2 <LCD_DisplayASCII>
			uCol += 8;
     bb2:	18 5f       	subi	r17, 0xF8	; 248
			uLen --;
     bb4:	da 94       	dec	r13
     bb6:	0b c0       	rjmp	.+22     	; 0xbce <LCD_DisplayString+0x66>
		}
		else
		{
			cData[1] = *String++;
     bb8:	81 91       	ld	r24, Z+
     bba:	7f 01       	movw	r14, r30
     bbc:	8a 83       	std	Y+2, r24	; 0x02
			LCD_DisplayHZ(cData,  uPage, uCol);
     bbe:	41 2f       	mov	r20, r17
     bc0:	60 2f       	mov	r22, r16
     bc2:	c5 01       	movw	r24, r10
     bc4:	0e 94 32 05 	call	0xa64	; 0xa64 <LCD_DisplayHZ>
			uCol += 16;
     bc8:	10 5f       	subi	r17, 0xF0	; 240
			uLen -= 2;
     bca:	fe ef       	ldi	r31, 0xFE	; 254
     bcc:	df 0e       	add	r13, r31
		}
		
		if(uCol >= MAX_COLUMN)
     bce:	17 ff       	sbrs	r17, 7
     bd0:	05 c0       	rjmp	.+10     	; 0xbdc <LCD_DisplayString+0x74>
		{
			uCol = 0;
			uPage += 2;
     bd2:	0e 5f       	subi	r16, 0xFE	; 254
			if(uPage >= MAX_PAGE)
     bd4:	08 30       	cpi	r16, 0x08	; 8
     bd6:	08 f0       	brcs	.+2      	; 0xbda <LCD_DisplayString+0x72>
     bd8:	00 e0       	ldi	r16, 0x00	; 0
     bda:	10 e0       	ldi	r17, 0x00	; 0
	
	uLen = strlen(String);
    uPage = adrPage;
    uCol = adrColumn;

    while(uLen)
     bdc:	dd 20       	and	r13, r13
     bde:	f9 f6       	brne	.-66     	; 0xb9e <LCD_DisplayString+0x36>
				uPage = 0;
		}
	}
	
    return uLen;
}
     be0:	80 e0       	ldi	r24, 0x00	; 0
     be2:	0f 90       	pop	r0
     be4:	0f 90       	pop	r0
     be6:	cf 91       	pop	r28
     be8:	df 91       	pop	r29
     bea:	1f 91       	pop	r17
     bec:	0f 91       	pop	r16

⌨️ 快捷键说明

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