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

📄 ks0108.lst

📁 AVR(ATmega16)的LCD_KS0108控制器的驱动程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
    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 + -