test_lcd.lss

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

LSS
1,839
字号
	LCD_WriteCMD(0x40 | LineStart);
}

void LCD_SetPageAddress(uint8 Page)
{
     8a4:	8f 70       	andi	r24, 0x0F	; 15
     8a6:	80 6b       	ori	r24, 0xB0	; 176
     8a8:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
	Page &= 0x0F;
	LCD_WriteCMD(0xB0 | Page);
}
     8ac:	08 95       	ret

000008ae <LCD_SetStartLine>:
	Power &= 0x07;
	LCD_WriteCMD(0x28 | Power);
}

void LCD_SetStartLine(uint8 LineStart)
{
     8ae:	8f 73       	andi	r24, 0x3F	; 63
     8b0:	80 64       	ori	r24, 0x40	; 64
     8b2:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
	LineStart &= 0x3F;
	LCD_WriteCMD(0x40 | LineStart);
}
     8b6:	08 95       	ret

000008b8 <LCD_PowerControl>:
	On &= 0x01;
	LCD_WriteCMD(0xAE | On);
}

void LCD_PowerControl(uint8 Power)
{
     8b8:	87 70       	andi	r24, 0x07	; 7
     8ba:	88 62       	ori	r24, 0x28	; 40
     8bc:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
	Power &= 0x07;
	LCD_WriteCMD(0x28 | Power);
}
     8c0:	08 95       	ret

000008c2 <LCD_DisplayOnOff>:
	spi_write(CMD);
	LCD_CS_OUT(1);
}

void LCD_DisplayOnOff(uint8 On)
{
     8c2:	81 70       	andi	r24, 0x01	; 1
     8c4:	8e 6a       	ori	r24, 0xAE	; 174
     8c6:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
	On &= 0x01;
	LCD_WriteCMD(0xAE | On);
}
     8ca:	08 95       	ret

000008cc <LCD_Init>:
	LCD_WriteCMD(0x81);
	LCD_WriteCMD(Volume);
}

void LCD_Init(void)
{
     8cc:	1f 93       	push	r17
    DDRB |= BIT(LCD_CS) | BIT(LCD_A0) | BIT(LCD_RST);
     8ce:	87 b3       	in	r24, 0x17	; 23
     8d0:	80 67       	ori	r24, 0x70	; 112
     8d2:	87 bb       	out	0x17, r24	; 23

	LCD_RST_OUT(0);
     8d4:	c5 98       	cbi	0x18, 5	; 24
    can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
     8d6:	1a e7       	ldi	r17, 0x7A	; 122
     8d8:	81 2f       	mov	r24, r17
     8da:	8a 95       	dec	r24
     8dc:	f1 f7       	brne	.-4      	; 0x8da <LCD_Init+0xe>
	_delay_us(50);
	LCD_RST_OUT(1);
     8de:	c5 9a       	sbi	0x18, 5	; 24
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
     8e0:	83 e3       	ldi	r24, 0x33	; 51
     8e2:	97 e0       	ldi	r25, 0x07	; 7
     8e4:	01 97       	sbiw	r24, 0x01	; 1
     8e6:	f1 f7       	brne	.-4      	; 0x8e4 <LCD_Init+0x18>
	_delay_us(1000);
    LCD_BackLightOn();
     8e8:	df 9a       	sbi	0x1b, 7	; 27
	
// LCD Bias Setting
	LCD_WriteCMD(0xA2);		// LCD Bias Set: 1/9 bias
     8ea:	82 ea       	ldi	r24, 0xA2	; 162
     8ec:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
    can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
     8f0:	81 2f       	mov	r24, r17
     8f2:	8a 95       	dec	r24
     8f4:	f1 f7       	brne	.-4      	; 0x8f2 <LCD_Init+0x26>
	//LCD_WriteCMD(0xA3);		// LCD Bias Set: 1/7 bias
	_delay_us(50);
	
// LCD ADC Setting
	//LCD_WriteCMD(0xA0);		// Set ADC 0: Noraml
	LCD_WriteCMD(0xA1);		// Set ADC 0: Reverse
     8f6:	81 ea       	ldi	r24, 0xA1	; 161
     8f8:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
     8fc:	81 2f       	mov	r24, r17
     8fe:	8a 95       	dec	r24
     900:	f1 f7       	brne	.-4      	; 0x8fe <LCD_Init+0x32>
	_delay_us(50);
	
// Common Output Setting	
	LCD_WriteCMD(0xC0);		// Normal : COM0~COM63
     902:	80 ec       	ldi	r24, 0xC0	; 192
     904:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
     908:	81 2f       	mov	r24, r17
     90a:	8a 95       	dec	r24
     90c:	f1 f7       	brne	.-4      	; 0x90a <LCD_Init+0x3e>
	//LCD_WriteCMD(0xC8);		// Reverse : COM63~COM0
	_delay_us(50);

// V5 Output Voltage	
	LCD_SetV0_Voltage_Regulator(0x04);
     90e:	84 e0       	ldi	r24, 0x04	; 4
     910:	0e 94 40 04 	call	0x880	; 0x880 <LCD_SetV0_Voltage_Regulator>
     914:	81 2f       	mov	r24, r17
     916:	8a 95       	dec	r24
     918:	f1 f7       	brne	.-4      	; 0x916 <LCD_Init+0x4a>
	_delay_us(50);

// Electronic volume control
	LCD_SetElectronicVolume(0x20);
     91a:	80 e2       	ldi	r24, 0x20	; 32
     91c:	0e 94 35 04 	call	0x86a	; 0x86a <LCD_SetElectronicVolume>
     920:	85 ef       	ldi	r24, 0xF5	; 245
     922:	8a 95       	dec	r24
     924:	f1 f7       	brne	.-4      	; 0x922 <LCD_Init+0x56>
	_delay_us(100);	

	LCD_WriteCMD(0xA4);		// Display Normal
     926:	84 ea       	ldi	r24, 0xA4	; 164
     928:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
     92c:	81 2f       	mov	r24, r17
     92e:	8a 95       	dec	r24
     930:	f1 f7       	brne	.-4      	; 0x92e <LCD_Init+0x62>
	//LCD_WriteCMD(0xA5);		// All point On
	_delay_us(50);
	
	//LCD_WriteCMD(0xA6);		// Display Normal
	LCD_WriteCMD(0xA7);		// Display Reverse
     932:	87 ea       	ldi	r24, 0xA7	; 167
     934:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
     938:	81 2f       	mov	r24, r17
     93a:	8a 95       	dec	r24
     93c:	f1 f7       	brne	.-4      	; 0x93a <LCD_Init+0x6e>
	_delay_us(50);
	

	LCD_WriteCMD(0xAC);		
     93e:	8c ea       	ldi	r24, 0xAC	; 172
     940:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
	LCD_WriteCMD(0x00);	
     944:	80 e0       	ldi	r24, 0x00	; 0
     946:	0e 94 2f 04 	call	0x85e	; 0x85e <LCD_WriteCMD>
     94a:	1a 95       	dec	r17
     94c:	f1 f7       	brne	.-4      	; 0x94a <LCD_Init+0x7e>
	_delay_us(50);

	LCD_PowerControl(0x07);	
     94e:	87 e0       	ldi	r24, 0x07	; 7
     950:	0e 94 5c 04 	call	0x8b8	; 0x8b8 <LCD_PowerControl>
	LCD_DisplayOnOff(1);	
     954:	81 e0       	ldi	r24, 0x01	; 1
     956:	0e 94 61 04 	call	0x8c2	; 0x8c2 <LCD_DisplayOnOff>
	
	LCD_SetStartLine(0x00);
     95a:	80 e0       	ldi	r24, 0x00	; 0
     95c:	0e 94 57 04 	call	0x8ae	; 0x8ae <LCD_SetStartLine>
}
     960:	1f 91       	pop	r17
     962:	08 95       	ret

00000964 <LCD_WriteData>:
//包含所需头文件
#include "config.h"
#include "LCD_Font.h"

void LCD_WriteData(uint8 Data)
{
     964:	c6 98       	cbi	0x18, 6	; 24
	LCD_CS_OUT(0);
	LCD_A0_OUT(1);
     966:	c4 9a       	sbi	0x18, 4	; 24
	spi_write(Data);
     968:	0e 94 ba 06 	call	0xd74	; 0xd74 <spi_write>
	LCD_CS_OUT(1);
     96c:	c6 9a       	sbi	0x18, 6	; 24
}
     96e:	08 95       	ret

00000970 <LCD_DisplayPicture>:
// LCD_DisplayPicture
// Picture Size: Hight*Weight
//-----------------------------------------------------------------------
uint8 LCD_DisplayPicture(char *Picture, uint8 adrPage, uint8 adrColumn, 
								uint8 Weight, uint8 Hight)
{
     970:	bf 92       	push	r11
     972:	cf 92       	push	r12
     974:	df 92       	push	r13
     976:	ef 92       	push	r14
     978:	ff 92       	push	r15
     97a:	0f 93       	push	r16
     97c:	1f 93       	push	r17
     97e:	fc 01       	movw	r30, r24
     980:	b6 2e       	mov	r11, r22
     982:	c4 2e       	mov	r12, r20
     984:	d2 2e       	mov	r13, r18
     986:	e0 2e       	mov	r14, r16
	uint8 *dptr;               // dptr_adderss for Dig code.
   	uint8 i, j;

	if((adrPage+Hight)>MAX_PAGE) 		return FALSE;
     988:	86 2f       	mov	r24, r22
     98a:	90 e0       	ldi	r25, 0x00	; 0
     98c:	80 0f       	add	r24, r16
     98e:	91 1d       	adc	r25, r1
     990:	09 97       	sbiw	r24, 0x09	; 9
     992:	f4 f4       	brge	.+60     	; 0x9d0 <LCD_DisplayPicture+0x60>
	if((adrColumn+Weight)>MAX_COLUMN) 	return FALSE;
     994:	84 2f       	mov	r24, r20
     996:	90 e0       	ldi	r25, 0x00	; 0
     998:	82 0f       	add	r24, r18
     99a:	91 1d       	adc	r25, r1
     99c:	81 38       	cpi	r24, 0x81	; 129
     99e:	91 05       	cpc	r25, r1
     9a0:	bc f4       	brge	.+46     	; 0x9d0 <LCD_DisplayPicture+0x60>
     9a2:	00 e0       	ldi	r16, 0x00	; 0
	{
		LCD_SetPageAddress(adrPage+i);
		LCD_SetColumnAddress(adrColumn);
		for(j=0; j<Weight; j++)
		{
			LCD_WriteData(pgm_read_byte(dptr));
     9a4:	f4 90       	lpm	r15, Z+
     9a6:	10 c0       	rjmp	.+32     	; 0x9c8 <LCD_DisplayPicture+0x58>
	
	dptr = (uint8 *)Picture;
	
	for(i=0; i<Hight; i++)
	{
		LCD_SetPageAddress(adrPage+i);
     9a8:	80 2f       	mov	r24, r16
     9aa:	8b 0d       	add	r24, r11
     9ac:	0e 94 52 04 	call	0x8a4	; 0x8a4 <LCD_SetPageAddress>
		LCD_SetColumnAddress(adrColumn);
     9b0:	8c 2d       	mov	r24, r12
     9b2:	0e 94 45 04 	call	0x88a	; 0x88a <LCD_SetColumnAddress>
     9b6:	10 e0       	ldi	r17, 0x00	; 0
     9b8:	04 c0       	rjmp	.+8      	; 0x9c2 <LCD_DisplayPicture+0x52>
		for(j=0; j<Weight; j++)
		{
			LCD_WriteData(pgm_read_byte(dptr));
     9ba:	8f 2d       	mov	r24, r15
     9bc:	0e 94 b2 04 	call	0x964	; 0x964 <LCD_WriteData>
	
	for(i=0; i<Hight; i++)
	{
		LCD_SetPageAddress(adrPage+i);
		LCD_SetColumnAddress(adrColumn);
		for(j=0; j<Weight; j++)
     9c0:	1f 5f       	subi	r17, 0xFF	; 255
     9c2:	1d 15       	cp	r17, r13
     9c4:	d0 f3       	brcs	.-12     	; 0x9ba <LCD_DisplayPicture+0x4a>
	if((adrPage+Hight)>MAX_PAGE) 		return FALSE;
	if((adrColumn+Weight)>MAX_COLUMN) 	return FALSE;
	
	dptr = (uint8 *)Picture;
	
	for(i=0; i<Hight; i++)
     9c6:	0f 5f       	subi	r16, 0xFF	; 255
     9c8:	0e 15       	cp	r16, r14
     9ca:	70 f3       	brcs	.-36     	; 0x9a8 <LCD_DisplayPicture+0x38>
     9cc:	81 e0       	ldi	r24, 0x01	; 1
     9ce:	01 c0       	rjmp	.+2      	; 0x9d2 <LCD_DisplayPicture+0x62>
     9d0:	80 e0       	ldi	r24, 0x00	; 0
			LCD_WriteData(pgm_read_byte(dptr));
		}
	}
	
	return TRUE;
}
     9d2:	1f 91       	pop	r17
     9d4:	0f 91       	pop	r16
     9d6:	ff 90       	pop	r15
     9d8:	ef 90       	pop	r14
     9da:	df 90       	pop	r13
     9dc:	cf 90       	pop	r12
     9de:	bf 90       	pop	r11
     9e0:	08 95       	ret

000009e2 <LCD_DisplayASCII>:
//-----------------------------------------------------------------------------
// LCD  : lcd Display ASCII.
// Size : 8X16
//-----------------------------------------------------------------------------
void LCD_DisplayASCII(uint8 XH_Dig, uint8 adrPage, uint8 adrColumn)
{
     9e2:	ef 92       	push	r14
     9e4:	ff 92       	push	r15
     9e6:	0f 93       	push	r16
     9e8:	1f 93       	push	r17
     9ea:	cf 93       	push	r28
     9ec:	df 93       	push	r29
     9ee:	f6 2e       	mov	r15, r22
     9f0:	e4 2e       	mov	r14, r20
   	uint8 *dptr;               // dptr_adderss for Dig code.
   	uint8 i;

   	if(XH_Dig < 0x20) XH_Dig = 0x20;
     9f2:	80 32       	cpi	r24, 0x20	; 32
     9f4:	08 f4       	brcc	.+2      	; 0x9f8 <LCD_DisplayASCII+0x16>
     9f6:	80 e2       	ldi	r24, 0x20	; 32
	
   	dptr = &ASCII[(XH_Dig-0x20)*16];
     9f8:	08 2f       	mov	r16, r24
     9fa:	10 e0       	ldi	r17, 0x00	; 0
     9fc:	84 e0       	ldi	r24, 0x04	; 4
     9fe:	00 0f       	add	r16, r16
     a00:	11 1f       	adc	r17, r17
     a02:	8a 95       	dec	r24
     a04:	e1 f7       	brne	.-8      	; 0x9fe <LCD_DisplayASCII+0x1c>
     a06:	04 57       	subi	r16, 0x74	; 116
     a08:	11 40       	sbci	r17, 0x01	; 1
	
	LCD_SetPageAddress(adrPage);
     a0a:	8f 2d       	mov	r24, r15
     a0c:	0e 94 52 04 	call	0x8a4	; 0x8a4 <LCD_SetPageAddress>
	LCD_SetColumnAddress(adrColumn);
     a10:	8e 2d       	mov	r24, r14
     a12:	0e 94 45 04 	call	0x88a	; 0x88a <LCD_SetColumnAddress>
     a16:	c0 e0       	ldi	r28, 0x00	; 0
     a18:	d0 e0       	ldi	r29, 0x00	; 0
	for(i=0; i< 8; i++)
	{
    	LCD_WriteData(pgm_read_byte(dptr));
     a1a:	f8 01       	movw	r30, r16
     a1c:	ec 0f       	add	r30, r28
     a1e:	fd 1f       	adc	r31, r29
     a20:	e4 91       	lpm	r30, Z+
     a22:	8e 2f       	mov	r24, r30
     a24:	0e 94 b2 04 	call	0x964	; 0x964 <LCD_WriteData>
     a28:	21 96       	adiw	r28, 0x01	; 1

⌨️ 快捷键说明

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