?? dm12864m串行.lis
字號:
.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 + -