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

📄 1602.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
     145 01A5      MOVW	R20,R10
     146 C00A      RJMP	0x0151
(0135) 	{
(0136) 		t = *pBuffer;
     147 01FB      MOVW	R30,R22
     148 90A7      ELPM	R10,Z+
     149 90B6      ELPM	R11,10(Z)
(0137) 		PORTA|=(1<<EN);
     14A 9ADF      SBI	0x1B,7
(0138) 		PORTD = t;
     14B BAA2      OUT	0x12,R10
(0139) 		PORTA&=~(1<<EN);				
     14C 98DF      CBI	0x1B,7
(0140) 		pBuffer++;
     14D 5F6E      SUBI	R22,0xFE
     14E 4F7F      SBCI	R23,0xFF
     14F 5041      SUBI	R20,1
     150 4050      SBCI	R21,0
     151 3040      CPI	R20,0
     152 0745      CPC	R20,R21
     153 F799      BNE	0x0147
     154 940C 0229 JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     156 940E 0222 CALL	push_xgsetF00C
     158 01A8      MOVW	R20,R16
(0141) 	}
(0142) 	
(0143) }
(0144) 
(0145) //=================================================
(0146) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0147) //入口:菜单数组首地址
(0148) //出口:无
(0149) //=================================================
(0150) void	WriteMenu(const uchar *pBuffer)
(0151) {
(0152) 	uchar	i,t;
(0153) 	writecom(0x80);   //数据地址
     159 E800      LDI	R16,0x80
     15A DF4F      RCALL	_writecom
(0154) 	
(0155) 	PORTA|=(1<<RS);
     15B 9ADD      SBI	0x1B,5
(0156) 	PORTA&=~(1<<RW);
     15C 98DE      CBI	0x1B,6
(0157) 	s_ms(50);
     15D E302      LDI	R16,0x32
     15E E010      LDI	R17,0
     15F DF16      RCALL	_s_ms
(0158) 	for(i=0;i<16;i++)
     160 2766      CLR	R22
     161 C00B      RJMP	0x016D
(0159) 	{
(0160) 		t = *pBuffer;
     162 01FA      MOVW	R30,R20
     163 90A6      ELPM	R10,11(Z)
(0161) 		PORTD = t;
     164 BAA2      OUT	0x12,R10
(0162) 		PORTA|=(1<<EN);
     165 9ADF      SBI	0x1B,7
(0163) 		s_ms(50);
     166 E302      LDI	R16,0x32
     167 E010      LDI	R17,0
     168 DF0D      RCALL	_s_ms
(0164) 		PORTA&=~(1<<EN);				
     169 98DF      CBI	0x1B,7
(0165) 		pBuffer++;
     16A 5F4F      SUBI	R20,0xFF
     16B 4F5F      SBCI	R21,0xFF
     16C 9563      INC	R22
     16D 3160      CPI	R22,0x10
     16E F398      BCS	0x0162
(0166) 	}
(0167) 	writecom(0xC0);
     16F EC00      LDI	R16,0xC0
     170 DF39      RCALL	_writecom
(0168) 
(0169) 	PORTA|=(1<<RS);
     171 9ADD      SBI	0x1B,5
(0170) 	PORTA&=~(1<<RW);
     172 98DE      CBI	0x1B,6
(0171) 	s_ms(50);	
     173 E302      LDI	R16,0x32
     174 E010      LDI	R17,0
     175 DF00      RCALL	_s_ms
(0172) 	for(i=0;i<16;i++)
     176 2766      CLR	R22
     177 C00B      RJMP	0x0183
(0173) 	{
(0174) 		t = *pBuffer;
     178 01FA      MOVW	R30,R20
     179 90A6      ELPM	R10,11(Z)
(0175) 		PORTD = t;
     17A BAA2      OUT	0x12,R10
(0176) 		PORTA|=(1<<EN);
     17B 9ADF      SBI	0x1B,7
(0177) 		s_ms(50);
     17C E302      LDI	R16,0x32
     17D E010      LDI	R17,0
     17E DEF7      RCALL	_s_ms
(0178) 		PORTA&=~(1<<EN);				
     17F 98DF      CBI	0x1B,7
(0179) 		pBuffer++;
     180 5F4F      SUBI	R20,0xFF
     181 4F5F      SBCI	R21,0xFF
     182 9563      INC	R22
     183 3160      CPI	R22,0x10
     184 F398      BCS	0x0178
     185 940C 0229 JMP	pop_xgsetF00C
_WriteNum:
  num                  --> R20
  col                  --> R10
  row                  --> R22
     187 940E 0222 CALL	push_xgsetF00C
     189 0159      MOVW	R10,R18
     18A 01B8      MOVW	R22,R16
     18B 814E      LDD	R20,Y+6
     18C 815F      LDD	R21,Y+7
(0180) 	}
(0181) }
(0182) //====================================================
(0183) // 描述:在任意位置写数字函数
(0184) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0185) //       ’col‘表示要写数字所在的列地址,只能为0--15
(0186) //		 ‘num’表示要写的数字,只能为0--9
(0187) // 出口:无
(0188) //===================================================
(0189) void	WriteNum(uint	row,uint	col,uint	 num)
(0190) {
(0191) 	if (row == 1)	row = 0x80 + col;
     18D 3061      CPI	R22,1
     18E E0E0      LDI	R30,0
     18F 077E      CPC	R23,R30
     190 F421      BNE	0x0195
     191 01B5      MOVW	R22,R10
     192 5860      SUBI	R22,0x80
     193 4F7F      SBCI	R23,0xFF
     194 C003      RJMP	0x0198
(0192) 	else	row = 0xC0 + col;
     195 01B5      MOVW	R22,R10
     196 5460      SUBI	R22,0x40
     197 4F7F      SBCI	R23,0xFF
(0193) 	writecom(row);
     198 2F06      MOV	R16,R22
     199 DF10      RCALL	_writecom
(0194) 	if (num<=0 | num>9)	num =0x30;
     19A 3040      CPI	R20,0
     19B 0745      CPC	R20,R21
     19C F421      BNE	0x01A1
     19D E081      LDI	R24,1
     19E E090      LDI	R25,0
     19F 015C      MOVW	R10,R24
     1A0 C002      RJMP	0x01A3
     1A1 24AA      CLR	R10
     1A2 24BB      CLR	R11
     1A3 E089      LDI	R24,0x9
     1A4 E090      LDI	R25,0
     1A5 1784      CP	R24,R20
     1A6 0795      CPC	R25,R21
     1A7 F418      BCC	0x01AB
     1A8 E061      LDI	R22,1
     1A9 E070      LDI	R23,0
     1AA C002      RJMP	0x01AD
     1AB 2766      CLR	R22
     1AC 2777      CLR	R23
     1AD 0115      MOVW	R2,R10
     1AE 2A26      OR	R2,R22
     1AF 2A37      OR	R3,R23
     1B0 2022      TST	R2
     1B1 F411      BNE	0x01B4
     1B2 2033      TST	R3
     1B3 F019      BEQ	0x01B7
     1B4 E340      LDI	R20,0x30
     1B5 E050      LDI	R21,0
     1B6 C002      RJMP	0x01B9
(0195) 	else	num = 0x30 + num;
     1B7 5D40      SUBI	R20,0xD0
     1B8 4F5F      SBCI	R21,0xFF
(0196) 
(0197) 	PORTA|=(1<<RS);
     1B9 9ADD      SBI	0x1B,5
(0198) 	s_ms(500);
     1BA EF04      LDI	R16,0xF4
     1BB E011      LDI	R17,1
     1BC DEB9      RCALL	_s_ms
(0199) 	PORTA&=~(1<<RW);
     1BD 98DE      CBI	0x1B,6
(0200) 	s_ms(500);
     1BE EF04      LDI	R16,0xF4
     1BF E011      LDI	R17,1
     1C0 DEB5      RCALL	_s_ms
(0201) 	PORTD = num;
     1C1 BB42      OUT	0x12,R20
(0202) 	s_ms(500);
     1C2 EF04      LDI	R16,0xF4
     1C3 E011      LDI	R17,1
     1C4 DEB1      RCALL	_s_ms
(0203) 	PORTA|=(1<<EN);
     1C5 9ADF      SBI	0x1B,7
(0204) 	s_ms(500);
     1C6 EF04      LDI	R16,0xF4
     1C7 E011      LDI	R17,1
     1C8 DEAD      RCALL	_s_ms
(0205) 	PORTA&=~(1<<EN);	
     1C9 98DF      CBI	0x1B,7
(0206) 	s_ms(500);			
     1CA EF04      LDI	R16,0xF4
     1CB E011      LDI	R17,1
     1CC DEA9      RCALL	_s_ms
     1CD 940C 0229 JMP	pop_xgsetF00C
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     1CF 940E 0230 CALL	push_xgsetF03C
     1D1 2EA2      MOV	R10,R18
     1D2 2F60      MOV	R22,R16
     1D3 854A      LDD	R20,Y+10
     1D4 855B      LDD	R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) //       ‘col’要写的字符所在的列,只能为0---15
