📄 ks0108.lst
字号:
0BCE BB87 OUT 0x17,R24
(0140) LCD_WriteC(0x3F); //开显示
0BCF E30F LDI R16,0x3F
0BD0 DF94 RCALL _LCD_WriteC
(0141) LCD_WriteC(0xC0);//设置起始行为0
0BD1 EC00 LDI R16,0xC0
0BD2 DF92 RCALL _LCD_WriteC
(0142) Set_XY(0,0); //设置显示位置坐标(0,0);
0BD3 2722 CLR R18
0BD4 2700 CLR R16
0BD5 DFB3 RCALL _Set_XY
0BD6 9508 RET
_LCD_WriteHZ:
i --> R20
hz --> R22
cs --> Y+8
y --> R10
x --> R12
0BD7 940E0C7E CALL push_gset4
0BD9 2EA2 MOV R10,R18
0BDA 2EC0 MOV R12,R16
0BDB 856A LDD R22,Y+10
0BDC 857B LDD R23,Y+11
(0143) }
(0144) /*-------------------------------------------------
(0145) LCD汉字显示函数:
(0146) x:页地址,y:列地址,cs:屏幕选择,x:0-7;y:0-63
(0147) 在cs选择的LCD x行y列显示hz[]所存的汉字(16*16)
(0148) -------------------------------------------------*/
(0149) void LCD_WriteHZ(uchar x,uchar y,uchar cs,uchar const *hz)
(0150) {uchar i;
(0151) LCD_Select(cs);
0BDD 8508 LDD R16,Y+8
0BDE DFC0 RCALL _LCD_Select
(0152) Set_XY(x,y);
0BDF 2D2A MOV R18,R10
0BE0 2D0C MOV R16,R12
0BE1 DFA7 RCALL _Set_XY
(0153) for(i=0;i<16;i++){
0BE2 2744 CLR R20
0BE3 C006 RJMP 0x0BEA
(0154) LCD_WriteD(*hz);
0BE4 01FB MOVW R30,R22
0BE5 9104 LPM R16,0(Z)
0BE6 DF90 RCALL _LCD_WriteD
(0155) hz++;}
0BE7 5F6F SUBI R22,0xFF
0BE8 4F7F SBCI R23,0xFF
0BE9 9543 INC R20
0BEA 3140 CPI R20,0x10
0BEB F3C0 BCS 0x0BE4
(0156) Set_XY(x+1,y);
0BEC 2D2A MOV R18,R10
0BED 2D0C MOV R16,R12
0BEE 5F0F SUBI R16,0xFF
0BEF DF99 RCALL _Set_XY
(0157) for(i=0;i<16;i++){
0BF0 2744 CLR R20
0BF1 C006 RJMP 0x0BF8
(0158) LCD_WriteD(*hz);
0BF2 01FB MOVW R30,R22
0BF3 9104 LPM R16,0(Z)
0BF4 DF82 RCALL _LCD_WriteD
(0159) hz++;}
0BF5 5F6F SUBI R22,0xFF
0BF6 4F7F SBCI R23,0xFF
0BF7 9543 INC R20
0BF8 3140 CPI R20,0x10
0BF9 F3C0 BCS 0x0BF2
0BFA 940E0C76 CALL pop_gset4
0BFC 9508 RET
_LCD_WriteCH:
i --> R20
ch --> R22
cs --> Y+8
y --> R10
x --> R12
0BFD 940E0C7E CALL push_gset4
0BFF 2EA2 MOV R10,R18
0C00 2EC0 MOV R12,R16
0C01 856A LDD R22,Y+10
0C02 857B LDD R23,Y+11
(0160) }
(0161)
(0162) /*--------------------------------------------------
(0163) LCD字符显示函数:
(0164) x:页地址,y:列地址,cs:屏幕选择,
(0165) 在cs选择的LCD x行y列显示ch[]所存的字符(8*16)
(0166) ----------------------------------------------------*/
(0167) void LCD_WriteCH(uchar x,uchar y,uchar cs,uchar const *ch)
(0168) {uchar i;
(0169) LCD_Select(cs);
0C03 8508 LDD R16,Y+8
0C04 DF9A RCALL _LCD_Select
(0170) Set_XY(x,y);
0C05 2D2A MOV R18,R10
0C06 2D0C MOV R16,R12
0C07 DF81 RCALL _Set_XY
(0171) for(i=0;i<8;i++){
0C08 2744 CLR R20
0C09 C006 RJMP 0x0C10
(0172) LCD_WriteD(*ch);
0C0A 01FB MOVW R30,R22
0C0B 9104 LPM R16,0(Z)
0C0C DF6A RCALL _LCD_WriteD
(0173) ch++;}
0C0D 5F6F SUBI R22,0xFF
0C0E 4F7F SBCI R23,0xFF
0C0F 9543 INC R20
0C10 3048 CPI R20,0x8
0C11 F3C0 BCS 0x0C0A
(0174) Set_XY(x+1,y);
0C12 2D2A MOV R18,R10
0C13 2D0C MOV R16,R12
0C14 5F0F SUBI R16,0xFF
0C15 DF73 RCALL _Set_XY
(0175) for(i=0;i<8;i++){
0C16 2744 CLR R20
0C17 C006 RJMP 0x0C1E
(0176) LCD_WriteD(*ch);
0C18 01FB MOVW R30,R22
0C19 9104 LPM R16,0(Z)
0C1A DF5C RCALL _LCD_WriteD
(0177) ch++;}
0C1B 5F6F SUBI R22,0xFF
0C1C 4F7F SBCI R23,0xFF
0C1D 9543 INC R20
0C1E 3048 CPI R20,0x8
0C1F F3C0 BCS 0x0C18
0C20 940E0C76 CALL pop_gset4
0C22 9508 RET
_LCD_WritePIC:
jj --> R22
ii --> R20
kk --> R22
pic --> R10
j --> R12
i --> R14
0C23 940E0C7C CALL push_gset5
0C25 2EC2 MOV R12,R18
0C26 2EE0 MOV R14,R16
0C27 84AA LDD R10,Y+10
0C28 84BB LDD R11,Y+11
(0178) }
(0179) /*-------------------------------------------------
(0180) LCD图象显示函数
(0181) i:起始行,j:结束行
(0182) 从LCD的i行到j行显示数组pic[]所存的图象
(0183) --------------------------------------------------*/
(0184) void LCD_WritePIC(uchar i,uchar j,uchar const *pic)
(0185) {uchar ii,jj,kk;
(0186) ii=0;jj=0;kk=0;
0C29 2744 CLR R20
0C2A 2766 CLR R22
(0187) for(ii=i;ii<j;ii++){
0C2B 2D4E MOV R20,R14
0C2C C021 RJMP 0x0C4E
(0188) for(kk=0;kk<64;kk++){ //写左屏幕
0C2D 2766 CLR R22
0C2E C00C RJMP 0x0C3B
(0189) LCD_Select(L);
0C2F E100 LDI R16,0x10
0C30 DF6E RCALL _LCD_Select
(0190) Set_XY(ii,kk);
0C31 2F26 MOV R18,R22
0C32 2F04 MOV R16,R20
0C33 DF55 RCALL _Set_XY
(0191) LCD_WriteD(*pic);
0C34 01F5 MOVW R30,R10
0C35 9104 LPM R16,0(Z)
0C36 DF40 RCALL _LCD_WriteD
(0192) pic++;}
0C37 01C5 MOVW R24,R10
0C38 9601 ADIW R24,1
0C39 015C MOVW R10,R24
0C3A 9563 INC R22
0C3B 3460 CPI R22,0x40
0C3C F390 BCS 0x0C2F
(0193) for(kk=0;kk<64;kk++){ //写右屏幕
0C3D 2766 CLR R22
0C3E C00C RJMP 0x0C4B
(0194) LCD_Select(R);
0C3F E200 LDI R16,0x20
0C40 DF5E RCALL _LCD_Select
(0195) Set_XY(ii,kk);
0C41 2F26 MOV R18,R22
0C42 2F04 MOV R16,R20
0C43 DF45 RCALL _Set_XY
(0196) LCD_WriteD(*pic);
0C44 01F5 MOVW R30,R10
0C45 9104 LPM R16,0(Z)
0C46 DF30 RCALL _LCD_WriteD
(0197) pic++;}
0C47 01C5 MOVW R24,R10
0C48 9601 ADIW R24,1
0C49 015C MOVW R10,R24
0C4A 9563 INC R22
0C4B 3460 CPI R22,0x40
0C4C F390 BCS 0x0C3F
0C4D 9543 INC R20
0C4E 154C CP R20,R12
0C4F F2E8 BCS 0x0C2D
0C50 940E0C79 CALL pop_gset5
0C52 9508 RET
_main:
i --> R20
0C53 9722 SBIW R28,2
FILE: C:\DOCUME~1\wpzhao.USTC\MYDOCU~1\我的文档\我的ICC\LCD_KS0108\KS0108.c
(0001)
(0002) /*----------------------------------
(0003) 成功地LCD_ks0108(128*64)!
(0004) 可显示字符,汉字,图象,并可滚动显示!
(0005) LGM12641BS1R--KS0108 Driver
(0006) 2007.4.14
(0007) -------------------------------------*/
(0008)
(0009) #include <iom16v.h>
(0010) #include <macros.h>
(0011) #include <delay.h>
(0012) #include "LCD.h"
(0013) #include "zimo2.h"
(0014)
(0015) #define uchar unsigned char
(0016) #define uint unsigned int
(0017)
(0018) void main()
(0019) {uchar i=0;
0C54 2744 CLR R20
(0020) LCD_Init();
0C55 DF72 RCALL _LCD_Init
(0021) /* LCD_WriteCH(0,4,L,X1);
(0022) LCD_WriteHZ(2,0,L,hz5);
(0023) LCD_WriteHZ(3,0,L,hz5);
(0024) LCD_WriteHZ(4,0,L,hz5);
(0025) LCD_WriteHZ(5,0,L,hz5);
(0026) LCD_WriteHZ(6,0,L,hz5);
(0027)
(0028) LCD_WriteCH(0,14,L,MaoHao);
(0029)
(0030) LCD_WriteCH(0,24,L,X4);
(0031) LCD_WriteHZ(4,20,L,hz5);
(0032) LCD_WriteHZ(5,20,L,hz5);
(0033) LCD_WriteHZ(6,20,L,hz5);
(0034)
(0035) LCD_WriteCH(0,34,L,MaoHao);
(0036)
(0037) LCD_WriteCH(0,44,L,X3);
(0038) LCD_WriteHZ(5,40,L,hz5);
(0039) LCD_WriteHZ(6,40,L,hz5);
(0040)
(0041) LCD_WriteCH(0,56,L,MaoHao);
(0042)
(0043) LCD_WriteHZ(0,10,R,X3);
(0044) LCD_WriteHZ(6,0,R,hz5);
(0045)
(0046) LCD_WriteHZ(3,20,R,hz5);
(0047) LCD_WriteHZ(4,20,R,hz5);
(0048) LCD_WriteHZ(5,20,R,hz5);
(0049) LCD_WriteHZ(6,20,R,hz5);
(0050) LCD_WriteHZ(4,40,R,hz5);
(0051) LCD_WriteHZ(5,40,R,hz5);
(0052) LCD_WriteHZ(6,40,R,hz5);
(0053) LCD_WriteHZ(6,40,R,hz5);*/
(0054)
(0055) /* LCD_WriteHZ(0,16,L,hz0);
(0056) LCD_WriteHZ(1,32,L,hz1);
(0057) LCD_WriteHZ(2,48,L,hz2);
(0058) LCD_WriteHZ(3,0,R,hz3);
(0059) LCD_WriteHZ(4,16,R,hz4);
(0060) delay_nms(2500);
(0061) while(1){
(0062) Set_Startline(i++);
(0063) if(i==64) i=0;
(0064) LCD_WritePIC(0,8,Hello);} */
(0065) LCD_WritePIC(0,8,Hello);
0C56 E384 LDI R24,0x34
0C57 E092 LDI R25,2
0C58 8399 STD Y+1,R25
0C59 8388 STD Y+0,R24
0C5A E028 LDI R18,0x8
0C5B 2700 CLR R16
0C5C DFC6 RCALL _LCD_WritePIC
(0066) delay_nms(500);
0C5D EF04 LDI R16,0xF4
0C5E E011 LDI R17,1
0C5F DEF6 RCALL _delay_nms
(0067) LCD_WritePIC(0,8,psc);
0C60 E384 LDI R24,0x34
0C61 E09E LDI R25,0xE
0C62 8399 STD Y+1,R25
0C63 8388 STD Y+0,R24
0C64 E028 LDI R18,0x8
0C65 2700 CLR R16
0C66 DFBC RCALL _LCD_WritePIC
(0068) delay_nms(500);
0C67 EF04 LDI R16,0xF4
0C68 E011 LDI R17,1
0C69 DEEC RCALL _delay_nms
(0069) LCD_WritePIC(0,8,gui);
FILE: <library>
0C6A E384 LDI R24,0x34
0C6B E192 LDI R25,0x12
0C6C 8399 STD Y+1,R25
0C6D 8388 STD Y+0,R24
0C6E E028 LDI R18,0x8
0C6F 2700 CLR R16
0C70 DFB2 RCALL _LCD_WritePIC
0C71 9622 ADIW R28,2
0C72 9508 RET
pop_gset2:
0C73 E0E2 LDI R30,2
0C74 940C0C88 JMP pop
pop_gset4:
0C76 E0E8 LDI R30,0x8
0C77 940C0C88 JMP pop
pop_gset5:
0C79 27EE CLR R30
0C7A 940C0C88 JMP pop
push_gset5:
0C7C 92FA ST R15,-Y
0C7D 92EA ST R14,-Y
push_gset4:
0C7E 92DA ST R13,-Y
0C7F 92CA ST R12,-Y
push_gset3:
0C80 92BA ST R11,-Y
0C81 92AA ST R10,-Y
push_gset2:
0C82 937A ST R23,-Y
0C83 936A ST R22,-Y
push_gset1:
0C84 935A ST R21,-Y
0C85 934A ST R20,-Y
0C86 9508 RET
pop_gset1:
0C87 E0E1 LDI R30,1
pop:
0C88 9149 LD R20,Y+
0C89 9159 LD R21,Y+
0C8A FDE0 SBRC R30,0
0C8B 9508 RET
0C8C 9169 LD R22,Y+
0C8D 9179 LD R23,Y+
0C8E FDE1 SBRC R30,1
0C8F 9508 RET
0C90 90A9 LD R10,Y+
0C91 90B9 LD R11,Y+
0C92 FDE2 SBRC R30,2
0C93 9508 RET
0C94 90C9 LD R12,Y+
0C95 90D9 LD R13,Y+
0C96 FDE3 SBRC R30,3
0C97 9508 RET
0C98 90E9 LD R14,Y+
0C99 90F9 LD R15,Y+
0C9A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -