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

📄 dm12864m串行.lis

📁 EEPROM读写程序: 先向EEPROM写入一幅图片数据
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .even
 00AA           _LCMWriteData::
 00AA 0E940000          xcall push_gset2
 00AE 402F              mov R20,R16
 00B0                   .dbline -1
 00B0                   .dbline 106
 00B0           ;        //delay(15);
 00B0           ; }
 00B0           ; 
 00B0           ; /*-----------------------写入一字节数据--------------------------*/
 00B0           ; void LCMWriteData(char DisplayData)
 00B0           ; {
 00B0                   .dbline 108
 00B0           ;        uchar a,b;
 00B0           ;        a=DisplayData&0xf0;
 00B0 642F              mov R22,R20
 00B2 607F              andi R22,240
 00B4                   .dbline 109
 00B4           ;        b=(DisplayData<<4)&0xf0;
 00B4 842F              mov R24,R20
 00B6 8F70              andi R24,#0x0F
 00B8 8295              swap R24
 00BA 807F              andi R24,240
 00BC 482F              mov R20,R24
 00BE                   .dbline 110
 00BE           ;        LCDDDR_OUT;
 00BE 8AB3              in R24,0x1a
 00C0 8F61              ori R24,31
 00C2 8ABB              out 0x1a,R24
 00C4                   .dbline 110
 00C4                   .dbline 111
 00C4           ;        LCD_RS_H ;
 00C4 D89A              sbi 0x1b,0
 00C6                   .dbline 112
 00C6           ;        LCD_EN_L ;
 00C6 DA98              cbi 0x1b,2
 00C8                   .dbline 113
 00C8           ;        dm12864_inputbyte(0xfa);
 00C8 0AEF              ldi R16,250
 00CA 9ADF              xcall _dm12864_inputbyte
 00CC                   .dbline 114
 00CC           ;        dm12864_inputbyte(a);
 00CC 062F              mov R16,R22
 00CE 98DF              xcall _dm12864_inputbyte
 00D0                   .dbline 115
 00D0           ;        dm12864_inputbyte(b);
 00D0 042F              mov R16,R20
 00D2 96DF              xcall _dm12864_inputbyte
 00D4                   .dbline 116
 00D4           ;        LCD_EN_H ;
 00D4 DA9A              sbi 0x1b,2
 00D6                   .dbline 117
 00D6           ;        LCD_RS_L ;
 00D6 D898              cbi 0x1b,0
 00D8                   .dbline -2
 00D8           L20:
 00D8 0E940000          xcall pop_gset2
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbsym r b 20 c
 00DE                   .dbsym r a 22 c
 00DE                   .dbsym r DisplayData 20 c
 00DE                   .dbend
 00DE                   .dbfunc e LCMSetXYAddress _LCMSetXYAddress fV
 00DE           ;     DisplayRow -> R22
 00DE           ;     DisplayCol -> R20
                        .even
 00DE           _LCMSetXYAddress::
 00DE 0E940000          xcall push_gset2
 00E2 622F              mov R22,R18
 00E4 402F              mov R20,R16
 00E6                   .dbline -1
 00E6                   .dbline 123
 00E6           ;        //delay(15);
 00E6           ; }
 00E6           ; 
 00E6           ; /*------------设置显示位置DisplayCol(1~8),DisplayRow(1~4)---------*/
 00E6           ; void LCMSetXYAddress(char DisplayCol,char DisplayRow)
 00E6           ; {
 00E6                   .dbline 124
 00E6           ;     switch(DisplayRow)
 00E6 7727              clr R23
 00E8 6130              cpi R22,1
 00EA E0E0              ldi R30,0
 00EC 7E07              cpc R23,R30
 00EE 69F0              breq L25
 00F0 6230              cpi R22,2
 00F2 E0E0              ldi R30,0
 00F4 7E07              cpc R23,R30
 00F6 69F0              breq L26
 00F8 6330              cpi R22,3
 00FA E0E0              ldi R30,0
 00FC 7E07              cpc R23,R30
 00FE 69F0              breq L27
 0100 6430              cpi R22,4
 0102 E0E0              ldi R30,0
 0104 7E07              cpc R23,R30
 0106 69F0              breq L28
 0108 0FC0              xjmp L22
 010A           X0:
 010A                   .dbline 125
 010A           ;     {
 010A           L25:
 010A                   .dbline 126
 010A           ;         case 1:LCMWriteCommand(0x7f + DisplayCol);
 010A 042F              mov R16,R20
 010C 0158              subi R16,129    ; addi 127
 010E B3DF              xcall _LCMWriteCommand
 0110                   .dbline 127
 0110           ;         break;
 0110 0BC0              xjmp L23
 0112           L26:
 0112                   .dbline 128
 0112           ;         case 2:LCMWriteCommand(0x8f + DisplayCol);
 0112 042F              mov R16,R20
 0114 0157              subi R16,113    ; addi 143
 0116 AFDF              xcall _LCMWriteCommand
 0118                   .dbline 129
 0118           ;         break;
 0118 07C0              xjmp L23
 011A           L27:
 011A                   .dbline 130
 011A           ;         case 3:LCMWriteCommand(0x87 + DisplayCol);
 011A 042F              mov R16,R20
 011C 0957              subi R16,121    ; addi 135
 011E ABDF              xcall _LCMWriteCommand
 0120                   .dbline 131
 0120           ;         break;
 0120 03C0              xjmp L23
 0122           L28:
 0122                   .dbline 132
 0122           ;         case 4:LCMWriteCommand(0x97 + DisplayCol);
 0122 042F              mov R16,R20
 0124 0956              subi R16,105    ; addi 151
 0126 A7DF              xcall _LCMWriteCommand
 0128                   .dbline 133
 0128           ;           break;
 0128           L22:
 0128           L23:
 0128                   .dbline -2
 0128           L21:
 0128 0E940000          xcall pop_gset2
 012C                   .dbline 0 ; func end
 012C 0895              ret
 012E                   .dbsym r DisplayRow 22 c
 012E                   .dbsym r DisplayCol 20 c
 012E                   .dbend
 012E                   .dbfunc e LCMDisplayASC _LCMDisplayASC fV
 012E           ;   ASCCharacter -> y+4
 012E           ;     DisplayRow -> R22
 012E           ;     DisplayCol -> R20
                        .even
 012E           _LCMDisplayASC::
 012E 0E940000          xcall push_gset2
 0132 622F              mov R22,R18
 0134 402F              mov R20,R16
 0136                   .dbline -1
 0136                   .dbline 139
 0136           ;     }
 0136           ; }
 0136           ; 
 0136           ; /*-------------------在指定位置显示一半角字符-----------------------*/
 0136           ; void LCMDisplayASC(char DisplayCol,char DisplayRow,char ASCCharacter)
 0136           ; {
 0136                   .dbline 140
 0136           ;      LCMSetXYAddress(DisplayCol,DisplayRow);
 0136 262F              mov R18,R22
 0138 042F              mov R16,R20
 013A D1DF              xcall _LCMSetXYAddress
 013C                   .dbline 141
 013C           ;      LCMWriteData(ASCCharacter);
 013C 0C81              ldd R16,y+4
 013E B5DF              xcall _LCMWriteData
 0140                   .dbline -2
 0140           L29:
 0140 0E940000          xcall pop_gset2
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbsym l ASCCharacter 4 c
 0146                   .dbsym r DisplayRow 22 c
 0146                   .dbsym r DisplayCol 20 c
 0146                   .dbend
 0146                   .dbfunc e LCMDisplayString _LCMDisplayString fV
 0146           ;       LCD_temp -> R20
 0146           ;  DisplayString -> R22,R23
 0146           ;     DisplayRow -> R10
 0146           ;     DisplayCol -> R20
                        .even
 0146           _LCMDisplayString::
 0146 0E940000          xcall push_gset3
 014A A22E              mov R10,R18
 014C 402F              mov R20,R16
 014E 6E81              ldd R22,y+6
 0150 7F81              ldd R23,y+7
 0152                   .dbline -1
 0152                   .dbline 146
 0152           ; }
 0152           ; 
 0152           ; /*----------------------在指定位置显示字符串-------------------------*/
 0152           ; void LCMDisplayString(char DisplayCol,char DisplayRow,char *DisplayString)
 0152           ; { 
 0152                   .dbline 148
 0152           ;     char LCD_temp; 
 0152           ;     LCMSetXYAddress(DisplayCol,DisplayRow);
 0152 2A2D              mov R18,R10
 0154 042F              mov R16,R20
 0156 C3DF              xcall _LCMSetXYAddress
 0158                   .dbline 149
 0158           ;     LCD_temp=*DisplayString;
 0158 FB01              movw R30,R22
 015A 4081              ldd R20,z+0
 015C 07C0              xjmp L32
 015E           L31:
 015E                   .dbline 151
 015E                   .dbline 152
 015E 042F              mov R16,R20
 0160 A4DF              xcall _LCMWriteData
 0162                   .dbline 153
 0162 CB01              movw R24,R22
 0164 0196              adiw R24,1
 0166 BC01              movw R22,R24
 0168 FC01              movw R30,R24
 016A 4081              ldd R20,z+0
 016C                   .dbline 154
 016C           L32:
 016C                   .dbline 150
 016C           ;     while(LCD_temp!=0x00) 
 016C 4423              tst R20
 016E B9F7              brne L31
 0170                   .dbline -2
 0170           L30:
 0170 0E940000          xcall pop_gset3
 0174                   .dbline 0 ; func end
 0174 0895              ret
 0176                   .dbsym r LCD_temp 20 c
 0176                   .dbsym r DisplayString 22 pc
 0176                   .dbsym r DisplayRow 10 c
 0176                   .dbsym r DisplayCol 20 c
 0176                   .dbend
 0176                   .dbfunc e LCMDisplayNummber _LCMDisplayNummber fV
 0176           ;           flag -> R20
 0176           ;       LCD_temp -> R22
 0176           ;     DisplayNum -> R10,R11
 0176           ;     DisplayRow -> R14
 0176           ;     DisplayCol -> R12
                        .even
 0176           _LCMDisplayNummber::
 0176 0E940000          xcall push_gset5
 017A E22E              mov R14,R18
 017C C02E              mov R12,R16
 017E AA84              ldd R10,y+10
 0180 BB84              ldd R11,y+11
 0182                   .dbline -1
 0182                   .dbline 161
 0182           ;     { 
 0182           ;         LCMWriteData(LCD_temp);
 0182           ;         LCD_temp=*(++DisplayString);
 0182           ;     }                   
 0182           ; }
 0182           ; 
 0182           ; /*-------------------------显示一个整形数字,范围-32767~32767---------------------------*/
 0182           ;                           //宏定义判断函数,其中\是连接符
 0182           ;                     
 0182           ; void LCMDisplayNummber(char DisplayCol,char DisplayRow,int DisplayNum)
 0182           ; {
 0182                   .dbline 162
 0182           ;         char LCD_temp=0,flag=0;
 0182 6627              clr R22
 0184                   .dbline 162
 0184 4427              clr R20
 0186                   .dbline 163
 0186           ;         LCMSetXYAddress(DisplayCol,DisplayRow);
 0186 2E2D              mov R18,R14
 0188 0C2D              mov R16,R12
 018A A9DF              xcall _LCMSetXYAddress
 018C                   .dbline 164
 018C           ;         if(DisplayNum < 0)
 018C C501              movw R24,R10
 018E 8030              cpi R24,0
 0190 E0E0              ldi R30,0
 0192 9E07              cpc R25,R30
 0194 44F4              brge L35
 0196                   .dbline 165
 0196           ;         {
 0196                   .dbline 166
 0196           ;                 LCMWriteData(0x2d);            //显示负号
 0196 0DE2              ldi R16,45
 0198 88DF              xcall _LCMWriteData
 019A                   .dbline 167
 019A           ;                 DisplayNum = -DisplayNum;
 019A C501              movw R24,R10
 019C 8095              com R24
 019E 9095              com R25
 01A0 8F5F              subi R24,0xFF
 01A2 9F4F              sbci R25,0xFF
 01A4 5C01              movw R10,R24
 01A6                   .dbline 168
 01A6           ;         }
 01A6           L35:
 01A6                   .dbline 169
 01A6           ;         LCD_temp=DisplayNum/10000;
 01A6 20E1              ldi R18,10000
 01A8 37E2              ldi R19,39
 01AA 8501              movw R16,R10
 01AC 0E940000          xcall div16s

⌨️ 快捷键说明

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