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

📄 main.lst

📁 AVR单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00FB 9508      RET
_LCD_write_char:
  data                 --> Y+4
  Y                    --> R22
  X                    --> R20
    00FC 940E01E2  CALL	push_gset2
    00FE 2F62      MOV	R22,R18
    00FF 2F40      MOV	R20,R16
(0108)     }
(0109)       
(0110) }
(0111) 
(0112) void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
(0113) {
(0114)   LCD_set_xy( X, Y ); //写地址
    0100 2F26      MOV	R18,R22
    0101 2F04      MOV	R16,R20
    0102 DFD3      RCALL	_LCD_set_xy
(0115)   LCD_write_data( data);
    0103 810C      LDD	R16,Y+4
    0104 DFB1      RCALL	_LCD_write_data
    0105 940E01D6  CALL	pop_gset2
    0107 9508      RET
_key_read:
  i                    --> R20
    0108 940E01E4  CALL	push_gset1
FILE: D:\avr\+++精华+++\44键盘\key.h
(0001) //函数说明
(0002) //--------------------------------
(0003)   unsigned char get_key(void);
(0004) //--------------------------------
(0005) 
(0006) unsigned char key_read(void)
(0007) {
(0008)  	 unsigned char i;
(0009) 	/*获取列地址*/
(0010) 	DDRB=0xf0; //高4位输出,低4位输入
    010A EF80      LDI	R24,0xF0
    010B BB87      OUT	0x17,R24
(0011) 	PORTB=0x0f;//高4位输出0,低4位带上拉输入
    010C E08F      LDI	R24,0xF
    010D BB88      OUT	0x18,R24
(0012) 	delay_nms(1);
    010E E001      LDI	R16,1
    010F E010      LDI	R17,0
    0110 DF5B      RCALL	_delay_nms
(0013) 
(0014) 	i=PINB&0x0f;
    0111 B346      IN	R20,0x16
    0112 704F      ANDI	R20,0xF
(0015) 	
(0016) 	/*获取行地址*/
(0017) 	DDRB=0x0f;//高4位输入,低4位输出
    0113 E08F      LDI	R24,0xF
    0114 BB87      OUT	0x17,R24
(0018) 	PORTB=0xf0;//低4位输出0,高4位带上拉输入
    0115 EF80      LDI	R24,0xF0
    0116 BB88      OUT	0x18,R24
(0019) 	delay_nms(1);
    0117 E001      LDI	R16,1
    0118 E010      LDI	R17,0
    0119 DF52      RCALL	_delay_nms
(0020) 
(0021) 	i|=PINB&0xf0;
    011A B386      IN	R24,0x16
    011B 7F80      ANDI	R24,0xF0
    011C 2B48      OR	R20,R24
(0022) 	
(0023) 	switch(i)
    011D 2755      CLR	R21
    011E 3D47      CPI	R20,0xD7
    011F E0E0      LDI	R30,0
    0120 075E      CPC	R21,R30
    0121 F409      BNE	0x0123
    0122 C075      RJMP	0x0198
    0123 3D4B      CPI	R20,0xDB
    0124 E0E0      LDI	R30,0
    0125 075E      CPC	R21,R30
    0126 F409      BNE	0x0128
    0127 C068      RJMP	0x0190
    0128 3D4D      CPI	R20,0xDD
    0129 E0E0      LDI	R30,0
    012A 075E      CPC	R21,R30
    012B F409      BNE	0x012D
    012C C05B      RJMP	0x0188
    012D 3D4E      CPI	R20,0xDE
    012E E0E0      LDI	R30,0
    012F 075E      CPC	R21,R30
    0130 F409      BNE	0x0132
    0131 C04E      RJMP	0x0180
    0132 ED8E      LDI	R24,0xDE
    0133 E090      LDI	R25,0
    0134 1784      CP	R24,R20
    0135 0795      CPC	R25,R21
    0136 F164      BLT	0x0163
    0137 3747      CPI	R20,0x77
    0138 E0E0      LDI	R30,0
    0139 075E      CPC	R21,R30
    013A F409      BNE	0x013C
    013B C060      RJMP	0x019C
    013C 374B      CPI	R20,0x7B
    013D E0E0      LDI	R30,0
    013E 075E      CPC	R21,R30
    013F F409      BNE	0x0141
    0140 C053      RJMP	0x0194
    0141 374D      CPI	R20,0x7D
    0142 E0E0      LDI	R30,0
    0143 075E      CPC	R21,R30
    0144 F409      BNE	0x0146
    0145 C046      RJMP	0x018C
    0146 374E      CPI	R20,0x7E
    0147 E0E0      LDI	R30,0
    0148 075E      CPC	R21,R30
    0149 F409      BNE	0x014B
    014A C039      RJMP	0x0184
    014B 3747      CPI	R20,0x77
    014C E0E0      LDI	R30,0
    014D 075E      CPC	R21,R30
    014E F40C      BGE	0x0150
    014F C04E      RJMP	0x019E
    0150 3B47      CPI	R20,0xB7
    0151 E0E0      LDI	R30,0
    0152 075E      CPC	R21,R30
    0153 F409      BNE	0x0155
    0154 C045      RJMP	0x019A
    0155 3B4B      CPI	R20,0xBB
    0156 E0E0      LDI	R30,0
    0157 075E      CPC	R21,R30
    0158 F409      BNE	0x015A
    0159 C038      RJMP	0x0192
    015A 3B4D      CPI	R20,0xBD
    015B E0E0      LDI	R30,0
    015C 075E      CPC	R21,R30
    015D F161      BEQ	0x018A
    015E 3B4E      CPI	R20,0xBE
    015F E0E0      LDI	R30,0
    0160 075E      CPC	R21,R30
    0161 F101      BEQ	0x0182
    0162 C03B      RJMP	0x019E
    0163 3E47      CPI	R20,0xE7
    0164 E0E0      LDI	R30,0
    0165 075E      CPC	R21,R30
    0166 F179      BEQ	0x0196
    0167 3E4B      CPI	R20,0xEB
    0168 E0E0      LDI	R30,0
    0169 075E      CPC	R21,R30
    016A F119      BEQ	0x018E
    016B 3E4D      CPI	R20,0xED
    016C E0E0      LDI	R30,0
    016D 075E      CPC	R21,R30
    016E F0B9      BEQ	0x0186
    016F 3E4E      CPI	R20,0xEE
    0170 E0E0      LDI	R30,0
    0171 075E      CPC	R21,R30
    0172 F059      BEQ	0x017E
    0173 3E47      CPI	R20,0xE7
    0174 E0E0      LDI	R30,0
    0175 075E      CPC	R21,R30
    0176 F13C      BLT	0x019E
    0177 3F4F      CPI	R20,0xFF
    0178 E0E0      LDI	R30,0
    0179 075E      CPC	R21,R30
    017A F009      BEQ	0x017C
    017B C022      RJMP	0x019E
(0024) 	{
(0025) 		case 0xff:return 0x00;
    017C 2700      CLR	R16
    017D C021      RJMP	0x019F
(0026) 		case 0xee:return 'D';
    017E E404      LDI	R16,0x44
    017F C01F      RJMP	0x019F
(0027) 		case 0xde:return '#';
    0180 E203      LDI	R16,0x23
    0181 C01D      RJMP	0x019F
(0028) 		case 0xbe:return '0';
    0182 E300      LDI	R16,0x30
    0183 C01B      RJMP	0x019F
(0029) 		case 0x7e:return '*';
    0184 E20A      LDI	R16,0x2A
    0185 C019      RJMP	0x019F
(0030) 		case 0xed:return 'C';
    0186 E403      LDI	R16,0x43
    0187 C017      RJMP	0x019F
(0031) 		case 0xdd:return '9';
    0188 E309      LDI	R16,0x39
    0189 C015      RJMP	0x019F
(0032) 		case 0xbd:return '8';
    018A E308      LDI	R16,0x38
    018B C013      RJMP	0x019F
(0033) 		case 0x7d:return '7';
    018C E307      LDI	R16,0x37
    018D C011      RJMP	0x019F
(0034) 		case 0xeb:return 'B';
    018E E402      LDI	R16,0x42
    018F C00F      RJMP	0x019F
(0035) 		case 0xdb:return '6';
    0190 E306      LDI	R16,0x36
    0191 C00D      RJMP	0x019F
(0036) 		case 0xbb:return '5';
    0192 E305      LDI	R16,0x35
    0193 C00B      RJMP	0x019F
(0037) 		case 0x7b:return '4';
    0194 E304      LDI	R16,0x34
    0195 C009      RJMP	0x019F
(0038) 		case 0xe7:return 'A';
    0196 E401      LDI	R16,0x41
    0197 C007      RJMP	0x019F
(0039) 		case 0xd7:return '3';
    0198 E303      LDI	R16,0x33
    0199 C005      RJMP	0x019F
(0040) 		case 0xb7:return '2';
    019A E302      LDI	R16,0x32
    019B C003      RJMP	0x019F
(0041) 		case 0x77:return '1';
    019C E301      LDI	R16,0x31
    019D C001      RJMP	0x019F
(0042) 		default:return 0x00;
    019E 2700      CLR	R16
    019F 940E01E7  CALL	pop_gset1
    01A1 9508      RET
_get_key:
  i                    --> R20
    01A2 940E01E4  CALL	push_gset1
(0043) 	}
(0044) }
(0045) 
(0046) unsigned char get_key(void)
(0047) {unsigned char i;
(0048)  static unsigned char j;//按键记录 
(0049)  i = key_read();
    01A4 DF63      RCALL	_key_read
    01A5 2F40      MOV	R20,R16
(0050)  if (i == 0x00)//无有效按键按下
    01A6 2300      TST	R16
    01A7 F429      BNE	0x01AD
(0051)  {
(0052)   j = 0x00;//清除按键记录
    01A8 2422      CLR	R2
    01A9 9220006B  STS	j,R2
(0053)   return 0x00;//程序退出
    01AB 2700      CLR	R16
    01AC C011      RJMP	0x01BE
(0054)   }
(0055)  if (j == 0x00) //为新按键
    01AD 9020006B  LDS	R2,j
    01AF 2022      TST	R2
    01B0 F461      BNE	0x01BD
(0056)   {j = i;//保存本次采样结果
    01B1 9340006B  STS	j,R20
(0057)   delay_nms(10);//去按键颤抖
    01B3 E00A      LDI	R16,0xA
    01B4 E010      LDI	R17,0
    01B5 DEB6      RCALL	_delay_nms
(0058)   i = key_read();
    01B6 DF51      RCALL	_key_read
    01B7 2F40      MOV	R20,R16
(0059)   if(i == j) {return i;}
    01B8 9020006B  LDS	R2,j
    01BA 1502      CP	R16,R2
    01BB F409      BNE	0x01BD
    01BC C001      RJMP	0x01BE
(0060)   }
(0061) return 0x00;
    01BD 2700      CLR	R16
    01BE 940E01E7  CALL	pop_gset1
    01C0 9508      RET
_main:
  i                    --> R20
    01C1 9722      SBIW	R28,2
FILE: D:\avr\+++精华+++\44键盘\main.c
(0001) /*****************************************
(0002) *      基于4*4键盘程序设计 		   	     *
(0003) * 功    能:4*4键盘          			 *
(0004) * 时钟频率:内部1M 						 *
(0005) * 设    计:莫锦攀						 *
(0006) * 修改日期:2007年07月04日				 *
(0007) * 编译环境:ICC-AVR6.31					 *
(0008) * 实验环境:M16学习板					 *
(0009) * 使用端口:PC6,PC7,PA4~PA7,PD0~PD7 	 *
(0010) *****************************************/
(0011) 
(0012) #include <iom16v.h>
(0013) #include "1602.h"
(0014) #include "key.h"
(0015) 
(0016) void main(void)
(0017) {	unsigned char i; 
(0018)    LCD_init();
    01C2 DEB8      RCALL	_LCD_init
    01C3 C00F      RJMP	0x01D3
(0019)   
(0020)    while(1)
(0021)    {i=get_key();
    01C4 DFDD      RCALL	_get_key
    01C5 2F40      MOV	R20,R16
(0022) 	LCD_write_string(3,0,"4*4 by MJP"); 
    01C6 E680      LDI	R24,0x60
    01C7 E090      LDI	R25,0
    01C8 8399      STD	Y+1,R25
    01C9 8388      STD	Y+0,R24
    01CA 2722      CLR	R18
    01CB E003      LDI	R16,3
    01CC DF19      RCALL	_LCD_write_string
(0023) 	if(i!=0x00)
    01CD 2344      TST	R20
    01CE F021      BEQ	0x01D3
(0024) 	{LCD_write_char(7,1,i);}
FILE: <library>
    01CF 8348      STD	Y+0,R20
    01D0 E021      LDI	R18,1
    01D1 E007      LDI	R16,7
    01D2 DF29      RCALL	_LCD_write_char
    01D3 CFF0      RJMP	0x01C4
    01D4 9622      ADIW	R28,2
    01D5 9508      RET
pop_gset2:
    01D6 E0E2      LDI	R30,2
    01D7 940C01E8  JMP	pop
pop_gset3:
    01D9 E0E4      LDI	R30,4
    01DA 940C01E8  JMP	pop
push_gset5:
    01DC 92FA      ST	R15,-Y
    01DD 92EA      ST	R14,-Y
push_gset4:
    01DE 92DA      ST	R13,-Y
    01DF 92CA      ST	R12,-Y
push_gset3:
    01E0 92BA      ST	R11,-Y
    01E1 92AA      ST	R10,-Y
push_gset2:
    01E2 937A      ST	R23,-Y
    01E3 936A      ST	R22,-Y
push_gset1:
    01E4 935A      ST	R21,-Y
    01E5 934A      ST	R20,-Y
    01E6 9508      RET
pop_gset1:
    01E7 E0E1      LDI	R30,1
pop:
    01E8 9149      LD	R20,Y+
    01E9 9159      LD	R21,Y+
    01EA FDE0      SBRC	R30,0
    01EB 9508      RET
    01EC 9169      LD	R22,Y+
    01ED 9179      LD	R23,Y+
    01EE FDE1      SBRC	R30,1
    01EF 9508      RET
    01F0 90A9      LD	R10,Y+
    01F1 90B9      LD	R11,Y+
    01F2 FDE2      SBRC	R30,2
    01F3 9508      RET
    01F4 90C9      LD	R12,Y+
    01F5 90D9      LD	R13,Y+
    01F6 FDE3      SBRC	R30,3
    01F7 9508      RET
    01F8 90E9      LD	R14,Y+
    01F9 90F9      LD	R15,Y+
    01FA 9508      RET

⌨️ 快捷键说明

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