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

📄 yj12864.lis

📁 AVR单片机开发版资料测试程序里的源程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 010E                   .dbend
 010E                   .dbfunc e LCD12864_sendstr _LCD12864_sendstr fV
 010E           ;       ptString -> R20,R21
                        .even
 010E           _LCD12864_sendstr::
 010E 0E940000          xcall push_gset1
 0112 A801              movw R20,R16
 0114                   .dbline -1
 0114                   .dbline 143
 0114           ; /*******************************************
 0114           ; 函数名称: LCD12864_sendstr
 0114           ; 功    能: 向12864液晶写入一个字符串
 0114           ; 参    数: ptString--字符串指针
 0114           ; 返回值  : 无
 0114           ; /********************************************/
 0114           ; void LCD12864_sendstr(uchar *ptString)
 0114           ; {
 0114 05C0              xjmp L25
 0116           L24:
 0116                   .dbline 145
 0116                   .dbline 146
 0116 FA01              movw R30,R20
 0118 2191              ld R18,Z+
 011A AF01              movw R20,R30
 011C 01E0              ldi R16,1
 011E E4DF              xcall _LCD12864_sendbyte
 0120                   .dbline 147
 0120           L25:
 0120                   .dbline 144
 0120           ;       while((*ptString)!='\0')                 //字符串未结束一直写
 0120 FA01              movw R30,R20
 0122 2080              ldd R2,z+0
 0124 2220              tst R2
 0126 B9F7              brne L24
 0128                   .dbline -2
 0128                   .dbline 148
 0128           ;       {
 0128           ;               LCD12864_sendbyte(iDat, *ptString++);
 0128           ;       }
 0128           ; }
 0128           L23:
 0128 0E940000          xcall pop_gset1
 012C                   .dbline 0 ; func end
 012C 0895              ret
 012E                   .dbsym r ptString 20 pc
 012E                   .dbend
 012E                   .dbfunc e LCD12864_clear _LCD12864_clear fV
                        .even
 012E           _LCD12864_clear::
 012E                   .dbline -1
 012E                   .dbline 156
 012E           ; /*******************************************
 012E           ; 函数名称: LCD12864_clear
 012E           ; 功    能: 12864液晶清屏
 012E           ; 参    数: 无
 012E           ; 返回值  : 无
 012E           ; /********************************************/
 012E           ; void LCD12864_clear(void)
 012E           ; {
 012E                   .dbline 157
 012E           ;       LCD12864_sendbyte(iCmd,LCDb_CLS);
 012E 21E0              ldi R18,1
 0130 0027              clr R16
 0132 DADF              xcall _LCD12864_sendbyte
 0134                   .dbline 158
 0134           ;       Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
 0134 02E0              ldi R16,2
 0136 10E0              ldi R17,0
 0138                   .dbline -2
 0138                   .dbline 159
 0138           ; }
 0138           L27:
 0138                   .dbline 0 ; func end
 0138 7BCF              xjmp _Delayms
 013A                   .dbend
 013A                   .dbfunc e LCD12864_readBF _LCD12864_readBF fc
 013A           ;           busy -> R20
                        .even
 013A           _LCD12864_readBF::
 013A 0E940000          xcall push_gset1
 013E                   .dbline -1
 013E                   .dbline 167
 013E           ; /*******************************************
 013E           ; 函数名称: LCD12864_readBF
 013E           ; 功    能: 12864液晶清屏
 013E           ; 参    数: 无
 013E           ; 返回值  : busy--为1时忙,为0时可以接收指令
 013E           ; /********************************************/
 013E           ; uchar LCD12864_readBF(void)
 013E           ; {       
 013E                   .dbline 169
 013E           ;       uchar busy;
 013E           ;       busy=LCD12864_readbyte(iCmd);           //读回BF标志和地址
 013E 0027              clr R16
 0140 BBDF              xcall _LCD12864_readbyte
 0142 402F              mov R20,R16
 0144                   .dbline 170
 0144           ;       if(busy&0x80)                                           //如果忙,返回忙状态
 0144 07FF              sbrs R16,7
 0146 02C0              rjmp L29
 0148                   .dbline 171
 0148           ;               busy=1;
 0148 41E0              ldi R20,1
 014A 01C0              xjmp L30
 014C           L29:
 014C                   .dbline 173
 014C           ;       else                                                            //不忙,可以写入
 014C           ;               busy=0;
 014C 4427              clr R20
 014E           L30:
 014E                   .dbline 174
 014E           ;       return busy;
 014E 042F              mov R16,R20
 0150                   .dbline -2
 0150           L28:
 0150 0E940000          xcall pop_gset1
 0154                   .dbline 0 ; func end
 0154 0895              ret
 0156                   .dbsym r busy 20 c
 0156                   .dbend
 0156                   .dbfunc e LCD12864_gotoXY _LCD12864_gotoXY fV
 0156           ;            Col -> R20
 0156           ;            Row -> R22
                        .even
 0156           _LCD12864_gotoXY::
 0156 0E940000          xcall push_gset2
 015A 422F              mov R20,R18
 015C 602F              mov R22,R16
 015E                   .dbline -1
 015E                   .dbline 184
 015E           ; }
 015E           ; /*******************************************
 015E           ; 函数名称: LCD12864_gotoXY
 015E           ; 功    能: 移动到指定位置
 015E           ; 参    数: Row--指定的行
 015E           ;                 Col--指定的列
 015E           ; 返回值  : 无
 015E           ; /********************************************/
 015E           ; void LCD12864_gotoXY(uchar Row, uchar Col)
 015E           ; {     
 015E                   .dbline 185
 015E           ;       switch (Row)              //选择行
 015E 7727              clr R23
 0160 6230              cpi R22,2
 0162 E0E0              ldi R30,0
 0164 7E07              cpc R23,R30
 0166 49F0              breq L35
 0168 6330              cpi R22,3
 016A E0E0              ldi R30,0
 016C 7E07              cpc R23,R30
 016E 51F0              breq L36
 0170 6430              cpi R22,4
 0172 E0E0              ldi R30,0
 0174 7E07              cpc R23,R30
 0176 59F0              breq L37
 0178 0FC0              xjmp L32
 017A           X0:
 017A                   .dbline 186
 017A           ;       {
 017A           L35:
 017A                   .dbline 188
 017A           ;               case 2:
 017A           ;                       LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break;  //写入第2行的指定列
 017A 242F              mov R18,R20
 017C 2057              subi R18,112    ; addi 144
 017E 0027              clr R16
 0180 B3DF              xcall _LCD12864_sendbyte
 0182                   .dbline 188
 0182 0EC0              xjmp L33
 0184           L36:
 0184                   .dbline 190
 0184           ;               case 3:
 0184           ;                       LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break;  //写入第3行的指定列
 0184 242F              mov R18,R20
 0186 2857              subi R18,120    ; addi 136
 0188 0027              clr R16
 018A AEDF              xcall _LCD12864_sendbyte
 018C                   .dbline 190
 018C 09C0              xjmp L33
 018E           L37:
 018E                   .dbline 192
 018E           ;               case 4:
 018E           ;                       LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break;  //写入第4行的指定列     
 018E 242F              mov R18,R20
 0190 2856              subi R18,104    ; addi 152
 0192 0027              clr R16
 0194 A9DF              xcall _LCD12864_sendbyte
 0196                   .dbline 192
 0196 04C0              xjmp L33
 0198           L32:
 0198                   .dbline 194
 0198 242F              mov R18,R20
 019A 2058              subi R18,128    ; addi 128
 019C 0027              clr R16
 019E A4DF              xcall _LCD12864_sendbyte
 01A0                   .dbline 194
 01A0           L33:
 01A0                   .dbline -2
 01A0                   .dbline 196
 01A0           ;               default:
 01A0           ;                       LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break;  //写入第1行的指定列     
 01A0           ;       }
 01A0           ; }
 01A0           L31:
 01A0 0E940000          xcall pop_gset2
 01A4                   .dbline 0 ; func end
 01A4 0895              ret
 01A6                   .dbsym r Col 20 c
 01A6                   .dbsym r Row 22 c
 01A6                   .dbend
 01A6                   .dbfunc e LCD12864_initial _LCD12864_initial fV
                        .even
 01A6           _LCD12864_initial::
 01A6                   .dbline -1
 01A6                   .dbline 204
 01A6           ; /*******************************************
 01A6           ; 函数名称: LCD12864_initial
 01A6           ; 功    能: 12864液晶初始化
 01A6           ; 参    数: 无
 01A6           ; 返回值  : 无
 01A6           ; /********************************************/
 01A6           ; void LCD12864_initial(void)
 01A6           ; {
 01A6                   .dbline 205
 01A6           ;       Delayms(100);                           // 等待内部复位
 01A6 04E6              ldi R16,100
 01A8 10E0              ldi R17,0
 01AA 42DF              xcall _Delayms
 01AC                   .dbline 206
 01AC           ;       LCD12864_portini();                     //端口初始化
 01AC 7DDF              xcall _LCD12864_portini
 01AE                   .dbline 208
 01AE           ;       
 01AE           ;       LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
 01AE 28E3              ldi R18,56
 01B0 0027              clr R16
 01B2 9ADF              xcall _LCD12864_sendbyte
 01B4           L39:
 01B4                   .dbline 209
 01B4           L40:
 01B4                   .dbline 209
 01B4           ;       while(LCD12864_readBF());
 01B4 C2DF              xcall _LCD12864_readBF
 01B6 0023              tst R16
 01B8 E9F7              brne L39
 01BA                   .dbline 210
 01BA           ;       LCD12864_sendbyte(iCmd, LCDb_ON);               //打开显示
 01BA 2CE0              ldi R18,12
 01BC 0027              clr R16
 01BE 94DF              xcall _LCD12864_sendbyte
 01C0           L42:
 01C0                   .dbline 211
 01C0           L43:
 01C0                   .dbline 211
 01C0           ;       while(LCD12864_readBF());
 01C0 BCDF              xcall _LCD12864_readBF
 01C2 0023              tst R16
 01C4 E9F7              brne L42
 01C6                   .dbline 212
 01C6           ;       LCD12864_clear();                                               //清屏
 01C6 B3DF              xcall _LCD12864_clear
 01C8           L45:
 01C8                   .dbline 213
 01C8           L46:
 01C8                   .dbline 213
 01C8           ;       while(LCD12864_readBF());
 01C8 B8DF              xcall _LCD12864_readBF
 01CA 0023              tst R16
 01CC E9F7              brne L45
 01CE                   .dbline 214
 01CE           ;       LCD12864_sendbyte(iCmd, LCDb_ENTRY);    // 输入模式设定         
 01CE 26E0              ldi R18,6
 01D0 0027              clr R16
 01D2                   .dbline -2
 01D2                   .dbline 215
 01D2           ; }
 01D2           L38:
 01D2                   .dbline 0 ; func end
 01D2 8ACF              xjmp _LCD12864_sendbyte
 01D4                   .dbend
 01D4                   .dbfunc e LCD12864_opGDRAM _LCD12864_opGDRAM fV
 01D4           ;              i -> R20
 01D4           ;              x -> R22,R23
 01D4           ;              j -> R10
 01D4           ;        ptGDRAM -> R12,R13
                        .even
 01D4           _LCD12864_opGDRAM::
 01D4 0E940000          xcall push_gset4
 01D8 6801              movw R12,R16
 01DA                   .dbline -1
 01DA                   .dbline 223
 01DA           ; /*******************************************
 01DA           ; 函数名称: LCD12864_opGDRAM
 01DA           ; 功    能: 向GDRAM写入数据,并显示(完成绘图功能)
 01DA           ; 参    数: ptGDRAM--GDRAM数据指针
 01DA           ; 返回值  : 无
 01DA           ; /********************************************/
 01DA           ; void LCD12864_opGDRAM(const uchar *ptGDRAM)
 01DA           ; {
 01DA                   .dbline 225
 01DA           ;       uchar i,j;
 01DA           ;       uint x=0;
 01DA 6627              clr R22
 01DC 7727              clr R23
 01DE           L49:
 01DE                   .dbline 226
 01DE           L50:
 01DE                   .dbline 226
 01DE           ;       while(LCD12864_readBF());         //读忙标志
 01DE ADDF              xcall _LCD12864_readBF
 01E0 0023              tst R16

⌨️ 快捷键说明

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