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

📄 1602_main.lis

📁 atmega32 +1602显示+ key控制 + ad转化电路都在一起测试通过
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module _1602_main.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\tem\1602AN~1/1602.h
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              i -> R20,R21
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_us::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 12
 0004           ; #include <iom16v.h>
 0004           ; #include "1602.h"
 0004           ; //void delay_ms(unsigned int us);
 0004           ; //void delay_us(unsigned int uu);
 0004           ; unsigned char key_read(void);
 0004           ; unsigned char get_key(void);
 0004           ; unsigned int get_ad(void);
 0004           ; unsigned char lcd_process(void);
 0004           ; int key,disp_num1;
 0004           ; float disp_num2;
 0004           ; /*
 0004           ; void delay_us(unsigned int uu)  //90us
 0004                   .dbline 14
 0004 4427              clr R20
 0006 5527              clr R21
 0008 02C0              xjmp L5
 000A           L2:
 000A                   .dbline 14
 000A           L3:
 000A                   .dbline 14
 000A 4F5F              subi R20,255  ; offset = 1
 000C 5F4F              sbci R21,255
 000E           L5:
 000E                   .dbline 14
 000E           ;  {unsigned int ii; 
 000E           ;   for(ii=0;ii<uu;ii++)
 000E 4017              cp R20,R16
 0010 5107              cpc R21,R17
 0012 D8F3              brlo L2
 0014                   .dbline -2
 0014           L1:
 0014 0E940000          xcall pop_gset1
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r i 20 i
 001A                   .dbsym r n 16 i
 001A                   .dbend
 001A                   .dbfunc e delay_ms _delay_ms fV
 001A           ;              a -> R20,R21
 001A           ;              b -> R22,R23
 001A           ;              i -> R16,R17
                        .even
 001A           _delay_ms::
 001A 0E940000          xcall push_gset2
 001E                   .dbline -1
 001E                   .dbline 17
 001E           ;    ;  
 001E           ;   }
 001E           ; 
 001E                   .dbline 19
 001E           ; 
 001E           ; void delay_ms(unsigned int us)   //1ms
 001E 41E0              ldi R20,1
 0020 50E0              ldi R21,0
 0022 0BC0              xjmp L10
 0024           L7:
 0024                   .dbline 20
 0024           ;  {unsigned int ii; 
 0024 61E0              ldi R22,1
 0026 70E0              ldi R23,0
 0028 02C0              xjmp L14
 002A           L11:
 002A                   .dbline 21
 002A           L12:
 002A                   .dbline 20
 002A 6F5F              subi R22,255  ; offset = 1
 002C 7F4F              sbci R23,255
 002E           L14:
 002E                   .dbline 20
 002E 683E              cpi R22,232
 0030 E3E0              ldi R30,3
 0032 7E07              cpc R23,R30
 0034 D0F3              brlo L11
 0036           L8:
 0036                   .dbline 19
 0036 4F5F              subi R20,255  ; offset = 1
 0038 5F4F              sbci R21,255
 003A           L10:
 003A                   .dbline 19
 003A 4017              cp R20,R16
 003C 5107              cpc R21,R17
 003E 90F3              brlo L7
 0040                   .dbline -2
 0040           L6:
 0040 0E940000          xcall pop_gset2
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbsym r a 20 i
 0046                   .dbsym r b 22 i
 0046                   .dbsym r i 16 i
 0046                   .dbend
 0046                   .dbfunc e LCD_write_com _LCD_write_com fV
 0046           ;            com -> R20
                        .even
 0046           _LCD_write_com::
 0046 0E940000          xcall push_gset1
 004A 402F              mov R20,R16
 004C                   .dbline -1
 004C                   .dbline 26
 004C           ;   for(ii=0;ii<us;ii++)
 004C           ;    delay_us(100);  
 004C           ;   } 
 004C           ; */
 004C           ; /*
 004C           ; 键盘扫描函数
 004C                   .dbline 28
 004C           ;  读取当前键盘的状态
 004C           ;  有按键按下返回相应按键值
 004C DA98              cbi 0x1b,2
 004E                   .dbline 29
 004E           ;  无按键按下返回"0x00"
 004E D998              cbi 0x1b,1
 0050                   .dbline 30
 0050           ; */
 0050 D89A              sbi 0x1b,0
 0052                   .dbline 31
 0052           ; unsigned char key_read(void){
 0052 48BB              out 0x18,R20
 0054                   .dbline 32
 0054           ;  unsigned char k;
 0054 05E0              ldi R16,5
 0056 10E0              ldi R17,0
 0058 D3DF              xcall _delay_us
 005A                   .dbline 33
 005A           ;  
 005A D898              cbi 0x1b,0
 005C                   .dbline -2
 005C           L15:
 005C 0E940000          xcall pop_gset1
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062                   .dbsym r com 20 c
 0062                   .dbend
 0062                   .dbfunc e LCD_write_data _LCD_write_data fV
 0062           ;           data -> R20
                        .even
 0062           _LCD_write_data::
 0062 0E940000          xcall push_gset1
 0066 402F              mov R20,R16
 0068                   .dbline -1
 0068                   .dbline 36
 0068           ; 
 0068           ; 
 0068           ;  //非常经典的键盘控制例子
 0068                   .dbline 37
 0068           ;  DDRD = 0x00;/*获取列地址*/   
 0068 DA9A              sbi 0x1b,2
 006A                   .dbline 38
 006A           ;  PORTD = 0x0F;
 006A D998              cbi 0x1b,1
 006C                   .dbline 39
 006C           ;  DDRD = 0xF0;
 006C D89A              sbi 0x1b,0
 006E                   .dbline 40
 006E           ;  delay_ms(10);
 006E 48BB              out 0x18,R20
 0070                   .dbline 41
 0070           ;  k = PIND;
 0070 05E0              ldi R16,5
 0072 10E0              ldi R17,0
 0074 C5DF              xcall _delay_us
 0076                   .dbline 42
 0076           ;  
 0076 D898              cbi 0x1b,0
 0078                   .dbline -2
 0078           L16:
 0078 0E940000          xcall pop_gset1
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbsym r data 20 c
 007E                   .dbend
 007E                   .dbfunc e LCD_clear _LCD_clear fV
                        .even
 007E           _LCD_clear::
 007E                   .dbline -1
 007E                   .dbline 45
 007E           ;  DDRD = 0x00;/*获取行地址*/
 007E           ;  PORTD = 0xF0;
 007E           ;  DDRD = 0x0F;
 007E                   .dbline 46
 007E           ;  delay_ms(10);
 007E 01E0              ldi R16,1
 0080 E2DF              xcall _LCD_write_com
 0082                   .dbline 47
 0082           ;  k |= PIND;
 0082 05E0              ldi R16,5
 0084 10E0              ldi R17,0
 0086 C9DF              xcall _delay_ms
 0088                   .dbline -2
 0088           L17:
 0088                   .dbline 0 ; func end
 0088 0895              ret
 008A                   .dbend
 008A                   .dbfunc e LCD_write_str _LCD_write_str fV
 008A           ;              s -> R20,R21
 008A           ;              y -> R10
 008A           ;              x -> R22
                        .even
 008A           _LCD_write_str::
 008A 0E940000          xcall push_gset3
 008E A22E              mov R10,R18
 0090 602F              mov R22,R16
 0092 4E81              ldd R20,y+6
 0094 5F81              ldd R21,y+7
 0096                   .dbline -1
 0096                   .dbline 50
 0096           ;  
 0096           ;  DDRD = 0x00;/*输出复位*/
 0096           ;  PORTD = 0xFF;
 0096                   .dbline 52
 0096           ;  
 0096           ;  
 0096 AA20              tst R10
 0098 21F4              brne L19
 009A                   .dbline 52
 009A                   .dbline 53
 009A           ;  switch (k) {/*将按键码转换成键值*/
 009A 062F              mov R16,R22
 009C 0058              subi R16,128    ; addi 128
 009E D3DF              xcall _LCD_write_com
 00A0                   .dbline 54
 00A0           ; //  case  0x00: return 0x00;
 00A0 09C0              xjmp L22
 00A2           L19:
 00A2                   .dbline 55
 00A2           ;   case  0xEE: return 1;
 00A2                   .dbline 56
 00A2           ;   case  0xDE: return 2;
 00A2 062F              mov R16,R22
 00A4 0054              subi R16,64    ; addi 192
 00A6 CFDF              xcall _LCD_write_com
 00A8                   .dbline 57
 00A8           ;   case  0xBE: return 3;
 00A8 05C0              xjmp L22
 00AA           L21:
 00AA                   .dbline 59
 00AA                   .dbline 60
 00AA FA01              movw R30,R20
 00AC 0081              ldd R16,z+0
 00AE D9DF              xcall _LCD_write_data
 00B0                   .dbline 61
 00B0 4F5F              subi R20,255  ; offset = 1
 00B2 5F4F              sbci R21,255
 00B4                   .dbline 62
 00B4           L22:
 00B4                   .dbline 59
 00B4           ;   case  0x7E: return 4;
 00B4           ;   case  0xED: return 5;
 00B4 FA01              movw R30,R20
 00B6 2080              ldd R2,z+0
 00B8 2220              tst R2
 00BA B9F7              brne L21
 00BC                   .dbline -2
 00BC           L18:
 00BC 0E940000          xcall pop_gset3
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbsym r s 20 pc
 00C2                   .dbsym r y 10 c
 00C2                   .dbsym r x 22 c
 00C2                   .dbend
 00C2                   .dbfunc e LCD_write_char _LCD_write_char fV
 00C2           ;           data -> y+4
 00C2           ;              y -> R22
 00C2           ;              x -> R20
                        .even
 00C2           _LCD_write_char::
 00C2 0E940000          xcall push_gset2
 00C6 622F              mov R22,R18
 00C8 402F              mov R20,R16
 00CA                   .dbline -1
 00CA                   .dbline 65
 00CA           ;   case  0xDD: return 6;
 00CA           ;   case  0xBD: return 7;
 00CA           ;   case  0x7D: return 8;
 00CA           ;   case  0xEB: return 9;
 00CA           ;   case  0xDB: return 44;
 00CA           ;   case  0xBB: return 55;
 00CA                   .dbline 67
 00CA           ;   case  0x7B: return 66;
 00CA           ;   case  0xE7: return 77;
 00CA 6623              tst R22
 00CC 21F4              brne L25
 00CE                   .dbline 67
 00CE                   .dbline 68
 00CE           ;   case  0xD7: return 88;
 00CE 042F              mov R16,R20
 00D0 0058              subi R16,128    ; addi 128
 00D2 B9DF              xcall _LCD_write_com
 00D4                   .dbline 69
 00D4           ;   case  0xB7: return 99;
 00D4 03C0              xjmp L26
 00D6           L25:
 00D6                   .dbline 70
 00D6           ;   case  0x77: return 100;
 00D6                   .dbline 71
 00D6           ;   default : return 0x00;
 00D6 042F              mov R16,R20
 00D8 0054              subi R16,64    ; addi 192
 00DA B5DF              xcall _LCD_write_com
 00DC                   .dbline 72
 00DC           ;   } 
 00DC           L26:
 00DC                   .dbline 74
 00DC           ; }
 00DC           ; 
 00DC 0C81              ldd R16,y+4
 00DE C1DF              xcall _LCD_write_data
 00E0                   .dbline -2
 00E0           L24:
 00E0 0E940000          xcall pop_gset2
 00E4                   .dbline 0 ; func end
 00E4 0895              ret
 00E6                   .dbsym l data 4 c
 00E6                   .dbsym r y 22 c
 00E6                   .dbsym r x 20 c
 00E6                   .dbend
 00E6                   .dbfunc e LCD_write_num _LCD_write_num fV
 00E6           ;       data_num -> y+4
 00E6           ;              y -> R22
 00E6           ;              x -> R20
                        .even
 00E6           _LCD_write_num::
 00E6 0E940000          xcall push_gset2
 00EA 622F              mov R22,R18
 00EC 402F              mov R20,R16
 00EE                   .dbline -1
 00EE                   .dbline 77
 00EE           ; /*
 00EE           ; 按键获取函数
 00EE           ;  获取按键信号,其中包含有状态记录及按键去颤抖。
 00EE                   .dbline 79
 00EE           ;  有正确按键按下返回相应按键值
 00EE           ;  无正确按键按下返回"0x00"
 00EE 6623              tst R22
 00F0 21F4              brne L28
 00F2                   .dbline 79
 00F2                   .dbline 80

⌨️ 快捷键说明

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