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

📄 menu.lis

📁 做点阵式lcd多级菜单开发的一个例子 可以帮助初学者了解 交互式界面简单设计的部分
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -