lcd12864.lst

来自「atmega128串行操作lcd12864」· LST 代码 · 共 771 行 · 第 1/2 页

LST
771
字号
    0013D 9A15      SBI	0x02,5
    0013E 981D      CBI	0x03,5
(0109)   if(date&0x80)
    0013F FF47      SBRS	R20,7
    00140 C003      RJMP	0x0144
(0110)     {SID_SET;}
    00141 9A14      SBI	0x02,4
    00142 9A1C      SBI	0x03,4
    00143 C002      RJMP	0x0146
(0111)   else
(0112)       {SID_CLE;}
    00144 9A14      SBI	0x02,4
    00145 981C      CBI	0x03,4
(0113) delay_us(1);
    00146 E001      LDI	R16,1
    00147 E010      LDI	R17,0
    00148 DF5E      RCALL	_delay_us
(0114)  SCLK_SET;//时钟总线拉高,数据传送给显示屏
    00149 9A15      SBI	0x02,5
    0014A 9A1D      SBI	0x03,5
(0115)  delay_us(10);
    0014B E00A      LDI	R16,0xA
    0014C E010      LDI	R17,0
    0014D DF59      RCALL	_delay_us
(0116)  SCLK_CLE;
    0014E 9A15      SBI	0x02,5
    0014F 981D      CBI	0x03,5
(0117)  delay_us(3);
    00150 E003      LDI	R16,3
    00151 E010      LDI	R17,0
    00152 DF54      RCALL	_delay_us
(0118)  date=date<<1;//高位先发
    00153 0F44      LSL	R20
    00154 9563      INC	R22
    00155 3068      CPI	R22,0x8
    00156 F330      BCS	0x013D
(0119) }
(0120) date=dat&0xf0;
    00157 2D4A      MOV	R20,R10
    00158 7F40      ANDI	R20,0xF0
(0121) for(i=0;i<8;i++)//把数据送到线上去
    00159 2766      CLR	R22
    0015A C018      RJMP	0x0173
(0122) {
(0123)   SCLK_CLE;
    0015B 9A15      SBI	0x02,5
    0015C 981D      CBI	0x03,5
(0124)   if(date&0x80)
    0015D FF47      SBRS	R20,7
    0015E C003      RJMP	0x0162
(0125)     {SID_SET;}
    0015F 9A14      SBI	0x02,4
    00160 9A1C      SBI	0x03,4
    00161 C002      RJMP	0x0164
(0126)   else
(0127)       {SID_CLE;}
    00162 9A14      SBI	0x02,4
    00163 981C      CBI	0x03,4
(0128) delay_us(1);
    00164 E001      LDI	R16,1
    00165 E010      LDI	R17,0
    00166 DF40      RCALL	_delay_us
(0129)  SCLK_SET;//时钟总线拉高,数据传送给显示屏
    00167 9A15      SBI	0x02,5
    00168 9A1D      SBI	0x03,5
(0130)  delay_us(3);
    00169 E003      LDI	R16,3
    0016A E010      LDI	R17,0
    0016B DF3B      RCALL	_delay_us
(0131)  SCLK_CLE;
    0016C 9A15      SBI	0x02,5
    0016D 981D      CBI	0x03,5
(0132)  delay_us(3);
    0016E E003      LDI	R16,3
    0016F E010      LDI	R17,0
    00170 DF36      RCALL	_delay_us
(0133)  date=date<<1;//高位先发
    00171 0F44      LSL	R20
    00172 9563      INC	R22
    00173 3068      CPI	R22,0x8
    00174 F330      BCS	0x015B
(0134) }
(0135) date=dat<<4;
    00175 2D4A      MOV	R20,R10
    00176 704F      ANDI	R20,0xF
    00177 9542      SWAP	R20
(0136) for(i=0;i<8;i++)//把数据送到线上去
    00178 2766      CLR	R22
    00179 C018      RJMP	0x0192
