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

📄 24cxx_test.lis

📁 24IIC的源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 039E                   .dbline 0 ; func end
 039E 0895              ret
 03A0                   .dbend
 03A0                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 03A0           ;        address -> R20
 03A0           ;              y -> R10
 03A0           ;              x -> R22
                        .even
 03A0           _LCD_set_xy::
 03A0 0E940000          xcall push_xgsetF00C
 03A4 A22E              mov R10,R18
 03A6 602F              mov R22,R16
 03A8                   .dbline -1
 03A8                   .dbline 53
 03A8           ; }
 03A8           ; 
 03A8           ; /*------------------------------------------------------------
 03A8           ; 函数: 设置显示地址
 03A8           ; para: x---the display address of a line limit: 0---15
 03A8           ;       y---the display line limit 0 or 1 
 03A8           ; --------------------------------------------------------------*/
 03A8           ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
 03A8           ; {
 03A8                   .dbline 55
 03A8           ;   unsigned char address;
 03A8           ;   if(y ==0) 
 03A8 AA20              tst R10
 03AA 19F4              brne L82
 03AC           X30:
 03AC                   .dbline 56
 03AC           ;    address=0x80+x; //the first line
 03AC 462F              mov R20,R22
 03AE 4058              subi R20,128    ; addi 128
 03B0 02C0              xjmp L83
 03B2           L82:
 03B2                   .dbline 58
 03B2           ;   else 
 03B2           ;    address=0xc0+x; //the second line
 03B2 462F              mov R20,R22
 03B4 4054              subi R20,64    ; addi 192
 03B6           L83:
 03B6                   .dbline 59
 03B6           ;   LCD_write_char(address,0);
 03B6 2227              clr R18
 03B8 3327              clr R19
 03BA 042F              mov R16,R20
 03BC 1127              clr R17
 03BE 08D0              xcall _LCD_write_char
 03C0                   .dbline -2
 03C0           L81:
 03C0                   .dbline 0 ; func end
 03C0 0C940000          xjmp pop_xgsetF00C
 03C4                   .dbsym r address 20 c
 03C4                   .dbsym r y 10 c
 03C4                   .dbsym r x 22 c
 03C4                   .dbend
 03C4                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 03C4           _LCD_en_write::
 03C4                   .dbline -1
 03C4                   .dbline 65
 03C4           ; }
 03C4           ; /*-------------------------------------------------------------
 03C4           ; 函数: lcd1602使能
 03C4           ; *--------------------------------------------------------------*/
 03C4           ; void LCD_en_write(void) //液晶使能
 03C4           ; { 
 03C4                   .dbline 66
 03C4           ;  LCD_EN_PORT|=LCD_EN;
 03C4 AB9A              sbi 0x15,3
 03C6                   .dbline 67
 03C6           ;  delay_us(5);
 03C6 05E0              ldi R16,5
 03C8 10E0              ldi R17,0
 03CA 1CDE              xcall _delay_us
 03CC                   .dbline 68
 03CC           ;  LCD_EN_PORT&=~LCD_EN;
 03CC AB98              cbi 0x15,3
 03CE                   .dbline -2
 03CE           L84:
 03CE                   .dbline 0 ; func end
 03CE 0895              ret
 03D0                   .dbend
 03D0                   .dbfunc e LCD_write_char _LCD_write_char fV
 03D0           ;      data_temp -> R22,R23
 03D0           ;   command_temp -> R20,R21
 03D0           ;           data -> R12,R13
 03D0           ;        command -> R10,R11
                        .even
 03D0           _LCD_write_char::
 03D0 0E940000          xcall push_xgsetF03C
 03D4 6901              movw R12,R18
 03D6 5801              movw R10,R16
 03D8                   .dbline -1
 03D8                   .dbline 76
 03D8           ; }
 03D8           ; /*------------------------------------------------------------
 03D8           ; 函数: 写命令或数据到lcd1602
 03D8           ; 参数:command: 0---写数据, 1---写命令
 03D8           ;       data: 所要写的命令或数据
 03D8           ; *-------------------------------------------------------------*/
 03D8           ; void LCD_write_char(unsigned command,unsigned data) 
 03D8           ; {
 03D8                   .dbline 78
 03D8           ;  unsigned command_temp,data_temp;
 03D8           ;  command_temp=command;
 03D8 A501              movw R20,R10
 03DA                   .dbline 79
 03DA           ;  data_temp=data;
 03DA B601              movw R22,R12
 03DC                   .dbline 80
 03DC           ;  delay_us(25);
 03DC 09E1              ldi R16,25
 03DE 10E0              ldi R17,0
 03E0 11DE              xcall _delay_us
 03E2                   .dbline 81
 03E2           ;  if(command==0)
 03E2 4030              cpi R20,0
 03E4 4507              cpc R20,R21
 03E6 11F5              brne L86
 03E8           X31:
 03E8                   .dbline 82
 03E8           ;  {
 03E8                   .dbline 83
 03E8           ;   LCD_RS_PORT|=LCD_RS; //RS=1
 03E8 AA9A              sbi 0x15,2
 03EA                   .dbline 84
 03EA           ;   LCD_DATA_PORT&=0X0f;
 03EA 85B3              in R24,0x15
 03EC 8F70              andi R24,15
 03EE 85BB              out 0x15,R24
 03F0                   .dbline 85
 03F0           ;   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
 03F0 CB01              movw R24,R22
 03F2 807F              andi R24,240
 03F4 9070              andi R25,0
 03F6 25B2              in R2,0x15
 03F8 3324              clr R3
 03FA 282A              or R2,R24
 03FC 392A              or R3,R25
 03FE 25BA              out 0x15,R2
 0400                   .dbline 86
 0400           ;   LCD_en_write();
 0400 E1DF              xcall _LCD_en_write
 0402                   .dbline 87
 0402           ;   data_temp=data_temp<<4; 
 0402 660F              lsl R22
 0404 771F              rol R23
 0406 660F              lsl R22
 0408 771F              rol R23
 040A 660F              lsl R22
 040C 771F              rol R23
 040E 660F              lsl R22
 0410 771F              rol R23
 0412                   .dbline 88
 0412           ;   LCD_DATA_PORT&=0X0f;
 0412 85B3              in R24,0x15
 0414 8F70              andi R24,15
 0416 85BB              out 0x15,R24
 0418                   .dbline 89
 0418           ;   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
 0418 CB01              movw R24,R22
 041A 807F              andi R24,240
 041C 9070              andi R25,0
 041E 25B2              in R2,0x15
 0420 3324              clr R3
 0422 282A              or R2,R24
 0424 392A              or R3,R25
 0426 25BA              out 0x15,R2
 0428                   .dbline 90
 0428           ;   LCD_en_write();
 0428 CDDF              xcall _LCD_en_write
 042A                   .dbline 91
 042A           ;  }
 042A 21C0              xjmp L87
 042C           L86:
 042C                   .dbline 93
 042C           ;  else
 042C           ;  {
 042C                   .dbline 94
 042C           ;   LCD_RS_PORT&=~LCD_RS; //RS=0
 042C AA98              cbi 0x15,2
 042E                   .dbline 95
 042E           ;   LCD_DATA_PORT&=0X0f;
 042E 85B3              in R24,0x15
 0430 8F70              andi R24,15
 0432 85BB              out 0x15,R24
 0434                   .dbline 96
 0434           ;   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
 0434 CA01              movw R24,R20
 0436 807F              andi R24,240
 0438 9070              andi R25,0
 043A 25B2              in R2,0x15
 043C 3324              clr R3
 043E 282A              or R2,R24
 0440 392A              or R3,R25
 0442 25BA              out 0x15,R2
 0444                   .dbline 97
 0444           ;   LCD_en_write();
 0444 BFDF              xcall _LCD_en_write
 0446                   .dbline 98
 0446           ;   command_temp=command_temp<<4;
 0446 440F              lsl R20
 0448 551F              rol R21
 044A 440F              lsl R20
 044C 551F              rol R21
 044E 440F              lsl R20
 0450 551F              rol R21
 0452 440F              lsl R20
 0454 551F              rol R21
 0456                   .dbline 99
 0456           ;   LCD_DATA_PORT&=0x0f;
 0456 85B3              in R24,0x15
 0458 8F70              andi R24,15
 045A 85BB              out 0x15,R24
 045C                   .dbline 100
 045C           ;   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
 045C CA01              movw R24,R20
 045E 807F              andi R24,240
 0460 9070              andi R25,0
 0462 25B2              in R2,0x15
 0464 3324              clr R3
 0466 282A              or R2,R24
 0468 392A              or R3,R25
 046A 25BA              out 0x15,R2
 046C                   .dbline 101
 046C           ;   LCD_en_write();
 046C ABDF              xcall _LCD_en_write
 046E                   .dbline 102
 046E           ;  }
 046E           L87:
 046E                   .dbline -2
 046E           L85:
 046E                   .dbline 0 ; func end
 046E 0C940000          xjmp pop_xgsetF03C
 0472                   .dbsym r data_temp 22 i
 0472                   .dbsym r command_temp 20 i
 0472                   .dbsym r data 12 i
 0472                   .dbsym r command 10 i
 0472                   .dbend
 0472                   .dbfunc e clear _clear fV
 0472           ;              i -> R20
                        .even
 0472           _clear::
 0472 4A93              st -y,R20
 0474                   .dbline -1
 0474                   .dbline 108
 0474           ; }
 0474           ; /*-------------------------------------------------------------
 0474           ; 函数: 清屏lcd1602
 0474           ; ---------------------------------------------------------------*/
 0474           ; void clear(void)
 0474           ; {
 0474                   .dbline 110
 0474           ;  unsigned char i;
 0474           ;  LCD_set_xy(0,0);
 0474 2227              clr R18
 0476 0027              clr R16
 0478 93DF              xcall _LCD_set_xy
 047A                   .dbline 111
 047A           ;  for(i=0;i<16;i++)
 047A 4427              clr R20
 047C 06C0              xjmp L92
 047E           L89:
 047E                   .dbline 112
 047E           ;  LCD_write_char(0,' ');
 047E 20E2              ldi R18,32
 0480 30E0              ldi R19,0
 0482 0027              clr R16
 0484 1127              clr R17
 0486 A4DF              xcall _LCD_write_char
 0488           L90:
 0488                   .dbline 111
 0488 4395              inc R20
 048A           L92:
 048A                   .dbline 111
 048A 4031              cpi R20,16
 048C C0F3              brlo L89
 048E           X32:
 048E                   .dbline 113
 048E           ;  LCD_set_xy(0,1);
 048E 21E0              ldi R18,1
 0490 0027              clr R16
 0492 86DF              xcall _LCD_set_xy
 0494                   .dbline 114
 0494           ;  for(i=0;i<16;i++)
 0494 4427              clr R20
 0496 06C0              xjmp L96
 0498           L93:
 0498                   .dbline 115
 0498           ;  LCD_write_char(0,' ');
 0498 20E2              ldi R18,32
 049A 30E0              ldi R19,0
 049C 0027              clr R16
 049E 1127              clr R17
 04A0 97DF              xcall _LCD_write_char
 04A2           L94:
 04A2                   .dbline 114
 04A2 4395              inc R20
 04A4           L96:
 04A4                   .dbline 114
 04A4 4031              cpi R20,16
 04A6 C0F3              brlo L93
 04A8           X33:
 04A8                   .dbline -2
 04A8           L88:
 04A8                   .dbline 0 ; func end
 04A8 4991              ld R20,y+
 04AA 0895              ret
 04AC                   .dbsym r i 20 c
 04AC                   .dbend
 04AC                   .dbfunc e LCD_write_string _LCD_write_string fV
 04AC           ;              s -> R20,R21
 04AC           ;              Y -> R12
 04AC           ;              X -> R10
                        .even
 04AC           _LCD_write_string::
 04AC 0E940000          xcall push_xgset303C
 04B0 C22E              mov R12,R18
 04B2 A02E              mov R10,R16
 04B4 4E81              ldd R20,y+6
 04B6 5F81              ldd R21,y+7
 04B8                   .dbline -1
 04B8                   .dbline 123
 04B8           ; }
 04B8           ; /*-------------------------------------------------------------
 04B8           ; 函数: 写字符串
 04B8           ; 参数:列---X=0~15,行---Y=0~1 写地址
 04B8           ;       s为所要写的字符串
 04B8           ; ---------------------------------------------------------------*/
 04B8           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 
 04B8           ; {
 04B8                   .dbline 124
 04B8           ;  LCD_set_xy(X,Y);   
 04B8 2C2D              mov R18,R12
 04BA 0A2D              mov R16,R10
 04BC 71DF              xcall _LCD_set_xy
 04BE 08C0              xjmp L99
 04C0           L98:
 04C0                   .dbline 126

⌨️ 快捷键说明

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