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

📄 matrixkey.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0075) 
(0076) /* bit operation */
(0077) //#ifndef BIT
(0078) //#define BIT(x)	( 1<<(x) )
(0079) //#endif
(0080) 
(0081) /* USART configs for 4 Mhz crystal */
(0082) //#define BAUD9600			25
(0083) //#define BAUD19000			12
(0084) //#define UART_TRAN_ON()	UCR |=  0x08
(0085) //#define UART_TRAN_OFF()	UCR &= ~0x08
(0086) //#define UART_RCV_ON()		UCR |=  0x10
(0087) //#define UART_RCV_OFF()	UCR &= ~0x10
(0088) 
(0089) /*--------------------------------------------------------------------
(0090) 函数全称:50us 延时
(0091) 函数功能:当然是 50us延时 啦
(0092) 注意事项:基于7.3728M晶振,稍微有点误差
(0093) 提示说明:调用Delay50us(20),得到1ms延时
(0094) 输    入:	
(0095) 返    回:无 
(0096) --------------------------------------------------------------------*/
(0097) void delay50us(sint16 t)
(0098) {
(0099)     uint8 j;		
(0100)     for(;t>0;t--)			
    00B0 C007      RJMP	0x00B8
(0101)         for(j=0;j<70;j++)	
    00B1 2744      CLR	R20
    00B2 C001      RJMP	0x00B4
    00B3 9543      INC	R20
    00B4 3446      CPI	R20,0x46
    00B5 F3E8      BCS	0x00B3
    00B6 5001      SUBI	R16,1
    00B7 4010      SBCI	R17,0
    00B8 2422      CLR	R2
    00B9 2433      CLR	R3
    00BA 1620      CP	R2,R16
    00BB 0631      CPC	R3,R17
    00BC F3A4      BLT	0x00B1
(0102)             ;
(0103) }
    00BD 940E01EB  CALL	pop_gset1
    00BF 9508      RET
_delay50ms:
  i                    --> R20
  t                    --> R16
    00C0 940E01E8  CALL	push_gset1
(0104) /*--------------------------------------------------------------------
(0105) 函数全称:50ms 延时
(0106) 函数功能:当然是 50ms延时 啦
(0107) 注意事项:基于7.3728M晶振,稍微有点误差
(0108) 提示说明:调用delay50ms(20),得到1s延时 
(0109) 输    入:
(0110) 返    回:无
(0111) --------------------------------------------------------------------*/
(0112) void delay50ms(sint16 t)
(0113) {
(0114) 	uint16 i; 
(0115) 	for(;t>0;t--)
    00C2 C00B      RJMP	0x00CE
(0116) 		for(i=0;i<52642;i++)
    00C3 2744      CLR	R20
    00C4 2755      CLR	R21
    00C5 C002      RJMP	0x00C8
    00C6 5F4F      SUBI	R20,0xFF
    00C7 4F5F      SBCI	R21,0xFF
    00C8 3A42      CPI	R20,0xA2
    00C9 ECED      LDI	R30,0xCD
    00CA 075E      CPC	R21,R30
    00CB F3D0      BCS	0x00C6
    00CC 5001      SUBI	R16,1
    00CD 4010      SBCI	R17,0
    00CE 2422      CLR	R2
    00CF 2433      CLR	R3
    00D0 1620      CP	R2,R16
    00D1 0631      CPC	R3,R17
    00D2 F384      BLT	0x00C3
(0117) 			;								 
(0118) }
    00D3 940E01EB  CALL	pop_gset1
    00D5 9508      RET
FILE: E:\ProductPro\M16SD\ICCAVR\MatrixKeyBoard\MatrixKeyBoard\MatrixKey_.c
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net	
(0003) 
(0004) 功能目的:   测试"MatrixKeyBoard"模块
(0005) 
(0006) 目标系统:   基于任何AVR单片机
(0007) 
(0008) 应用软件:   ICCAVR                                               
(0009) 
(0010) 版    本:   Version 1.0
(0011) 
(0012) 圆版时间:   2005-03-01
(0013) 
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源 
(0017) 
(0018) 	深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 接入模块: MatrixKeyBoard
(0027) 接口说明: MatrixKeyBoard	M16SmartGuider	   		
(0028) 				K0	---------     PD0
(0029)                 K1	---------     PD1
(0030) 		 	    		.	
(0031) 			    		.
(0032) 				K7  ---------     PD7
(0033) ----------------------------------------------------------------------
(0034) 注意事项:
(0035) 		* 
(0036) ----------------------------------------------------------------------
(0037) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0038) 
(0039) #include <iom16v.H>
(0040) #include "E:\ICC_H\CmmICC.H"
(0041) 
(0042) #define LED_DDR 	DDRB
(0043) #define LED_PORT 	PORTB
(0044) 
(0045) #define OUT_K0    	sbi(DDRA,0)
(0046) #define OUT_K1    	sbi(DDRA,1)
(0047) #define OUT_K2    	sbi(DDRA,2)
(0048) #define OUT_K3    	sbi(DDRA,3)
(0049) #define IN_K4    	cbi(DDRA,4)
(0050) #define IN_K5    	cbi(DDRA,5)
(0051) #define IN_K6    	cbi(DDRA,6)
(0052) #define IN_K7    	cbi(DDRA,7)
(0053) 
(0054) #define SET_K0		sbi(PORTA,0)
(0055) #define SET_K1		sbi(PORTA,1)
(0056) #define SET_K2		sbi(PORTA,2)
(0057) #define SET_K3		sbi(PORTA,3)
(0058) #define CLR_K0		cbi(PORTA,0)
(0059) #define CLR_K1		cbi(PORTA,1)
(0060) #define CLR_K2		cbi(PORTA,2)
(0061) #define CLR_K3		cbi(PORTA,3)
(0062) 
(0063) #define SET_K4		sbi(PORTA,4)
(0064) #define SET_K5		sbi(PORTA,5)
(0065) #define SET_K6		sbi(PORTA,6)
(0066) #define SET_K7		sbi(PORTA,7)
(0067) 
(0068) #define GET_K4		gbi(PINA,4)
(0069) #define GET_K5		gbi(PINA,5)
(0070) #define GET_K6		gbi(PINA,6)
(0071) #define GET_K7		gbi(PINA,7)
(0072) 
(0073) void KeyBoard_setSta(uint8 status)
(0074) {
(0075) 	//SET_K4;		
(0076) 	//SET_K5;		
(0077) 	//SET_K6;		
(0078) 	//SET_K7;	
(0079) 
(0080) 	if( status&0x01 )
_KeyBoard_setSta:
  status               --> R16
    00D6 FF00      SBRS	R16,0
    00D7 C002      RJMP	0x00DA
(0081) 		SET_K0;
    00D8 9AD8      SBI	0x1B,0
    00D9 C001      RJMP	0x00DB
(0082) 	else 
(0083) 		CLR_K0;
    00DA 98D8      CBI	0x1B,0
(0084) 
(0085) 	if( status&0x02 )
    00DB FF01      SBRS	R16,1
    00DC C002      RJMP	0x00DF
(0086) 		SET_K1;
    00DD 9AD9      SBI	0x1B,1
    00DE C001      RJMP	0x00E0
(0087) 	else 
(0088) 		CLR_K1;
    00DF 98D9      CBI	0x1B,1
(0089) 
(0090) 	if( status&0x04 )
    00E0 FF02      SBRS	R16,2
    00E1 C002      RJMP	0x00E4
(0091) 		SET_K2;
    00E2 9ADA      SBI	0x1B,2
    00E3 C001      RJMP	0x00E5
(0092) 	else 
(0093) 		CLR_K2;
    00E4 98DA      CBI	0x1B,2
(0094) 
(0095) 	if( status&0x08 )
    00E5 FF03      SBRS	R16,3
    00E6 C002      RJMP	0x00E9
(0096) 		SET_K3;
    00E7 9ADB      SBI	0x1B,3
    00E8 C001      RJMP	0x00EA
(0097) 	else 
(0098) 		CLR_K3;
    00E9 98DB      CBI	0x1B,3
(0099) }
    00EA 9508      RET
