📄 lcd.lis
字号:
00BC .dbline 79
00BC ; {
00BC ; lcddatas(0,0x00);
00BC ; lcddatas(1,0x00); //Y地址可以自增
00BC ; }
00BC ; }
00BC ; }
00BC ;
00BC ; void LCD_Init(void) //LCD初始化子函数
00BC ; {
00BC .dbline 81
00BC ; /*首先关闭12864的显示*/
00BC ; check_busy(0); //LCD左半屏正在工作,等待......
00BC 0027 clr R16
00BE A7DF xcall _check_busy
00C0 .dbline 82
00C0 ; L_command=LCD_OFF; //先关闭LCD左半屏的显示
00C0 8EE3 ldi R24,62
00C2 80930094 sts 37888,R24
00C6 .dbline 83
00C6 ; check_busy(1); //LCD右半屏正在工作,等待......
00C6 01E0 ldi R16,1
00C8 A2DF xcall _check_busy
00CA .dbline 84
00CA ; R_command=LCD_OFF; //先关闭LCD右半屏的显示
00CA 8EE3 ldi R24,62
00CC 80930098 sts 38912,R24
00D0 .dbline 87
00D0 ;
00D0 ; /*开启12864的显示*/
00D0 ; check_busy(0);
00D0 0027 clr R16
00D2 9DDF xcall _check_busy
00D4 .dbline 88
00D4 ; L_command=LCD_ON; //打开LCD左半屏的显示
00D4 8FE3 ldi R24,63
00D6 80930094 sts 37888,R24
00DA .dbline 89
00DA ; check_busy(1);
00DA 01E0 ldi R16,1
00DC 98DF xcall _check_busy
00DE .dbline 90
00DE ; R_command=LCD_ON; //打开LCD右半屏的显示
00DE 8FE3 ldi R24,63
00E0 80930098 sts 38912,R24
00E4 .dbline 93
00E4 ;
00E4 ; /*设置LCD显示的起始行*/
00E4 ; check_busy(0);
00E4 0027 clr R16
00E6 93DF xcall _check_busy
00E8 .dbline 94
00E8 ; L_command=LCD_X; //LCD左半屏起始行为0
00E8 80EC ldi R24,192
00EA 80930094 sts 37888,R24
00EE .dbline 95
00EE ; check_busy(1);
00EE 01E0 ldi R16,1
00F0 8EDF xcall _check_busy
00F2 .dbline 96
00F2 ; R_command=LCD_X; //LCD右半屏起始行为0
00F2 80EC ldi R24,192
00F4 80930098 sts 38912,R24
00F8 .dbline -2
00F8 L23:
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbend
00FA .dbfunc e init_devices _init_devices fV
.even
00FA _init_devices::
00FA .dbline -1
00FA .dbline 100
00FA ; }
00FA ;
00FA ; void init_devices(void)
00FA ; {
00FA .dbline 101
00FA ; XMCRA = 0x00; //外部存储器控制
00FA 2224 clr R2
00FC 20926D00 sts 109,R2
0100 .dbline 102
0100 ; XMCRB = 0x00; //外存储高位地址屏蔽,释放端口C
0100 20926C00 sts 108,R2
0104 .dbline 103
0104 ; port_init();
0104 7DDF xcall _port_init
0106 .dbline 104
0106 ; MCUCR = 0x80; //外部SRAM使能
0106 80E8 ldi R24,128
0108 85BF out 0x35,R24
010A .dbline -2
010A L24:
010A .dbline 0 ; func end
010A 0895 ret
010C .dbend
010C .dbfunc e displaychar_left _displaychar_left fV
010C ; i -> R20
010C ; y -> y+4
010C ; x -> R20
010C ; array -> R22,R23
.even
010C _displaychar_left::
010C 0E940000 xcall push_gset2
0110 422F mov R20,R18
0112 B801 movw R22,R16
0114 .dbline -1
0114 .dbline 110
0114 ; }
0114 ;
0114 ; /**********************************LCD字符显示函数(8*8)**********************************************/
0114 ;
0114 ; void displaychar_left(uchar *array,uchar x,uchar y)
0114 ; {
0114 .dbline 112
0114 ; uchar i;
0114 ; lcdcommand(0,LCD_PAGE+x);
0114 242F mov R18,R20
0116 2854 subi R18,72 ; addi 184
0118 0027 clr R16
011A 8ADF xcall _lcdcommand
011C .dbline 113
011C ; lcdcommand(0,LCD_Y+y);
011C 2C81 ldd R18,y+4
011E 205C subi R18,192 ; addi 64
0120 0027 clr R16
0122 86DF xcall _lcdcommand
0124 .dbline 114
0124 ; for(i=0;i<8;i++)
0124 4427 clr R20
0126 08C0 xjmp L29
0128 L26:
0128 .dbline 115
0128 .dbline 116
0128 E42F mov R30,R20
012A FF27 clr R31
012C E60F add R30,R22
012E F71F adc R31,R23
0130 2081 ldd R18,z+0
0132 0027 clr R16
0134 8FDF xcall _lcddatas
0136 .dbline 117
0136 L27:
0136 .dbline 114
0136 4395 inc R20
0138 L29:
0138 .dbline 114
0138 4830 cpi R20,8
013A B0F3 brlo L26
013C .dbline -2
013C L25:
013C 0E940000 xcall pop_gset2
0140 .dbline 0 ; func end
0140 0895 ret
0142 .dbsym r i 20 c
0142 .dbsym l y 4 c
0142 .dbsym r x 20 c
0142 .dbsym r array 22 pc
0142 .dbend
0142 .dbfunc e displaychar_right _displaychar_right fV
0142 ; i -> R20
0142 ; y -> y+4
0142 ; x -> R20
0142 ; array -> R22,R23
.even
0142 _displaychar_right::
0142 0E940000 xcall push_gset2
0146 422F mov R20,R18
0148 B801 movw R22,R16
014A .dbline -1
014A .dbline 122
014A ; {
014A ; lcddatas(0,*(array+i));
014A ; }
014A ; }
014A ;
014A ;
014A ; void displaychar_right(uchar *array,uchar x,uchar y)
014A ; {
014A .dbline 124
014A ; uchar i;
014A ; lcdcommand(1,LCD_PAGE+x);
014A 242F mov R18,R20
014C 2854 subi R18,72 ; addi 184
014E 01E0 ldi R16,1
0150 6FDF xcall _lcdcommand
0152 .dbline 125
0152 ; lcdcommand(1,LCD_Y+y);
0152 2C81 ldd R18,y+4
0154 205C subi R18,192 ; addi 64
0156 01E0 ldi R16,1
0158 6BDF xcall _lcdcommand
015A .dbline 126
015A ; for(i=0;i<8;i++)
015A 4427 clr R20
015C 08C0 xjmp L34
015E L31:
015E .dbline 127
015E .dbline 128
015E E42F mov R30,R20
0160 FF27 clr R31
0162 E60F add R30,R22
0164 F71F adc R31,R23
0166 2081 ldd R18,z+0
0168 01E0 ldi R16,1
016A 74DF xcall _lcddatas
016C .dbline 129
016C L32:
016C .dbline 126
016C 4395 inc R20
016E L34:
016E .dbline 126
016E 4830 cpi R20,8
0170 B0F3 brlo L31
0172 .dbline -2
0172 L30:
0172 0E940000 xcall pop_gset2
0176 .dbline 0 ; func end
0176 0895 ret
0178 .dbsym r i 20 c
0178 .dbsym l y 4 c
0178 .dbsym r x 20 c
0178 .dbsym r array 22 pc
0178 .dbend
0178 .dbfunc e display_char _display_char fV
0178 ; heng -> R10
0178 ; zong -> R22
0178 ; array2 -> R20,R21
0178 ; array1 -> R12,R13
.even
0178 _display_char::
0178 0E940000 xcall push_gset4
017C A901 movw R20,R18
017E 6801 movw R12,R16
0180 2197 sbiw R28,1
0182 6985 ldd R22,y+9
0184 AB84 ldd R10,y+11
0186 .dbline -1
0186 .dbline 134
0186 ; {
0186 ; lcddatas(1,*(array+i));
0186 ; }
0186 ; }
0186 ;
0186 ;
0186 ; void display_char(uchar*array1,uchar*array2,uchar zong,uchar heng)
0186 ; {
0186 .dbline 135
0186 ; if((heng>=0)&&(heng<=7))
0186 8A2D mov R24,R10
0188 8030 cpi R24,0
018A 80F0 brlo L36
018C 87E0 ldi R24,7
018E 8A15 cp R24,R10
0190 68F0 brlo L36
0192 .dbline 136
0192 ; {displaychar_left(array1,zong,heng*8); displaychar_left(array2,zong+1,heng*8);}
0192 .dbline 136
0192 88E0 ldi R24,8
0194 8A9D mul R24,R10
0196 0882 std y+0,R0
0198 262F mov R18,R22
019A 8601 movw R16,R12
019C B7DF xcall _displaychar_left
019E .dbline 136
019E 88E0 ldi R24,8
01A0 8A9D mul R24,R10
01A2 0882 std y+0,R0
01A4 262F mov R18,R22
01A6 2F5F subi R18,255 ; addi 1
01A8 8A01 movw R16,R20
01AA B0DF xcall _displaychar_left
01AC .dbline 136
01AC L36:
01AC .dbline 138
01AC 8A2D mov R24,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -