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

📄 3310.lis

📁 这个是通过51做的SD卡读写和MP3的程序!
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0014 0895              ret
 0016                   .dbend
 0016                   .dbfunc e LCD_write_byte _LCD_write_byte fV
 0016           ;        command -> R18
 0016           ;           data -> R16
                        .even
 0016           _LCD_write_byte::
 0016                   .dbline -1
 0016                   .dbline 35
 0016           ; }
 0016           ; /*-----------------------------------------------------------------------
 0016           ; LCD_write_byte    : 使用SPI接口写数据到LCD
 0016           ; 
 0016           ; 输入参数:data    :写入的数据;
 0016           ;           command :写数据/命令选择;
 0016           ; -----------------------------------------------------------------------*/
 0016           ; void LCD_write_byte(unsigned char data, unsigned char command)
 0016           ;   {
 0016                   .dbline 36
 0016           ;     LCD_PORT&= ~LCD_CE ;                      // 使能LCD
 0016 A998              cbi 0x15,1
 0018                   .dbline 38
 0018           ;     
 0018           ;     if (command == 0)
 0018 2223              tst R18
 001A 11F4              brne L4
 001C                   .dbline 39
 001C           ;       {
 001C                   .dbline 40
 001C           ;         LCD_PORT&= ~LCD_DC ;        // 传送命令
 001C A898              cbi 0x15,0
 001E                   .dbline 41
 001E           ;         }
 001E 01C0              xjmp L5
 0020           L4:
 0020                   .dbline 43
 0020           ;     else
 0020           ;       {
 0020                   .dbline 44
 0020           ;         LCD_PORT|= LCD_DC ;                   // 传送数据
 0020 A89A              sbi 0x15,0
 0022                   .dbline 45
 0022           ;         }
 0022           L5:
 0022                   .dbline 47
 0022           ; 
 0022           ;     SPDR = data;                      // 传送数据到SPI寄存器
 0022 0FB9              out 0xf,R16
 0024           L6:
 0024                   .dbline 49
 0024           L7:
 0024                   .dbline 49
 0024           ; 
 0024           ;     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 0024 779B              sbis 0xe,7
 0026 FECF              rjmp L6
 0028                   .dbline 51
 0028           ;       
 0028           ;     LCD_PORT|= LCD_CE ;                       // 关闭LCD
 0028 A99A              sbi 0x15,1
 002A                   .dbline -2
 002A           L3:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r command 18 c
 002C                   .dbsym r data 16 c
 002C                   .dbend
 002C                   .dbfunc e LCD_set_XY _LCD_set_XY fV
 002C           ;              Y -> R22
 002C           ;              X -> R20
                        .even
 002C           _LCD_set_XY::
 002C 0E940000          xcall push_gset2
 0030 622F              mov R22,R18
 0032 402F              mov R20,R16
 0034                   .dbline -1
 0034                   .dbline 60
 0034           ;   }
 0034           ; /*-----------------------------------------------------------------------
 0034           ; LCD_set_XY        : 设置LCD坐标函数
 0034           ; 
 0034           ; 输入参数:X       :0-83
 0034           ;           Y       :0-5
 0034           ; -----------------------------------------------------------------------*/
 0034           ; void LCD_set_XY(unsigned char X, unsigned char Y)
 0034           ;   {
 0034                   .dbline 61
 0034           ;     LCD_write_byte(0x40 | Y, 0);              // column
 0034 2227              clr R18
 0036 062F              mov R16,R22
 0038 0064              ori R16,64
 003A EDDF              xcall _LCD_write_byte
 003C                   .dbline 62
 003C           ;     LCD_write_byte(0x80 | X, 0);              // row
 003C 2227              clr R18
 003E 042F              mov R16,R20
 0040 0068              ori R16,128
 0042 E9DF              xcall _LCD_write_byte
 0044                   .dbline -2
 0044           L9:
 0044 0E940000          xcall pop_gset2
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r Y 22 c
 004A                   .dbsym r X 20 c
 004A                   .dbend
 004A                   .dbfunc e LCD_write_char _LCD_write_char fV
 004A           ;           line -> R20
 004A           ;              c -> R22
                        .even
 004A           _LCD_write_char::
 004A 0E940000          xcall push_gset2
 004E 602F              mov R22,R16
 0050                   .dbline -1
 0050                   .dbline 71
 0050           ;   }
 0050           ; 
 0050           ; /*-----------------------------------------------------------------------
 0050           ; LCD_write_char    : 显示英文字符
 0050           ; 
 0050           ; 输入参数:c       :显示的字符;
 0050           ; -----------------------------------------------------------------------*/
 0050           ; void LCD_write_char(unsigned char c)
 0050           ;   {
 0050                   .dbline 73
 0050           ;     unsigned char line;
 0050           ;     c -= 32;
 0050 6052              subi R22,32
 0052                   .dbline 74
 0052           ;     for (line=0; line<6; line++)
 0052 4427              clr R20
 0054 0FC0              xjmp L14
 0056           L11:
 0056                   .dbline 75
 0056 21E0              ldi R18,1
 0058 86E0              ldi R24,6
 005A 869F              mul R24,R22
 005C 1001              movw R2,R0
 005E 80E0              ldi R24,<_font6x8
 0060 90E0              ldi R25,>_font6x8
 0062 280E              add R2,R24
 0064 391E              adc R3,R25
 0066 E42F              mov R30,R20
 0068 FF27              clr R31
 006A E20D              add R30,R2
 006C F31D              adc R31,R3
 006E 0491              lpm R16,Z
 0070 D2DF              xcall _LCD_write_byte
 0072           L12:
 0072                   .dbline 74
 0072 4395              inc R20
 0074           L14:
 0074                   .dbline 74
 0074 4630              cpi R20,6
 0076 78F3              brlo L11
 0078                   .dbline -2
 0078           L10:
 0078 0E940000          xcall pop_gset2
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbsym r line 20 c
 007E                   .dbsym r c 22 c
 007E                   .dbend
 007E                   .dbfunc e LCD_write_english_string _LCD_write_english_string fV
 007E           ;              s -> R20,R21
 007E           ;              Y -> R10
 007E           ;              X -> R22
                        .even
 007E           _LCD_write_english_string::
 007E 0E940000          xcall push_gset3
 0082 A22E              mov R10,R18
 0084 602F              mov R22,R16
 0086 4E81              ldd R20,y+6
 0088 5F81              ldd R21,y+7
 008A                   .dbline -1
 008A                   .dbline 84
 008A           ;       LCD_write_byte(font6x8[c][line], 1);
 008A           ;   }
 008A           ; /*-----------------------------------------------------------------------
 008A           ; LCD_write_english_String  : 英文字符串显示函数
 008A           ; 
 008A           ; 输入参数:*s      :英文字符串指针;
 008A           ;           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5    
 008A           ; -----------------------------------------------------------------------*/
 008A           ; void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
 008A           ;   {
 008A                   .dbline 85
 008A           ;     LCD_set_XY(X,Y);
 008A 2A2D              mov R18,R10
 008C 062F              mov R16,R22
 008E CEDF              xcall _LCD_set_XY
 0090 05C0              xjmp L17
 0092           L16:
 0092                   .dbline 87
 0092                   .dbline 88
 0092 FA01              movw R30,R20
 0094 0081              ldd R16,z+0
 0096 D9DF              xcall _LCD_write_char
 0098                   .dbline 89
 0098 4F5F              subi R20,255  ; offset = 1
 009A 5F4F              sbci R21,255
 009C                   .dbline 90
 009C           L17:
 009C                   .dbline 86
 009C           ;     while (*s) 
 009C FA01              movw R30,R20
 009E 2080              ldd R2,z+0
 00A0 2220              tst R2
 00A2 B9F7              brne L16
 00A4                   .dbline -2
 00A4           L15:
 00A4 0E940000          xcall pop_gset3
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r s 20 pc
 00AA                   .dbsym r Y 10 c
 00AA                   .dbsym r X 22 c
 00AA                   .dbend
 00AA                   .dbfunc e LCD_clear _LCD_clear fV
 00AA           ;              i -> R20,R21
                        .even
 00AA           _LCD_clear::
 00AA 0E940000          xcall push_gset1
 00AE                   .dbline -1
 00AE                   .dbline 96
 00AE           ;       {
 00AE           ;        LCD_write_char(*s);
 00AE           ;        s++;
 00AE           ;       }
 00AE           ;   }
 00AE           ; /*-----------------------------------------------------------------------
 00AE           ; LCD_clear         : LCD清屏函数
 00AE           ; -----------------------------------------------------------------------*/
 00AE           ; void LCD_clear(void)
 00AE           ;   {
 00AE                   .dbline 99
 00AE           ;     unsigned int i;
 00AE           ; 
 00AE           ;     LCD_write_byte(0x0c, 0);  //普通显示模式          
 00AE 2227              clr R18
 00B0 0CE0              ldi R16,12
 00B2 B1DF              xcall _LCD_write_byte
 00B4                   .dbline 100
 00B4           ;     LCD_write_byte(0x80, 0);    //设置RAM的X地址      
 00B4 2227              clr R18
 00B6 00E8              ldi R16,128
 00B8 AEDF              xcall _LCD_write_byte
 00BA                   .dbline 102
 00BA           ; 
 00BA           ;     for (i=0; i<504; i++)
 00BA 4427              clr R20
 00BC 5527              clr R21
 00BE 05C0              xjmp L23
 00C0           L20:
 00C0                   .dbline 103
 00C0 21E0              ldi R18,1
 00C2 0027              clr R16
 00C4 A8DF              xcall _LCD_write_byte
 00C6           L21:
 00C6                   .dbline 102
 00C6 4F5F              subi R20,255  ; offset = 1
 00C8 5F4F              sbci R21,255
 00CA           L23:
 00CA                   .dbline 102
 00CA 483F              cpi R20,248
 00CC E1E0              ldi R30,1
 00CE 5E07              cpc R21,R30
 00D0 B8F3              brlo L20
 00D2                   .dbline -2
 00D2           L19:
 00D2 0E940000          xcall pop_gset1
 00D6                   .dbline 0 ; func end
 00D6 0895              ret
 00D8                   .dbsym r i 20 i
 00D8                   .dbend
 00D8                   .dbfunc e LCD_init _LCD_init fV
                        .even
 00D8           _LCD_init::
 00D8                   .dbline -1
 00D8                   .dbline 109
 00D8           ;       LCD_write_byte(0, 1);           //写0数据       
 00D8           ;   }
 00D8           ; /*-----------------------------------------------------------------------
 00D8           ; LCD_init          : 3310LCD初始化
 00D8           ; -----------------------------------------------------------------------*/
 00D8           ; void LCD_init(void)
 00D8           ;   {
 00D8                   .dbline 110
 00D8           ;     PORTD &= ~LCD_RST;          // 产生一个让LCD复位的低电平脉冲
 00D8 9298              cbi 0x12,2
 00DA                   .dbline 111
 00DA           ;     delay_1us();
 00DA 92DF              xcall _delay_1us
 00DC                   .dbline 112
 00DC           ;     PORTD |= LCD_RST;
 00DC 929A              sbi 0x12,2
 00DE                   .dbline 113
 00DE           ;     delay_1us();
 00DE 90DF              xcall _delay_1us
 00E0                   .dbline 114
 00E0           ;     LCD_write_byte(0x21, 0);  // 使用扩展命令设置LCD模式
 00E0 2227              clr R18
 00E2 01E2              ldi R16,33
 00E4 98DF              xcall _LCD_write_byte
 00E6                   .dbline 115
 00E6           ;     LCD_write_byte(0xc8, 0);  // 设置偏置电压
 00E6 2227              clr R18
 00E8 08EC              ldi R16,200
 00EA 95DF              xcall _LCD_write_byte
 00EC                   .dbline 116
 00EC           ;     LCD_write_byte(0x06, 0);  // 温度校正
 00EC 2227              clr R18
 00EE 06E0              ldi R16,6
 00F0 92DF              xcall _LCD_write_byte
 00F2                   .dbline 117
 00F2           ;     LCD_write_byte(0x13, 0);  // 1:48
 00F2 2227              clr R18
 00F4 03E1              ldi R16,19
 00F6 8FDF              xcall _LCD_write_byte
 00F8                   .dbline 118
 00F8           ;     delay_1us();
 00F8 83DF              xcall _delay_1us
 00FA                   .dbline 119
 00FA           ;     LCD_write_byte(0x20, 0);  // 使用基本命令
 00FA 2227              clr R18
 00FC 00E2              ldi R16,32
 00FE 8BDF              xcall _LCD_write_byte
 0100                   .dbline 120
 0100           ;     LCD_clear();                  // 清屏
 0100 D4DF              xcall _LCD_clear
 0102                   .dbline 121
 0102           ;     LCD_write_byte(0x0c, 0);  // 设定显示模式,正常显示    
 0102 2227              clr R18
 0104 0CE0              ldi R16,12
 0106 87DF              xcall _LCD_write_byte
 0108                   .dbline -2
 0108           L24:
 0108                   .dbline 0 ; func end
 0108 0895              ret
 010A                   .dbend

⌨️ 快捷键说明

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