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

📄 1602.lis

📁 1602LCD_mega16.rar
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 006C 9598              cbi 0x12,5
 006E                   .dbline 127
 006E           ;  SET_LCD_RW;
 006E 969A              sbi 0x12,6
 0070                   .dbline 128
 0070           ;  CLR_LCD_E;
 0070 9798              cbi 0x12,7
 0072                   .dbline 129
 0072           ;  CLR_LCD_E;
 0072 9798              cbi 0x12,7
 0074                   .dbline 130
 0074           ;  CLR_LCD_E;
 0074 9798              cbi 0x12,7
 0076                   .dbline 131
 0076           ;  CLR_LCD_E;
 0076 9798              cbi 0x12,7
 0078                   .dbline 132
 0078           ;  SET_LCD_E;
 0078 979A              sbi 0x12,7
 007A           L7:
 007A                   .dbline 133
 007A           ;  while (LCM_Data1 & Busy); //检测忙信号
 007A           L8:
 007A                   .dbline 133
 007A B799              sbic 0x16,7
 007C FECF              rjmp L7
 007E           X1:
 007E                   .dbline 134
 007E           ;  DDRB=0xff;//变回输出
 007E 8FEF              ldi R24,255
 0080 87BB              out 0x17,R24
 0082                   .dbline 135
 0082           ;  return(LCM_Data1);
 0082 06B3              in R16,0x16
 0084                   .dbline -2
 0084           L6:
 0084                   .dbline 0 ; func end
 0084 0895              ret
 0086                   .dbend
 0086                   .dbfunc e LCMInit _LCMInit fV
                        .even
 0086           _LCMInit::
 0086                   .dbline -1
 0086                   .dbline 139
 0086           ; }
 0086           ; 
 0086           ; void LCMInit(void) //LCM初始化
 0086           ; {
 0086                   .dbline 140
 0086           ;  LCM_Data = 0;
 0086 2224              clr R2
 0088 28BA              out 0x18,R2
 008A                   .dbline 141
 008A           ;  WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 008A 2227              clr R18
 008C 08E3              ldi R16,56
 008E CADF              xcall _WriteCommandLCM
 0090                   .dbline 142
 0090           ;  Delay5Ms(); 
 0090 51D0              xcall _Delay5Ms
 0092                   .dbline 143
 0092           ;  WriteCommandLCM(0x38,0);
 0092 2227              clr R18
 0094 08E3              ldi R16,56
 0096 C6DF              xcall _WriteCommandLCM
 0098                   .dbline 144
 0098           ;  Delay5Ms(); 
 0098 4DD0              xcall _Delay5Ms
 009A                   .dbline 145
 009A           ;  WriteCommandLCM(0x38,0);
 009A 2227              clr R18
 009C 08E3              ldi R16,56
 009E C2DF              xcall _WriteCommandLCM
 00A0                   .dbline 146
 00A0           ;  Delay5Ms(); 
 00A0 49D0              xcall _Delay5Ms
 00A2                   .dbline 148
 00A2           ; 
 00A2           ;  WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
 00A2 21E0              ldi R18,1
 00A4 08E3              ldi R16,56
 00A6 BEDF              xcall _WriteCommandLCM
 00A8                   .dbline 149
 00A8           ;  WriteCommandLCM(0x08,1); //关闭显示
 00A8 21E0              ldi R18,1
 00AA 08E0              ldi R16,8
 00AC BBDF              xcall _WriteCommandLCM
 00AE                   .dbline 150
 00AE           ;  WriteCommandLCM(0x01,1); //显示清屏
 00AE 21E0              ldi R18,1
 00B0 01E0              ldi R16,1
 00B2 B8DF              xcall _WriteCommandLCM
 00B4                   .dbline 151
 00B4           ;  WriteCommandLCM(0x06,1); // 显示光标移动设置
 00B4 21E0              ldi R18,1
 00B6 06E0              ldi R16,6
 00B8 B5DF              xcall _WriteCommandLCM
 00BA                   .dbline 152
 00BA           ;  WriteCommandLCM(0x0C,1); // 显示开及光标设置
 00BA 21E0              ldi R18,1
 00BC 0CE0              ldi R16,12
 00BE B2DF              xcall _WriteCommandLCM
 00C0                   .dbline -2
 00C0           L10:
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbend
 00C2                   .dbfunc e DisplayOneChar _DisplayOneChar fV
 00C2           ;          DData -> y+2
 00C2           ;              Y -> R22
 00C2           ;              X -> R20
                        .even
 00C2           _DisplayOneChar::
 00C2 4A93              st -y,R20
 00C4 6A93              st -y,R22
 00C6 622F              mov R22,R18
 00C8 402F              mov R20,R16
 00CA                   .dbline -1
 00CA                   .dbline 157
 00CA           ; }
 00CA           ; 
 00CA           ; //按指定位置显示一个字符
 00CA           ; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 00CA           ; {
 00CA                   .dbline 158
 00CA           ;  Y &= 0x1;
 00CA 6170              andi R22,1
 00CC                   .dbline 159
 00CC           ;  X &= 0xF; //限制X不能大于15,Y不能大于1
 00CC 4F70              andi R20,15
 00CE                   .dbline 160
 00CE           ;  if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 00CE 6623              tst R22
 00D0 09F0              breq L12
 00D2           X2:
 00D2                   .dbline 160
 00D2 4064              ori R20,64
 00D4           L12:
 00D4                   .dbline 161
 00D4           ;  X |= 0x80; //算出指令码
 00D4 4068              ori R20,128
 00D6                   .dbline 162
 00D6           ;  WriteCommandLCM(X, 1); //这里不检测忙信号,发送地址码
 00D6 21E0              ldi R18,1
 00D8 042F              mov R16,R20
 00DA A4DF              xcall _WriteCommandLCM
 00DC                   .dbline 163
 00DC           ;  WriteDataLCM(DData);
 00DC 0A81              ldd R16,y+2
 00DE 90DF              xcall _WriteDataLCM
 00E0                   .dbline 164
 00E0           ;  WriteCommandLCM(X, 0); //光标返回,调节时很重要
 00E0 2227              clr R18
 00E2 042F              mov R16,R20
 00E4 9FDF              xcall _WriteCommandLCM
 00E6                   .dbline -2
 00E6           L11:
 00E6                   .dbline 0 ; func end
 00E6 6991              ld R22,y+
 00E8 4991              ld R20,y+
 00EA 0895              ret
 00EC                   .dbsym l DData 2 c
 00EC                   .dbsym r Y 22 c
 00EC                   .dbsym r X 20 c
 00EC                   .dbend
 00EC                   .dbfunc e DisplayListChar _DisplayListChar fV
 00EC           ;     ListLength -> R10
 00EC           ;          DData -> R12,R13
 00EC           ;              Y -> R22
 00EC           ;              X -> R20
                        .even
 00EC           _DisplayListChar::
 00EC 0E940000          xcall push_xgsetF03C
 00F0 622F              mov R22,R18
 00F2 402F              mov R20,R16
 00F4 2197              sbiw R28,1
 00F6 C984              ldd R12,y+9
 00F8 DA84              ldd R13,y+10
 00FA                   .dbline -1
 00FA                   .dbline 169
 00FA           ; }
 00FA           ; 
 00FA           ; //按指定位置显示一串字符
 00FA           ; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char const *DData)
 00FA           ; {
 00FA                   .dbline 172
 00FA           ;  unsigned char ListLength;
 00FA           ; 
 00FA           ;   ListLength = 0;
 00FA AA24              clr R10
 00FC                   .dbline 173
 00FC           ;  Y &= 0x1;
 00FC 6170              andi R22,1
 00FE                   .dbline 174
 00FE           ;  X &= 0xF; //限制X不能大于15,Y不能大于1
 00FE 4F70              andi R20,15
 0100 0EC0              xjmp L16
 0102           L15:
 0102                   .dbline 176
 0102           ;  while (DData[ListLength]>0x20) //若到达字串尾则退出
 0102           ;   {
 0102                   .dbline 177
 0102           ;    if (X <= 0xF) //X坐标应小于0xF
 0102 8FE0              ldi R24,15
 0104 8417              cp R24,R20
 0106 58F0              brlo L18
 0108           X3:
 0108                   .dbline 178
 0108           ;     {
 0108                   .dbline 179
 0108           ;      DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 0108 EA2D              mov R30,R10
 010A FF27              clr R31
 010C EC0D              add R30,R12
 010E FD1D              adc R31,R13
 0110 2490              lpm R2,Z
 0112 2882              std y+0,R2
 0114 262F              mov R18,R22
 0116 042F              mov R16,R20
 0118 D4DF              xcall _DisplayOneChar
 011A                   .dbline 180
 011A           ;      ListLength++;
 011A A394              inc R10
 011C                   .dbline 181
 011C           ;      X++;
 011C 4395              inc R20
 011E                   .dbline 182
 011E           ;     }
 011E           L18:
 011E                   .dbline 183
 011E           ;   }
 011E           L16:
 011E                   .dbline 175
 011E EA2D              mov R30,R10
 0120 FF27              clr R31
 0122 EC0D              add R30,R12
 0124 FD1D              adc R31,R13
 0126 2490              lpm R2,Z
 0128 80E2              ldi R24,32
 012A 8215              cp R24,R2
 012C 50F3              brlo L15
 012E           X4:
 012E                   .dbline -2
 012E           L14:
 012E                   .dbline 0 ; func end
 012E 2196              adiw R28,1
 0130 0C940000          xjmp pop_xgsetF03C
 0134                   .dbsym r ListLength 10 c
 0134                   .dbsym r DData 12 pkc
 0134                   .dbsym r Y 22 c
 0134                   .dbsym r X 20 c
 0134                   .dbend
 0134                   .dbfunc e Delay5Ms _Delay5Ms fV
 0134           ;        TempCyc -> R16,R17
                        .even
 0134           _Delay5Ms::
 0134                   .dbline -1
 0134                   .dbline 188
 0134           ; }
 0134           ; 
 0134           ; //5ms延时
 0134           ; void Delay5Ms(void)
 0134           ; {
 0134                   .dbline 189
 0134           ;  unsigned int TempCyc = 5552;
 0134 00EB              ldi R16,5552
 0136 15E1              ldi R17,21
 0138           L21:
 0138                   .dbline 190
 0138           ;  while(TempCyc--);
 0138           L22:
 0138                   .dbline 190
 0138 1801              movw R2,R16
 013A 0150              subi R16,1
 013C 1040              sbci R17,0
 013E 2220              tst R2
 0140 D9F7              brne L21
 0142 3320              tst R3
 0144 C9F7              brne L21
 0146           X5:
 0146                   .dbline -2
 0146           L20:
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r TempCyc 16 i
 0148                   .dbend
 0148                   .dbfunc e Delay400Ms _Delay400Ms fV
 0148           ;       TempCycA -> R16
 0148           ;       TempCycB -> R18,R19
                        .even
 0148           _Delay400Ms::
 0148                   .dbline -1
 0148                   .dbline 195
 0148           ; }
 0148           ; 
 0148           ; //400ms延时

⌨️ 快捷键说明

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