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

📄 lcd.lis

📁 一个关于AVR单片机的例程
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 002A                   .dbline -2
 002A           L2:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r temp 20 c
 0030                   .dbsym r cs 16 c
 0030                   .dbend
 0030                   .dbfunc e LCD_Clean _LCD_Clean fV
 0030           ;           page -> R20
 0030           ;              y -> R22
                        .even
 0030           _LCD_Clean::
 0030 0E940000          xcall push_gset2
 0034                   .dbline -1
 0034                   .dbline 39
 0034           ;       }
 0034           ; }
 0034           ; 
 0034           ; void LCD_Clean(void)
 0034           ; {
 0034                   .dbline 40
 0034           ;   unsigned char page=0,y;                //定义表示页和列的局部变量
 0034 4427              clr R20
 0036                   .dbline 42
 0036           ;   
 0036           ;   for(page=0;page<8;page++)
 0036 21C0              xjmp L12
 0038           L9:
 0038                   .dbline 43
 0038           ;      {
 0038                   .dbline 45
 0038           ;                                            //LCD左半屏的操作
 0038           ;          check_busy(0);
 0038 0027              clr R16
 003A E9DF              xcall _check_busy
 003C                   .dbline 46
 003C           ;          L_command=LCD_PAGE+page;          //设置LCD左半屏页地址
 003C 842F              mov R24,R20
 003E 8854              subi R24,72    ; addi 184
 0040 80930820          sts 8200,R24
 0044                   .dbline 47
 0044           ;          check_busy(0);
 0044 0027              clr R16
 0046 E3DF              xcall _check_busy
 0048                   .dbline 48
 0048           ;          L_command=LCD_Y; 
 0048 80E4              ldi R24,64
 004A 80930820          sts 8200,R24
 004E                   .dbline 50
 004E           ;                                            //LCD右半屏的操作
 004E           ;         check_busy(1);
 004E 01E0              ldi R16,1
 0050 DEDF              xcall _check_busy
 0052                   .dbline 51
 0052           ;          R_command=LCD_PAGE+page;          //设置LCD右半屏页地址
 0052 842F              mov R24,R20
 0054 8854              subi R24,72    ; addi 184
 0056 80930420          sts 8196,R24
 005A                   .dbline 52
 005A           ;         check_busy(1);
 005A 01E0              ldi R16,1
 005C D8DF              xcall _check_busy
 005E                   .dbline 53
 005E           ;          R_command=LCD_Y;
 005E 80E4              ldi R24,64
 0060 80930420          sts 8196,R24
 0064                   .dbline 55
 0064           ;          
 0064           ;          for(y=0;y<64;y++)
 0064 6627              clr R22
 0066 06C0              xjmp L16
 0068           L13:
 0068                   .dbline 56
 0068                   .dbline 57
 0068 2224              clr R2
 006A 20920A20          sts 8202,R2
 006E                   .dbline 58
 006E 20920620          sts 8198,R2
 0072                   .dbline 59
 0072           L14:
 0072                   .dbline 55
 0072 6395              inc R22
 0074           L16:
 0074                   .dbline 55
 0074 6034              cpi R22,64
 0076 C0F3              brlo L13
 0078                   .dbline 60
 0078           L10:
 0078                   .dbline 42
 0078 4395              inc R20
 007A           L12:
 007A                   .dbline 42
 007A 4830              cpi R20,8
 007C E8F2              brlo L9
 007E                   .dbline -2
 007E           L8:
 007E 0E940000          xcall pop_gset2
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbsym r page 20 c
 0084                   .dbsym r y 22 c
 0084                   .dbend
 0084                   .dbfunc e LCD_Init _LCD_Init fV
                        .even
 0084           _LCD_Init::
 0084                   .dbline -1
 0084                   .dbline 64
 0084           ;             {
 0084           ;             L_data=0x00;
 0084           ;                       R_data=0x00;
 0084           ;                 }  
 0084           ;        }
 0084           ; }
 0084           ;                                          
 0084           ; void LCD_Init(void)                     //LCD初始化子函数
 0084           ; {
 0084                   .dbline 66
 0084           ;   /*首先关闭12864的显示*/
 0084           ;   check_busy(0);                        //LCD左半屏正在工作,等待......
 0084 0027              clr R16
 0086 C3DF              xcall _check_busy
 0088                   .dbline 67
 0088           ;   L_command=LCD_OFF;                    //先关闭LCD左半屏的显示
 0088 8EE3              ldi R24,62
 008A 80930820          sts 8200,R24
 008E                   .dbline 68
 008E           ;   check_busy(1);                        //LCD右半屏正在工作,等待......
 008E 01E0              ldi R16,1
 0090 BEDF              xcall _check_busy
 0092                   .dbline 69
 0092           ;   R_command=LCD_OFF;                    //先关闭LCD右半屏的显示
 0092 8EE3              ldi R24,62
 0094 80930420          sts 8196,R24
 0098                   .dbline 72
 0098           ;   
 0098           ;   /*开启12864的显示*/
 0098           ;   check_busy(0);
 0098 0027              clr R16
 009A B9DF              xcall _check_busy
 009C                   .dbline 73
 009C           ;   L_command=LCD_ON;                     //打开LCD左半屏的显示
 009C 8FE3              ldi R24,63
 009E 80930820          sts 8200,R24
 00A2                   .dbline 74
 00A2           ;   check_busy(1);
 00A2 01E0              ldi R16,1
 00A4 B4DF              xcall _check_busy
 00A6                   .dbline 75
 00A6           ;   R_command=LCD_ON;                     //打开LCD右半屏的显示
 00A6 8FE3              ldi R24,63
 00A8 80930420          sts 8196,R24
 00AC                   .dbline 78
 00AC           ;   
 00AC           ;   /*设置LCD显示的起始行*/
 00AC           ;   check_busy(0);
 00AC 0027              clr R16
 00AE AFDF              xcall _check_busy
 00B0                   .dbline 79
 00B0           ;   L_command=LCD_X;                      //LCD左半屏起始行为0
 00B0 80EC              ldi R24,192
 00B2 80930820          sts 8200,R24
 00B6                   .dbline 80
 00B6           ;   check_busy(1);
 00B6 01E0              ldi R16,1
 00B8 AADF              xcall _check_busy
 00BA                   .dbline 81
 00BA           ;   R_command=LCD_X;                      //LCD右半屏起始行为0
 00BA 80EC              ldi R24,192
 00BC 80930420          sts 8196,R24
 00C0                   .dbline -2
 00C0           L17:
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbend
 00C2                   .dbfunc e init_devices _init_devices fV
                        .even
 00C2           _init_devices::
 00C2                   .dbline -1
 00C2                   .dbline 85
 00C2           ; }
 00C2           ; 
 00C2           ; void init_devices(void)
 00C2           ; {
 00C2                   .dbline 86
 00C2           ;  XMCRA = 0x00;                          //外部存储器控制
 00C2 2224              clr R2
 00C4 20926D00          sts 109,R2
 00C8                   .dbline 87
 00C8           ;  XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
 00C8 87E0              ldi R24,7
 00CA 80936C00          sts 108,R24
 00CE                   .dbline 89
 00CE           ; // mapping_init();
 00CE           ;  port_init();
 00CE 98DF              xcall _port_init
 00D0                   .dbline 90
 00D0           ;  MCUCR = 0x80;                          //外部SRAM使能
 00D0 80E8              ldi R24,128
 00D2 85BF              out 0x35,R24
 00D4                   .dbline -2
 00D4           L18:
 00D4                   .dbline 0 ; func end
 00D4 0895              ret
 00D6                   .dbend
 00D6                   .dbfunc e write_Bchar _write_Bchar fV
 00D6           ;              i -> R20
 00D6           ;              n -> R18
 00D6           ;             cs -> R16
                        .even
 00D6           _write_Bchar::
 00D6 0E940000          xcall push_gset1
 00DA                   .dbline -1
 00DA                   .dbline 94
 00DA           ; }
 00DA           ; 
 00DA           ; void write_Bchar(unsigned char cs,unsigned char n)   // 大写字母显示函数
 00DA           ; {
 00DA                   .dbline 96
 00DA           ;   unsigned char i;
 00DA           ;   for(i=0;i<6;i++)
 00DA 4427              clr R20
 00DC 20C0              xjmp L23
 00DE           L20:
 00DE                   .dbline 97
 00DE           ;    {
 00DE                   .dbline 98
 00DE           ;     if(cs) R_data=big_char[n][i];             //右半屏显示
 00DE 0023              tst R16
 00E0 79F0              breq L24
 00E2                   .dbline 98
 00E2 86E0              ldi R24,6
 00E4 829F              mul R24,R18
 00E6 1001              movw R2,R0
 00E8 80E0              ldi R24,<_big_char
 00EA 90E0              ldi R25,>_big_char
 00EC 280E              add R2,R24
 00EE 391E              adc R3,R25
 00F0 E42F              mov R30,R20
 00F2 FF27              clr R31
 00F4 E20D              add R30,R2
 00F6 F31D              adc R31,R3
 00F8 E491              lpm R30,Z
 00FA E0930620          sts 8198,R30
 00FE 0EC0              xjmp L25
 0100           L24:
 0100                   .dbline 99
 0100           ;       else   L_data=big_char[n][i];             //左半屏显示
 0100 86E0              ldi R24,6
 0102 829F              mul R24,R18
 0104 1001              movw R2,R0
 0106 80E0              ldi R24,<_big_char
 0108 90E0              ldi R25,>_big_char
 010A 280E              add R2,R24
 010C 391E              adc R3,R25
 010E E42F              mov R30,R20
 0110 FF27              clr R31
 0112 E20D              add R30,R2
 0114 F31D              adc R31,R3
 0116 E491              lpm R30,Z
 0118 E0930A20          sts 8202,R30
 011C           L25:
 011C                   .dbline 100
 011C           L21:
 011C                   .dbline 96
 011C 4395              inc R20
 011E           L23:
 011E                   .dbline 96
 011E 4630              cpi R20,6
 0120 F0F2              brlo L20
 0122                   .dbline -2
 0122           L19:
 0122 0E940000          xcall pop_gset1
 0126                   .dbline 0 ; func end
 0126 0895              ret
 0128                   .dbsym r i 20 c
 0128                   .dbsym r n 18 c
 0128                   .dbsym r cs 16 c
 0128                   .dbend
 0128                   .dbfunc e write_Schar _write_Schar fV

⌨️ 快捷键说明

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