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

📄 ks0108.lss

📁 AVR程序ks0108经典范例!! !!
💻 LSS
📖 第 1 页 / 共 5 页
字号:
{
     7f8:	1f 93       	push	r17
     7fa:	cf 93       	push	r28
    unsigned char pages,i;
    for(pages=0;pages<8;pages++)
     7fc:	10 e0       	ldi	r17, 0x00	; 0
    {
        set_page_L(pages);  /* X 页地址 */
     7fe:	81 2f       	mov	r24, r17
     800:	0e 94 cf 03 	call	0x79e <set_page_L>
        set_page_R(pages);  /* X 页地址 */
     804:	81 2f       	mov	r24, r17
     806:	0e 94 d6 03 	call	0x7ac <set_page_R>
        for(i=0;i<64;i++)   
     80a:	c0 e0       	ldi	r28, 0x00	; 0
        {
            set_col_addr_L(i);//Y
     80c:	8c 2f       	mov	r24, r28
     80e:	0e 94 dd 03 	call	0x7ba <set_col_addr_L>
            set_col_addr_R(i);//Y
     812:	8c 2f       	mov	r24, r28
     814:	0e 94 e4 03 	call	0x7c8 <set_col_addr_R>
            write_LCD(LEFT,DATA,0x0);
     818:	40 e0       	ldi	r20, 0x00	; 0
     81a:	61 e0       	ldi	r22, 0x01	; 1
     81c:	84 2f       	mov	r24, r20
     81e:	0e 94 e2 02 	call	0x5c4 <write_LCD>
            write_LCD(RIGHT,DATA,0x0);
     822:	40 e0       	ldi	r20, 0x00	; 0
     824:	61 e0       	ldi	r22, 0x01	; 1
     826:	86 2f       	mov	r24, r22
     828:	0e 94 e2 02 	call	0x5c4 <write_LCD>
     82c:	cf 5f       	subi	r28, 0xFF	; 255
     82e:	c0 34       	cpi	r28, 0x40	; 64
     830:	68 f3       	brcs	.-38     	; 0x80c <clr_lcd+0x14>
     832:	1f 5f       	subi	r17, 0xFF	; 255
     834:	18 30       	cpi	r17, 0x08	; 8
     836:	18 f3       	brcs	.-58     	; 0x7fe <clr_lcd+0x6>
     838:	cf 91       	pop	r28
     83a:	1f 91       	pop	r17
     83c:	08 95       	ret

0000083e <GetPage>:
        }
    }
}

//ASCII 字模宽度及高度
#define ASC_CHR_WIDTH	8
#define ASC_CHR_HEIGHT	12

typedef struct 	/* 汉字字模显示数据结构 */
{
   char Index[1];                        
   char Msk[16];
}typFNT_ASC16;               //注意这与ICC的区别
typFNT_ASC16  const ASC_16[] PROGMEM = 
{	/* 显示为8*16  Curier 10 常规*/
"1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
"2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
"3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
"4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00,
"5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
"6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
"7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,
"8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
"9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,
"0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
".",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
",",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
":",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
";",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
"-",0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
"_",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
"A",0x00,0x00,0x80,0x64,0x1C,0x60,0x80,0x00,0x00,0x04,0x07,0x05,0x01,0x05,0x07,0x04,
"B",0x00,0x04,0xFC,0x44,0x44,0x44,0x44,0xB8,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x03,
"C",0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02,
"D",0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,0x04,0x07,0x04,0x04,0x04,0x02,0x01,
"E",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x06,
"F",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x00,0x00,0x00,
" ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
"=",0x00,0x00,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
"(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00,
")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00,
"V",0x00,0x04,0x3C,0xC4,0x00,0xC4,0x3C,0x04,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x00,
"m",0x00,0x20,0xE0,0x20,0xC0,0x20,0xC0,0x00,0x00,0x04,0x07,0x00,0x07,0x00,0x07,0x04,
"H",0x00,0x04,0xFC,0x44,0x40,0x44,0xFC,0x04,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04,
"*",0x90,0x90,0x60,0xFC,0x60,0x90,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,

};

#define ASC_HZ_WIDTH	12
//#define ASC_HZ_HEIGHT	12

typedef struct/*12*16 汉字字模显示数据结构 */
{
    char Index[2];
	 char Msk[24];
} typFNT_GB16;
 typFNT_GB16 const GB_16[]  PROGMEM= {	/* 宋体 9 显示为12*16 */
"科",0x8A,0x6A,0xFE,0x29,0x49,0x80,0x92,0xA4,0x80,0xFF,0x40,0x00,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
"技",0x44,0x44,0xFF,0x24,0x00,0x64,0xA4,0x3F,0xA4,0x64,0x04,0x00,0x04,0x04,0x07,0x00,0x04,0x04,0x02,0x01,0x02,0x04,0x04,0x00,
"有",0x42,0x22,0x12,0xFA,0x4E,0x4B,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x00,0x00,0x00,0x07,0x01,0x01,0x01,0x05,0x07,0x00,0x00,0x00,
"限",0xFF,0x81,0x99,0xE7,0x00,0xFF,0x25,0xE5,0x25,0xBF,0x40,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x02,0x04,0x00,
"公",0x20,0x10,0x08,0x07,0xC0,0x30,0x83,0x0C,0x10,0x20,0x20,0x00,0x00,0x04,0x06,0x05,0x04,0x04,0x02,0x03,0x06,0x00,0x00,0x00,
"司",0x08,0x09,0xE9,0x29,0x29,0x29,0xED,0x09,0x01,0xFF,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x07,0x00,0x00,
"液",0x19,0xE2,0x14,0x42,0xF2,0x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00,
"晶",0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00,
"显",0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00,
"示",0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00,
"的",0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00,
"第",0x04,0xEA,0xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00,
"一",0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
"行",0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00,
"二",0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
"三",0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,
"四",0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00,
"五",0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00,

};

unsigned char GetPage(void) /*得到当前页*/
{
	return CurPage;
     83e:	80 91 c6 00 	lds	r24, 0x00C6
}
     842:	99 27       	eor	r25, r25
     844:	08 95       	ret

00000846 <GetCol>:

unsigned char GetCol(void) /*得到当前列*/
{
	return CurCol;
     846:	80 91 c9 00 	lds	r24, 0x00C9
}
     84a:	99 27       	eor	r25, r25
     84c:	08 95       	ret

0000084e <SetPageCol>:

void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */
{
     84e:	cf 93       	push	r28
     850:	c6 2f       	mov	r28, r22
	CurPage = upage;
     852:	80 93 c6 00 	sts	0x00C6, r24
	CurCol = ucol;
     856:	60 93 c9 00 	sts	0x00C9, r22
	if(ucol<64)
     85a:	60 34       	cpi	r22, 0x40	; 64
     85c:	30 f4       	brcc	.+12     	; 0x86a <SetPageCol+0x1c>
	{
		set_page_L(upage);
     85e:	0e 94 cf 03 	call	0x79e <set_page_L>
		set_col_addr_L(ucol);
     862:	8c 2f       	mov	r24, r28
     864:	0e 94 dd 03 	call	0x7ba <set_col_addr_L>
     868:	06 c0       	rjmp	.+12     	; 0x876 <SetPageCol+0x28>
	}
	else
	{
		set_page_R(upage);
     86a:	0e 94 d6 03 	call	0x7ac <set_page_R>
		set_col_addr_R(ucol-64);
     86e:	8c 2f       	mov	r24, r28
     870:	80 54       	subi	r24, 0x40	; 64
     872:	0e 94 e4 03 	call	0x7c8 <set_col_addr_R>
     876:	cf 91       	pop	r28
     878:	08 95       	ret

0000087a <SetRowCol>:
	}
}

