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

📄 24cxx_test.lis

📁 24IIC的源代码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01BC           ;  LCD_RS_DDR|=LCD_RS;
 01BC A29A              sbi 0x14,2
 01BE                   .dbline 38
 01BE           ;  delay_ms(15);
 01BE 0FE0              ldi R16,15
 01C0 10E0              ldi R17,0
 01C2 39DF              xcall _delay_ms
 01C4                   .dbline 39
 01C4           ;  LCD_write_char(0x28,0); //4位显示
 01C4 2227              clr R18
 01C6 3327              clr R19
 01C8 08E2              ldi R16,40
 01CA 10E0              ldi R17,0
 01CC 2AD0              xcall _LCD_write_char
 01CE                   .dbline 40
 01CE           ;  delay_ms(15);
 01CE 0FE0              ldi R16,15
 01D0 10E0              ldi R17,0
 01D2 31DF              xcall _delay_ms
 01D4                   .dbline 41
 01D4           ;  LCD_write_char(0x0c,0); //显示开
 01D4 2227              clr R18
 01D6 3327              clr R19
 01D8 0CE0              ldi R16,12
 01DA 10E0              ldi R17,0
 01DC 22D0              xcall _LCD_write_char
 01DE                   .dbline 42
 01DE           ;  delay_ms(15);
 01DE 0FE0              ldi R16,15
 01E0 10E0              ldi R17,0
 01E2 29DF              xcall _delay_ms
 01E4                   .dbline 43
 01E4           ;  LCD_write_char(0x01,0); //清屏
 01E4 2227              clr R18
 01E6 3327              clr R19
 01E8 01E0              ldi R16,1
 01EA 10E0              ldi R17,0
 01EC 1AD0              xcall _LCD_write_char
 01EE                   .dbline 44
 01EE           ;  clear();
 01EE 6AD0              xcall _clear
 01F0                   .dbline -2
 01F0           L81:
 01F0                   .dbline 0 ; func end
 01F0 0895              ret
 01F2                   .dbend
 01F2                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 01F2           ;       address0 -> R20
 01F2           ;              y -> R10
 01F2           ;              x -> R22
                        .even
 01F2           _LCD_set_xy::
 01F2 0E940000          xcall push_xgsetF00C
 01F6 A22E              mov R10,R18
 01F8 602F              mov R22,R16
 01FA                   .dbline -1
 01FA                   .dbline 53
 01FA           ; }
 01FA           ; 
 01FA           ; /*------------------------------------------------------------
 01FA           ; 函数: 设置显示地址
 01FA           ; para: x---the display address of a line limit: 0---15
 01FA           ;       y---the display line limit 0 or 1 
 01FA           ; --------------------------------------------------------------*/
 01FA           ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
 01FA           ; {
 01FA                   .dbline 55
 01FA           ;   unsigned char address;
 01FA           ;   if(y ==0) 
 01FA AA20              tst R10
 01FC 19F4              brne L83
 01FE           X27:
 01FE                   .dbline 56
 01FE           ;    address=0x80+x; //the first line
 01FE 462F              mov R20,R22
 0200 4058              subi R20,128    ; addi 128
 0202 02C0              xjmp L84
 0204           L83:
 0204                   .dbline 58
 0204           ;   else 
 0204           ;    address=0xc0+x; //the second line
 0204 462F              mov R20,R22
 0206 4054              subi R20,64    ; addi 192
 0208           L84:
 0208                   .dbline 59
 0208           ;   LCD_write_char(address,0);
 0208 2227              clr R18
 020A 3327              clr R19
 020C 042F              mov R16,R20
 020E 1127              clr R17
 0210 08D0              xcall _LCD_write_char
 0212                   .dbline -2
 0212           L82:
 0212                   .dbline 0 ; func end
 0212 0C940000          xjmp pop_xgsetF00C
 0216                   .dbsym r address0 20 c
 0216                   .dbsym r y 10 c
 0216                   .dbsym r x 22 c
 0216                   .dbend
 0216                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 0216           _LCD_en_write::
 0216                   .dbline -1
 0216                   .dbline 65
 0216           ; }
 0216           ; /*-------------------------------------------------------------
 0216           ; 函数: lcd1602使能
 0216           ; *--------------------------------------------------------------*/
 0216           ; void LCD_en_write(void) //液晶使能
 0216           ; { 
 0216                   .dbline 66
 0216           ;  LCD_EN_PORT|=LCD_EN;
 0216 AB9A              sbi 0x15,3
 0218                   .dbline 67
 0218           ;  delay_us(5);
 0218 05E0              ldi R16,5
 021A 10E0              ldi R17,0
 021C F3DE              xcall _delay_us
 021E                   .dbline 68
 021E           ;  LCD_EN_PORT&=~LCD_EN;
 021E AB98              cbi 0x15,3
 0220                   .dbline -2
 0220           L85:
 0220                   .dbline 0 ; func end
 0220 0895              ret
 0222                   .dbend
 0222                   .dbfunc e LCD_write_char _LCD_write_char fV
 0222           ;     data_temp0 -> R22,R23
 0222           ;  command_temp0 -> R20,R21
 0222           ;           data -> R12,R13
 0222           ;        command -> R10,R11
                        .even
 0222           _LCD_write_char::
 0222 0E940000          xcall push_xgsetF03C
 0226 6901              movw R12,R18
 0228 5801              movw R10,R16
 022A                   .dbline -1
 022A                   .dbline 76
 022A           ; }
 022A           ; /*------------------------------------------------------------
 022A           ; 函数: 写命令或数据到lcd1602
 022A           ; 参数:command: 0---写数据, 1---写命令
 022A           ;       data: 所要写的命令或数据
 022A           ; *-------------------------------------------------------------*/
 022A           ; void LCD_write_char(unsigned command,unsigned data) 
 022A           ; {
 022A                   .dbline 78
 022A           ;  unsigned command_temp,data_temp;
 022A           ;  command_temp=command;
 022A A501              movw R20,R10
 022C                   .dbline 79
 022C           ;  data_temp=data;
 022C B601              movw R22,R12
 022E                   .dbline 80
 022E           ;  delay_us(25);
 022E 09E1              ldi R16,25
 0230 10E0              ldi R17,0
 0232 E8DE              xcall _delay_us
 0234                   .dbline 81
 0234           ;  if(command==0)
 0234 4030              cpi R20,0
 0236 4507              cpc R20,R21
 0238 11F5              brne L87
 023A           X28:
 023A                   .dbline 82
 023A           ;  {
 023A                   .dbline 83
 023A           ;   LCD_RS_PORT|=LCD_RS; //RS=1
 023A AA9A              sbi 0x15,2
 023C                   .dbline 84
 023C           ;   LCD_DATA_PORT&=0X0f;
 023C 85B3              in R24,0x15
 023E 8F70              andi R24,15
 0240 85BB              out 0x15,R24
 0242                   .dbline 85
 0242           ;   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
 0242 CB01              movw R24,R22
 0244 807F              andi R24,240
 0246 9070              andi R25,0
 0248 25B2              in R2,0x15
 024A 3324              clr R3
 024C 282A              or R2,R24
 024E 392A              or R3,R25
 0250 25BA              out 0x15,R2
 0252                   .dbline 86
 0252           ;   LCD_en_write();
 0252 E1DF              xcall _LCD_en_write
 0254                   .dbline 87
 0254           ;   data_temp=data_temp<<4; 
 0254 660F              lsl R22
 0256 771F              rol R23
 0258 660F              lsl R22
 025A 771F              rol R23
 025C 660F              lsl R22
 025E 771F              rol R23
 0260 660F              lsl R22
 0262 771F              rol R23
 0264                   .dbline 88
 0264           ;   LCD_DATA_PORT&=0X0f;
 0264 85B3              in R24,0x15
 0266 8F70              andi R24,15
 0268 85BB              out 0x15,R24
 026A                   .dbline 89
 026A           ;   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
 026A CB01              movw R24,R22
 026C 807F              andi R24,240
 026E 9070              andi R25,0
 0270 25B2              in R2,0x15
 0272 3324              clr R3
 0274 282A              or R2,R24
 0276 392A              or R3,R25
 0278 25BA              out 0x15,R2
 027A                   .dbline 90
 027A           ;   LCD_en_write();
 027A CDDF              xcall _LCD_en_write
 027C                   .dbline 91
 027C           ;  }
 027C 21C0              xjmp L88
 027E           L87:
 027E                   .dbline 93
 027E           ;  else
 027E           ;  {
 027E                   .dbline 94
 027E           ;   LCD_RS_PORT&=~LCD_RS; //RS=0
 027E AA98              cbi 0x15,2
 0280                   .dbline 95
 0280           ;   LCD_DATA_PORT&=0X0f;
 0280 85B3              in R24,0x15
 0282 8F70              andi R24,15
 0284 85BB              out 0x15,R24
 0286                   .dbline 96
 0286           ;   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
 0286 CA01              movw R24,R20
 0288 807F              andi R24,240
 028A 9070              andi R25,0
 028C 25B2              in R2,0x15
 028E 3324              clr R3
 0290 282A              or R2,R24
 0292 392A              or R3,R25
 0294 25BA              out 0x15,R2
 0296                   .dbline 97
 0296           ;   LCD_en_write();
 0296 BFDF              xcall _LCD_en_write
 0298                   .dbline 98
 0298           ;   command_temp=command_temp<<4;
 0298 440F              lsl R20
 029A 551F              rol R21
 029C 440F              lsl R20
 029E 551F              rol R21
 02A0 440F              lsl R20
 02A2 551F              rol R21
 02A4 440F              lsl R20
 02A6 551F              rol R21
 02A8                   .dbline 99
 02A8           ;   LCD_DATA_PORT&=0x0f;
 02A8 85B3              in R24,0x15
 02AA 8F70              andi R24,15
 02AC 85BB              out 0x15,R24
 02AE                   .dbline 100
 02AE           ;   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
 02AE CA01              movw R24,R20
 02B0 807F              andi R24,240
 02B2 9070              andi R25,0
 02B4 25B2              in R2,0x15
 02B6 3324              clr R3
 02B8 282A              or R2,R24
 02BA 392A              or R3,R25
 02BC 25BA              out 0x15,R2
 02BE                   .dbline 101
 02BE           ;   LCD_en_write();
 02BE ABDF              xcall _LCD_en_write
 02C0                   .dbline 102
 02C0           ;  }
 02C0           L88:
 02C0                   .dbline -2
 02C0           L86:
 02C0                   .dbline 0 ; func end
 02C0 0C940000          xjmp pop_xgsetF03C
 02C4                   .dbsym r data_temp0 22 i
 02C4                   .dbsym r command_temp0 20 i
 02C4                   .dbsym r data 12 i
 02C4                   .dbsym r command 10 i
 02C4                   .dbend
 02C4                   .dbfunc e clear _clear fV
 02C4           ;             i2 -> R20
 02C4           ;             i0 -> R20
                        .even
 02C4           _clear::
 02C4 4A93              st -y,R20
 02C6                   .dbline -1
 02C6                   .dbline 108
 02C6           ; }
 02C6           ; /*-------------------------------------------------------------
 02C6           ; 函数: 清屏lcd1602
 02C6           ; ---------------------------------------------------------------*/
 02C6           ; void clear(void)
 02C6           ; {
 02C6                   .dbline 110
 02C6           ;  unsigned char i;
 02C6           ;  LCD_set_xy(0,0);
 02C6 2227              clr R18
 02C8 0027              clr R16
 02CA 93DF              xcall _LCD_set_xy
 02CC                   .dbline 111
 02CC           ;  for(i=0;i<16;i++)
 02CC 4427              clr R20
 02CE 06C0              xjmp L93
 02D0           L90:
 02D0                   .dbline 112
 02D0           ;  LCD_write_char(0,' ');
 02D0 20E2              ldi R18,32
 02D2 30E0              ldi R19,0
 02D4 0027              clr R16
 02D6 1127              clr R17
 02D8 A4DF              xcall _LCD_write_char
 02DA           L91:
 02DA                   .dbline 111
 02DA 4395              inc R20
 02DC           L93:
 02DC                   .dbline 111
 02DC 4031              cpi R20,16
 02DE C0F3              brlo L90
 02E0           X29:
 02E0                   .dbline 113
 02E0           ;  LCD_set_xy(0,1);
 02E0 21E0              ldi R18,1
 02E2 0027              clr R16
 02E4 86DF              xcall _LCD_set_xy
 02E6                   .dbline 114
 02E6           ;  for(i=0;i<16;i++)
 02E6 4427              clr R20
 02E8 06C0              xjmp L97
 02EA           L94:
 02EA                   .dbline 115
 02EA           ;  LCD_write_char(0,' ');
 02EA 20E2              ldi R18,32
 02EC 30E0              ldi R19,0
 02EE 0027              clr R16
 02F0 1127              clr R17
 02F2 97DF              xcall _LCD_write_char
 02F4           L95:
 02F4                   .dbline 114
 02F4 4395              inc R20
 02F6           L97:
 02F6                   .dbline 114
 02F6 4031              cpi R20,16
 02F8 C0F3              brlo L94
 02FA           X30:
 02FA                   .dbline -2
 02FA           L89:
 02FA                   .dbline 0 ; func end
 02FA 4991              ld R20,y+
 02FC 0895              ret
 02FE                   .dbsym r i2 20 c
 02FE                   .dbsym r i0 20 c
 02FE                   .dbend
 02FE                   .dbfunc e LCD_write_string _LCD_write_string fV
 02FE           ;              s -> R20,R21
 02FE           ;              Y -> R12
 02FE           ;              X -> R10
                        .even
 02FE           _LCD_write_string::
 02FE 0E940000          xcall push_xgset303C

⌨️ 快捷键说明

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