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

📄 key_lcd.lst

📁 键盘扫描及其LCD显示输出,有源程序与仿真文件,都测试通过.
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    002F E5CF      LDI	R28,0x5F
    0030 E0D2      LDI	R29,2
    0031 BFCD      OUT	0x3D,R28
    0032 BFDE      OUT	0x3E,R29
    0033 51C0      SUBI	R28,0x10
    0034 40D0      SBCI	R29,0
    0035 EA0A      LDI	R16,0xAA
    0036 8308      STD	Y+0,R16
    0037 2400      CLR	R0
    0038 E8E2      LDI	R30,0x82
    0039 E0F0      LDI	R31,0
    003A E010      LDI	R17,0
    003B 39E2      CPI	R30,0x92
    003C 07F1      CPC	R31,R17
    003D F011      BEQ	0x0040
    003E 9201      ST	R0,Z+
    003F CFFB      RJMP	0x003B
    0040 8300      STD	Z+0,R16
    0041 E3EC      LDI	R30,0x3C
    0042 E0F0      LDI	R31,0
    0043 E6A0      LDI	R26,0x60
    0044 E0B0      LDI	R27,0
    0045 E010      LDI	R17,0
    0046 35EE      CPI	R30,0x5E
    0047 07F1      CPC	R31,R17
    0048 F021      BEQ	0x004D
    0049 95C8      LPM
    004A 9631      ADIW	R30,1
    004B 920D      ST	R0,X+
    004C CFF9      RJMP	0x0046
    004D D0A2      RCALL	_main
_exit:
    004E CFFF      RJMP	_exit
FILE: F:\AVR练习\key_lcd\key.c
(0001) 
(0002) #include <macros.h>
(0003) #include "includes.h"
(0004) //#pragma interrupt_handler icp_time1:6
(0005) //#define BIT(x) (1<<(x))
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008) const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
(0009)   0x77,0x7c,0x39,0x5e,79,71};//七段译码字形表
(0010) const uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0011) uchar ledbuff[6];//显示缓冲区
(0012) uchar led[6];
(0013) uint oldcount;
(0014) uint newcount;
(0015) /*
(0016) 键盘扫描函数
(0017)  读取当前键盘的状态
(0018)  有按键按下返回相应按键值
(0019)  无按键按下返回"0x00"
(0020) */
(0021) uchar key_read(){
(0022)  uchar i;
(0023)  DDRA = 0x00;/*获取列地址*/
_key_read:
  i                    --> R16
    004F 2422      CLR	R2
    0050 BA2A      OUT	0x1A,R2
(0024)  PORTA = 0x0F;
    0051 E08F      LDI	R24,0xF
    0052 BB8B      OUT	0x1B,R24
(0025)  DDRA = 0xF0;
    0053 EF80      LDI	R24,0xF0
    0054 BB8A      OUT	0x1A,R24
(0026)  i = PINA;
    0055 B309      IN	R16,0x19
(0027)  DDRA = 0x00;/*获取行地址*/
    0056 BA2A      OUT	0x1A,R2
(0028)  PORTA = 0xF0;
    0057 BB8B      OUT	0x1B,R24
(0029)  DDRA = 0x0F;
    0058 E08F      LDI	R24,0xF
    0059 BB8A      OUT	0x1A,R24
(0030)  i&=PINA;
    005A B229      IN	R2,0x19
    005B 2102      AND	R16,R2
(0031)  
(0032)  DDRA = 0x00;/*输出复位*/
    005C 2422      CLR	R2
    005D BA2A      OUT	0x1A,R2
(0033)  PORTA = 0xFF;
    005E EF8F      LDI	R24,0xFF
    005F BB8B      OUT	0x1B,R24
(0034)  
(0035)  switch (i) {/*将按键码转换成键值*/
    0060 2711      CLR	R17
    0061 3201      CPI	R16,0x21
    0062 E0E0      LDI	R30,0
    0063 071E      CPC	R17,R30
    0064 F409      BNE	0x0066
    0065 C05F      RJMP	0x00C5
    0066 3202      CPI	R16,0x22
    0067 E0E0      LDI	R30,0
    0068 071E      CPC	R17,R30
    0069 F409      BNE	0x006B
    006A C05C      RJMP	0x00C7
    006B 3204      CPI	R16,0x24
    006C E0E0      LDI	R30,0
    006D 071E      CPC	R17,R30
    006E F409      BNE	0x0070
    006F C059      RJMP	0x00C9
    0070 3208      CPI	R16,0x28
    0071 E0E0      LDI	R30,0
    0072 071E      CPC	R17,R30
    0073 F409      BNE	0x0075
    0074 C056      RJMP	0x00CB
    0075 E288      LDI	R24,0x28
    0076 E090      LDI	R25,0
    0077 1780      CP	R24,R16
    0078 0791      CPC	R25,R17
    0079 F0AC      BLT	0x008F
    007A 3101      CPI	R16,0x11
    007B E0E0      LDI	R30,0
    007C 071E      CPC	R17,R30
    007D F409      BNE	0x007F
    007E C04E      RJMP	0x00CD
    007F 3102      CPI	R16,0x12
    0080 E0E0      LDI	R30,0
    0081 071E      CPC	R17,R30
    0082 F409      BNE	0x0084
    0083 C04B      RJMP	0x00CF
    0084 3104      CPI	R16,0x14
    0085 E0E0      LDI	R30,0
    0086 071E      CPC	R17,R30
    0087 F409      BNE	0x0089
    0088 C048      RJMP	0x00D1
    0089 3108      CPI	R16,0x18
    008A E0E0      LDI	R30,0
    008B 071E      CPC	R17,R30
    008C F409      BNE	0x008E
    008D C045      RJMP	0x00D3
    008E C046      RJMP	0x00D5
    008F 3401      CPI	R16,0x41
    0090 E0E0      LDI	R30,0
    0091 071E      CPC	R17,R30
    0092 F151      BEQ	0x00BD
    0093 3402      CPI	R16,0x42
    0094 E0E0      LDI	R30,0
    0095 071E      CPC	R17,R30
    0096 F141      BEQ	0x00BF
    0097 3404      CPI	R16,0x44
    0098 E0E0      LDI	R30,0
    0099 071E      CPC	R17,R30
    009A F131      BEQ	0x00C1
    009B 3408      CPI	R16,0x48
    009C E0E0      LDI	R30,0
    009D 071E      CPC	R17,R30
    009E F121      BEQ	0x00C3
    009F 3401      CPI	R16,0x41
    00A0 E0E0      LDI	R30,0
    00A1 071E      CPC	R17,R30
    00A2 F40C      BGE	0x00A4
    00A3 C031      RJMP	0x00D5
    00A4 3801      CPI	R16,0x81
    00A5 E0E0      LDI	R30,0
    00A6 071E      CPC	R17,R30
    00A7 F069      BEQ	0x00B5
    00A8 3802      CPI	R16,0x82
    00A9 E0E0      LDI	R30,0
    00AA 071E      CPC	R17,R30
    00AB F059      BEQ	0x00B7
    00AC 3804      CPI	R16,0x84
    00AD E0E0      LDI	R30,0
    00AE 071E      CPC	R17,R30
    00AF F049      BEQ	0x00B9
    00B0 3808      CPI	R16,0x88
    00B1 E0E0      LDI	R30,0
    00B2 071E      CPC	R17,R30
    00B3 F039      BEQ	0x00BB
    00B4 C020      RJMP	0x00D5
(0036)   case  0x81: return 0x00;
    00B5 2700      CLR	R16
    00B6 C01F      RJMP	0x00D6
(0037)   case  0x82: return 'a';
    00B7 E601      LDI	R16,0x61
    00B8 C01D      RJMP	0x00D6
(0038)   case  0x84: return 'b';
    00B9 E602      LDI	R16,0x62
    00BA C01B      RJMP	0x00D6
(0039)   case  0x88: return 'c';
    00BB E603      LDI	R16,0x63
    00BC C019      RJMP	0x00D6
(0040)   case  0x41: return '1';
    00BD E301      LDI	R16,0x31
    00BE C017      RJMP	0x00D6
(0041)   case  0x42: return 0x02;
    00BF E002      LDI	R16,2
    00C0 C015      RJMP	0x00D6
(0042)   case  0x44: return 0x03;
    00C1 E003      LDI	R16,3
    00C2 C013      RJMP	0x00D6
(0043)   case  0x48: return 'd';
    00C3 E604      LDI	R16,0x64
    00C4 C011      RJMP	0x00D6
(0044)   case  0x21: return 0x04;
    00C5 E004      LDI	R16,4
    00C6 C00F      RJMP	0x00D6
(0045)   case  0x22: return 0x05;
    00C7 E005      LDI	R16,5
    00C8 C00D      RJMP	0x00D6
(0046)   case  0x24: return 0x06;
    00C9 E006      LDI	R16,6
    00CA C00B      RJMP	0x00D6
(0047)   case  0x28: return 'e';
    00CB E605      LDI	R16,0x65
    00CC C009      RJMP	0x00D6
(0048)   case  0x11: return 0x07;
    00CD E007      LDI	R16,7
    00CE C007      RJMP	0x00D6
(0049)   case  0x12: return 0x08;
    00CF E008      LDI	R16,0x8
    00D0 C005      RJMP	0x00D6
(0050)   case  0x14: return 0x09;
    00D1 E009      LDI	R16,0x9
    00D2 C003      RJMP	0x00D6
(0051)   case  0x18: return 'f';
    00D3 E606      LDI	R16,0x66
    00D4 C001      RJMP	0x00D6
(0052)   default : return 0x00;
    00D5 2700      CLR	R16
    00D6 9508      RET
(0053) }
(0054) }
(0055) 
(0056) /*****************************************
(0057)                 延时1MS
(0058) ******************************************/
(0059) void delay_ms()
(0060) {uint i;
(0061)   for(i+0;i<1142;i++)
_delay_ms:
  i                    --> R16
    00D7 C002      RJMP	0x00DA
    00D8 5F0F      SUBI	R16,0xFF
    00D9 4F1F      SBCI	R17,0xFF
    00DA 3706      CPI	R16,0x76
    00DB E0E4      LDI	R30,4
    00DC 071E      CPC	R17,R30
    00DD F3D0      BCS	0x00D8
    00DE 9508      RET
_delay:
  i                    --> R20
  t                    --> R16
    00DF D1DF      RCALL	push_gset1
(0062)   ;
(0063)   }
(0064) void delay(uint t)
(0065) {uchar i;
(0066)   for(i=0;i<t;i++)
    00E0 2744      CLR	R20
    00E1 C001      RJMP	0x00E3
    00E2 9543      INC	R20
    00E3 2E24      MOV	R2,R20
    00E4 2433      CLR	R3
    00E5 1620      CP	R2,R16
    00E6 0631      CPC	R3,R17
    00E7 F3D0      BCS	0x00E2
    00E8 D1D9      RCALL	pop_gset1
    00E9 9508      RET
(0067)   ;
(0068) }
(0069) 
(0070) /****************************************
(0071)                 mcu初始化
(0072) *****************************************/
(0073) void init()
(0074) { //DDRA=0x00;
(0075)   DDRD=0xff;
_init:
    00EA EF8F      LDI	R24,0xFF
    00EB BB81      OUT	0x11,R24
(0076)   DDRB=0xff;
    00EC BB87      OUT	0x17,R24
(0077)  // PORTA=0xff;
(0078)   PORTB=0xff;
    00ED BB88      OUT	0x18,R24
(0079)   PORTD=0xff;
    00EE BB82      OUT	0x12,R24
    00EF 9508      RET
_main:
  i                    --> Y+3
  space                --> R20
  x_position           --> R20
  key                  --> R10
    00F0 9722      SBIW	R28,2
(0080)   
(0081)   }
(0082) void main()
(0083)  { uchar key;
(0084)    uchar i;
(0085)    uchar x_position;
(0086)     uchar *space = "                   ";
    00F1 E64E      LDI	R20,0x6E
    00F2 E050      LDI	R21,0
(0087)     Init_LCD();   
    00F3 D117      RCALL	_Init_LCD
(0088)     //PORTD = 0xff; 
(0089)     //DDRD =  0xf0;     
(0090)     PORTA = 0xff;
    00F4 EF8F      LDI	R24,0xFF
    00F5 BB8B      OUT	0x1B,R24
(0091)     DDRA  = 0xf8;
    00F6 EF88      LDI	R24,0xF8
    00F7 BB8A      OUT	0x1A,R24
(0092)     LCD_DisplayString(1,1,"key scan test");
    00F8 E680      LDI	R24,0x60
    00F9 E090      LDI	R25,0
    00FA 8399      STD	Y+1,R25
    00FB 8388      STD	Y+0,R24
    00FC E021      LDI	R18,1
    00FD E001      LDI	R16,1
    00FE D13F      RCALL	_LCD_DisplayString
(0093)     x_position = 2;
    00FF E042      LDI	R20,2
(0094)    init();
    0100 DFE9      RCALL	_init
(0095)    for( ; ; )
(0096)    { 
(0097) 	 key=key_read();
    0101 DF4D      RCALL	_key_read
    0102 2EA0      MOV	R10,R16
(0098) 	  //针对4X4的键盘         
(0099)          switch(key)   
    0103 2D6A      MOV	R22,R10
    0104 2777      CLR	R23
    0105 3061      CPI	R22,1
    0106 E0E0      LDI	R30,0
    0107 077E      CPC	R23,R30
    0108 F409      BNE	0x010A
    0109 C038      RJMP	0x0142
    010A 3062      CPI	R22,2
    010B E0E0      LDI	R30,0
    010C 077E      CPC	R23,R30
    010D F409      BNE	0x010F
    010E C039      RJMP	0x0148
    010F 3063      CPI	R22,3
    0110 E0E0      LDI	R30,0
    0111 077E      CPC	R23,R30
    0112 F409      BNE	0x0114
    0113 C03A      RJMP	0x014E
    0114 3064      CPI	R22,4
    0115 E0E0      LDI	R30,0
    0116 077E      CPC	R23,R30
    0117 F409      BNE	0x0119
    0118 C03B      RJMP	0x0154
    0119 3065      CPI	R22,5
    011A E0E0      LDI	R30,0
    011B 077E      CPC	R23,R30
    011C F409      BNE	0x011E
    011D C03C      RJMP	0x015A
    011E 3066      CPI	R22,6
    011F E0E0      LDI	R30,0
    0120 077E      CPC	R23,R30
    0121 F409      BNE	0x0123
    0122 C03D      RJMP	0x0160
    0123 3067      CPI	R22,7
    0124 E0E0      LDI	R30,0
    0125 077E      CPC	R23,R30
    0126 F409      BNE	0x0128
    0127 C03E      RJMP	0x0166
    0128 3068      CPI	R22,0x8
    0129 E0E0      LDI	R30,0
    012A 077E      CPC	R23,R30
    012B F409      BNE	0x012D
    012C C03F      RJMP	0x016C
    012D 3069      CPI	R22,0x9
    012E E0E0      LDI	R30,0
    012F 077E      CPC	R23,R30
    0130 F409      BNE	0x0132
    0131 C040      RJMP	0x0172
    0132 306A      CPI	R22,0xA
    0133 E0E0      LDI	R30,0
    0134 077E      CPC	R23,R30
    0135 F409      BNE	0x0137
    0136 C041      RJMP	0x0178
    0137 306B      CPI	R22,0xB
    0138 E0E0      LDI	R30,0
    0139 077E      CPC	R23,R30
    013A F409      BNE	0x013C
    013B C042      RJMP	0x017E
    013C 306C      CPI	R22,0xC
    013D E0E0      LDI	R30,0
    013E 077E      CPC	R23,R30
    013F F409      BNE	0x0141
    0140 C043      RJMP	0x0184
    0141 CFBF      RJMP	0x0101
(0100)          {  

⌨️ 快捷键说明

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