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

📄 lm1602.lis

📁 ds18b20+1602液晶显示 基于atmega16l单片机的编程
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module lm1602.c
                        .area data(ram, con, rel)
 0000           _CGRAMtab::
 0000                   .blkb 2
                        .area idata
 0000 0C12              .byte 12,18
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 120C              .byte 18,12
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 0000              .byte 0,0
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0000              .byte 0,0
                        .area data(ram, con, rel)
 0008                   .dbfile F:\avr最小系统板\程序代码\ex15_ds18b20_1602\lm1602.c
 0008                   .dbsym e CGRAMtab _CGRAMtab A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\avr最小系统板\程序代码\ex15_ds18b20_1602\lm1602.c
 0000                   .dbfunc e CheckBusy _CheckBusy fc
                        .even
 0000           _CheckBusy::
 0000                   .dbline -1
 0000                   .dbline 14
 0000           ; #include "lm1602.h"
 0000           ; #include "string.h"
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; 
 0000           ; /*自定义字符*/
 0000           ; byte  CGRAMtab[] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; //度的符号
 0000           ; 
 0000           ; 
 0000           ; void LcdInit(void);
 0000           ; void DisplayTime(byte hour,byte minute,byte second);
 0000           ; 
 0000           ; unsigned char CheckBusy(void)
 0000           ; {
 0000                   .dbline 16
 0000           ;     
 0000           ;     DDRB = 0x00;
 0000 2224              clr R2
 0002 27BA              out 0x17,R2
 0004                   .dbline 17
 0004           ;       NOP();
 0004 0000              nop
 0006                   .dbline 18
 0006           ;       NOP();
 0006 0000              nop
 0008                   .dbline 19
 0008           ;       NOP();
 0008 0000              nop
 000A                   .dbline 20
 000A           ;       NOP();
 000A 0000              nop
 000C                   .dbline 21
 000C           ;       NOP();
 000C 0000              nop
 000E                   .dbline 22
 000E           ;       NOP();
 000E 0000              nop
 0010                   .dbline 23
 0010           ;       NOP();
 0010 0000              nop
 0012                   .dbline 24
 0012           ;       NOP();
 0012 0000              nop
 0014                   .dbline 25
 0014           ;       RS_L;
 0014 DD98              cbi 0x1b,5
 0016                   .dbline 26
 0016           ;       RW_H;
 0016 DE9A              sbi 0x1b,6
 0018                   .dbline 27
 0018           ;       EN_H;
 0018 DF9A              sbi 0x1b,7
 001A                   .dbline 28
 001A           ;       NOP();
 001A 0000              nop
 001C                   .dbline 29
 001C           ;       NOP();
 001C 0000              nop
 001E                   .dbline 30
 001E           ;       NOP();
 001E 0000              nop
 0020                   .dbline 31
 0020           ;       NOP();
 0020 0000              nop
 0022                   .dbline 32
 0022           ;        EN_L;
 0022 DF98              cbi 0x1b,7
 0024                   .dbline 33
 0024           ;       if((PINB&0x80)==0x80)
 0024 86B3              in R24,0x16
 0026 8078              andi R24,128
 0028 8038              cpi R24,128
 002A 21F4              brne L2
 002C                   .dbline 34
 002C           ;       {
 002C                   .dbline 35
 002C           ;          DDRB = 0xFF;
 002C 8FEF              ldi R24,255
 002E 87BB              out 0x17,R24
 0030                   .dbline 36
 0030           ;          return 1;
 0030 01E0              ldi R16,1
 0032 03C0              xjmp L1
 0034           L2:
 0034                   .dbline 39
 0034           ;       }
 0034           ;       else
 0034           ;       {
 0034                   .dbline 40
 0034           ;          DDRB = 0xFF;
 0034 8FEF              ldi R24,255
 0036 87BB              out 0x17,R24
 0038                   .dbline 41
 0038           ;          return 0;
 0038 0027              clr R16
 003A                   .dbline -2
 003A           L1:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e delay _delay fV
 003C           ;              t -> R16,R17
                        .even
 003C           _delay::
 003C                   .dbline -1
 003C                   .dbline 47
 003C           ;        }
 003C           ;       
 003C           ; }
 003C           ; 
 003C           ; void delay(void)
 003C           ; {
 003C                   .dbline 49
 003C 0027              clr R16
 003E 1127              clr R17
 0040 02C0              xjmp L8
 0042           L5:
 0042                   .dbline 49
 0042           L6:
 0042                   .dbline 49
 0042 0F5F              subi R16,255  ; offset = 1
 0044 1F4F              sbci R17,255
 0046           L8:
 0046                   .dbline 49
 0046           ;   unsigned int t;
 0046           ;   for(t=0;t<1000;t++);
 0046 083E              cpi R16,232
 0048 E3E0              ldi R30,3
 004A 1E07              cpc R17,R30
 004C D0F3              brlo L5
 004E                   .dbline -2
 004E           L4:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbsym r t 16 i
 0050                   .dbend
 0050                   .dbfunc e WriteCmd _WriteCmd fV
 0050           ;            cmd -> R20
                        .even
 0050           _WriteCmd::
 0050 0E940000          xcall push_gset1
 0054 402F              mov R20,R16
 0056                   .dbline -1
 0056                   .dbline 53
 0056           ; }
 0056           ; 
 0056           ; void WriteCmd(byte cmd)
 0056           ; {
 0056                   .dbline 55
 0056           ;  
 0056           ;       RS_L;
 0056 DD98              cbi 0x1b,5
 0058                   .dbline 56
 0058           ;       RW_L; 
 0058 DE98              cbi 0x1b,6
 005A                   .dbline 57
 005A           ;       DATAPORT = cmd;  
 005A 48BB              out 0x18,R20
 005C                   .dbline 58
 005C           ;       EN_H; 
 005C DF9A              sbi 0x1b,7
 005E                   .dbline 60
 005E           ;        //while(CheckBusy());
 005E           ;       delay();
 005E EEDF              xcall _delay
 0060                   .dbline 61
 0060           ;       EN_L;
 0060 DF98              cbi 0x1b,7
 0062                   .dbline -2
 0062           L9:
 0062 0E940000          xcall pop_gset1
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r cmd 20 c
 0068                   .dbend
 0068                   .dbfunc e WriteData _WriteData fV
 0068           ;          datas -> R20
                        .even
 0068           _WriteData::
 0068 0E940000          xcall push_gset1
 006C 402F              mov R20,R16
 006E                   .dbline -1
 006E                   .dbline 65
 006E           ;       }
 006E           ; 
 006E           ; void WriteData(byte datas)
 006E           ; {
 006E                   .dbline 66
 006E           ;       RS_H;
 006E DD9A              sbi 0x1b,5
 0070                   .dbline 67
 0070           ;       RW_L;
 0070 DE98              cbi 0x1b,6
 0072                   .dbline 68
 0072           ;       DATAPORT = datas;
 0072 48BB              out 0x18,R20
 0074                   .dbline 69
 0074           ;       EN_H; 
 0074 DF9A              sbi 0x1b,7
 0076                   .dbline 70
 0076           ;     delay();
 0076 E2DF              xcall _delay
 0078                   .dbline 71
 0078           ;       EN_L;
 0078 DF98              cbi 0x1b,7
 007A                   .dbline -2
 007A           L10:
 007A 0E940000          xcall pop_gset1
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbsym r datas 20 c
 0080                   .dbend
 0080                   .dbfunc e LCD_WriteCGRAM _LCD_WriteCGRAM fV
 0080           ;              i -> R20
 0080           ;            len -> R22
 0080           ;          cgram -> R10,R11
                        .even
 0080           _LCD_WriteCGRAM::
 0080 0E940000          xcall push_gset3
 0084 622F              mov R22,R18
 0086 5801              movw R10,R16
 0088                   .dbline -1
 0088                   .dbline 75
 0088           ; }
 0088           ; 
 0088           ; void  LCD_WriteCGRAM(byte *cgram,byte len)  //自定义字符写入CGRAM函数
 0088           ; {  
 0088                   .dbline 77
 0088           ;    byte i ;
 0088           ;    WriteCmd(0x40) ;  //写CGRAM
 0088 00E4              ldi R16,64
 008A E2DF              xcall _WriteCmd
 008C                   .dbline 78
 008C           ;     for (i = 0 ; i< len ; i++)       
 008C 4427              clr R20
 008E 07C0              xjmp L15
 0090           L12:
 0090                   .dbline 79
 0090 E42F              mov R30,R20
 0092 FF27              clr R31
 0094 EA0D              add R30,R10
 0096 FB1D              adc R31,R11
 0098 0081              ldd R16,z+0
 009A E6DF              xcall _WriteData
 009C           L13:
 009C                   .dbline 78
 009C 4395              inc R20
 009E           L15:
 009E                   .dbline 78
 009E 4617              cp R20,R22
 00A0 B8F3              brlo L12
 00A2                   .dbline -2
 00A2           L11:
 00A2 0E940000          xcall pop_gset3
 00A6                   .dbline 0 ; func end
 00A6 0895              ret
 00A8                   .dbsym r i 20 c
 00A8                   .dbsym r len 22 c
 00A8                   .dbsym r cgram 10 pc
 00A8                   .dbend
 00A8                   .dbfunc e ClearLcd _ClearLcd fV
                        .even
 00A8           _ClearLcd::
 00A8                   .dbline -1
 00A8                   .dbline 84
 00A8           ;      WriteData(*(cgram+i)) ;        
 00A8           ; }
 00A8           ; 
 00A8           ; 
 00A8           ; void ClearLcd(void)
 00A8           ; {
 00A8                   .dbline 85
 00A8           ;     WriteCmd(CLR_DIS);
 00A8 01E0              ldi R16,1
 00AA D2DF              xcall _WriteCmd
 00AC                   .dbline -2
 00AC           L16:
 00AC                   .dbline 0 ; func end
 00AC 0895              ret
 00AE                   .dbend
 00AE                   .dbfunc e CurReturn _CurReturn fV
                        .even
 00AE           _CurReturn::
 00AE                   .dbline -1
 00AE                   .dbline 89
 00AE           ; }
 00AE           ; 
 00AE           ; void CurReturn(void)
 00AE           ; {
 00AE                   .dbline 90
 00AE           ;        WriteCmd(CUR_RET);     
 00AE 03E0              ldi R16,3
 00B0 CFDF              xcall _WriteCmd
 00B2                   .dbline -2
 00B2           L17:
 00B2                   .dbline 0 ; func end
 00B2 0895              ret
 00B4                   .dbend
 00B4                   .dbfunc e SetInputMode _SetInputMode fV
 00B4           ;        setData -> R20
 00B4           ;       textMove -> R22
 00B4           ;         curDir -> R10
                        .even
 00B4           _SetInputMode::
 00B4 0E940000          xcall push_gset3
 00B8 622F              mov R22,R18
 00BA A02E              mov R10,R16
 00BC                   .dbline -1
 00BC                   .dbline 94
 00BC           ; }
 00BC           ; 
 00BC           ; void SetInputMode(byte curDir, byte textMove)
 00BC           ; {
 00BC                   .dbline 95
 00BC           ;     byte setData = 0x04;
 00BC 44E0              ldi R20,4
 00BE                   .dbline 96
 00BE           ;       if (curDir == 1) //光标右移
 00BE 8A2D              mov R24,R10
 00C0 8130              cpi R24,1
 00C2 11F4              brne L19
 00C4                   .dbline 97
 00C4           ;                  setData |= 0x02;
 00C4 4260              ori R20,2
 00C6 01C0              xjmp L20
 00C8           L19:
 00C8                   .dbline 99
 00C8           ;       else
 00C8           ;           setData &= ~0x02;
 00C8 4D7F              andi R20,253
 00CA           L20:
 00CA                   .dbline 101
 00CA           ;                 
 00CA           ;       if (textMove == 1)      //文字移动
 00CA 6130              cpi R22,1
 00CC 11F4              brne L21
 00CE                   .dbline 102
 00CE           ;                  setData |= 0x01;
 00CE 4160              ori R20,1
 00D0 01C0              xjmp L22
 00D2           L21:
 00D2                   .dbline 104
 00D2           ;       else                 //文字不移动
 00D2           ;                  setData &= ~0x01;    
 00D2 4E7F              andi R20,254
 00D4           L22:
 00D4                   .dbline 105
 00D4           ;       WriteCmd(setData);                         
 00D4 042F              mov R16,R20
 00D6 BCDF              xcall _WriteCmd
 00D8                   .dbline -2
 00D8           L18:
 00D8 0E940000          xcall pop_gset3
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbsym r setData 20 c
 00DE                   .dbsym r textMove 22 c
 00DE                   .dbsym r curDir 10 c
 00DE                   .dbend
 00DE                   .dbfunc e SetDisMode _SetDisMode fV
 00DE           ;        setData -> R20
 00DE           ;       curFlash -> y+6
 00DE           ;         curDis -> R22
 00DE           ;         allDis -> R10
                        .even
 00DE           _SetDisMode::
 00DE 0E940000          xcall push_gset3
 00E2 622F              mov R22,R18
 00E4 A02E              mov R10,R16
 00E6                   .dbline -1
 00E6                   .dbline 109
 00E6           ; }
 00E6           ; 
 00E6           ; void SetDisMode(byte allDis, byte curDis, byte curFlash)
 00E6           ; {
 00E6                   .dbline 110

⌨️ 快捷键说明

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