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

📄 4x4key.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _4x4key.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\4x4key\4x4key.c
 0000                   .dbfunc e KEY_Init _KEY_Init fV
                        .even
 0000           _KEY_Init::
 0000                   .dbline -1
 0000                   .dbline 96
 0000           ; /****************************************Copyright (c)**************************************************
 0000           ; **                               ADEmbed Development Co.,LTD.                                    
 0000           ; **                                 http://www.adembed.com
 0000           ; **--------------File Info-------------------------------------------------------------------------------
 0000           ; ** File name:                 main.c
 0000           ; ** Last modified Date:  2008-12-13
 0000           ; ** Last Version:              1.0
 0000           ; ** Descriptions:              4*4Key Test.
 0000           ; ** 
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; ** Created by:                        junbolu
 0000           ; ** Created date:              2008-12-13
 0000           ; ** Version:                           1.0
 0000           ; ** Descriptions:              
 0000           ; **
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; ** Modified by:
 0000           ; ** Modified date:
 0000           ; ** Version:
 0000           ; ** Descriptions:
 0000           ; **
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; **ICC-AVR application builder : 2008-12-13
 0000           ; **Target : M16
 0000           ; **Crystal: 7.3728Mhz
 0000           ; **PA0--->L1                   PA1--->L2                       PA2--->L3                       PA3--->L4                       
 0000           ; **PA4--->H1                   PA5--->H2                       PA6--->H3                       PA7--->H4       
 0000           ; --------------------------
 0000           ; | H4   C    D    E    F  |
 0000           ; | H3   8    9    A    B  |
 0000           ; | H2   4    5    6    7  |
 0000           ; | H1   0    1    2    3  |
 0000           ; | /    L1   L2   L3   L4 |
 0000           ; --------------------------       
 0000           ; **描述:扫描4*4按键的状态,扫描到按键被按下后,将此键码发送到串口
 0000           ; **      
 0000           ; **
 0000           ; **涉及知识点:
 0000           ; **          DI输入DO输出
 0000           ; **          while循环,case循环
 0000           ; **                    8位定时器,串口的应用
 0000           ; *******************************************************************************************************/
 0000           ; 
 0000           ; #include<iom16v.h>
 0000           ; #include<macros.h>
 0000           ; #include"Define.h"
 0000           ; 
 0000           ; 
 0000           ; #define F_osc           7372800
 0000           ; #define Baud_rate       9600                                           
 0000           ; //管脚定义
 0000           ; #define PIN_RXD                       0       //PD0   RXD
 0000           ; #define PIN_TXD                       1       //PD1   TXD
 0000           ; 
 0000           ; 
 0000           ; #define L1         BIT0       
 0000           ; #define L2         BIT1
 0000           ; #define L3         BIT2
 0000           ; #define L4         BIT3
 0000           ; #define H1         BIT4       
 0000           ; #define H2         BIT5
 0000           ; #define H3         BIT6
 0000           ; #define H4         BIT7
 0000           ; 
 0000           ; #define KEY_DDR                DDRA
 0000           ; #define KEY_PORT       PORTA
 0000           ; #define KEY_IN                 PINA
 0000           ; 
 0000           ; 
 0000           ; #define L1_H1          0x00
 0000           ; #define L2_H1          0x01
 0000           ; #define L3_H1          0x02
 0000           ; #define L4_H1          0x03
 0000           ; #define L1_H2          0x04
 0000           ; #define L2_H2          0x05
 0000           ; #define L3_H2          0x06
 0000           ; #define L4_H2          0x07
 0000           ; #define L1_H3          0x08
 0000           ; #define L2_H3          0x09
 0000           ; #define L3_H3          0x0A
 0000           ; #define L4_H3          0x0B
 0000           ; #define L1_H4          0x0C
 0000           ; #define L2_H4          0x0D
 0000           ; #define L3_H4          0x0E
 0000           ; #define L4_H4          0x0F
 0000           ; 
 0000           ; #define ON_PUSH                0xFF
 0000           ; 
 0000           ; unsigned char Key_State;
 0000           ; unsigned char Key_Value;
 0000           ; 
 0000           ; void Uart_Init(void); 
 0000           ; void USART_TXD(uint8 data);
 0000           ; 
 0000           ; void KEY_Init(void)
 0000           ; {
 0000                   .dbline 97
 0000           ;  KEY_DDR |= L1&L2&L3&L4;                  //设为输出
 0000 2AB2              in R2,0x1a
 0002 2ABA              out 0x1a,R2
 0004                   .dbline 98
 0004           ;  KEY_PORT|= L1&L2&L3&L4;                              //输出为高
 0004 2BB2              in R2,0x1b
 0006 2BBA              out 0x1b,R2
 0008                   .dbline 99
 0008           ;  KEY_DDR &= ~(H1&H2&H3&H4);                           //设为输入
 0008 8AB3              in R24,0x1a
 000A 8F7F              andi R24,255
 000C 8ABB              out 0x1a,R24
 000E                   .dbline 100
 000E           ;  KEY_PORT|= H1&H2&H3&H4;                              //上拉输入
 000E 2BB2              in R2,0x1b
 0010 2BBA              out 0x1b,R2
 0012                   .dbline 103
 0012           ;  
 0012           ;  //t/c0初始化
 0012           ;  TCCR0=0X0D;
 0012 8DE0              ldi R24,13
 0014 83BF              out 0x33,R24
 0016                   .dbline 104
 0016           ;  TCNT0=0X00;
 0016 2224              clr R2
 0018 22BE              out 0x32,R2
 001A                   .dbline 105
 001A           ;  OCR0=0XF0;         //定时30ms
 001A 80EF              ldi R24,240
 001C 8CBF              out 0x3c,R24
 001E                   .dbline 106
 001E           ;  TIMSK|=0X02;
 001E 89B7              in R24,0x39
 0020 8260              ori R24,2
 0022 89BF              out 0x39,R24
 0024                   .dbline -2
 0024           L1:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbend
                        .area vector(rom, abs)
                        .org 76
 004C 0C941300          jmp _timer0comp
                        .area text(rom, con, rel)
 0026                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\4x4key\4x4key.c
 0026                   .dbfunc e timer0comp _timer0comp fV
                        .even
 0026           _timer0comp::
 0026 0E940000          xcall push_lset
 002A                   .dbline -1
 002A                   .dbline 112
 002A           ;  
 002A           ; }
 002A           ; 
 002A           ; #pragma interrupt_handler timer0comp:20
 002A           ; void timer0comp (void)
 002A           ; { 
 002A                   .dbline 113
 002A           ;  Read_Key();
 002A 71D0              xcall _Read_Key
 002C                   .dbline -2
 002C           L2:
 002C 0E940000          xcall pop_lset
 0030                   .dbline 0 ; func end
 0030 1895              reti
 0032                   .dbend
 0032                   .dbfunc e KEYDIN _KEYDIN fc
                        .even
 0032           _KEYDIN::
 0032                   .dbline -1
 0032                   .dbline 118
 0032           ; }
 0032           ; 
 0032           ; //=======================================================================
 0032           ; unsigned char KEYDIN(void)
 0032           ; {
 0032                   .dbline 119
 0032           ;       KEY_PORT |= L1&L2&L3&L4;                                //输出为高
 0032 2BB2              in R2,0x1b
 0034 2BBA              out 0x1b,R2
 0036                   .dbline 120
 0036           ;       KEY_PORT &= ~L1;                                                //扫描L1
 0036 D898              cbi 0x1b,0
 0038                   .dbline 122
 0038           ;       
 0038           ;       if((KEY_IN&H1)==H1)      return L1_H1;
 0038 89B3              in R24,0x19
 003A 8071              andi R24,16
 003C 8031              cpi R24,16
 003E 11F4              brne L4
 0040                   .dbline 122
 0040 0027              clr R16
 0042 64C0              xjmp L3
 0044           L4:
 0044                   .dbline 123
 0044           ;       if((KEY_IN&H2)==H2)      return L1_H2;
 0044 89B3              in R24,0x19
 0046 8072              andi R24,32
 0048 8032              cpi R24,32
 004A 11F4              brne L6
 004C                   .dbline 123
 004C 04E0              ldi R16,4
 004E 5EC0              xjmp L3
 0050           L6:
 0050                   .dbline 124
 0050           ;       if((KEY_IN&H3)==H3)      return L1_H3;
 0050 89B3              in R24,0x19
 0052 8074              andi R24,64
 0054 8034              cpi R24,64
 0056 11F4              brne L8
 0058                   .dbline 124
 0058 08E0              ldi R16,8
 005A 58C0              xjmp L3
 005C           L8:
 005C                   .dbline 125
 005C           ;       if((KEY_IN&H4)==H4)      return L1_H4;
 005C 89B3              in R24,0x19
 005E 8078              andi R24,128
 0060 8038              cpi R24,128
 0062 11F4              brne L10
 0064                   .dbline 125
 0064 0CE0              ldi R16,12
 0066 52C0              xjmp L3
 0068           L10:
 0068                   .dbline 127
 0068           ;       
 0068           ;       KEY_PORT |= L1&L2&L3&L4;                                //输出为高
 0068 2BB2              in R2,0x1b
 006A 2BBA              out 0x1b,R2
 006C                   .dbline 128
 006C           ;       KEY_PORT &= ~L2;                                                //扫描L2
 006C D998              cbi 0x1b,1
 006E                   .dbline 130
 006E           ;       
 006E           ;       if((KEY_IN&H1)==H1)      return L2_H1;
 006E 89B3              in R24,0x19
 0070 8071              andi R24,16
 0072 8031              cpi R24,16
 0074 11F4              brne L12
 0076                   .dbline 130
 0076 01E0              ldi R16,1
 0078 49C0              xjmp L3
 007A           L12:
 007A                   .dbline 131
 007A           ;       if((KEY_IN&H2)==H2)      return L2_H2;
 007A 89B3              in R24,0x19
 007C 8072              andi R24,32
 007E 8032              cpi R24,32
 0080 11F4              brne L14
 0082                   .dbline 131
 0082 05E0              ldi R16,5
 0084 43C0              xjmp L3
 0086           L14:
 0086                   .dbline 132
 0086           ;       if((KEY_IN&H3)==H3)      return L2_H3;
 0086 89B3              in R24,0x19
 0088 8074              andi R24,64
 008A 8034              cpi R24,64
 008C 11F4              brne L16
 008E                   .dbline 132
 008E 09E0              ldi R16,9
 0090 3DC0              xjmp L3
 0092           L16:
 0092                   .dbline 133
 0092           ;       if((KEY_IN&H4)==H4)      return L2_H4;
 0092 89B3              in R24,0x19
 0094 8078              andi R24,128
 0096 8038              cpi R24,128
 0098 11F4              brne L18
 009A                   .dbline 133
 009A 0DE0              ldi R16,13
 009C 37C0              xjmp L3
 009E           L18:
 009E                   .dbline 135
 009E           ;       
 009E           ;       KEY_PORT |= L1&L2&L3&L4;                                //输出为高
 009E 2BB2              in R2,0x1b
 00A0 2BBA              out 0x1b,R2
 00A2                   .dbline 136
 00A2           ;       KEY_PORT &= ~L3;                                                //扫描L3
 00A2 DA98              cbi 0x1b,2
 00A4                   .dbline 138
 00A4           ;       
 00A4           ;       if((KEY_IN&H1)==H1)      return L3_H1;
 00A4 89B3              in R24,0x19
 00A6 8071              andi R24,16
 00A8 8031              cpi R24,16
 00AA 11F4              brne L20
 00AC                   .dbline 138
 00AC 02E0              ldi R16,2
 00AE 2EC0              xjmp L3
 00B0           L20:
 00B0                   .dbline 139
 00B0           ;       if((KEY_IN&H2)==H2)      return L3_H2;
 00B0 89B3              in R24,0x19
 00B2 8072              andi R24,32
 00B4 8032              cpi R24,32
 00B6 11F4              brne L22
 00B8                   .dbline 139
 00B8 06E0              ldi R16,6
 00BA 28C0              xjmp L3
 00BC           L22:
 00BC                   .dbline 140
 00BC           ;       if((KEY_IN&H3)==H3)      return L3_H3;
 00BC 89B3              in R24,0x19
 00BE 8074              andi R24,64
 00C0 8034              cpi R24,64
 00C2 11F4              brne L24
 00C4                   .dbline 140
 00C4 0AE0              ldi R16,10
 00C6 22C0              xjmp L3
 00C8           L24:
 00C8                   .dbline 141
 00C8           ;       if((KEY_IN&H4)==H4)      return L3_H4;
 00C8 89B3              in R24,0x19
 00CA 8078              andi R24,128
 00CC 8038              cpi R24,128
 00CE 11F4              brne L26
 00D0                   .dbline 141
 00D0 0EE0              ldi R16,14
 00D2 1CC0              xjmp L3
 00D4           L26:
 00D4                   .dbline 143
 00D4           ;       
 00D4           ;       KEY_PORT |= L1&L2&L3&L4;                                //输出为高
 00D4 2BB2              in R2,0x1b
 00D6 2BBA              out 0x1b,R2
 00D8                   .dbline 144
 00D8           ;       KEY_PORT &= ~L4;                                                //扫描L4

⌨️ 快捷键说明

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