📄 lm1602.lis
字号:
.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 + -