/* 设置当前显示的页和列 */
void SetRowCol(unsigned char urow, unsigned char ucol) 
{
	unsigned char page;
	CurRow = urow;
     87a:	80 93 c7 00 	sts	0x00C7, r24
	CurCol = ucol;
     87e:	60 93 c9 00 	sts	0x00C9, r22
	
	switch(urow)
     882:	99 27       	eor	r25, r25
     884:	83 30       	cpi	r24, 0x03	; 3
     886:	91 05       	cpc	r25, r1
     888:	99 f0       	breq	.+38     	; 0x8b0 <SetRowCol+0x36>
     88a:	84 30       	cpi	r24, 0x04	; 4
     88c:	91 05       	cpc	r25, r1
     88e:	34 f4       	brge	.+12     	; 0x89c <SetRowCol+0x22>
     890:	81 30       	cpi	r24, 0x01	; 1
     892:	91 05       	cpc	r25, r1
     894:	49 f0       	breq	.+18     	; 0x8a8 <SetRowCol+0x2e>
     896:	02 97       	sbiw	r24, 0x02	; 2
     898:	49 f0       	breq	.+18     	; 0x8ac <SetRowCol+0x32>
     89a:	13 c0       	rjmp	.+38     	; 0x8c2 <SetRowCol+0x48>
     89c:	84 30       	cpi	r24, 0x04	; 4
     89e:	91 05       	cpc	r25, r1
     8a0:	49 f0       	breq	.+18     	; 0x8b4 <SetRowCol+0x3a>
     8a2:	05 97       	sbiw	r24, 0x05	; 5
     8a4:	51 f0       	breq	.+20     	; 0x8ba <SetRowCol+0x40>
     8a6:	0d c0       	rjmp	.+26     	; 0x8c2 <SetRowCol+0x48>
	{
		case 1:
			page=0;
     8a8:	20 e0       	ldi	r18, 0x00	; 0
     8aa:	08 c0       	rjmp	.+16     	; 0x8bc <SetRowCol+0x42>
			CurOffset=1;
			break;
		case 2:
			page=1;
     8ac:	21 e0       	ldi	r18, 0x01	; 1
     8ae:	03 c0       	rjmp	.+6      	; 0x8b6 <SetRowCol+0x3c>
			CurOffset=2;
			break;
		case 3:
			page=3;
     8b0:	23 e0       	ldi	r18, 0x03	; 3
     8b2:	04 c0       	rjmp	.+8      	; 0x8bc <SetRowCol+0x42>
			CurOffset=1;
			break;
		case 4:
			page=4;
     8b4:	24 e0       	ldi	r18, 0x04	; 4
			CurOffset=2;
     8b6:	82 e0       	ldi	r24, 0x02	; 2
     8b8:	02 c0       	rjmp	.+4      	; 0x8be <SetRowCol+0x44>
			break;
		case 5:
			page=6;
     8ba:	26 e0       	ldi	r18, 0x06	; 6
			CurOffset=1;
     8bc:	81 e0       	ldi	r24, 0x01	; 1
     8be:	80 93 c8 00 	sts	0x00C8, r24
			break;
	}
	SetPageCol(page,ucol);
     8c2:	82 2f       	mov	r24, r18
     8c4:	0e 94 27 04 	call	0x84e <SetPageCol>
     8c8:	08 95       	ret

000008ca <disp_ch>:
}

void disp_ch(unsigned char c)
{
     8ca:	7f 92       	push	r7
     8cc:	8f 92       	push	r8
     8ce:	9f 92       	push	r9
     8d0:	af 92       	push	r10
     8d2:	bf 92       	push	r11
     8d4:	cf 92       	push	r12
     8d6:	df 92       	push	r13
     8d8:	ef 92       	push	r14
     8da:	ff 92       	push	r15
     8dc:	0f 93       	push	r16
     8de:	1f 93       	push	r17
     8e0:	cf 93       	push	r28
     8e2:	c8 2f       	mov	r28, r24
	unsigned char k,j,uPage,uCol,ch_r,ch_w;
	unsigned char width;
	unsigned char len;
	uPage = GetPage();
     8e4:	0e 94 1f 04 	call	0x83e <GetPage>
     8e8:	98 2e       	mov	r9, r24
	uCol = GetCol();
     8ea:	0e 94 23 04 	call	0x846 <GetCol>
     8ee:	c8 2e       	mov	r12, r24
	len=sizeof(ASC_16)/sizeof(ASC_16[0]);
	for(k=0;k<len;k++)
     8f0:	77 24       	eor	r7, r7
     8f2:	e8 e2       	ldi	r30, 0x28	; 40
     8f4:	f2 e0       	ldi	r31, 0x02	; 2
	{
		if(c == ASC_16[k].Index[0]) break;
     8f6:	80 81       	ld	r24, Z
     8f8:	71 96       	adiw	r30, 0x11	; 17
     8fa:	c8 17       	cp	r28, r24
     8fc:	21 f0       	breq	.+8      	; 0x906 <disp_ch+0x3c>
     8fe:	73 94       	inc	r7
     900:	8e e1       	ldi	r24, 0x1E	; 30
     902:	78 16       	cp	r7, r24
     904:	c0 f3       	brcs	.-16     	; 0x8f6 <disp_ch+0x2c>
	}
	if(k<len)
     906:	8e e1       	ldi	r24, 0x1E	; 30
     908:	78 16       	cp	r7, r24
     90a:	08 f0       	brcs	.+2      	; 0x90e <disp_ch+0x44>
     90c:	17 c1       	rjmp	.+558    	; 0xb3c <disp_ch+0x272>
	{
		
		if(c=='-'||c==':') 
     90e:	cd 32       	cpi	r28, 0x2D	; 45
     910:	11 f0       	breq	.+4      	; 0x916 <disp_ch+0x4c>
     912:	ca 33       	cpi	r28, 0x3A	; 58
     914:	19 f4       	brne	.+6      	; 0x91c <disp_ch+0x52>
			width=ASC_CHR_WIDTH-2;
     916:	e6 e0       	ldi	r30, 0x06	; 6
     918:	8e 2e       	mov	r8, r30
     91a:	07 c0       	rjmp	.+14     	; 0x92a <disp_ch+0x60>
		else if(c=='|')
     91c:	cc 37       	cpi	r28, 0x7C	; 124
     91e:	19 f4       	brne	.+6      	; 0x926 <disp_ch+0x5c>
			width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
     920:	74 e0       	ldi	r23, 0x04	; 4
     922:	87 2e       	mov	r8, r23
     924:	02 c0       	rjmp	.+4      	; 0x92a <disp_ch+0x60>
		else 
			width=ASC_CHR_WIDTH;
     926:	68 e0       	ldi	r22, 0x08	; 8
     928:	86 2e       	mov	r8, r22
		
		if(CurOffset==1) //下半部是写半个字节
     92a:	80 91 c8 00 	lds	r24, 0x00C8
     92e:	81 30       	cpi	r24, 0x01	; 1
     930:	09 f0       	breq	.+2      	; 0x934 <disp_ch+0x6a>
     932:	7d c0       	rjmp	.+250    	; 0xa2e <disp_ch+0x164>
		{
			for(j=0;j<width;j++)
     934:	dd 24       	eor	r13, r13
     936:	d8 14       	cp	r13, r8
     938:	68 f5       	brcc	.+90     	; 0x994 <disp_ch+0xca>
     93a:	0c 2d       	mov	r16, r12
     93c:	11 27       	eor	r17, r17
     93e:	ee 24       	eor	r14, r14
     940:	ff 24       	eor	r15, r15
			{
				SetPageCol(uPage,uCol+j);
     942:	8c 2d       	mov	r24, r12
     944:	8d 0d       	add	r24, r13
     946:	68 2f       	mov	r22, r24
     948:	89 2d       	mov	r24, r9
     94a:	0e 94 27 04 	call	0x84e <SetPageCol>
				ch_w=ASC_16[k].Msk[j];
     94e:	87 2d       	mov	r24, r7
     950:	99 27       	eor	r25, r25
     952:	fc 01       	movw	r30, r24
     954:	54 e0       	ldi	r21, 0x04	; 4
     956:	ee 0f       	add	r30, r30
     958:	ff 1f       	adc	r31, r31
     95a:	5a 95       	dec	r21
     95c:	e1 f7       	brne	.-8      	; 0x956 <disp_ch+0x8c>
     95e:	e8 0f       	add	r30, r24
     960:	f9 1f       	adc	r31, r25
     962:	ee 0d       	add	r30, r14
     964:	ff 1d       	adc	r31, r15

⌨️ 快捷键说明

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