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

📄 adc.lst

📁 atmega128单片机实现模数转换并通过1602液晶显示出结果。
💻 LST
📖 第 1 页 / 共 3 页
字号:
     15A 9380 0065 STS	0x0065,R24
(0108) 	s_ms(500);
     15C EF04      LDI	R16,0xF4
     15D E011      LDI	R17,1
     15E DF16      RCALL	_s_ms
(0109) 	DDRA=0x00;       //A端口变输入
     15F 2422      CLR	R2
     160 BA2A      OUT	0x1A,R2
(0110) 	s_ms(500);
     161 EF04      LDI	R16,0xF4
     162 E011      LDI	R17,1
     163 DF11      RCALL	_s_ms
(0111) 	temp = PINA;     //读A端口
     164 B2A9      IN	R10,0x19
(0112) 	s_ms(500);
     165 EF04      LDI	R16,0xF4
     166 E011      LDI	R17,1
     167 DF0D      RCALL	_s_ms
(0113) 	DDRA=0xff;       //A端口变输出
     168 EF8F      LDI	R24,0xFF
     169 BB8A      OUT	0x1A,R24
(0114) 	s_ms(500);
     16A EF04      LDI	R16,0xF4
     16B E011      LDI	R17,1
     16C DF08      RCALL	_s_ms
(0115) 	PORTG&=~(1<<EN); //EN=0
     16D 9180 0065 LDS	R24,0x0065
     16F 7F8B      ANDI	R24,0xFB
     170 9380 0065 STS	0x0065,R24
(0116) 	s_ms(500);
     172 EF04      LDI	R16,0xF4
     173 E011      LDI	R17,1
     174 DF00      RCALL	_s_ms
(0117) 	return temp;	
     175 2D0A      MOV	R16,R10
     176 90A9      LD	R10,Y+
     177 9508      RET
_WriteCGRAM:
  t                    --> R10
  i                    --> R20
  pBuffer              --> R22
  num                  --> R10
     178 940E 0343 CALL	push_xgsetF00C
     17A 01B9      MOVW	R22,R18
     17B 0158      MOVW	R10,R16
(0118) }
(0119) 
(0120) //=================================================
(0121) // 描述: 写LCD内部CGRAM函数
(0122) // 入口: ‘num’要写的数据个数
(0123) //        ‘pbuffer’要写的数据的首地址
(0124) // 出口: 无
(0125) //================================================
(0126) void	WriteCGRAM(uint	num, const uint	*pBuffer)
(0127) {
(0128) 	uint	i,t;
(0129) 	writecom(0x40);
     17C E400      LDI	R16,0x40
     17D DF3B      RCALL	_writecom
(0130) 	PORTG|=(1<<RS);
     17E 9180 0065 LDS	R24,0x0065
     180 6081      ORI	R24,1
     181 9380 0065 STS	0x0065,R24
(0131) 	PORTG&=~(1<<RW);
     183 9180 0065 LDS	R24,0x0065
     185 7F8D      ANDI	R24,0xFD
     186 9380 0065 STS	0x0065,R24
(0132) 	for(i=num;i!=0;i--)
     188 01A5      MOVW	R20,R10
     189 C012      RJMP	0x019C
(0133) 	{
(0134) 		t = *pBuffer;
     18A 01FB      MOVW	R30,R22
     18B 90A7      ELPM	R10,Z+
     18C 90B6      ELPM	R11,18(Z)
(0135) 		PORTG|=(1<<EN);
     18D 9180 0065 LDS	R24,0x0065
     18F 6084      ORI	R24,4
     190 9380 0065 STS	0x0065,R24
(0136) 		PORTA = t;
     192 BAAB      OUT	0x1B,R10
(0137) 		PORTG&=~(1<<EN);				
     193 9180 0065 LDS	R24,0x0065
     195 7F8B      ANDI	R24,0xFB
     196 9380 0065 STS	0x0065,R24
(0138) 		pBuffer++;
     198 5F6E      SUBI	R22,0xFE
     199 4F7F      SBCI	R23,0xFF
     19A 5041      SUBI	R20,1
     19B 4050      SBCI	R21,0
     19C 3040      CPI	R20,0
     19D 0745      CPC	R20,R21
     19E F759      BNE	0x018A
     19F 940C 034A JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     1A1 940E 0343 CALL	push_xgsetF00C
     1A3 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);   //数据地址
     1A4 E800      LDI	R16,0x80
     1A5 DF13      RCALL	_writecom
(0152) 	
(0153) 	PORTG|=(1<<RS);
     1A6 9180 0065 LDS	R24,0x0065
     1A8 6081      ORI	R24,1
     1A9 9380 0065 STS	0x0065,R24
(0154) 	PORTG&=~(1<<RW);
     1AB 9180 0065 LDS	R24,0x0065
     1AD 7F8D      ANDI	R24,0xFD
     1AE 9380 0065 STS	0x0065,R24
(0155) 	s_ms(50);
     1B0 E302      LDI	R16,0x32
     1B1 E010      LDI	R17,0
     1B2 DEC2      RCALL	_s_ms
(0156) 	for(i=0;i<16;i++)
     1B3 2766      CLR	R22
     1B4 C013      RJMP	0x01C8
(0157) 	{
(0158) 		t = *pBuffer;
     1B5 01FA      MOVW	R30,R20
     1B6 90A6      ELPM	R10,19(Z)
(0159) 		PORTA = t;
     1B7 BAAB      OUT	0x1B,R10
(0160) 		PORTG|=(1<<EN);
     1B8 9180 0065 LDS	R24,0x0065
     1BA 6084      ORI	R24,4
     1BB 9380 0065 STS	0x0065,R24
(0161) 		s_ms(50);
     1BD E302      LDI	R16,0x32
     1BE E010      LDI	R17,0
     1BF DEB5      RCALL	_s_ms
(0162) 		PORTG&=~(1<<EN);				
     1C0 9180 0065 LDS	R24,0x0065
     1C2 7F8B      ANDI	R24,0xFB
     1C3 9380 0065 STS	0x0065,R24
(0163) 		pBuffer++;
     1C5 5F4F      SUBI	R20,0xFF
     1C6 4F5F      SBCI	R21,0xFF
     1C7 9563      INC	R22
     1C8 3160      CPI	R22,0x10
     1C9 F358      BCS	0x01B5
(0164) 	}
(0165) 	writecom(0xC0);
     1CA EC00      LDI	R16,0xC0
     1CB DEED      RCALL	_writecom
(0166) 
(0167) 	PORTG|=(1<<RS);
     1CC 9180 0065 LDS	R24,0x0065
     1CE 6081      ORI	R24,1
     1CF 9380 0065 STS	0x0065,R24
(0168) 	PORTG&=~(1<<RW);
     1D1 9180 0065 LDS	R24,0x0065
     1D3 7F8D      ANDI	R24,0xFD
     1D4 9380 0065 STS	0x0065,R24
(0169) 	s_ms(50);	
     1D6 E302      LDI	R16,0x32
     1D7 E010      LDI	R17,0
     1D8 DE9C      RCALL	_s_ms
(0170) 	for(i=0;i<16;i++)
     1D9 2766      CLR	R22
     1DA C013      RJMP	0x01EE
(0171) 	{
(0172) 		t = *pBuffer;
     1DB 01FA      MOVW	R30,R20
     1DC 90A6      ELPM	R10,19(Z)
(0173) 		PORTA = t;
     1DD BAAB      OUT	0x1B,R10
(0174) 		PORTG|=(1<<EN);
     1DE 9180 0065 LDS	R24,0x0065
     1E0 6084      ORI	R24,4
     1E1 9380 0065 STS	0x0065,R24
(0175) 		s_ms(50);
     1E3 E302      LDI	R16,0x32
     1E4 E010      LDI	R17,0
     1E5 DE8F      RCALL	_s_ms
(0176) 		PORTG&=~(1<<EN);				
     1E6 9180 0065 LDS	R24,0x0065
     1E8 7F8B      ANDI	R24,0xFB
     1E9 9380 0065 STS	0x0065,R24
(0177) 		pBuffer++;
     1EB 5F4F      SUBI	R20,0xFF
     1EC 4F5F      SBCI	R21,0xFF
     1ED 9563      INC	R22
     1EE 3160      CPI	R22,0x10
     1EF F358      BCS	0x01DB
     1F0 940C 034A JMP	pop_xgsetF00C
_WriteNum:
  num                  --> Y,+4
  col                  --> R22
  row                  --> R20
     1F2 940E 0339 CALL	push_xgsetF000
     1F4 2F62      MOV	R22,R18
     1F5 2F40      MOV	R20,R16
(0178) 	}
(0179) }
(0180) //====================================================
(0181) // 描述:在任意位置写数字函数
(0182) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0183) //       ’col‘表示要写数字所在的列地址,只能为0--15
(0184) //		 ‘num’表示要写的数字,只能为0--9
(0185) // 出口:无
(0186) //===================================================
(0187) void WriteNum(uchar row,uchar col,uchar num)
(0188) {
(0189) 	if (row == 1)	row = 0x80 + col;
     1F6 3041      CPI	R20,1
     1F7 F419      BNE	0x01FB
     1F8 2F46      MOV	R20,R22
     1F9 5840      SUBI	R20,0x80
     1FA C002      RJMP	0x01FD
(0190) 	else	row = 0xC0 + col;
     1FB 2F46      MOV	R20,R22
     1FC 5440      SUBI	R20,0x40
(0191) 	writecom(row);
     1FD 2F04      MOV	R16,R20
     1FE DEBA      RCALL	_writecom
(0192) 
(0193) 	PORTG|=(1<<RS);
     1FF 9180 0065 LDS	R24,0x0065
     201 6081      ORI	R24,1
     202 9380 0065 STS	0x0065,R24
(0194) 	s_ms(500);
     204 EF04      LDI	R16,0xF4
     205 E011      LDI	R17,1
     206 DE6E      RCALL	_s_ms
(0195) 	PORTG&=~(1<<RW);
     207 9180 0065 LDS	R24,0x0065
     209 7F8D      ANDI	R24,0xFD
     20A 9380 0065 STS	0x0065,R24
(0196) 	s_ms(500);
     20C EF04      LDI	R16,0xF4
     20D E011      LDI	R17,1
     20E DE66      RCALL	_s_ms
(0197) 	PORTA = num;
     20F 800C      LDD	R0,Y+4
     210 BA0B      OUT	0x1B,R0
(0198) 	s_ms(500);
     211 EF04      LDI	R16,0xF4
     212 E011      LDI	R17,1
     213 DE61      RCALL	_s_ms
(0199) 	PORTG|=(1<<EN);
     214 9180 0065 LDS	R24,0x0065
     216 6084      ORI	R24,4
     217 9380 0065 STS	0x0065,R24
(0200) 	s_ms(500);
     219 EF04      LDI	R16,0xF4
     21A E011      LDI	R17,1
     21B DE59      RCALL	_s_ms
(0201) 	PORTG&=~(1<<EN);	
     21C 9180 0065 LDS	R24,0x0065
     21E 7F8B      ANDI	R24,0xFB
     21F 9380 0065 STS	0x0065,R24
(0202) 	s_ms(500);			
     221 EF04      LDI	R16,0xF4
     222 E011      LDI	R17,1
     223 DE51      RCALL	_s_ms
     224 940C 033E JMP	pop_xgsetF000
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     226 940E 0351 CALL	push_xgsetF03C
     228 2EA2      MOV	R10,R18
     229 2F60      MOV	R22,R16
     22A 854A      LDD	R20,Y+10
     22B 855B      LDD	R21,Y+11
(0203) }
(0204) //================================================================
(0205) // 描述:在任意位置写任意多个字符
(0206) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0207) //       ‘col’要写的字符所在的列,只能为0---15
(0208) //       ‘num’要写字符的个数
(0209) //       ‘pbuffer’要写字符的首地址
(0210) //================================================================== 
(0211) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0212) {
(0213) 	uchar i,t;
(0214) 	if (row == 1)	row = 0x80 + col;
     22C 3061      CPI	R22,1
     22D F419      BNE	0x0231
     22E 2D6A      MOV	R22,R10
     22F 5860      SUBI	R22,0x80
     230 C002      RJMP	0x0233
(0215) 	else	row = 0xC0 + col;
     231 2D6A      MOV	R22,R10
     232 5460      SUBI	R22,0x40
(0216) 	writecom(row);
     233 2F06      MOV	R16,R22
     234 DE84      RCALL	_writecom
(0217) 
(0218) 
(0219) 	PORTG|=(1<<RS);
     235 9180 0065 LDS	R24,0x0065
     237 6081      ORI	R24,1
     238 9380 0065 STS	0x0065,R24
(0220) 	s_ms(500);
     23A EF04      LDI	R16,0xF4
     23B E011      LDI	R17,1
     23C DE38      RCALL	_s_ms
(0221) 	PORTG&=~(1<<RW);
     23D 9180 0065 LDS	R24,0x0065
     23F 7F8D      ANDI	R24,0xFD
     240 9380 0065 STS	0x0065,R24
(0222) 	s_ms(500);
     242 EF04      LDI	R16,0xF4
     243 E011      LDI	R17,1
     244 DE30      RCALL	_s_ms
(0223) 	for(i=num;i!=0;i--)
     245 84A8      LDD	R10,Y+8
     246 C01C      RJMP	0x0263
(0224) 	{
(0225) 		t = *pBuffer;
     247 01FA      MOVW	R30,R20
     248 80C0      LDD	R12,Z+0
(0226) 		s_ms(500);
     249 EF04      LDI	R16,0xF4
     24A E011      LDI	R17,1
     24B DE29      RCALL	_s_ms
(0227) 		PORTA = t;
     24C BACB      OUT	0x1B,R12
(0228) 		s_ms(500);
     24D EF04      LDI	R16,0xF4
     24E E011      LDI	R17,1
     24F DE25      RCALL	_s_ms
(0229) 		PORTG|=(1<<EN);
     250 9180 0065 LDS	R24,0x0065
     252 6084      ORI	R24,4
     253 9380 0065 STS	0x0065,R24
(0230) 		s_ms(500);
     255 EF04      LDI	R16,0xF4
     256 E011      LDI	R17,1
     257 DE1D      RCALL	_s_ms
(0231) 		PORTG&=~(1<<EN);		
     258 9180 0065 LDS	R24,0x0065
     25A 7F8B      ANDI	R24,0xFB
     25B 9380 0065 STS	0x0065,R24
(0232) 		s_ms(500);		
     25D EF04      LDI	R16,0xF4
     25E E011      LDI	R17,1

⌨️ 快捷键说明

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