📄 yj1602.lis
字号:
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 46
00BC .dbline 48
00BC 4423 tst R20
00BE 11F4 brne L18
00C0 .dbline 49
00C0 9498 cbi 0x12,4
00C2 01C0 xjmp L19
00C4 L18:
00C4 .dbline 51
00C4 949A sbi 0x12,4
00C6 L19:
00C6 .dbline 53
00C6 959A sbi 0x12,5
00C8 .dbline 54
00C8 969A sbi 0x12,6
00CA .dbline 55
00CA 2224 clr R2
00CC 27BA out 0x17,R2
00CE .dbline 56
00CE 46B3 in R20,0x16
00D0 .dbline 57
00D0 01E0 ldi R16,1
00D2 10E0 ldi R17,0
00D4 ADDF xcall _Delayms
00D6 .dbline 58
00D6 9698 cbi 0x12,6
00D8 .dbline 59
00D8 87B3 in R24,0x17
00DA 8F6F ori R24,255
00DC 87BB out 0x17,R24
00DE .dbline 60
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 70
00EE .dbline 71
00EE 6623 tst R22
00F0 11F4 brne L21
00F2 .dbline 72
00F2 9498 cbi 0x12,4
00F4 01C0 xjmp L22
00F6 L21:
00F6 .dbline 74
00F6 949A sbi 0x12,4
00F8 L22:
00F8 .dbline 76
00F8 9598 cbi 0x12,5
00FA .dbline 77
00FA 969A sbi 0x12,6
00FC .dbline 78
00FC 48BB out 0x18,R20
00FE .dbline 79
00FE 01E0 ldi R16,1
0100 10E0 ldi R17,0
0102 96DF xcall _Delayms
0104 .dbline 80
0104 9698 cbi 0x12,6
0106 .dbline -2
0106 .dbline 81
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 89
0112 ; 参 数: ptString--字符串指针
0112 ; 返回值 : 无
0112 ; /********************************************/
0112 ; void LCD1602_sendstr(uchar *ptString)
0112 ; {
0112 05C0 xjmp L25
0114 L24:
0114 .dbline 91
0114 .dbline 92
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 93
011E L25:
011E .dbline 90
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 94
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 102
012C ; /*******************************************
012C ; 函数名称: LCD1602_clear
012C ; 功 能: 1602液晶清屏
012C ; 参 数: 无
012C ; 返回值 : 无
012C ; /********************************************/
012C ; void LCD1602_clear(void)
012C ; {
012C .dbline 103
012C ; LCD1602_sendbyte(iCmd,LCDa_CLS);
012C 21E0 ldi R18,1
012E 0027 clr R16
0130 DADF xcall _LCD1602_sendbyte
0132 .dbline 104
0132 ; Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
0132 02E0 ldi R16,2
0134 10E0 ldi R17,0
0136 .dbline -2
0136 .dbline 105
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 113
013C ; /*******************************************
013C ; 函数名称: LCD1602_readBF
013C ; 功 能: 1602液晶清屏
013C ; 参 数: 无
013C ; 返回值 : busy--为1时忙,为0时可以接收指令
013C ; /********************************************/
013C ; uchar LCD1602_readBF(void)
013C ; {
013C .dbline 115
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 116
0142 ; if(busy&0x80) //忙
0142 07FF sbrs R16,7
0144 02C0 rjmp L29
0146 .dbline 117
0146 ; busy=1;
0146 41E0 ldi R20,1
0148 01C0 xjmp L30
014A L29:
014A .dbline 119
014A ; else //不忙,可以写入
014A ; busy=0;
014A 4427 clr R20
014C L30:
014C .dbline 120
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 130
015C ; }
015C ; /*******************************************
015C ; 函数名称: LCD1602_gotoXY
015C ; 功 能: 移动到指定位置
015C ; 参 数: Row--指定的行
015C ; Col--指定的列
015C ; 返回值 : 无
015C ; /********************************************/
015C ; void LCD1602_gotoXY(uchar Row, uchar Col)
015C ; {
015C .dbline 131
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 132
0168 ; {
0168 L35:
0168 .dbline 134
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 134
0170 04C0 xjmp L33
0172 L32:
0172 .dbline 136
0172 242F mov R18,R20
0174 2058 subi R18,128 ; addi 128
0176 0027 clr R16
0178 B6DF xcall _LCD1602_sendbyte
017A .dbline 136
017A L33:
017A .dbline -2
017A .dbline 138
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::
0180 .dbline -1
0180 .dbline 146
0180 ; /*******************************************
0180 ; 函数名称: LCD1602_initial
0180 ; 功 能: 1602液晶初始化
0180 ; 参 数: 无
0180 ; 返回值 : 无
0180 ; /********************************************/
0180 ; void LCD1602_initial(void)
0180 ; {
0180 .dbline 147
0180 ; Delayms(100); // 等待内部复位
0180 04E6 ldi R16,100
0182 10E0 ldi R17,0
0184 55DF xcall _Delayms
0186 .dbline 148
0186 ; LCD1602_portini(); //端口初始化
0186 90DF xcall _LCD1602_portini
0188 .dbline 150
0188 ;
0188 ; LCD1602_sendbyte(iCmd, LCDa_FUNCTION); // 功能、模式设定
0188 28E3 ldi R18,56
018A 0027 clr R16
018C ACDF xcall _LCD1602_sendbyte
018E L37:
018E .dbline 151
018E L38:
018E .dbline 151
018E ; while(LCD1602_readBF());
018E D4DF xcall _LCD1602_readBF
0190 0023 tst R16
0192 E9F7 brne L37
0194 .dbline 152
0194 ; LCD1602_sendbyte(iCmd, LCDa_ON); //打开显示
0194 2CE0 ldi R18,12
0196 0027 clr R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -