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

📄 lm1602.lis

📁 ds18b20+1602液晶显示 基于atmega16l单片机的编程
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00E6           ;        byte setData = 0x08;
 00E6 48E0              ldi R20,8
 00E8                   .dbline 112
 00E8           ;       
 00E8           ;       if (allDis == 1)   //所有都显示 
 00E8 8A2D              mov R24,R10
 00EA 8130              cpi R24,1
 00EC 11F4              brne L24
 00EE                   .dbline 113
 00EE           ;                  setData |= 0x04;
 00EE 4460              ori R20,4
 00F0 01C0              xjmp L25
 00F2           L24:
 00F2                   .dbline 115
 00F2           ;       else                       //都不显示 
 00F2           ;           setData &= ~0x04;
 00F2 4B7F              andi R20,251
 00F4           L25:
 00F4                   .dbline 117
 00F4           ;                 
 00F4           ;       if (curDis == 1)        //光标显示 
 00F4 6130              cpi R22,1
 00F6 11F4              brne L26
 00F8                   .dbline 118
 00F8           ;                  setData |= 0x02;
 00F8 4260              ori R20,2
 00FA 01C0              xjmp L27
 00FC           L26:
 00FC                   .dbline 120
 00FC           ;       else                 //光标不显示
 00FC           ;                  setData &= ~0x02;    
 00FC 4D7F              andi R20,253
 00FE           L27:
 00FE                   .dbline 122
 00FE           ;       
 00FE           ;       if (curFlash == 1)      //光标闪烁
 00FE 8E81              ldd R24,y+6
 0100 8130              cpi R24,1
 0102 11F4              brne L28
 0104                   .dbline 123
 0104           ;                  setData |= 0x01;
 0104 4160              ori R20,1
 0106 01C0              xjmp L29
 0108           L28:
 0108                   .dbline 125
 0108           ;       else                 ///光标不闪烁
 0108           ;                  setData &= ~0x01;               
 0108 4E7F              andi R20,254
 010A           L29:
 010A                   .dbline 126
 010A           ;       WriteCmd(setData);                
 010A 042F              mov R16,R20
 010C A1DF              xcall _WriteCmd
 010E                   .dbline -2
 010E           L23:
 010E 0E940000          xcall pop_gset3
 0112                   .dbline 0 ; func end
 0112 0895              ret
 0114                   .dbsym r setData 20 c
 0114                   .dbsym l curFlash 6 c
 0114                   .dbsym r curDis 22 c
 0114                   .dbsym r allDis 10 c
 0114                   .dbend
 0114                   .dbfunc e SetFunction _SetFunction fV
 0114           ;        setData -> R20
 0114           ;           fDis -> y+6
 0114           ;        lineDis -> R22
 0114           ;         numBus -> R10
                        .even
 0114           _SetFunction::
 0114 0E940000          xcall push_gset3
 0118 622F              mov R22,R18
 011A A02E              mov R10,R16
 011C                   .dbline -1
 011C                   .dbline 146
 011C           ; }
 011C           ; /*
 011C           ; void SetShift(byte cMove, byte cDir)
 011C           ; {
 011C           ;        byte setData = 0x10;
 011C           ;       
 011C           ;       if (cMove == 1)   //移动文字
 011C           ;                  setData |= 0x08;
 011C           ;       else                       //移动光标
 011C           ;           setData &= ~0x08;
 011C           ;                 
 011C           ;       if (cDir == 1)  //右移
 011C           ;                  setData |= 0x04;
 011C           ;       else                 //左移
 011C           ;                  setData &= ~0x04;
 011C           ;       WriteCmd(setData);                      
 011C           ; }
 011C           ; */
 011C           ; void SetFunction(byte numBus, byte lineDis, byte fDis)
 011C           ; {
 011C                   .dbline 147
 011C           ;       byte setData = 0x20;
 011C 40E2              ldi R20,32
 011E                   .dbline 149
 011E           ;       
 011E           ;       if (numBus == 1)   //4位总线 
 011E 8A2D              mov R24,R10
 0120 8130              cpi R24,1
 0122 11F4              brne L31
 0124                   .dbline 150
 0124           ;                  setData |= 0x10;
 0124 4061              ori R20,16
 0126 01C0              xjmp L32
 0128           L31:
 0128                   .dbline 152
 0128           ;       else                       //8位总线 
 0128           ;           setData &= ~0x10;
 0128 4F7E              andi R20,239
 012A           L32:
 012A                   .dbline 154
 012A           ;                 
 012A           ;       if (lineDis == 1)       //双行显示 
 012A 6130              cpi R22,1
 012C 11F4              brne L33
 012E                   .dbline 155
 012E           ;                  setData |= 0x08;
 012E 4860              ori R20,8
 0130 01C0              xjmp L34
 0132           L33:
 0132                   .dbline 157
 0132           ;       else                 //单行显示
 0132           ;                  setData &= ~0x08;    
 0132 477F              andi R20,247
 0134           L34:
 0134                   .dbline 159
 0134           ;       
 0134           ;       if (fDis == 1)  //5*10点阵
 0134 8E81              ldd R24,y+6
 0136 8130              cpi R24,1
 0138 11F4              brne L35
 013A                   .dbline 160
 013A           ;                  setData |= 0x04;
 013A 4460              ori R20,4
 013C 01C0              xjmp L36
 013E           L35:
 013E                   .dbline 162
 013E           ;       else                 ///5*7点阵
 013E           ;                  setData &= ~0x04;               
 013E 4B7F              andi R20,251
 0140           L36:
 0140                   .dbline 163
 0140           ;       WriteCmd(setData);                
 0140 042F              mov R16,R20
 0142 86DF              xcall _WriteCmd
 0144                   .dbline -2
 0144           L30:
 0144 0E940000          xcall pop_gset3
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbsym r setData 20 c
 014A                   .dbsym l fDis 6 c
 014A                   .dbsym r lineDis 22 c
 014A                   .dbsym r numBus 10 c
 014A                   .dbend
 014A                   .dbfunc e SetDisAddr _SetDisAddr fV
 014A           ;           ucol -> R20
 014A           ;           urow -> R22
                        .even
 014A           _SetDisAddr::
 014A 0E940000          xcall push_gset2
 014E 422F              mov R20,R18
 0150 602F              mov R22,R16
 0152                   .dbline -1
 0152                   .dbline 174
 0152           ; }
 0152           ;  /*
 0152           ; void SetCGRAMAddr(byte ramAddr)
 0152           ; {
 0152           ;       byte setData = 0x40;
 0152           ;       setData |= (ramAddr &0x3f);
 0152           ;       WriteCmd(setData);               
 0152           ; }
 0152           ; */
 0152           ; void SetDisAddr(byte urow, byte ucol)
 0152           ; {
 0152                   .dbline 175
 0152           ;     if (ucol >= 20)
 0152 4431              cpi R20,20
 0154 08F0              brlo L38
 0156                   .dbline 176
 0156           ;       ucol= 20;
 0156 44E1              ldi R20,20
 0158           L38:
 0158                   .dbline 177
 0158           ;       if (urow == 0)
 0158 6623              tst R22
 015A 21F4              brne L40
 015C                   .dbline 178
 015C           ;           WriteCmd( 0x80+ucol);       
 015C 042F              mov R16,R20
 015E 0058              subi R16,128    ; addi 128
 0160 77DF              xcall _WriteCmd
 0162 03C0              xjmp L41
 0164           L40:
 0164                   .dbline 180
 0164 042F              mov R16,R20
 0166 0054              subi R16,64    ; addi 192
 0168 73DF              xcall _WriteCmd
 016A           L41:
 016A                   .dbline -2
 016A           L37:
 016A 0E940000          xcall pop_gset2
 016E                   .dbline 0 ; func end
 016E 0895              ret
 0170                   .dbsym r ucol 20 c
 0170                   .dbsym r urow 22 c
 0170                   .dbend
 0170                   .dbfunc e DisCGRAM _DisCGRAM fV
 0170           ;             ch -> y+4
 0170           ;           ucol -> R22
 0170           ;           urow -> R20
                        .even
 0170           _DisCGRAM::
 0170 0E940000          xcall push_gset2
 0174 622F              mov R22,R18
 0176 402F              mov R20,R16
 0178                   .dbline -1
 0178                   .dbline 184
 0178           ;       else
 0178           ;               WriteCmd( 0xc0+ucol);   
 0178           ; }
 0178           ; 
 0178           ; void DisCGRAM(byte urow, byte ucol, char ch)
 0178           ; {
 0178                   .dbline 185
 0178           ;     SetDisAddr(urow, ucol);
 0178 262F              mov R18,R22
 017A 042F              mov R16,R20
 017C E6DF              xcall _SetDisAddr
 017E                   .dbline 186
 017E           ;       WriteData(ch);
 017E 0C81              ldd R16,y+4
 0180 73DF              xcall _WriteData
 0182                   .dbline -2
 0182           L42:
 0182 0E940000          xcall pop_gset2
 0186                   .dbline 0 ; func end
 0186 0895              ret
 0188                   .dbsym l ch 4 c
 0188                   .dbsym r ucol 22 c
 0188                   .dbsym r urow 20 c
 0188                   .dbend
 0188                   .dbfunc e DisString _DisString fV
 0188           ;              i -> R20
 0188           ;            str -> R22,R23
 0188           ;           ucol -> R12
 0188           ;           urow -> R10
                        .even
 0188           _DisString::
 0188 0E940000          xcall push_gset4
 018C C22E              mov R12,R18
 018E A02E              mov R10,R16
 0190 6885              ldd R22,y+8
 0192 7985              ldd R23,y+9
 0194                   .dbline -1
 0194                   .dbline 196
 0194           ; }
 0194           ; /*
 0194           ; void DisChar(byte row, byte line, char ch)
 0194           ; {
 0194           ;     SetDisAddr(row, line);
 0194           ;       WriteData(ch);
 0194           ; }
 0194           ; */
 0194           ; void DisString(byte urow, byte ucol, char *str)
 0194           ; {
 0194                   .dbline 197
 0194           ;      byte i = 0;
 0194 4427              clr R20
 0196                   .dbline 199
 0196           ;               
 0196           ;       SetDisAddr(urow, ucol);
 0196 2C2D              mov R18,R12
 0198 0A2D              mov R16,R10
 019A D7DF              xcall _SetDisAddr
 019C 07C0              xjmp L45
 019E           L44:
 019E                   .dbline 201
 019E                   .dbline 202
 019E E42F              mov R30,R20
 01A0 FF27              clr R31
 01A2 E60F              add R30,R22
 01A4 F71F              adc R31,R23
 01A6 0081              ldd R16,z+0
 01A8 5FDF              xcall _WriteData
 01AA                   .dbline 203
 01AA 4395              inc R20
 01AC                   .dbline 204
 01AC           L45:
 01AC                   .dbline 200
 01AC           ;       while (i < strlen(str))
 01AC 8B01              movw R16,R22
 01AE 0E940000          xcall _strlen
 01B2 242E              mov R2,R20
 01B4 3324              clr R3
 01B6 2016              cp R2,R16
 01B8 3106              cpc R3,R17
 01BA 88F3              brlo L44
 01BC                   .dbline -2
 01BC           L43:
 01BC 0E940000          xcall pop_gset4
 01C0                   .dbline 0 ; func end
 01C0 0895              ret
 01C2                   .dbsym r i 20 c
 01C2                   .dbsym r str 22 pc
 01C2                   .dbsym r ucol 12 c
 01C2                   .dbsym r urow 10 c
 01C2                   .dbend
 01C2                   .dbfunc e DisNum _DisNum fV
 01C2           ;            num -> y+4
 01C2           ;           ucol -> R22
 01C2           ;           urow -> R20
                        .even
 01C2           _DisNum::
 01C2 0E940000          xcall push_gset2
 01C6 622F              mov R22,R18
 01C8 402F              mov R20,R16
 01CA                   .dbline -1
 01CA                   .dbline 209
 01CA           ;       {
 01CA           ;               WriteData(*(str + i));
 01CA           ;               i++;
 01CA           ;       }
 01CA           ; }
 01CA           ; 
 01CA           ; 
 01CA           ; void DisNum(byte urow, byte ucol, byte num)
 01CA           ; {
 01CA                   .dbline 210
 01CA           ;               SetDisAddr(urow, ucol);
 01CA 262F              mov R18,R22
 01CC 042F              mov R16,R20
 01CE BDDF              xcall _SetDisAddr
 01D0                   .dbline 211
 01D0           ;                WriteData('0'+ num);
 01D0 0C81              ldd R16,y+4
 01D2 005D              subi R16,208    ; addi 48
 01D4 49DF              xcall _WriteData
 01D6                   .dbline -2
 01D6           L47:
 01D6 0E940000          xcall pop_gset2
 01DA                   .dbline 0 ; func end
 01DA 0895              ret
 01DC                   .dbsym l num 4 c
 01DC                   .dbsym r ucol 22 c
 01DC                   .dbsym r urow 20 c
 01DC                   .dbend
 01DC                   .dbfunc e DisplayTime _DisplayTime fV
 01DC           ;         second -> y+6
 01DC           ;         minute -> R20
 01DC           ;           hour -> R22
                        .even
 01DC           _DisplayTime::
 01DC 0E940000          xcall push_gset2
 01E0 422F              mov R20,R18
 01E2 602F              mov R22,R16
 01E4 2297              sbiw R28,2
 01E6                   .dbline -1
 01E6                   .dbline 216
 01E6           ; }
 01E6           ; 
 01E6           ; 
 01E6           ; void DisplayTime(byte hour,byte minute,byte second)
 01E6           ; {
 01E6                   .dbline 217
 01E6           ;        DisNum(1, 3, hour/16);
 01E6 862F              mov R24,R22
 01E8 8295              swap R24
 01EA 8F70              andi R24,#0x0F
 01EC 8883              std y+0,R24
 01EE 23E0              ldi R18,3
 01F0 01E0              ldi R16,1
 01F2 E7DF              xcall _DisNum
 01F4                   .dbline 218
 01F4           ;        DisNum(1, 4, hour%16);
 01F4 10E1              ldi R17,16
 01F6 062F              mov R16,R22
 01F8 0E940000          xcall mod8u
 01FC 0883              std y+0,R16
 01FE 24E0              ldi R18,4
 0200 01E0              ldi R16,1
 0202 DFDF              xcall _DisNum
 0204                   .dbline 219
 0204           ;        DisString(1, 5,":");
 0204 80E0              ldi R24,<L49
 0206 90E0              ldi R25,>L49
 0208 9983              std y+1,R25
 020A 8883              std y+0,R24
 020C 25E0              ldi R18,5
 020E 01E0              ldi R16,1
 0210 BBDF              xcall _DisString
 0212                   .dbline 220
 0212           ;        DisNum(1, 6, minute/16);
 0212 842F              mov R24,R20
 0214 8295              swap R24
 0216 8F70              andi R24,#0x0F
 0218 8883              std y+0,R24
 021A 26E0              ldi R18,6
 021C 01E0              ldi R16,1

⌨️ 快捷键说明

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