(0212) //       ‘num’要写字符的个数
(0213) //       ‘pbuffer’要写字符的首地址
(0214) //================================================================== 
(0215) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) 	uchar i,t;
(0218) 	if (row == 1)	row = 0x80 + col;
     1D5 3061      CPI	R22,1
     1D6 F419      BNE	0x01DA
     1D7 2D6A      MOV	R22,R10
     1D8 5860      SUBI	R22,0x80
     1D9 C002      RJMP	0x01DC
(0219) 	else	row = 0xC0 + col;
     1DA 2D6A      MOV	R22,R10
     1DB 5460      SUBI	R22,0x40
(0220) 	writecom(row);
     1DC 2F06      MOV	R16,R22
     1DD DECC      RCALL	_writecom
(0221) 	//if (num<=0 | num>9)	num =0x30;
(0222) 	//else	num = 0x30 + num;
(0223) 
(0224) 	PORTA|=(1<<RS);
     1DE 9ADD      SBI	0x1B,5
(0225) 	s_ms(500);
     1DF EF04      LDI	R16,0xF4
     1E0 E011      LDI	R17,1
     1E1 DE94      RCALL	_s_ms
(0226) 	PORTA&=~(1<<RW);
     1E2 98DE      CBI	0x1B,6
(0227) 	s_ms(500);
     1E3 EF04      LDI	R16,0xF4
     1E4 E011      LDI	R17,1
     1E5 DE90      RCALL	_s_ms
