📄 menu.lis
字号:
0514 9292 .byte 146,146
0516 FE02 .byte 254,2
0518 027C .byte 2,124
051A 8404 .byte 132,4
051C 847C .byte 132,124
051E 0400 .byte 4,0
0520 0830 .byte 8,48
0522 01C6 .byte 1,198
0524 3000 .byte 48,0
0526 E438 .byte 228,56
0528 203F .byte 32,63
052A 2030 .byte 32,48
052C 28E4 .byte 40,228
052E 0000 .byte 0,0
0530 1010 .byte 16,16
0532 0F08 .byte 15,8
0534 0804 .byte 8,4
0536 FF04 .byte 255,4
0538 2210 .byte 34,16
053A 0906 .byte 9,6
053C 0930 .byte 9,48
053E 1000 .byte 16,0
0540 0404 .byte 4,4
0542 FF00 .byte 255,0
0544 0000 .byte 0,0
0546 FF09 .byte 255,9
0548 0909 .byte 9,9
054A 0949 .byte 9,'I
054C 897F .byte 137,127
054E 0000 .byte 0,0
0550 .dbsym e qx _qx A[64:64]kc
0550 _curflag::
0550 0000 .byte 0,0
0552 8000 .byte 128,0
0554 0000 .byte 0,0
0556 FCFC .byte 252,252
0558 FC00 .byte 252,0
055A 0000 .byte 0,0
055C 8000 .byte 128,0
055E 0000 .byte 0,0
0560 0000 .byte 0,0
0562 0001 .byte 0,1
0564 0204 .byte 2,4
0566 0F1F .byte 15,31
0568 1F04 .byte 31,4
056A 0201 .byte 2,1
056C 0000 .byte 0,0
056E 0000 .byte 0,0
0570 .dbsym e curflag _curflag A[32:32]kc
.area data(ram, con, rel)
0000 .dbfile F:\diy\LedMenu\menu.h
0000 _menu_led::
0000 .blkw 1
.area idata
0000 2600 .word _main_menu
.area data(ram, con, rel)
0002 .dbfile F:\diy\LedMenu\menu.h
0002 .dbstruct 0 9 menu_item
0002 .dbfield 0 menu_count c
0002 .dbfield 1 display pkc
0002 .dbfield 3 subs pfV
0002 .dbfield 5 children_menus pS[menu_item]
0002 .dbfield 7 parent_menus pS[menu_item]
0002 .dbend
0002 .dbsym e menu_led _menu_led pS[menu_item]
0002 _user_choosen::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile F:\diy\LedMenu\menu.h
0003 .dbsym e user_choosen _user_choosen c
0003 _max_item::
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile F:\diy\LedMenu\menu.h
0004 .dbsym e max_item _max_item c
0004 _refresh::
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile F:\diy\LedMenu\menu.h
0005 .dbsym e refresh _refresh c
0005 _keyval::
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile F:\diy\LedMenu\menu.h
0006 .dbsym e keyval _keyval c
.area text(rom, con, rel)
0000 .dbfile F:\diy\LedMenu\menu.h
0000 .dbfile F:\diy\LedMenu\delay.h
0000 .dbfunc e delay_3_us _delay_3_us fV
0000 ; n -> R16,R17
.even
0000 _delay_3_us::
0000 .dbline -1
0000 .dbline 15
0000 ; //延时函数.
0000 ; //*****************************************************************************************************************
0000 ; //***********************************************延时子程序********************************************************
0000 ; //************************************** N-us延时,最小3us,最大65.6MS ********************************************
0000 ;
0000 ; //适用机型 :用于AVR系列单片机延时处理,7.3728MHZ晶振下
0000 ; //变量定义类型:unsigned int
0000 ; //最小延时时间:即N=0时为3us;
0000 ; //增量: 1us
0000 ; //最大延时时间:3us+(65535*1us)=65538us
0000 ; //例如: i=0为3us;i=1为4us;i=2为5us..........................
0000 ;
0000 ; //延时间间=3us+N
0000 ; void delay_3_us(uint n) //N us延时函数
0000 ; {
0000 .dbline 16
0000 ; for(;n>0;n--) //延时基数为3us加上 n
0000 04C0 xjmp L5
0002 L2:
0002 .dbline 17
0002 ; {
0002 .dbline 18
0002 ; asm("nop");
0002 0000 nop
0004 .dbline 19
0004 ; asm("nop");
0004 0000 nop
0006 .dbline 20
0006 ; }
0006 L3:
0006 .dbline 16
0006 0150 subi R16,1
0008 1040 sbci R17,0
000A L5:
000A .dbline 16
000A 0030 cpi R16,0
000C 0107 cpc R16,R17
000E C9F7 brne L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r n 16 i
0012 .dbend
0012 .dbfunc e delay_ms _delay_ms fV
0012 ; n -> R20,R21
0012 ; m -> R16,R17
.even
0012 _delay_ms::
0012 4A93 st -y,R20
0014 5A93 st -y,R21
0016 .dbline -1
0016 .dbline 35
0016 ; }
0016 ; //注意:n为uint
0016 ; //*****************************************************************************************************************
0016 ;
0016 ; //****************************************** n-ms延时,最小1ms,最大65.5s *****************************************
0016 ; //适用机型 :用于AVR系列单片机延时处理,7.3728MHZ晶振下
0016 ; //变量定义类型:unsigned int
0016 ; //最小延时时间:即m=1时为1ms; m不能为0,否则延时时间增长不成比例(注意:m=0时,延时=6.24us的区别)
0016 ;
0016 ; //增量: 1ms
0016 ; //最大延时时间:65535*1ms=65.535s
0016 ; //例如: m=1/1ms;m=2/2ms..........................
0016 ; //延时间间=m*1ms
0016 ; void delay_ms (unsigned int m) //Nms延时
0016 ; {
0016 .dbline 38
0016 ; uint n;
0016 ; extern uchar kk;
0016 ; for(;m>0;m--)
0016 0AC0 xjmp L10
0018 L7:
0018 .dbline 39
0018 ; for(n=1229;n>0;n--)
0018 4DEC ldi R20,1229
001A 54E0 ldi R21,4
001C 02C0 xjmp L14
001E L11:
001E .dbline 40
001E ; {
001E .dbline 41
001E ; ;
001E .dbline 42
001E ; }
001E L12:
001E .dbline 39
001E 4150 subi R20,1
0020 5040 sbci R21,0
0022 L14:
0022 .dbline 39
0022 4030 cpi R20,0
0024 4507 cpc R20,R21
0026 D9F7 brne L11
0028 X1:
0028 L8:
0028 .dbline 38
0028 0150 subi R16,1
002A 1040 sbci R17,0
002C L10:
002C .dbline 38
002C 0030 cpi R16,0
002E 0107 cpc R16,R17
0030 99F7 brne L7
0032 X2:
0032 .dbline -2
0032 L6:
0032 .dbline 0 ; func end
0032 5991 ld R21,y+
0034 4991 ld R20,y+
0036 0895 ret
0038 .dbsym r n 20 i
0038 .dbsym r m 16 i
0038 .dbend
0038 .dbfile F:\diy\LedMenu\lcd_12864.h
0038 .dbfunc e chkbusy _chkbusy fV
.even
0038 _chkbusy::
0038 .dbline -1
0038 .dbline 24
0038 ; //lcd头文件.
0038 ;
0038 ; #define L_on PORTB&=~(1<<PORTB0)
0038 ; #define L_off PORTB|=(1<<PORTB0)
0038 ; #define R_on PORTB&=~(1<<PORTB1)
0038 ; #define R_off PORTB|=(1<<PORTB1)
0038 ; #define Selcom PORTB&=~(1<<PORTB2)
0038 ; #define Seldata PORTB|=(1<<PORTB2)
0038 ; #define Rw_w PORTB&=~(1<<PORTB3)
0038 ; #define Rw_r PORTB|=(1<<PORTB3)
0038 ; #define E_on PORTB|=(1<<PORTB4)
0038 ; #define E_off PORTB&=~(1<<PORTB4)
0038 ;
0038 ; #define iodata PORTA
0038 ;
0038 ; #define status_busy 0x80; //忙状态.
0038 ; #define disp_start_set 0xc0 //显示起始行设置.
0038 ; #define page_addr_set 0xb8 //页面地址设置.
0038 ; #define col_addr_set 0x40 //列地址设置.
0038 ; #define disp_on 0x3f //打开显示.
0038 ;
0038 ; /********************分别为读忙信号写指令写数据.******************************************/
0038 ; void chkbusy(void) //检查忙信号.等待LCD内部操作完成.
0038 ; {
0038 .dbline 26
0038 ; // iodata=0xff; //因为要读状态,所以先使IO口输出高电平.
0038 ; E_on;
0038 C49A sbi 0x18,4
003A .dbline 27
003A ; Selcom;
003A C298 cbi 0x18,2
003C .dbline 28
003C ; Rw_r;
003C C39A sbi 0x18,3
003E .dbline -2
003E L15:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
0040 .dbfunc e send_comm _send_comm fV
0040 ; command -> R10
.even
0040 _send_comm::
0040 AA92 st -y,R10
0042 A02E mov R10,R16
0044 .dbline -1
0044 .dbline 33
0044 ; // while(iodata&status_busy);//读入LCD状态,1=忙,一直等LCD内部操作完成.
0044 ; }
0044 ;
0044 ; void send_comm(uchar command) //左右屏在调用函数中处理.
0044 ; {
0044 .dbline 34
0044 ; chkbusy();
0044 F9DF xcall _chkbusy
0046 .dbline 35
0046 ; E_on; //使能LCD
0046 C49A sbi 0x18,4
0048 .dbline 36
0048 ; Selcom;
0048 C298 cbi 0x18,2
004A .dbline 37
004A ; Rw_w;
004A C398 cbi 0x18,3
004C .dbline 38
004C ; iodata=command; //发送命令到数据总线.
004C ABBA out 0x1b,R10
004E .dbline 39
004E ; E_on;
004E C49A sbi 0x18,4
0050 .dbline 40
0050 ; E_off; //发送完,关闭使能.
0050 C498 cbi 0x18,4
0052 .dbline -2
0052 L16:
0052 .dbline 0 ; func end
0052 A990 ld R10,y+
0054 0895 ret
0056 .dbsym r command 10 c
0056 .dbend
0056 .dbfunc e send_data _send_data fV
0056 ; dat -> R10
.even
0056 _send_data::
0056 AA92 st -y,R10
0058 A02E mov R10,R16
005A .dbline -1
005A .dbline 44
005A ; }
005A ;
005A ; void send_data(uchar dat)
005A ; {
005A .dbline 45
005A ; chkbusy();
005A EEDF xcall _chkbusy
005C .dbline 46
005C ; E_on;
005C C49A sbi 0x18,4
005E .dbline 47
005E ; Seldata;
005E C29A sbi 0x18,2
0060 .dbline 48
0060 ; Rw_w;
0060 C398 cbi 0x18,3
0062 .dbline 49
0062 ; iodata=dat; //发送数据到数据总线.
0062 ABBA out 0x1b,R10
0064 .dbline 50
0064 ; E_off;
0064 C498 cbi 0x18,4
0066 .dbline -2
0066 L17:
0066 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -