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

📄 yj1602.lis

📁 AVR单片机开发版资料测试程序里的源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -