📄 1602_main.lis
字号:
.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 + -