(0137) { SCLK_CLE;
    0017A 9A15      SBI	0x02,5
    0017B 981D      CBI	0x03,5
(0138)   if(date&0x80)
    0017C FF47      SBRS	R20,7
    0017D C003      RJMP	0x0181
(0139)     {SID_SET;}
    0017E 9A14      SBI	0x02,4
    0017F 9A1C      SBI	0x03,4
    00180 C002      RJMP	0x0183
(0140)   else
(0141)       {SID_CLE;}
    00181 9A14      SBI	0x02,4
    00182 981C      CBI	0x03,4
(0142) delay_us(1);
    00183 E001      LDI	R16,1
    00184 E010      LDI	R17,0
    00185 DF21      RCALL	_delay_us
(0143)  SCLK_SET;//时钟总线拉高,数据传送给显示屏
    00186 9A15      SBI	0x02,5
    00187 9A1D      SBI	0x03,5
(0144)  delay_us(10);
    00188 E00A      LDI	R16,0xA
    00189 E010      LDI	R17,0
    0018A DF1C      RCALL	_delay_us
(0145)  SCLK_CLE;
    0018B 9A15      SBI	0x02,5
    0018C 981D      CBI	0x03,5
(0146)  delay_us(3);
    0018D E003      LDI	R16,3
    0018E E010      LDI	R17,0
    0018F DF17      RCALL	_delay_us
(0147)  date=date<<1;//高位先发
    00190 0F44      LSL	R20
    00191 9563      INC	R22
    00192 3068      CPI	R22,0x8
    00193 F330      BCS	0x017A
(0148) }
(0149) CS_CLE;  
    00194 9A13      SBI	0x02,3
    00195 981B      CBI	0x03,3
(0150) delay_us(15); 
    00196 E00F      LDI	R16,0xF
    00197 E010      LDI	R17,0
    00198 DF0E      RCALL	_delay_us
    00199 940C 0236 JMP	pop_xgsetF00C
_Lcd_putsachar:
  dat                  --> R10
  y                    --> R20
  x                    --> R12
    0019B 940E 023D CALL	push_xgsetF03C
    0019D 2F42      MOV	R20,R18
    0019E 2EC0      MOV	R12,R16
    0019F 84A8      LDD	R10,Y+8
(0151) }
(0152)  
(0153) //在指定的位置显示一个字母
(0154) void Lcd_putsachar(unsigned char x,unsigned char y,unsigned char dat)
(0155) {
(0156) switch(x)
    001A0 2D6C      MOV	R22,R12
    001A1 2777      CLR	R23
    001A2 3060      CPI	R22,0
    001A3 0767      CPC	R22,R23
    001A4 F069      BEQ	0x01B2
    001A5 3061      CPI	R22,1
    001A6 E0E0      LDI	R30,0
    001A7 077E      CPC	R23,R30
    001A8 F079      BEQ	0x01B8
    001A9 3062      CPI	R22,2
    001AA E0E0      LDI	R30,0
    001AB 077E      CPC	R23,R30
    001AC F089      BEQ	0x01BE
    001AD 3063      CPI	R22,3
    001AE E0E0      LDI	R30,0
    001AF 077E      CPC	R23,R30
    001B0 F099      BEQ	0x01C4
    001B1 C017      RJMP	0x01C9
(0157)     {
(0158) 	case 0:
(0159) 	   Write_Command(0x80);
    001B2 E800      LDI	R16,0x80
    001B3 DF1B      RCALL	_Write_Command
(0160) 	   Write_Command(0x80+y);
    001B4 2F04      MOV	R16,R20
    001B5 5800      SUBI	R16,0x80
    001B6 DF18      RCALL	_Write_Command
(0161) 	   break;
    001B7 C011      RJMP	0x01C9
(0162) 	case 1:
(0163) 	   Write_Command(0x90);
    001B8 E900      LDI	R16,0x90
    001B9 DF15      RCALL	_Write_Command
(0164) 	   Write_Command(0x90+y);
    001BA 2F04      MOV	R16,R20
    001BB 5700      SUBI	R16,0x70
    001BC DF12      RCALL	_Write_Command
(0165) 	   break;
    001BD C00B      RJMP	0x01C9
(0166) 	case 2:
(0167) 	   Write_Command(0x88);
    001BE E808      LDI	R16,0x88
    001BF DF0F      RCALL	_Write_Command
(0168) 	   Write_Command(0x88+y);
    001C0 2F04      MOV	R16,R20
    001C1 5708      SUBI	R16,0x78
    001C2 DF0C      RCALL	_Write_Command
(0169) 	   break;
    001C3 C005      RJMP	0x01C9
(0170) 	case 3:
(0171) 	   Write_Command(0x98);
    001C4 E908      LDI	R16,0x98
    001C5 DF09      RCALL	_Write_Command
(0172) 	   Write_Command(0x98+y);
    001C6 2F04      MOV	R16,R20
    001C7 5608      SUBI	R16,0x68
    001C8 DF06      RCALL	_Write_Command
(0173) 	   break;
(0174) 	 }
(0175) Write_one_char(dat);//写数据
    001C9 2D0A      MOV	R16,R10
    001CA DF6A      RCALL	_Write_one_char
    001CB 940C 0246 JMP	pop_xgsetF03C
_Lcd_puts_any:
  i                    --> R10
  p                    --> R12
  y                    --> R20
  x                    --> R14
    001CD 940E 021A CALL	push_xgsetF0FC
    001CF 2F42      MOV	R20,R18
    001D0 2EE0      MOV	R14,R16
    001D1 84CA      LDD	R12,Y+10
    001D2 84DB      LDD	R13,Y+11
(0176) }
(0177) //从指定的位置开始显示汉字或字符
(0178) void Lcd_puts_any(unsigned char x,unsigned char y,unsigned char *p)
(0179) {
(0180) unsigned char i=0;
    001D3 24AA      CLR	R10
(0181) switch(x)
    001D4 2D6E      MOV	R22,R14
    001D5 2777      CLR	R23
    001D6 3060      CPI	R22,0
    001D7 0767      CPC	R22,R23
    001D8 F069      BEQ	0x01E6
    001D9 3061      CPI	R22,1
    001DA E0E0      LDI	R30,0
    001DB 077E      CPC	R23,R30
    001DC F079      BEQ	0x01EC
    001DD 3062      CPI	R22,2
    001DE E0E0      LDI	R30,0
    001DF 077E      CPC	R23,R30
    001E0 F089      BEQ	0x01F2
    001E1 3063      CPI	R22,3
    001E2 E0E0      LDI	R30,0
    001E3 077E      CPC	R23,R30
    001E4 F099      BEQ	0x01F8
    001E5 C017      RJMP	0x01FD
(0182)     {
(0183) 	case 0:
(0184) 	   Write_Command(0x80);
    001E6 E800      LDI	R16,0x80
    001E7 DEE7      RCALL	_Write_Command
(0185) 	   Write_Command(0x80+y);
    001E8 2F04      MOV	R16,R20
    001E9 5800      SUBI	R16,0x80
    001EA DEE4      RCALL	_Write_Command
(0186) 	   break;
    001EB C011      RJMP	0x01FD
(0187) 	case 1:
(0188) 	   Write_Command(0x90);
    001EC E900      LDI	R16,0x90
    001ED DEE1      RCALL	_Write_Command
(0189) 	   Write_Command(0x90+y);
    001EE 2F04      MOV	R16,R20
    001EF 5700      SUBI	R16,0x70
    001F0 DEDE      RCALL	_Write_Command
(0190) 	   break;
    001F1 C00B      RJMP	0x01FD
(0191) 	case 2:
(0192) 	   Write_Command(0x88);
    001F2 E808      LDI	R16,0x88
    001F3 DEDB      RCALL	_Write_Command
(0193) 	   Write_Command(0x88+y);
    001F4 2F04      MOV	R16,R20
    001F5 5708      SUBI	R16,0x78
    001F6 DED8      RCALL	_Write_Command
(0194) 	   break;
    001F7 C005      RJMP	0x01FD
(0195) 	case 3:
(0196) 	   Write_Command(0x98);
    001F8 E908      LDI	R16,0x98
    001F9 DED5      RCALL	_Write_Command
(0197) 	   Write_Command(0x98+y);
    001FA 2F04      MOV	R16,R20
    001FB 5608      SUBI	R16,0x68
    001FC DED2      RCALL	_Write_Command
(0198) 	   break;
(0199) 	 }
(0200) for(i=0;p[i]!='\0';i++)
    001FD 24AA      CLR	R10
    001FE C007      RJMP	0x0206
(0201) 	{
(0202) 		Write_one_char(p[i]);
FILE: <library>
    001FF 2DEA      MOV	R30,R10
    00200 27FF      CLR	R31
    00201 0DEC      ADD	R30,R12
    00202 1DFD      ADC	R31,R13
    00203 8100      LD	R16,Z
    00204 DF30      RCALL	_Write_one_char
    00205 94A3      INC	R10
    00206 2DEA      MOV	R30,R10
    00207 27FF      CLR	R31
    00208 0DEC      ADD	R30,R12
    00209 1DFD      ADC	R31,R13
    0020A 8020      LD	R2,Z
    0020B 2022      TST	R2
    0020C F791      BNE	0x01FF
    0020D 940C 020F JMP	pop_xgsetF0FC
pop_xgsetF0FC:
    0020F 90A9      LD	R10,Y+
    00210 90B9      LD	R11,Y+
    00211 90C9      LD	R12,Y+
    00212 90D9      LD	R13,Y+
    00213 90E9      LD	R14,Y+
    00214 90F9      LD	R15,Y+
    00215 9149      LD	R20,Y+
    00216 9159      LD	R21,Y+
    00217 9169      LD	R22,Y+
    00218 9179      LD	R23,Y+
    00219 9508      RET
push_xgsetF0FC:
    0021A 937A      ST	-Y,R23
    0021B 936A      ST	-Y,R22
push_xgset30FC:
    0021C 935A      ST	-Y,R21
    0021D 934A      ST	-Y,R20
push_xgset00FC:
    0021E 92FA      ST	-Y,R15
    0021F 92EA      ST	-Y,R14
push_xgset003C:
    00220 92DA      ST	-Y,R13
    00221 92CA      ST	-Y,R12
    00222 92BA      ST	-Y,R11
    00223 92AA      ST	-Y,R10
    00224 9508      RET
push_xgsetF000:
    00225 937A      ST	-Y,R23
    00226 936A      ST	-Y,R22
    00227 935A      ST	-Y,R21
    00228 934A      ST	-Y,R20
    00229 9508      RET
pop_xgsetF000:
    0022A 9149      LD	R20,Y+
    0022B 9159      LD	R21,Y+
    0022C 9169      LD	R22,Y+
    0022D 9179      LD	R23,Y+
    0022E 9508      RET
push_xgsetF00C:
    0022F 937A      ST	-Y,R23
    00230 936A      ST	-Y,R22
    00231 935A      ST	-Y,R21
    00232 934A      ST	-Y,R20
    00233 92BA      ST	-Y,R11
    00234 92AA      ST	-Y,R10
    00235 9508      RET
pop_xgsetF00C:
    00236 90A9      LD	R10,Y+
    00237 90B9      LD	R11,Y+
    00238 9149      LD	R20,Y+
    00239 9159      LD	R21,Y+
    0023A 9169      LD	R22,Y+
    0023B 9179      LD	R23,Y+
    0023C 9508      RET
push_xgsetF03C:
    0023D 937A      ST	-Y,R23
    0023E 936A      ST	-Y,R22
    0023F 935A      ST	-Y,R21
    00240 934A      ST	-Y,R20
    00241 92DA      ST	-Y,R13
    00242 92CA      ST	-Y,R12
    00243 92BA      ST	-Y,R11
    00244 92AA      ST	-Y,R10
    00245 9508      RET
pop_xgsetF03C:
    00246 90A9      LD	R10,Y+
    00247 90B9      LD	R11,Y+
    00248 90C9      LD	R12,Y+
    00249 90D9      LD	R13,Y+
    0024A 9149      LD	R20,Y+
    0024B 9159      LD	R21,Y+
    0024C 9169      LD	R22,Y+
    0024D 9179      LD	R23,Y+
    0024E 9508      RET

⌨️ 快捷键说明

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