(0100) 
(0101) uint8 KeyBoard_getSta()
(0102) {
(0103) 	uint8 status = 0xF0;
_KeyBoard_getSta:
  status               --> R16
    00EB EF00      LDI	R16,0xF0
(0104) 
(0105) 	if( !GET_K4 )
    00EC 99CC      SBIC	0x19,4
    00ED C001      RJMP	0x00EF
(0106) 		status = 0xe0;
    00EE EE00      LDI	R16,0xE0
(0107) 
(0108) 	if( !GET_K5 )
    00EF 99CD      SBIC	0x19,5
    00F0 C001      RJMP	0x00F2
(0109) 		status = 0xd0;
    00F1 ED00      LDI	R16,0xD0
(0110) 
(0111) 	if( !GET_K6 )
    00F2 99CE      SBIC	0x19,6
    00F3 C001      RJMP	0x00F5
(0112) 		status = 0xb0;
    00F4 EB00      LDI	R16,0xB0
(0113) 
(0114) 	if( !GET_K7 )
    00F5 99CF      SBIC	0x19,7
    00F6 C001      RJMP	0x00F8
(0115) 		status = 0x70;
    00F7 E700      LDI	R16,0x70
(0116) 
(0117) 	return status;
    00F8 9508      RET
_GetKeyVal:
  keyVal               --> R12
  i                    --> R20
  getSta               --> R10
  j                    --> R22
    00F9 940E0207  CALL	push_gset4
(0118) }
(0119) 
(0120) /*
(0121) #define KEY_DDR 	DDRA
(0122) #define KEY_PORT 	PORTA
(0123) #define KEY_PIN  	PINA
(0124) */
(0125) /*--------------------------------------------------------------------
(0126) 函数名称:
(0127) 函数功能:查询按键
(0128) 注意事项:
(0129) 提示说明:
(0130) 输    入:
(0131) 返    回:
(0132) --------------------------------------------------------------------*/
(0133) /*
(0134) 	K4-----K5-----K6-----K7
(0135)      |      |      |      |
(0136) 	03H----02H----01H----00H -K0
(0137) 	07H----06H----05H----04H -K1
(0138) 	0BH----0AH----09H----08H -K2
(0139) 	0FH----0EH----0DH----0CH -K3
(0140) */
(0141) const uint8 setSta_[4]={0xfe,0xfd,0xfb,0xf7};	
(0142) const uint8 getSta_[4]={0x70,0xb0,0xd0,0xe0};   
(0143) uint8 GetKeyVal()
(0144) {
(0145) 	uint8 i,j,getSta,keyVal;
(0146) 
(0147) 	for(i=0;i<4;i++)              
    00FB 2744      CLR	R20
    00FC C024      RJMP	0x0121
(0148) 	{							
(0149) 		//KEY_PORT = setSta_[i];
(0150) 		KeyBoard_setSta(setSta_[i]);
    00FD E584      LDI	R24,0x54
    00FE E090      LDI	R25,0
    00FF 2FE4      MOV	R30,R20
    0100 27FF      CLR	R31
    0101 0FE8      ADD	R30,R24
    0102 1FF9      ADC	R31,R25
    0103 9104      LPM	R16,0(Z)
    0104 DFD1      RCALL	_KeyBoard_setSta
(0151) 		delay50us(1);  		
    0105 E001      LDI	R16,1
    0106 E010      LDI	R17,0
    0107 DFA6      RCALL	_delay50us
(0152) 		//if(KEY_PIN!=setSta_[i])
(0153) 		getSta = KeyBoard_getSta();
    0108 DFE2      RCALL	_KeyBoard_getSta
    0109 2EA0      MOV	R10,R16
(0154) 		//if( getSta!=setSta_[i] )
(0155) 		if( getSta!=0xF0 )
    010A 3F00      CPI	R16,0xF0
    010B F0A1      BEQ	0x0120
(0156) 		{
(0157) 			//getSta = KEY_PIN&0xf0;
(0158) 			//getSta = KeyBoard_getSta();
(0159) 			for(j=0;j<4;j++)    
    010C 2766      CLR	R22
    010D C010      RJMP	0x011E
(0160) 				if(getSta==getSta_[j])                                 
    010E E588      LDI	R24,0x58
    010F E090      LDI	R25,0
    0110 2FE6      MOV	R30,R22
    0111 27FF      CLR	R31
    0112 0FE8      ADD	R30,R24
    0113 1FF9      ADC	R31,R25
    0114 91E4      LPM	R30,0(Z)
    0115 16AE      CP	R10,R30
    0116 F431      BNE	0x011D
(0161) 				{
(0162) 					keyVal=j+i*4;
    0117 E084      LDI	R24,4
    0118 9F84      MUL	R24,R20
    0119 2EC6      MOV	R12,R22
    011A 0CC0      ADD	R12,R0
(0163) 					return keyVal;
    011B 2D0C      MOV	R16,R12
    011C C007      RJMP	0x0124
    011D 9563      INC	R22
    011E 3064      CPI	R22,4
    011F F370      BCS	0x010E
    0120 9543      INC	R20
    0121 3044      CPI	R20,4
    0122 F2D0      BCS	0x00FD
(0164) 				}
(0165) 		}
(0166) 	}
(0167) 	return 0xFF;

⌨️ 快捷键说明

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