📄 lcd.lis
字号:
002A .dbline -2
002A L2:
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r temp 20 c
0030 .dbsym r cs 16 c
0030 .dbend
0030 .dbfunc e LCD_Clean _LCD_Clean fV
0030 ; page -> R20
0030 ; y -> R22
.even
0030 _LCD_Clean::
0030 0E940000 xcall push_gset2
0034 .dbline -1
0034 .dbline 39
0034 ; }
0034 ; }
0034 ;
0034 ; void LCD_Clean(void)
0034 ; {
0034 .dbline 40
0034 ; unsigned char page=0,y; //定义表示页和列的局部变量
0034 4427 clr R20
0036 .dbline 42
0036 ;
0036 ; for(page=0;page<8;page++)
0036 21C0 xjmp L12
0038 L9:
0038 .dbline 43
0038 ; {
0038 .dbline 45
0038 ; //LCD左半屏的操作
0038 ; check_busy(0);
0038 0027 clr R16
003A E9DF xcall _check_busy
003C .dbline 46
003C ; L_command=LCD_PAGE+page; //设置LCD左半屏页地址
003C 842F mov R24,R20
003E 8854 subi R24,72 ; addi 184
0040 80930820 sts 8200,R24
0044 .dbline 47
0044 ; check_busy(0);
0044 0027 clr R16
0046 E3DF xcall _check_busy
0048 .dbline 48
0048 ; L_command=LCD_Y;
0048 80E4 ldi R24,64
004A 80930820 sts 8200,R24
004E .dbline 50
004E ; //LCD右半屏的操作
004E ; check_busy(1);
004E 01E0 ldi R16,1
0050 DEDF xcall _check_busy
0052 .dbline 51
0052 ; R_command=LCD_PAGE+page; //设置LCD右半屏页地址
0052 842F mov R24,R20
0054 8854 subi R24,72 ; addi 184
0056 80930420 sts 8196,R24
005A .dbline 52
005A ; check_busy(1);
005A 01E0 ldi R16,1
005C D8DF xcall _check_busy
005E .dbline 53
005E ; R_command=LCD_Y;
005E 80E4 ldi R24,64
0060 80930420 sts 8196,R24
0064 .dbline 55
0064 ;
0064 ; for(y=0;y<64;y++)
0064 6627 clr R22
0066 06C0 xjmp L16
0068 L13:
0068 .dbline 56
0068 .dbline 57
0068 2224 clr R2
006A 20920A20 sts 8202,R2
006E .dbline 58
006E 20920620 sts 8198,R2
0072 .dbline 59
0072 L14:
0072 .dbline 55
0072 6395 inc R22
0074 L16:
0074 .dbline 55
0074 6034 cpi R22,64
0076 C0F3 brlo L13
0078 .dbline 60
0078 L10:
0078 .dbline 42
0078 4395 inc R20
007A L12:
007A .dbline 42
007A 4830 cpi R20,8
007C E8F2 brlo L9
007E .dbline -2
007E L8:
007E 0E940000 xcall pop_gset2
0082 .dbline 0 ; func end
0082 0895 ret
0084 .dbsym r page 20 c
0084 .dbsym r y 22 c
0084 .dbend
0084 .dbfunc e LCD_Init _LCD_Init fV
.even
0084 _LCD_Init::
0084 .dbline -1
0084 .dbline 64
0084 ; {
0084 ; L_data=0x00;
0084 ; R_data=0x00;
0084 ; }
0084 ; }
0084 ; }
0084 ;
0084 ; void LCD_Init(void) //LCD初始化子函数
0084 ; {
0084 .dbline 66
0084 ; /*首先关闭12864的显示*/
0084 ; check_busy(0); //LCD左半屏正在工作,等待......
0084 0027 clr R16
0086 C3DF xcall _check_busy
0088 .dbline 67
0088 ; L_command=LCD_OFF; //先关闭LCD左半屏的显示
0088 8EE3 ldi R24,62
008A 80930820 sts 8200,R24
008E .dbline 68
008E ; check_busy(1); //LCD右半屏正在工作,等待......
008E 01E0 ldi R16,1
0090 BEDF xcall _check_busy
0092 .dbline 69
0092 ; R_command=LCD_OFF; //先关闭LCD右半屏的显示
0092 8EE3 ldi R24,62
0094 80930420 sts 8196,R24
0098 .dbline 72
0098 ;
0098 ; /*开启12864的显示*/
0098 ; check_busy(0);
0098 0027 clr R16
009A B9DF xcall _check_busy
009C .dbline 73
009C ; L_command=LCD_ON; //打开LCD左半屏的显示
009C 8FE3 ldi R24,63
009E 80930820 sts 8200,R24
00A2 .dbline 74
00A2 ; check_busy(1);
00A2 01E0 ldi R16,1
00A4 B4DF xcall _check_busy
00A6 .dbline 75
00A6 ; R_command=LCD_ON; //打开LCD右半屏的显示
00A6 8FE3 ldi R24,63
00A8 80930420 sts 8196,R24
00AC .dbline 78
00AC ;
00AC ; /*设置LCD显示的起始行*/
00AC ; check_busy(0);
00AC 0027 clr R16
00AE AFDF xcall _check_busy
00B0 .dbline 79
00B0 ; L_command=LCD_X; //LCD左半屏起始行为0
00B0 80EC ldi R24,192
00B2 80930820 sts 8200,R24
00B6 .dbline 80
00B6 ; check_busy(1);
00B6 01E0 ldi R16,1
00B8 AADF xcall _check_busy
00BA .dbline 81
00BA ; R_command=LCD_X; //LCD右半屏起始行为0
00BA 80EC ldi R24,192
00BC 80930420 sts 8196,R24
00C0 .dbline -2
00C0 L17:
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbend
00C2 .dbfunc e init_devices _init_devices fV
.even
00C2 _init_devices::
00C2 .dbline -1
00C2 .dbline 85
00C2 ; }
00C2 ;
00C2 ; void init_devices(void)
00C2 ; {
00C2 .dbline 86
00C2 ; XMCRA = 0x00; //外部存储器控制
00C2 2224 clr R2
00C4 20926D00 sts 109,R2
00C8 .dbline 87
00C8 ; XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
00C8 87E0 ldi R24,7
00CA 80936C00 sts 108,R24
00CE .dbline 89
00CE ; // mapping_init();
00CE ; port_init();
00CE 98DF xcall _port_init
00D0 .dbline 90
00D0 ; MCUCR = 0x80; //外部SRAM使能
00D0 80E8 ldi R24,128
00D2 85BF out 0x35,R24
00D4 .dbline -2
00D4 L18:
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbend
00D6 .dbfunc e write_Bchar _write_Bchar fV
00D6 ; i -> R20
00D6 ; n -> R18
00D6 ; cs -> R16
.even
00D6 _write_Bchar::
00D6 0E940000 xcall push_gset1
00DA .dbline -1
00DA .dbline 94
00DA ; }
00DA ;
00DA ; void write_Bchar(unsigned char cs,unsigned char n) // 大写字母显示函数
00DA ; {
00DA .dbline 96
00DA ; unsigned char i;
00DA ; for(i=0;i<6;i++)
00DA 4427 clr R20
00DC 20C0 xjmp L23
00DE L20:
00DE .dbline 97
00DE ; {
00DE .dbline 98
00DE ; if(cs) R_data=big_char[n][i]; //右半屏显示
00DE 0023 tst R16
00E0 79F0 breq L24
00E2 .dbline 98
00E2 86E0 ldi R24,6
00E4 829F mul R24,R18
00E6 1001 movw R2,R0
00E8 80E0 ldi R24,<_big_char
00EA 90E0 ldi R25,>_big_char
00EC 280E add R2,R24
00EE 391E adc R3,R25
00F0 E42F mov R30,R20
00F2 FF27 clr R31
00F4 E20D add R30,R2
00F6 F31D adc R31,R3
00F8 E491 lpm R30,Z
00FA E0930620 sts 8198,R30
00FE 0EC0 xjmp L25
0100 L24:
0100 .dbline 99
0100 ; else L_data=big_char[n][i]; //左半屏显示
0100 86E0 ldi R24,6
0102 829F mul R24,R18
0104 1001 movw R2,R0
0106 80E0 ldi R24,<_big_char
0108 90E0 ldi R25,>_big_char
010A 280E add R2,R24
010C 391E adc R3,R25
010E E42F mov R30,R20
0110 FF27 clr R31
0112 E20D add R30,R2
0114 F31D adc R31,R3
0116 E491 lpm R30,Z
0118 E0930A20 sts 8202,R30
011C L25:
011C .dbline 100
011C L21:
011C .dbline 96
011C 4395 inc R20
011E L23:
011E .dbline 96
011E 4630 cpi R20,6
0120 F0F2 brlo L20
0122 .dbline -2
0122 L19:
0122 0E940000 xcall pop_gset1
0126 .dbline 0 ; func end
0126 0895 ret
0128 .dbsym r i 20 c
0128 .dbsym r n 18 c
0128 .dbsym r cs 16 c
0128 .dbend
0128 .dbfunc e write_Schar _write_Schar fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -