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

📄 4x4key.lst

📁 meg16 的所有功能实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E2      CPI	R30,0x62
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0107  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\4x4key\4x4key.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **                               ADEmbed Development Co.,LTD.                                    
(0003) **                                 http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name:			main.c
(0006) ** Last modified Date:  2008-12-13
(0007) ** Last Version:		1.0
(0008) ** Descriptions:		4*4Key Test.
(0009) ** 
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by:			junbolu
(0012) ** Created date:		2008-12-13
(0013) ** Version:				1.0
(0014) ** Descriptions:		
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **PA0--->L1			PA1--->L2			PA2--->L3			PA3--->L4			
(0027) **PA4--->H1			PA5--->H2			PA6--->H3			PA7--->H4	
(0028) --------------------------
(0029) | H4   C    D    E    F  |
(0030) | H3   8    9    A    B  |
(0031) | H2   4    5    6    7  |
(0032) | H1   0    1    2    3  |
(0033) | /    L1   L2   L3   L4 |
(0034) --------------------------	   
(0035) **描述:扫描4*4按键的状态,扫描到按键被按下后,将此键码发送到串口
(0036) **      
(0037) **
(0038) **涉及知识点:
(0039) **          DI输入DO输出
(0040) **          while循环,case循环
(0041) **			8位定时器,串口的应用
(0042) *******************************************************************************************************/
(0043) 
(0044) #include<iom16v.h>
(0045) #include<macros.h>
(0046) #include"Define.h"
(0047) 
(0048) 
(0049) #define F_osc           7372800
(0050) #define Baud_rate       9600   	   		  		 
(0051) //管脚定义
(0052) #define PIN_RXD			0 	//PD0   RXD
(0053) #define PIN_TXD			1 	//PD1   TXD
(0054) 
(0055) 
(0056) #define L1   	     BIT0	
(0057) #define L2   	     BIT1
(0058) #define L3   	     BIT2
(0059) #define L4   	     BIT3
(0060) #define H1   	     BIT4	
(0061) #define H2   	     BIT5
(0062) #define H3   	     BIT6
(0063) #define H4   	     BIT7
(0064) 
(0065) #define KEY_DDR		 DDRA
(0066) #define KEY_PORT	 PORTA
(0067) #define KEY_IN		 PINA
(0068) 
(0069) 
(0070) #define L1_H1		 0x00
(0071) #define L2_H1		 0x01
(0072) #define L3_H1		 0x02
(0073) #define L4_H1		 0x03
(0074) #define L1_H2		 0x04
(0075) #define L2_H2		 0x05
(0076) #define L3_H2		 0x06
(0077) #define L4_H2		 0x07
(0078) #define L1_H3		 0x08
(0079) #define L2_H3		 0x09
(0080) #define L3_H3		 0x0A
(0081) #define L4_H3		 0x0B
(0082) #define L1_H4		 0x0C
(0083) #define L2_H4		 0x0D
(0084) #define L3_H4		 0x0E
(0085) #define L4_H4		 0x0F
(0086) 
(0087) #define ON_PUSH		 0xFF
(0088) 
(0089) unsigned char Key_State;
(0090) unsigned char Key_Value;
(0091) 
(0092) void Uart_Init(void); 
(0093) void USART_TXD(uint8 data);
(0094) 
(0095) void KEY_Init(void)
(0096) {
(0097)  KEY_DDR |= L1&L2&L3&L4;  	            //设为输出
_KEY_Init:
    004B B22A      IN	R2,0x1A
    004C BA2A      OUT	0x1A,R2
(0098)  KEY_PORT|= L1&L2&L3&L4;				//输出为高
    004D B22B      IN	R2,0x1B
    004E BA2B      OUT	0x1B,R2
(0099)  KEY_DDR &= ~(H1&H2&H3&H4);				//设为输入
    004F B38A      IN	R24,0x1A
    0050 7F8F      ANDI	R24,0xFF
    0051 BB8A      OUT	0x1A,R24
(0100)  KEY_PORT|= H1&H2&H3&H4;				//上拉输入
    0052 B22B      IN	R2,0x1B
    0053 BA2B      OUT	0x1B,R2
(0101)  
(0102)  //t/c0初始化
(0103)  TCCR0=0X0D;
    0054 E08D      LDI	R24,0xD
    0055 BF83      OUT	0x33,R24
(0104)  TCNT0=0X00;
    0056 2422      CLR	R2
    0057 BE22      OUT	0x32,R2
(0105)  OCR0=0XF0;         //定时30ms
    0058 EF80      LDI	R24,0xF0
    0059 BF8C      OUT	0x3C,R24
(0106)  TIMSK|=0X02;
    005A B789      IN	R24,0x39
    005B 6082      ORI	R24,2
    005C BF89      OUT	0x39,R24
    005D 9508      RET
_timer0comp:
    005E 940E014C  CALL	push_lset
(0107)  
(0108) }
(0109) 
(0110) #pragma interrupt_handler timer0comp:20
(0111) void timer0comp (void)
(0112) { 
(0113)  Read_Key();
    0060 D071      RCALL	_Read_Key
    0061 940E0163  CALL	pop_lset
    0063 9518      RETI
(0114) }
(0115) 
(0116) //=======================================================================
(0117) unsigned char KEYDIN(void)
(0118) {
(0119)  	KEY_PORT |= L1&L2&L3&L4;				//输出为高
_KEYDIN:
    0064 B22B      IN	R2,0x1B
    0065 BA2B      OUT	0x1B,R2
(0120) 	KEY_PORT &= ~L1;						//扫描L1
    0066 98D8      CBI	0x1B,0
(0121) 	
(0122)  	if((KEY_IN&H1)==H1)	 return L1_H1;
    0067 B389      IN	R24,0x19
    0068 7180      ANDI	R24,0x10
    0069 3180      CPI	R24,0x10
    006A F411      BNE	0x006D
    006B 2700      CLR	R16
    006C C064      RJMP	0x00D1
(0123) 	if((KEY_IN&H2)==H2)	 return L1_H2;
    006D B389      IN	R24,0x19
    006E 7280      ANDI	R24,0x20
    006F 3280      CPI	R24,0x20
    0070 F411      BNE	0x0073
    0071 E004      LDI	R16,4
    0072 C05E      RJMP	0x00D1
(0124) 	if((KEY_IN&H3)==H3)	 return L1_H3;
    0073 B389      IN	R24,0x19
    0074 7480      ANDI	R24,0x40
    0075 3480      CPI	R24,0x40
    0076 F411      BNE	0x0079
    0077 E008      LDI	R16,0x8
    0078 C058      RJMP	0x00D1
(0125) 	if((KEY_IN&H4)==H4)	 return L1_H4;
    0079 B389      IN	R24,0x19
    007A 7880      ANDI	R24,0x80
    007B 3880      CPI	R24,0x80
    007C F411      BNE	0x007F
    007D E00C      LDI	R16,0xC
    007E C052      RJMP	0x00D1
(0126) 	
(0127) 	KEY_PORT |= L1&L2&L3&L4;				//输出为高
    007F B22B      IN	R2,0x1B
    0080 BA2B      OUT	0x1B,R2
(0128) 	KEY_PORT &= ~L2;						//扫描L2
    0081 98D9      CBI	0x1B,1
(0129) 	
(0130)  	if((KEY_IN&H1)==H1)	 return L2_H1;
    0082 B389      IN	R24,0x19
    0083 7180      ANDI	R24,0x10
    0084 3180      CPI	R24,0x10
    0085 F411      BNE	0x0088
    0086 E001      LDI	R16,1
    0087 C049      RJMP	0x00D1
(0131) 	if((KEY_IN&H2)==H2)	 return L2_H2;
    0088 B389      IN	R24,0x19
    0089 7280      ANDI	R24,0x20
    008A 3280      CPI	R24,0x20
    008B F411      BNE	0x008E
    008C E005      LDI	R16,5
    008D C043      RJMP	0x00D1
(0132) 	if((KEY_IN&H3)==H3)	 return L2_H3;
    008E B389      IN	R24,0x19
    008F 7480      ANDI	R24,0x40
    0090 3480      CPI	R24,0x40
    0091 F411      BNE	0x0094
    0092 E009      LDI	R16,0x9
    0093 C03D      RJMP	0x00D1
(0133) 	if((KEY_IN&H4)==H4)	 return L2_H4;
    0094 B389      IN	R24,0x19
    0095 7880      ANDI	R24,0x80
    0096 3880      CPI	R24,0x80
    0097 F411      BNE	0x009A
    0098 E00D      LDI	R16,0xD
    0099 C037      RJMP	0x00D1
(0134) 	
(0135) 	KEY_PORT |= L1&L2&L3&L4;				//输出为高
    009A B22B      IN	R2,0x1B
    009B BA2B      OUT	0x1B,R2
(0136) 	KEY_PORT &= ~L3;						//扫描L3
    009C 98DA      CBI	0x1B,2
(0137) 	
(0138)  	if((KEY_IN&H1)==H1)	 return L3_H1;
    009D B389      IN	R24,0x19
    009E 7180      ANDI	R24,0x10
    009F 3180      CPI	R24,0x10
    00A0 F411      BNE	0x00A3
    00A1 E002      LDI	R16,2
    00A2 C02E      RJMP	0x00D1
(0139) 	if((KEY_IN&H2)==H2)	 return L3_H2;
    00A3 B389      IN	R24,0x19
    00A4 7280      ANDI	R24,0x20
    00A5 3280      CPI	R24,0x20
    00A6 F411      BNE	0x00A9
    00A7 E006      LDI	R16,6
    00A8 C028      RJMP	0x00D1
(0140) 	if((KEY_IN&H3)==H3)	 return L3_H3;
    00A9 B389      IN	R24,0x19
    00AA 7480      ANDI	R24,0x40
    00AB 3480      CPI	R24,0x40
    00AC F411      BNE	0x00AF
    00AD E00A      LDI	R16,0xA
    00AE C022      RJMP	0x00D1
(0141) 	if((KEY_IN&H4)==H4)	 return L3_H4;
    00AF B389      IN	R24,0x19
    00B0 7880      ANDI	R24,0x80
    00B1 3880      CPI	R24,0x80
    00B2 F411      BNE	0x00B5
    00B3 E00E      LDI	R16,0xE
    00B4 C01C      RJMP	0x00D1
(0142) 	
(0143) 	KEY_PORT |= L1&L2&L3&L4;				//输出为高
    00B5 B22B      IN	R2,0x1B
    00B6 BA2B      OUT	0x1B,R2
(0144) 	KEY_PORT &= ~L4;						//扫描L4
    00B7 98DB      CBI	0x1B,3

⌨️ 快捷键说明

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