(0228) 	for(i=num;i!=0;i--)
     1E6 84A8      LDD	R10,Y+8
     1E7 C014      RJMP	0x01FC
(0229) 	{
(0230) 		t = *pBuffer;
     1E8 01FA      MOVW	R30,R20
     1E9 80C0      LDD	R12,Z+0
(0231) 		s_ms(500);
     1EA EF04      LDI	R16,0xF4
     1EB E011      LDI	R17,1
     1EC DE89      RCALL	_s_ms
(0232) 		PORTD = t;
     1ED BAC2      OUT	0x12,R12
(0233) 		s_ms(500);
     1EE EF04      LDI	R16,0xF4
     1EF E011      LDI	R17,1
     1F0 DE85      RCALL	_s_ms
(0234) 		PORTA|=(1<<EN);
     1F1 9ADF      SBI	0x1B,7
(0235) 		s_ms(500);
     1F2 EF04      LDI	R16,0xF4
     1F3 E011      LDI	R17,1
     1F4 DE81      RCALL	_s_ms
(0236) 		PORTA&=~(1<<EN);		
     1F5 98DF      CBI	0x1B,7
(0237) 		s_ms(500);		
     1F6 EF04      LDI	R16,0xF4
     1F7 E011      LDI	R17,1
     1F8 DE7D      RCALL	_s_ms
(0238) 		pBuffer++;
     1F9 5F4F      SUBI	R20,0xFF
     1FA 4F5F      SBCI	R21,0xFF
     1FB 94AA      DEC	R10
     1FC 20AA      TST	R10
     1FD F751      BNE	0x01E8
     1FE 940C 0239 JMP	pop_xgsetF03C
_main:
     200 9724      SBIW	R28,4
FILE: D:\16实验程序\1602液晶\1602_main.c
(0001) //1602液晶显示程序
(0002) #include<iom16v.h>
(0003) #include"1602.h"
(0004) #define uchar unsigned char 
(0005) #define uint unsigned int 
(0006) 
(0007) uchar wz[]={"WWW.ISMCU.COM"};
(0008) uchar gd[]={"Good Luck!"};
(0009) 
(0010) //主函数
(0011) void main()
(0012) {
(0013) DDRA=0xff;
     201 EF8F      LDI	R24,0xFF
     202 BB8A      OUT	0x1A,R24
(0014) PORTA=0xff;
     203 BB8B      OUT	0x1B,R24
(0015) DDRD=0xff;
     204 BB81      OUT	0x11,R24
(0016) PORTD=0xff;
     205 BB82      OUT	0x12,R24
(0017) s_ms(5000);      //延时
     206 E808      LDI	R16,0x88
     207 E113      LDI	R17,0x13
     208 DE6D      RCALL	_s_ms
(0018) LcdInit();     //1602初始化
     209 DEBC      RCALL	_LcdInit
(0019) WriteChar(1,1,13,wz);    //显示第一行
     20A E080      LDI	R24,0
     20B E091      LDI	R25,1
     20C 839B      STD	Y+3,R25
     20D 838A      STD	Y+2,R24
     20E E08D      LDI	R24,0xD
     20F E090      LDI	R25,0
     210 8399      STD	Y+1,R25
     211 8388      STD	Y+0,R24
     212 E021      LDI	R18,1
     213 E001      LDI	R16,1
     214 DFBA      RCALL	_WriteChar
(0020) WriteChar(2,3,10,gd);    //显示第二行
FILE: <library>
     215 E08E      LDI	R24,0xE
     216 E091      LDI	R25,1
     217 839B      STD	Y+3,R25
     218 838A      STD	Y+2,R24
     219 E08A      LDI	R24,0xA
     21A E090      LDI	R25,0
     21B 8399      STD	Y+1,R25
     21C 8388      STD	Y+0,R24
     21D E023      LDI	R18,3
     21E E002      LDI	R16,2
     21F DFAF      RCALL	_WriteChar
     220 9624      ADIW	R28,4
     221 9508      RET
push_xgsetF00C:
     222 937A      ST	R23,-Y
     223 936A      ST	R22,-Y
     224 935A      ST	R21,-Y
     225 934A      ST	R20,-Y
     226 92BA      ST	R11,-Y
     227 92AA      ST	R10,-Y
     228 9508      RET
pop_xgsetF00C:
     229 90A9      LD	R10,Y+
     22A 90B9      LD	R11,Y+
     22B 9149      LD	R20,Y+
     22C 9159      LD	R21,Y+
     22D 9169      LD	R22,Y+
     22E 9179      LD	R23,Y+
     22F 9508      RET
push_xgsetF03C:
     230 937A      ST	R23,-Y
     231 936A      ST	R22,-Y
     232 935A      ST	R21,-Y
     233 934A      ST	R20,-Y
     234 92DA      ST	R13,-Y
     235 92CA      ST	R12,-Y
     236 92BA      ST	R11,-Y
     237 92AA      ST	R10,-Y
     238 9508      RET
pop_xgsetF03C:
     239 90A9      LD	R10,Y+
     23A 90B9      LD	R11,Y+
     23B 90C9      LD	R12,Y+
     23C 90D9      LD	R13,Y+
     23D 9149      LD	R20,Y+
     23E 9159      LD	R21,Y+
     23F 9169      LD	R22,Y+
     240 9179      LD	R23,Y+
     241 9508      RET

⌨️ 快捷键说明

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