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

📄 pcf8563_test.lis

📁 pcf8563开发
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00A4           ; --------------------------------------------------------------*/
 00A4           ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
 00A4           ; {
 00A4                   .dbline 55
 00A4           ;   unsigned char address;
 00A4           ;   if(y ==0) 
 00A4 AA20              tst R10
 00A6 19F4              brne L18
 00A8           X3:
 00A8                   .dbline 56
 00A8           ;    address=0x80+x; //the first line
 00A8 462F              mov R20,R22
 00AA 4058              subi R20,128    ; addi 128
 00AC 02C0              xjmp L19
 00AE           L18:
 00AE                   .dbline 58
 00AE           ;   else 
 00AE           ;    address=0xc0+x; //the second line
 00AE 462F              mov R20,R22
 00B0 4054              subi R20,64    ; addi 192
 00B2           L19:
 00B2                   .dbline 59
 00B2           ;   LCD_write_char(address,0);
 00B2 2227              clr R18
 00B4 3327              clr R19
 00B6 042F              mov R16,R20
 00B8 1127              clr R17
 00BA 08D0              xcall _LCD_write_char
 00BC                   .dbline -2
 00BC           L17:
 00BC                   .dbline 0 ; func end
 00BC 0C940000          xjmp pop_xgsetF00C
 00C0                   .dbsym r address 20 c
 00C0                   .dbsym r y 10 c
 00C0                   .dbsym r x 22 c
 00C0                   .dbend
 00C0                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 00C0           _LCD_en_write::
 00C0                   .dbline -1
 00C0                   .dbline 65
 00C0           ; }
 00C0           ; /*-------------------------------------------------------------
 00C0           ; 函数: lcd1602使能
 00C0           ; *--------------------------------------------------------------*/
 00C0           ; void LCD_en_write(void) //液晶使能
 00C0           ; { 
 00C0                   .dbline 66
 00C0           ;  LCD_EN_PORT|=LCD_EN;
 00C0 AB9A              sbi 0x15,3
 00C2                   .dbline 67
 00C2           ;  delay_us(5);
 00C2 05E0              ldi R16,5
 00C4 10E0              ldi R17,0
 00C6 9EDF              xcall _delay_us
 00C8                   .dbline 68
 00C8           ;  LCD_EN_PORT&=~LCD_EN;
 00C8 AB98              cbi 0x15,3
 00CA                   .dbline -2
 00CA           L20:
 00CA                   .dbline 0 ; func end
 00CA 0895              ret
 00CC                   .dbend
 00CC                   .dbfunc e LCD_write_char _LCD_write_char fV
 00CC           ;      data_temp -> R22,R23
 00CC           ;   command_temp -> R20,R21
 00CC           ;           data -> R12,R13
 00CC           ;        command -> R10,R11
                        .even
 00CC           _LCD_write_char::
 00CC 0E940000          xcall push_xgsetF03C
 00D0 6901              movw R12,R18
 00D2 5801              movw R10,R16
 00D4                   .dbline -1
 00D4                   .dbline 76
 00D4           ; }
 00D4           ; /*------------------------------------------------------------
 00D4           ; 函数: 写命令或数据到lcd1602
 00D4           ; 参数:command: 0---写数据, 1---写命令
 00D4           ;       data: 所要写的命令或数据
 00D4           ; *-------------------------------------------------------------*/
 00D4           ; void LCD_write_char(unsigned command,unsigned data) 
 00D4           ; {
 00D4                   .dbline 78
 00D4           ;  unsigned command_temp,data_temp;
 00D4           ;  command_temp=command;
 00D4 A501              movw R20,R10
 00D6                   .dbline 79
 00D6           ;  data_temp=data;
 00D6 B601              movw R22,R12
 00D8                   .dbline 80
 00D8           ;  delay_us(25);
 00D8 09E1              ldi R16,25
 00DA 10E0              ldi R17,0
 00DC 93DF              xcall _delay_us
 00DE                   .dbline 81
 00DE           ;  if(command==0)
 00DE 4030              cpi R20,0
 00E0 4507              cpc R20,R21
 00E2 11F5              brne L22
 00E4           X4:
 00E4                   .dbline 82
 00E4           ;  {
 00E4                   .dbline 83
 00E4           ;   LCD_RS_PORT|=LCD_RS; //RS=1
 00E4 AA9A              sbi 0x15,2
 00E6                   .dbline 84
 00E6           ;   LCD_DATA_PORT&=0X0f;
 00E6 85B3              in R24,0x15
 00E8 8F70              andi R24,15
 00EA 85BB              out 0x15,R24
 00EC                   .dbline 85
 00EC           ;   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
 00EC CB01              movw R24,R22
 00EE 807F              andi R24,240
 00F0 9070              andi R25,0
 00F2 25B2              in R2,0x15
 00F4 3324              clr R3
 00F6 282A              or R2,R24
 00F8 392A              or R3,R25
 00FA 25BA              out 0x15,R2
 00FC                   .dbline 86
 00FC           ;   LCD_en_write();
 00FC E1DF              xcall _LCD_en_write
 00FE                   .dbline 87
 00FE           ;   data_temp=data_temp<<4; 
 00FE 660F              lsl R22
 0100 771F              rol R23
 0102 660F              lsl R22
 0104 771F              rol R23
 0106 660F              lsl R22
 0108 771F              rol R23
 010A 660F              lsl R22
 010C 771F              rol R23
 010E                   .dbline 88
 010E           ;   LCD_DATA_PORT&=0X0f;
 010E 85B3              in R24,0x15
 0110 8F70              andi R24,15
 0112 85BB              out 0x15,R24
 0114                   .dbline 89
 0114           ;   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
 0114 CB01              movw R24,R22
 0116 807F              andi R24,240
 0118 9070              andi R25,0
 011A 25B2              in R2,0x15
 011C 3324              clr R3
 011E 282A              or R2,R24
 0120 392A              or R3,R25
 0122 25BA              out 0x15,R2
 0124                   .dbline 90
 0124           ;   LCD_en_write();
 0124 CDDF              xcall _LCD_en_write
 0126                   .dbline 91
 0126           ;  }
 0126 21C0              xjmp L23
 0128           L22:
 0128                   .dbline 93
 0128           ;  else
 0128           ;  {
 0128                   .dbline 94
 0128           ;   LCD_RS_PORT&=~LCD_RS; //RS=0
 0128 AA98              cbi 0x15,2
 012A                   .dbline 95
 012A           ;   LCD_DATA_PORT&=0X0f;
 012A 85B3              in R24,0x15
 012C 8F70              andi R24,15
 012E 85BB              out 0x15,R24
 0130                   .dbline 96
 0130           ;   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
 0130 CA01              movw R24,R20
 0132 807F              andi R24,240
 0134 9070              andi R25,0
 0136 25B2              in R2,0x15
 0138 3324              clr R3
 013A 282A              or R2,R24
 013C 392A              or R3,R25
 013E 25BA              out 0x15,R2
 0140                   .dbline 97
 0140           ;   LCD_en_write();
 0140 BFDF              xcall _LCD_en_write
 0142                   .dbline 98
 0142           ;   command_temp=command_temp<<4;
 0142 440F              lsl R20
 0144 551F              rol R21
 0146 440F              lsl R20
 0148 551F              rol R21
 014A 440F              lsl R20
 014C 551F              rol R21
 014E 440F              lsl R20
 0150 551F              rol R21
 0152                   .dbline 99
 0152           ;   LCD_DATA_PORT&=0x0f;
 0152 85B3              in R24,0x15
 0154 8F70              andi R24,15
 0156 85BB              out 0x15,R24
 0158                   .dbline 100
 0158           ;   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
 0158 CA01              movw R24,R20
 015A 807F              andi R24,240
 015C 9070              andi R25,0
 015E 25B2              in R2,0x15
 0160 3324              clr R3
 0162 282A              or R2,R24
 0164 392A              or R3,R25
 0166 25BA              out 0x15,R2
 0168                   .dbline 101
 0168           ;   LCD_en_write();
 0168 ABDF              xcall _LCD_en_write
 016A                   .dbline 102
 016A           ;  }
 016A           L23:
 016A                   .dbline -2
 016A           L21:
 016A                   .dbline 0 ; func end
 016A 0C940000          xjmp pop_xgsetF03C
 016E                   .dbsym r data_temp 22 i
 016E                   .dbsym r command_temp 20 i
 016E                   .dbsym r data 12 i
 016E                   .dbsym r command 10 i
 016E                   .dbend
 016E                   .dbfunc e clear _clear fV
 016E           ;              i -> R20
                        .even
 016E           _clear::
 016E 4A93              st -y,R20
 0170                   .dbline -1
 0170                   .dbline 108
 0170           ; }
 0170           ; /*-------------------------------------------------------------
 0170           ; 函数: 清屏lcd1602
 0170           ; ---------------------------------------------------------------*/
 0170           ; void clear(void)
 0170           ; {
 0170                   .dbline 110
 0170           ;  unsigned char i;
 0170           ;  LCD_set_xy(0,0);
 0170 2227              clr R18
 0172 0027              clr R16
 0174 93DF              xcall _LCD_set_xy
 0176                   .dbline 111
 0176           ;  for(i=0;i<16;i++)
 0176 4427              clr R20
 0178 06C0              xjmp L28
 017A           L25:
 017A                   .dbline 112
 017A           ;  LCD_write_char(0,' ');
 017A 20E2              ldi R18,32
 017C 30E0              ldi R19,0
 017E 0027              clr R16
 0180 1127              clr R17
 0182 A4DF              xcall _LCD_write_char
 0184           L26:
 0184                   .dbline 111
 0184 4395              inc R20
 0186           L28:
 0186                   .dbline 111
 0186 4031              cpi R20,16
 0188 C0F3              brlo L25
 018A           X5:
 018A                   .dbline 113
 018A           ;  LCD_set_xy(0,1);
 018A 21E0              ldi R18,1
 018C 0027              clr R16
 018E 86DF              xcall _LCD_set_xy
 0190                   .dbline 114
 0190           ;  for(i=0;i<16;i++)
 0190 4427              clr R20
 0192 06C0              xjmp L32
 0194           L29:
 0194                   .dbline 115
 0194           ;  LCD_write_char(0,' ');
 0194 20E2              ldi R18,32
 0196 30E0              ldi R19,0
 0198 0027              clr R16
 019A 1127              clr R17
 019C 97DF              xcall _LCD_write_char
 019E           L30:
 019E                   .dbline 114
 019E 4395              inc R20
 01A0           L32:
 01A0                   .dbline 114
 01A0 4031              cpi R20,16
 01A2 C0F3              brlo L29
 01A4           X6:
 01A4                   .dbline -2
 01A4           L24:
 01A4                   .dbline 0 ; func end
 01A4 4991              ld R20,y+
 01A6 0895              ret
 01A8                   .dbsym r i 20 c
 01A8                   .dbend
 01A8                   .dbfunc e LCD_write_string _LCD_write_string fV
 01A8           ;              s -> R20,R21
 01A8           ;              Y -> R12
 01A8           ;              X -> R10
                        .even
 01A8           _LCD_write_string::
 01A8 0E940000          xcall push_xgset303C
 01AC C22E              mov R12,R18
 01AE A02E              mov R10,R16
 01B0 4E81              ldd R20,y+6
 01B2 5F81              ldd R21,y+7
 01B4                   .dbline -1
 01B4                   .dbline 123
 01B4           ; }
 01B4           ; /*-------------------------------------------------------------
 01B4           ; 函数: 写字符串
 01B4           ; 参数:列---X=0~15,行---Y=0~1 写地址
 01B4           ;       s为所要写的字符串
 01B4           ; ---------------------------------------------------------------*/
 01B4           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 
 01B4           ; {
 01B4                   .dbline 124
 01B4           ;  LCD_set_xy(X,Y);   
 01B4 2C2D              mov R18,R12
 01B6 0A2D              mov R16,R10
 01B8 71DF              xcall _LCD_set_xy
 01BA 08C0              xjmp L35
 01BC           L34:
 01BC                   .dbline 126

⌨️ 快捷键说明

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