?? lcddrive.lis
字號:
00C6 407F andi R20,240
00C8 .dbline 93
00C8 ; for(iSynCode=0;iSynCode<8;iSynCode++)
00C8 6627 clr R22
00CA 0DC0 rjmp L30
00CC L27:
00CC .dbline 94
00CC ; {
00CC .dbline 95
00CC ; bitcode = SynCode & 0x80;
00CC 842F mov R24,R20
00CE 8078 andi R24,128
00D0 A82E mov R10,R24
00D2 .dbline 96
00D2 ; if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode;
00D2 8823 tst R24
00D4 11F0 breq L31
00D6 X6:
00D6 .dbline 96
00D6 969A sbi 0x12,6
00D8 01C0 rjmp L32
00DA L31:
00DA .dbline 96
00DA 9698 cbi 0x12,6
00DC L32:
00DC .dbline 97
00DC ; SynCode = SynCode << 1;
00DC 440F lsl R20
00DE .dbline 98
00DE ; CLRPORT(SCLK); //SCLK = 0;
00DE 9798 cbi 0x12,7
00E0 .dbline 99
00E0 ; SETPORT(SCLK); //SCLK = 1;
00E0 979A sbi 0x12,7
00E2 .dbline 100
00E2 ; CLRPORT(SCLK); //SCLK = 0;
00E2 9798 cbi 0x12,7
00E4 .dbline 102
00E4 ;
00E4 ; }
00E4 L28:
00E4 .dbline 93
00E4 6395 inc R22
00E6 L30:
00E6 .dbline 93
00E6 6830 cpi R22,8
00E8 88F3 brlo L27
00EA X7:
00EA .dbline 103
00EA ; SynCode = LCD_DAT & 0x0F; //寫入代碼COM數據的低四位 0000XXXX
00EA 40910200 lds R20,_LCD_DAT
00EE 4F70 andi R20,15
00F0 .dbline 104
00F0 ; SynCode = SynCode<<4; //要發送的數據格式是XXXX0000
00F0 842F mov R24,R20
00F2 8F70 andi R24,#0x0F
00F4 8295 swap R24
00F6 482F mov R20,R24
00F8 .dbline 105
00F8 ; for(iSynCode=0;iSynCode<8;iSynCode++)
00F8 6627 clr R22
00FA 0DC0 rjmp L36
00FC L33:
00FC .dbline 106
00FC ; {
00FC .dbline 107
00FC ; bitcode = SynCode & 0x80;
00FC 842F mov R24,R20
00FE 8078 andi R24,128
0100 A82E mov R10,R24
0102 .dbline 108
0102 ; if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode;
0102 8823 tst R24
0104 11F0 breq L37
0106 X8:
0106 .dbline 108
0106 969A sbi 0x12,6
0108 01C0 rjmp L38
010A L37:
010A .dbline 108
010A 9698 cbi 0x12,6
010C L38:
010C .dbline 109
010C ; SynCode = SynCode << 1;
010C 440F lsl R20
010E .dbline 110
010E ; CLRPORT(SCLK); //SCLK = 0;
010E 9798 cbi 0x12,7
0110 .dbline 111
0110 ; SETPORT(SCLK); //SCLK = 1;
0110 979A sbi 0x12,7
0112 .dbline 112
0112 ; CLRPORT(SCLK); //SCLK = 0;
0112 9798 cbi 0x12,7
0114 .dbline 113
0114 ; }
0114 L34:
0114 .dbline 105
0114 6395 inc R22
0116 L36:
0116 .dbline 105
0116 6830 cpi R22,8
0118 88F3 brlo L33
011A X9:
011A .dbline 114
011A ; Delay_1ms();
011A 72DF rcall _Delay_1ms
011C .dbline -2
011C L26:
011C .dbline 0 ; func end
011C 00C0 rjmp pop_xgsetF00C
011E .dbsym r bitcode 10 c
011E .dbsym r iSynCode 22 c
011E .dbsym r SynCode 20 c
011E .dbend
011E .dbfunc e LCD_Ini _LCD_Ini fV
.even
011E _LCD_Ini::
011E .dbline -1
011E .dbline 124
011E ; }
011E ;
011E ; //*************************************LCD屏幕初始化**************************************
011E ; //LCD接口:
011E ; //CS <==>PD5;
011E ; //SID <==>PD6;
011E ; //SCLK <==>PD7;
011E ; //LCD_AK<==>PD3; //背光控制,=0時打開背光
011E ; void LCD_Ini(void) //初始化,并進入文本模式
011E ; {
011E .dbline 126
011E ; //LCD端口初始化,將PD7~PD5端口設置為輸出方式
011E ; DDRD|=0xE0;
011E 81B3 in R24,0x11
0120 806E ori R24,224
0122 81BB out 0x11,R24
0124 .dbline 127
0124 ; _NOP();
0124 0000 nop
0126 .dbline 129
0126 ;
0126 ; LCD_COM =0x30;//功能設置為8BIT控制界面,基本指令集
0126 80E3 ldi R24,48
0128 80930300 sts _LCD_COM,R24
012C .dbline 130
012C ; Write_LCD_Com();//調用寫指令子程序
012C A1DF rcall _Write_LCD_Com
012E .dbline 131
012E ; Delay(5);//39uS
012E 05E0 ldi R16,5
0130 10E0 ldi R17,0
0132 72DF rcall _Delay
0134 .dbline 133
0134 ;
0134 ; LCD_COM =0x0C;//顯示打開,光標關,反白不顯示
0134 8CE0 ldi R24,12
0136 80930300 sts _LCD_COM,R24
013A .dbline 134
013A ; Write_LCD_Com();//調用寫指令子程序
013A 9ADF rcall _Write_LCD_Com
013C .dbline 135
013C ; Delay(5);//39uS
013C 05E0 ldi R16,5
013E 10E0 ldi R17,0
0140 6BDF rcall _Delay
0142 .dbline 137
0142 ;
0142 ; LCD_COM =0x01;//清除屏幕顯示,將DDRAM的地址計數器歸零
0142 81E0 ldi R24,1
0144 80930300 sts _LCD_COM,R24
0148 .dbline 138
0148 ; Write_LCD_Com();//調用寫指令子程序
0148 93DF rcall _Write_LCD_Com
014A .dbline 139
014A ; Delay(5);//39uS
014A 05E0 ldi R16,5
014C 10E0 ldi R17,0
014E 64DF rcall _Delay
0150 .dbline 141
0150 ;
0150 ; LCD_COM =0x06;//DDRAM的地址計數器(AC)加1
0150 86E0 ldi R24,6
0152 80930300 sts _LCD_COM,R24
0156 .dbline 142
0156 ; Write_LCD_Com();//調用寫指令子程序
0156 8CDF rcall _Write_LCD_Com
0158 .dbline 143
0158 ; Delay(5);//39uS
0158 05E0 ldi R16,5
015A 10E0 ldi R17,0
015C 5DDF rcall _Delay
015E .dbline 145
015E ;
015E ; AC_X=1;AC_Y=1;
015E 81E0 ldi R24,1
0160 80930100 sts _AC_X,R24
0164 .dbline 145
0164 80930000 sts _AC_Y,R24
0168 .dbline -2
0168 L39:
0168 .dbline 0 ; func end
0168 0895 ret
016A .dbend
016A .dbfunc e LCD_Contrl_Cursor _LCD_Contrl_Cursor fV
016A ; ON -> R10
.even
016A _LCD_Contrl_Cursor::
016A AA92 st -y,R10
016C A02E mov R10,R16
016E .dbline -1
016E .dbline 149
016E ; }
016E ;
016E ; void LCD_Contrl_Cursor(uchar ON) //打開游標顯示
016E ; {
016E .dbline 150
016E ; if (ON) LCD_COM =0x0F;else LCD_COM=0x0C; //ON:顯示打開,光標開,反白顯示
016E AA20 tst R10
0170 21F0 breq L41
0172 X10:
0172 .dbline 150
0172 8FE0 ldi R24,15
0174 80930300 sts _LCD_COM,R24
0178 03C0 rjmp L42
017A L41:
017A .dbline 150
017A 8CE0 ldi R24,12
017C 80930300 sts _LCD_COM,R24
0180 L42:
0180 .dbline 151
0180 ; Write_LCD_Com();//調用寫指令子程序
0180 77DF rcall _Write_LCD_Com
0182 .dbline 152
0182 ; Delay(5);//39uS
0182 05E0 ldi R16,5
0184 10E0 ldi R17,0
0186 48DF rcall _Delay
0188 .dbline -2
0188 L40:
0188 .dbline 0 ; func end
0188 A990 ld R10,y+
018A 0895 ret
018C .dbsym r ON 10 c
018C .dbend
018C .dbfunc e DispSetCursor _DispSetCursor fV
018C ; y -> R12
018C ; x -> R10
.even
018C _DispSetCursor::
018C AA92 st -y,R10
018E CA92 st -y,R12
0190 C22E mov R12,R18
0192 A02E mov R10,R16
0194 .dbline -1
0194 .dbline 158
0194 ; }
0194 ;
0194 ; void DispSetCursor(uchar x,uchar y) //設置光標到指定位置
0194 ; //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7
0194 ; //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3
0194 ; {
0194 .dbline 159
0194 ; LCD_COM=CharMap[y][x]; //查表得到DDRAM地址AC
0194 80E0 ldi R24,<_CharMap
0196 90E0 ldi R25,>_CharMap
0198 2C2C mov R2,R12
019A 3324 clr R3
019C 220C lsl R2
019E 331C rol R3
01A0 220C lsl R2
01A2 331C rol R3
01A4 220C lsl R2
01A6 331C rol R3
01A8 280E add R2,R24
01AA 391E adc R3,R25
01AC EA2D mov R30,R10
01AE FF27 clr R31
01B0 E20D add R30,R2
01B2 F31D adc R31,R3
01B4 2490 lpm R2,Z
01B6 20920300 sts _LCD_COM,R2
01BA .dbline 160
01BA ; Write_LCD_Com();
01BA 5ADF rcall _Write_LCD_Com
01BC .dbline -2
01BC L43:
01BC .dbline 0 ; func end
01BC C990 ld R12,y+
01BE A990 ld R10,y+
01C0 0895 ret
01C2 .dbsym r y 12 c
01C2 .dbsym r x 10 c
01C2 .dbend
01C2 .dbfunc e DispHalfWord _DispHalfWord fV
01C2 ; HH -> <dead>
01C2 ; LASC -> y+4
01C2 ; HASC -> y+2
01C2 ; y -> R12
01C2 ; x -> R10
.even
01C2 _DispHalfWord::
01C2 AA92 st -y,R10
01C4 CA92 st -y,R12
01C6 C22E mov R12,R18
01C8 A02E mov R10,R16
01CA .dbline -1
01CA .dbline 164
01CA ; }
01CA ;
01CA ; void DispHalfWord(uchar x,uchar y,uchar HASC,uchar LASC) //在指定位置處顯示半角ASCII字符
01CA ; {
01CA .dbline 166
01CA ; unsigned int HH;
01CA ; LCD_COM=CharMap[y][x]; //查表得到DDRAM地址AC
01CA 80E0 ldi R24,<_CharMap
01CC 90E0 ldi R25,>_CharMap
01CE 2C2C mov R2,R12
01D0 3324 clr R3
01D2 220C lsl R2
01D4 331C rol R3
01D6 220C lsl R2
01D8 331C rol R3
01DA 220C lsl R2
01DC 331C rol R3
01DE 280E add R2,R24
01E0 391E adc R3,R25
01E2 EA2D mov R30,R10
01E4 FF27 clr R31
01E6 E20D add R30,R2
01E8 F31D adc R31,R3
01EA 2490 lpm R2,Z
01EC 20920300 sts _LCD_COM,R2
01F0 .dbline 167
01F0 ; Write_LCD_Com();
01F0 3FDF rcall _Write_LCD_Com
01F2 .dbline 169
01F2 ;
01F2 ; LCD_DAT=HASC;
01F2 0A80 ldd R0,y+2
01F4 00920200 sts _LCD_DAT,R0
01F8 .dbline 170
01F8 ; Write_LCD_Data(); //顯示ASCII字符
01F8 59DF rcall _Write_LCD_Data
01FA .dbline 171
01FA ; LCD_DAT=LASC;
01FA 0C80 ldd R0,y+4
01FC 00920200 sts _LCD_DAT,R0
0200 .dbline 172
0200 ; Write_LCD_Data(); //顯示ASCII字符
0200 55DF rcall _Write_LCD_Data
0202 .dbline -2
0202 L44:
0202 .dbline 0 ; func end
0202 C990 ld R12,y+
0204 A990 ld R10,y+
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -