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

📄 ds12887.lis

📁 高精度时钟芯片。avr驱动
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -