📄 ds12887.lis
字号:
.even
00A8 _LCD1602_portini::
00A8 .dbline -1
00A8 .dbline 61
00A8 .dbline 62
00A8 81B3 in R24,0x11
00AA 8067 ori R24,112
00AC 81BB out 0x11,R24
00AE .dbline 63
00AE 8AB3 in R24,0x1a
00B0 8F6F ori R24,255
00B2 8ABB out 0x1a,R24
00B4 .dbline -2
00B4 .dbline 64
00B4 L16:
00B4 .dbline 0 ; func end
00B4 0895 ret
00B6 .dbend
00B6 .dbfunc e LCD1602_readbyte _LCD1602_readbyte fc
00B6 ; dByte -> R20
00B6 ; DatCmd -> R20
.even
00B6 _LCD1602_readbyte::
00B6 0E940000 xcall push_gset1
00BA 402F mov R20,R16
00BC .dbline -1
00BC .dbline 72
00BC .dbline 74
00BC 4423 tst R20
00BE 11F4 brne L18
00C0 .dbline 75
00C0 9598 cbi 0x12,5
00C2 01C0 xjmp L19
00C4 L18:
00C4 .dbline 77
00C4 959A sbi 0x12,5
00C6 L19:
00C6 .dbline 79
00C6 969A sbi 0x12,6
00C8 .dbline 80
00C8 949A sbi 0x12,4
00CA .dbline 81
00CA 2224 clr R2
00CC 2ABA out 0x1a,R2
00CE .dbline 82
00CE 49B3 in R20,0x19
00D0 .dbline 83
00D0 01E0 ldi R16,1
00D2 10E0 ldi R17,0
00D4 ADDF xcall _Delayms
00D6 .dbline 84
00D6 9498 cbi 0x12,4
00D8 .dbline 85
00D8 8AB3 in R24,0x1a
00DA 8F6F ori R24,255
00DC 8ABB out 0x1a,R24
00DE .dbline 86
00DE 042F mov R16,R20
00E0 .dbline -2
00E0 L17:
00E0 0E940000 xcall pop_gset1
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbsym r dByte 20 c
00E6 .dbsym r DatCmd 20 c
00E6 .dbend
00E6 .dbfunc e LCD1602_sendbyte _LCD1602_sendbyte fV
00E6 ; dByte -> R20
00E6 ; DatCmd -> R22
.even
00E6 _LCD1602_sendbyte::
00E6 0E940000 xcall push_gset2
00EA 422F mov R20,R18
00EC 602F mov R22,R16
00EE .dbline -1
00EE .dbline 96
00EE ; 返回值 : 无
00EE ; /********************************************/
00EE ; void LCD1602_sendbyte(uchar DatCmd, uchar dByte)
00EE ; {
00EE .dbline 97
00EE ; if (DatCmd == iCmd) //指令操作
00EE 6623 tst R22
00F0 11F4 brne L21
00F2 .dbline 98
00F2 ; LCDa_CLR_RS;
00F2 9598 cbi 0x12,5
00F4 01C0 xjmp L22
00F6 L21:
00F6 .dbline 100
00F6 ; else
00F6 ; LCDa_SET_RS; //数据操作
00F6 959A sbi 0x12,5
00F8 L22:
00F8 .dbline 102
00F8 ;
00F8 ; LCDa_CLR_RW; //写操作操作
00F8 9698 cbi 0x12,6
00FA .dbline 103
00FA ; LCDa_SET_E;
00FA 949A sbi 0x12,4
00FC .dbline 104
00FC ; LCDa_DO = dByte; //写入数据
00FC 4BBB out 0x1b,R20
00FE .dbline 105
00FE ; Delayms(1);
00FE 01E0 ldi R16,1
0100 10E0 ldi R17,0
0102 96DF xcall _Delayms
0104 .dbline 106
0104 ; LCDa_CLR_E;
0104 9498 cbi 0x12,4
0106 .dbline -2
0106 .dbline 107
0106 ; }
0106 L20:
0106 0E940000 xcall pop_gset2
010A .dbline 0 ; func end
010A 0895 ret
010C .dbsym r dByte 20 c
010C .dbsym r DatCmd 22 c
010C .dbend
010C .dbfunc e LCD1602_sendstr _LCD1602_sendstr fV
010C ; ptString -> R20,R21
.even
010C _LCD1602_sendstr::
010C 0E940000 xcall push_gset1
0110 A801 movw R20,R16
0112 .dbline -1
0112 .dbline 115
0112 ; /*******************************************
0112 ; 函数名称: LCD1602_sendstr
0112 ; 功 能: 向1602液晶写入一个字符串
0112 ; 参 数: ptString--字符串指针
0112 ; 返回值 : 无
0112 ; /********************************************/
0112 ; void LCD1602_sendstr(uchar *ptString)
0112 ; {
0112 05C0 xjmp L25
0114 L24:
0114 .dbline 117
0114 .dbline 118
0114 FA01 movw R30,R20
0116 2191 ld R18,Z+
0118 AF01 movw R20,R30
011A 01E0 ldi R16,1
011C E4DF xcall _LCD1602_sendbyte
011E .dbline 119
011E L25:
011E .dbline 116
011E ; while((*ptString)!='\0') //字符串未结束就一直写
011E FA01 movw R30,R20
0120 2080 ldd R2,z+0
0122 2220 tst R2
0124 B9F7 brne L24
0126 .dbline -2
0126 .dbline 120
0126 ; {
0126 ; LCD1602_sendbyte(iDat, *ptString++);
0126 ; }
0126 ; }
0126 L23:
0126 0E940000 xcall pop_gset1
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r ptString 20 pc
012C .dbend
012C .dbfunc e LCD1602_clear _LCD1602_clear fV
.even
012C _LCD1602_clear::
012C .dbline -1
012C .dbline 128
012C ; /*******************************************
012C ; 函数名称: LCD1602_clear
012C ; 功 能: 1602液晶清屏
012C ; 参 数: 无
012C ; 返回值 : 无
012C ; /********************************************/
012C ; void LCD1602_clear(void)
012C ; {
012C .dbline 129
012C ; LCD1602_sendbyte(iCmd,LCDa_CLS);//写入清屏指令
012C 21E0 ldi R18,1
012E 0027 clr R16
0130 DADF xcall _LCD1602_sendbyte
0132 .dbline 130
0132 ; Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
0132 02E0 ldi R16,2
0134 10E0 ldi R17,0
0136 .dbline -2
0136 .dbline 131
0136 ; }
0136 L27:
0136 .dbline 0 ; func end
0136 7CCF xjmp _Delayms
0138 .dbend
0138 .dbfunc e LCD1602_readBF _LCD1602_readBF fc
0138 ; busy -> R20
.even
0138 _LCD1602_readBF::
0138 0E940000 xcall push_gset1
013C .dbline -1
013C .dbline 139
013C ; /*******************************************
013C ; 函数名称: LCD1602_readBF
013C ; 功 能: 1602液晶清屏
013C ; 参 数: 无
013C ; 返回值 : busy--为1时是忙状态,为0时可以接收指令
013C ; /********************************************/
013C ; uchar LCD1602_readBF(void)
013C ; {
013C .dbline 141
013C ; uchar busy;
013C ; busy=LCD1602_readbyte(iCmd); //读回BF标志(忙标志)和地址
013C 0027 clr R16
013E BBDF xcall _LCD1602_readbyte
0140 402F mov R20,R16
0142 .dbline 142
0142 ; if(busy&0x80) //如果忙返回正在忙的状态
0142 07FF sbrs R16,7
0144 02C0 rjmp L29
0146 .dbline 143
0146 ; busy=1;
0146 41E0 ldi R20,1
0148 01C0 xjmp L30
014A L29:
014A .dbline 145
014A ; else //如果不忙,可以写入
014A ; busy=0;
014A 4427 clr R20
014C L30:
014C .dbline 146
014C ; return busy;
014C 042F mov R16,R20
014E .dbline -2
014E L28:
014E 0E940000 xcall pop_gset1
0152 .dbline 0 ; func end
0152 0895 ret
0154 .dbsym r busy 20 c
0154 .dbend
0154 .dbfunc e LCD1602_gotoXY _LCD1602_gotoXY fV
0154 ; Col -> R20
0154 ; Row -> R22
.even
0154 _LCD1602_gotoXY::
0154 0E940000 xcall push_gset2
0158 422F mov R20,R18
015A 602F mov R22,R16
015C .dbline -1
015C .dbline 156
015C ; }
015C ; /*******************************************
015C ; 函数名称: LCD1602_gotoXY
015C ; 功 能: 移动到指定位置
015C ; 参 数: Row--指定的行
015C ; Col--指定的列
015C ; 返回值 : 无
015C ; /********************************************/
015C ; void LCD1602_gotoXY(uchar Row, uchar Col)
015C ; {
015C .dbline 157
015C ; switch (Row) //选择行
015C 7727 clr R23
015E 6230 cpi R22,2
0160 E0E0 ldi R30,0
0162 7E07 cpc R23,R30
0164 09F0 breq L35
0166 05C0 xjmp L32
0168 X0:
0168 .dbline 158
0168 ; {
0168 L35:
0168 .dbline 160
0168 ; case 2:
0168 ; LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break; //写入第2行的指定列
0168 242F mov R18,R20
016A 2054 subi R18,64 ; addi 192
016C 0027 clr R16
016E BBDF xcall _LCD1602_sendbyte
0170 .dbline 160
0170 04C0 xjmp L33
0172 L32:
0172 .dbline 162
0172 242F mov R18,R20
0174 2058 subi R18,128 ; addi 128
0176 0027 clr R16
0178 B6DF xcall _LCD1602_sendbyte
017A .dbline 162
017A L33:
017A .dbline -2
017A .dbline 164
017A ; default:
017A ; LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break; //写入第1行的指定列
017A ; }
017A ; }
017A L31:
017A 0E940000 xcall pop_gset2
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbsym r Col 20 c
0180 .dbsym r Row 22 c
0180 .dbend
0180 .dbfunc e LCD1602_initial _LCD1602_initial fV
.even
0180 _LCD1602_initial::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -