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

📄 1602.lst

📁 有关1602液晶显示的驱动函数
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0134) 		t = *pBuffer;
     18B 01FB      MOVW	R30,R22
     18C 90A7      ELPM	R10,Z+
     18D 90B6      ELPM	R11,18(Z)
(0135) 		PORTG|=(1<<EN);
     18E 9180 0065 LDS	R24,0x0065
     190 6084      ORI	R24,4
     191 9380 0065 STS	0x0065,R24
(0136) 		PORTA = t;
     193 BAAB      OUT	0x1B,R10
(0137) 		PORTG&=~(1<<EN);				
     194 9180 0065 LDS	R24,0x0065
     196 7F8B      ANDI	R24,0xFB
     197 9380 0065 STS	0x0065,R24
(0138) 		pBuffer++;
     199 5F6E      SUBI	R22,0xFE
     19A 4F7F      SBCI	R23,0xFF
     19B 5041      SUBI	R20,1
     19C 4050      SBCI	R21,0
     19D 3040      CPI	R20,0
     19E 0745      CPC	R20,R21
     19F F759      BNE	0x018B
     1A0 940C 02B4 JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     1A2 940E 02AD CALL	push_xgsetF00C
     1A4 01A8      MOVW	R20,R16
(0139) 	}
(0140) 	
(0141) }
(0142) 
(0143) //=================================================
(0144) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0145) //入口:菜单数组首地址
(0146) //出口:无
(0147) //=================================================
(0148) void	WriteMenu(const uchar *pBuffer)
(0149) {
(0150) 	uchar	i,t;
(0151) 	writecom(0x80);   //数据地址
     1A5 E800      LDI	R16,0x80
     1A6 DF13      RCALL	_writecom
(0152) 	
(0153) 	PORTG|=(1<<RS);
     1A7 9180 0065 LDS	R24,0x0065
     1A9 6081      ORI	R24,1
     1AA 9380 0065 STS	0x0065,R24
(0154) 	PORTG&=~(1<<RW);
     1AC 9180 0065 LDS	R24,0x0065
     1AE 7F8D      ANDI	R24,0xFD
     1AF 9380 0065 STS	0x0065,R24
(0155) 	s_ms(50);
     1B1 E302      LDI	R16,0x32
     1B2 E010      LDI	R17,0
     1B3 DEC2      RCALL	_s_ms
(0156) 	for(i=0;i<16;i++)
     1B4 2766      CLR	R22
     1B5 C013      RJMP	0x01C9
(0157) 	{
(0158) 		t = *pBuffer;
     1B6 01FA      MOVW	R30,R20
     1B7 90A6      ELPM	R10,19(Z)
(0159) 		PORTA = t;
     1B8 BAAB      OUT	0x1B,R10
(0160) 		PORTG|=(1<<EN);
     1B9 9180 0065 LDS	R24,0x0065
     1BB 6084      ORI	R24,4
     1BC 9380 0065 STS	0x0065,R24
(0161) 		s_ms(50);
     1BE E302      LDI	R16,0x32
     1BF E010      LDI	R17,0
     1C0 DEB5      RCALL	_s_ms
(0162) 		PORTG&=~(1<<EN);				
     1C1 9180 0065 LDS	R24,0x0065
     1C3 7F8B      ANDI	R24,0xFB
     1C4 9380 0065 STS	0x0065,R24
(0163) 		pBuffer++;
     1C6 5F4F      SUBI	R20,0xFF
     1C7 4F5F      SBCI	R21,0xFF
     1C8 9563      INC	R22
     1C9 3160      CPI	R22,0x10
     1CA F358      BCS	0x01B6
(0164) 	}
(0165) 	writecom(0xC0);
     1CB EC00      LDI	R16,0xC0
     1CC DEED      RCALL	_writecom
(0166) 
(0167) 	PORTG|=(1<<RS);
     1CD 9180 0065 LDS	R24,0x0065
     1CF 6081      ORI	R24,1
     1D0 9380 0065 STS	0x0065,R24
(0168) 	PORTG&=~(1<<RW);
     1D2 9180 0065 LDS	R24,0x0065
     1D4 7F8D      ANDI	R24,0xFD
     1D5 9380 0065 STS	0x0065,R24
(0169) 	s_ms(50);	
     1D7 E302      LDI	R16,0x32
     1D8 E010      LDI	R17,0
     1D9 DE9C      RCALL	_s_ms
(0170) 	for(i=0;i<16;i++)
     1DA 2766      CLR	R22
     1DB C013      RJMP	0x01EF
(0171) 	{
(0172) 		t = *pBuffer;
     1DC 01FA      MOVW	R30,R20
     1DD 90A6      ELPM	R10,19(Z)
(0173) 		PORTA = t;
     1DE BAAB      OUT	0x1B,R10
(0174) 		PORTG|=(1<<EN);
     1DF 9180 0065 LDS	R24,0x0065
     1E1 6084      ORI	R24,4
     1E2 9380 0065 STS	0x0065,R24
(0175) 		s_ms(50);
     1E4 E302      LDI	R16,0x32
     1E5 E010      LDI	R17,0
     1E6 DE8F      RCALL	_s_ms
(0176) 		PORTG&=~(1<<EN);				
     1E7 9180 0065 LDS	R24,0x0065
     1E9 7F8B      ANDI	R24,0xFB
     1EA 9380 0065 STS	0x0065,R24
(0177) 		pBuffer++;
     1EC 5F4F      SUBI	R20,0xFF
     1ED 4F5F      SBCI	R21,0xFF
     1EE 9563      INC	R22
     1EF 3160      CPI	R22,0x10
     1F0 F358      BCS	0x01DC
     1F1 940C 02B4 JMP	pop_xgsetF00C
_WriteNum:
  num                  --> R20
  col                  --> R10
  row                  --> R22
     1F3 940E 02AD CALL	push_xgsetF00C
     1F5 0159      MOVW	R10,R18
     1F6 01B8      MOVW	R22,R16
     1F7 814E      LDD	R20,Y+6
     1F8 815F      LDD	R21,Y+7
(0178) 	}
(0179) }
(0180) //====================================================
(0181) // 描述:在任意位置写数字函数
(0182) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0183) //       ’col‘表示要写数字所在的列地址,只能为0--15
(0184) //		 ‘num’表示要写的数字,只能为0--9
(0185) // 出口:无
(0186) //===================================================
(0187) void	WriteNum(uint	row,uint	col,uint	 num)
(0188) {
(0189) 	if (row == 1)	row = 0x80 + col;
     1F9 3061      CPI	R22,1
     1FA E0E0      LDI	R30,0
     1FB 077E      CPC	R23,R30
     1FC F421      BNE	0x0201
     1FD 01B5      MOVW	R22,R10
     1FE 5860      SUBI	R22,0x80
     1FF 4F7F      SBCI	R23,0xFF
     200 C003      RJMP	0x0204
(0190) 	else	row = 0xC0 + col;
     201 01B5      MOVW	R22,R10
     202 5460      SUBI	R22,0x40
     203 4F7F      SBCI	R23,0xFF
(0191) 	writecom(row);
     204 2F06      MOV	R16,R22
     205 DEB4      RCALL	_writecom
(0192) 	if (num<=0 | num>9)	num =0x30;
     206 3040      CPI	R20,0
     207 0745      CPC	R20,R21
     208 F421      BNE	0x020D
     209 E081      LDI	R24,1
     20A E090      LDI	R25,0
     20B 015C      MOVW	R10,R24
     20C C002      RJMP	0x020F
     20D 24AA      CLR	R10
     20E 24BB      CLR	R11
     20F E089      LDI	R24,0x9
     210 E090      LDI	R25,0
     211 1784      CP	R24,R20
     212 0795      CPC	R25,R21
     213 F418      BCC	0x0217
     214 E061      LDI	R22,1
     215 E070      LDI	R23,0
     216 C002      RJMP	0x0219
     217 2766      CLR	R22
     218 2777      CLR	R23
     219 0115      MOVW	R2,R10
     21A 2A26      OR	R2,R22
     21B 2A37      OR	R3,R23
     21C 2022      TST	R2
     21D F411      BNE	0x0220
     21E 2033      TST	R3
     21F F019      BEQ	0x0223
     220 E340      LDI	R20,0x30
     221 E050      LDI	R21,0
     222 C002      RJMP	0x0225
(0193) 	else	num = 0x30 + num;
     223 5D40      SUBI	R20,0xD0
     224 4F5F      SBCI	R21,0xFF
(0194) 
(0195) 	PORTG|=(1<<RS);
     225 9180 0065 LDS	R24,0x0065
     227 6081      ORI	R24,1
     228 9380 0065 STS	0x0065,R24
(0196) 	s_ms(500);
     22A EF04      LDI	R16,0xF4
     22B E011      LDI	R17,1
     22C DE49      RCALL	_s_ms
(0197) 	PORTG&=~(1<<RW);
     22D 9180 0065 LDS	R24,0x0065
     22F 7F8D      ANDI	R24,0xFD
     230 9380 0065 STS	0x0065,R24
(0198) 	s_ms(500);
     232 EF04      LDI	R16,0xF4
     233 E011      LDI	R17,1
     234 DE41      RCALL	_s_ms
(0199) 	PORTA = num;
     235 BB4B      OUT	0x1B,R20
(0200) 	s_ms(500);
     236 EF04      LDI	R16,0xF4
     237 E011      LDI	R17,1
     238 DE3D      RCALL	_s_ms
(0201) 	PORTG|=(1<<EN);
     239 9180 0065 LDS	R24,0x0065
     23B 6084      ORI	R24,4
     23C 9380 0065 STS	0x0065,R24
(0202) 	s_ms(500);
     23E EF04      LDI	R16,0xF4
     23F E011      LDI	R17,1
     240 DE35      RCALL	_s_ms
(0203) 	PORTG&=~(1<<EN);	
     241 9180 0065 LDS	R24,0x0065
     243 7F8B      ANDI	R24,0xFB
     244 9380 0065 STS	0x0065,R24
(0204) 	s_ms(500);			
     246 EF04      LDI	R16,0xF4
     247 E011      LDI	R17,1
     248 DE2D      RCALL	_s_ms
     249 940C 02B4 JMP	pop_xgsetF00C
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     24B 940E 02BB CALL	push_xgsetF03C
     24D 2EA2      MOV	R10,R18
     24E 2F60      MOV	R22,R16
     24F 854A      LDD	R20,Y+10
     250 855B      LDD	R21,Y+11
(0205) }
(0206) //================================================================
(0207) // 描述:在任意位置写任意多个字符
(0208) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0209) //       ‘col’要写的字符所在的列,只能为0---15
(0210) //       ‘num’要写字符的个数
(0211) //       ‘pbuffer’要写字符的首地址
(0212) //================================================================== 
(0213) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0214) {
(0215) 	uchar i,t;
(0216) 	if (row == 1)	row = 0x80 + col;
     251 3061      CPI	R22,1
     252 F419      BNE	0x0256
     253 2D6A      MOV	R22,R10
     254 5860      SUBI	R22,0x80
     255 C002      RJMP	0x0258
(0217) 	else	row = 0xC0 + col;
     256 2D6A      MOV	R22,R10
     257 5460      SUBI	R22,0x40
(0218) 	writecom(row);
     258 2F06      MOV	R16,R22
     259 DE60      RCALL	_writecom
(0219) 	//if (num<=0 | num>9)	num =0x30;
(0220) 	//else	num = 0x30 + num;
(0221) 
(0222) 	PORTG|=(1<<RS);
     25A 9180 0065 LDS	R24,0x0065
     25C 6081      ORI	R24,1
     25D 9380 0065 STS	0x0065,R24
(0223) 	s_ms(500);
     25F EF04      LDI	R16,0xF4
     260 E011      LDI	R17,1
     261 DE14      RCALL	_s_ms
(0224) 	PORTG&=~(1<<RW);
     262 9180 0065 LDS	R24,0x0065
     264 7F8D      ANDI	R24,0xFD
     265 9380 0065 STS	0x0065,R24
(0225) 	s_ms(500);
     267 EF04      LDI	R16,0xF4
     268 E011      LDI	R17,1
     269 DE0C      RCALL	_s_ms
(0226) 	for(i=num;i!=0;i--)
     26A 84A8      LDD	R10,Y+8
     26B C01C      RJMP	0x0288
(0227) 	{
(0228) 		t = *pBuffer;
     26C 01FA      MOVW	R30,R20
     26D 80C0      LDD	R12,Z+0
(0229) 		s_ms(500);
     26E EF04      LDI	R16,0xF4
     26F E011      LDI	R17,1
     270 DE05      RCALL	_s_ms
(0230) 		PORTA = t;
     271 BACB      OUT	0x1B,R12
(0231) 		s_ms(500);
     272 EF04      LDI	R16,0xF4
     273 E011      LDI	R17,1
     274 DE01      RCALL	_s_ms
(0232) 		PORTG|=(1<<EN);
     275 9180 0065 LDS	R24,0x0065
     277 6084      ORI	R24,4
     278 9380 0065 STS	0x0065,R24
(0233) 		s_ms(500);
     27A EF04      LDI	R16,0xF4
     27B E011      LDI	R17,1
     27C DDF9      RCALL	_s_ms
(0234) 		PORTG&=~(1<<EN);		
     27D 9180 0065 LDS	R24,0x0065
     27F 7F8B      ANDI	R24,0xFB
     280 9380 0065 STS	0x0065,R24
(0235) 		s_ms(500);		
     282 EF04      LDI	R16,0xF4
     283 E011      LDI	R17,1
     284 DDF1      RCALL	_s_ms
(0236) 		pBuffer++;
     285 5F4F      SUBI	R20,0xFF
     286 4F5F      SBCI	R21,0xFF
     287 94AA      DEC	R10
     288 20AA      TST	R10
     289 F711      BNE	0x026C
     28A 940C 02C4 JMP	pop_xgsetF03C
_main:
     28C 9724      SBIW	R28,4
FILE: E:\产品\开发板\mega128-board\光盘\实验程序\1602液晶\1602.c
(0001) ///////////////////////////////////////////////////////////
(0002) //////////////北京东控自动化技术有限公司///////////////////
(0003) /////////////////////作者:乌东东//////////////////////////
(0004) ///////////////////////2008-9-18///////////////////////////
(0005) ///////////////////////版权所有////////////////////////////
(0006) 
(0007) 
(0008) #include<iom128v.h>
(0009) #include"1602.h"
(0010) #define uchar unsigned char 
(0011) #define uint unsigned int 
(0012) 
(0013) uchar wz[]={"WWW.ISMCU.COM"};
(0014) uchar gd[]={"Good Luck!"};
(0015) 
(0016) main()
(0017) {
(0018) DDRA=0xff;
     28D EF8F      LDI	R24,0xFF
     28E BB8A      OUT	0x1A,R24
(0019) PORTA=0xff;
     28F BB8B      OUT	0x1B,R24
(0020) DDRG=0xff;
     290 9380 0064 STS	0x0064,R24
(0021) PORTG=0xff;
     292 9380 0065 STS	0x0065,R24
(0022) LcdInit();
     294 DE51      RCALL	_LcdInit
(0023) WriteChar(1,1,13,wz);
     295 E080      LDI	R24,0
     296 E091      LDI	R25,1
     297 839B      STD	Y+3,R25
     298 838A      STD	Y+2,R24
     299 E08D      LDI	R24,0xD
     29A E090      LDI	R25,0
     29B 8399      STD	Y+1,R25
     29C 8388      STD	Y+0,R24
     29D E021      LDI	R18,1
     29E E001      LDI	R16,1
     29F DFAB      RCALL	_WriteChar
(0024) WriteChar(2,3,10,gd);
FILE: <library>
     2A0 E08E      LDI	R24,0xE
     2A1 E091      LDI	R25,1
     2A2 839B      STD	Y+3,R25
     2A3 838A      STD	Y+2,R24
     2A4 E08A      LDI	R24,0xA
     2A5 E090      LDI	R25,0
     2A6 8399      STD	Y+1,R25
     2A7 8388      STD	Y+0,R24
     2A8 E023      LDI	R18,3
     2A9 E002      LDI	R16,2
     2AA DFA0      RCALL	_WriteChar
     2AB 9624      ADIW	R28,4
     2AC 9508      RET
push_xgsetF00C:
     2AD 937A      ST	R23,-Y
     2AE 936A      ST	R22,-Y
     2AF 935A      ST	R21,-Y
     2B0 934A      ST	R20,-Y
     2B1 92BA      ST	R11,-Y
     2B2 92AA      ST	R10,-Y
     2B3 9508      RET
pop_xgsetF00C:
     2B4 90A9      LD	R10,Y+
     2B5 90B9      LD	R11,Y+
     2B6 9149      LD	R20,Y+
     2B7 9159      LD	R21,Y+
     2B8 9169      LD	R22,Y+
     2B9 9179      LD	R23,Y+
     2BA 9508      RET
push_xgsetF03C:
     2BB 937A      ST	R23,-Y
     2BC 936A      ST	R22,-Y
     2BD 935A      ST	R21,-Y
     2BE 934A      ST	R20,-Y
     2BF 92DA      ST	R13,-Y
     2C0 92CA      ST	R12,-Y
     2C1 92BA      ST	R11,-Y
     2C2 92AA      ST	R10,-Y
     2C3 9508      RET
pop_xgsetF03C:
     2C4 90A9      LD	R10,Y+
     2C5 90B9      LD	R11,Y+
     2C6 90C9      LD	R12,Y+
     2C7 90D9      LD	R13,Y+
     2C8 9149      LD	R20,Y+
     2C9 9159      LD	R21,Y+
     2CA 9169      LD	R22,Y+
     2CB 9179      LD	R23,Y+
     2CC 9508      RET

⌨️ 快捷键说明

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