📄 lcd.lis
字号:
0020 0895 ret
0022 .dbsym r bdata 16 c
0022 .dbend
0022 .dbfunc e Send_Command _Send_Command fV
0022 ; cdata -> R16
.even
0022 _Send_Command::
0022 .dbline -1
0022 .dbline 69
0022 ; }
0022 ;
0022 ;
0022 ; void Send_Command(unsigned char cdata)
0022 ; {
0022 .dbline 70
0022 ; set_CS;
0022 A99A sbi 0x15,1
0024 .dbline 71
0024 ; set_RS;
0024 AF9A sbi 0x15,7
0026 .dbline 72
0026 ; set_WR;
0026 959A sbi 0x12,5
0028 .dbline 73
0028 ; _nop; //开始发送命令
0028 0000 nop
002A .dbline 74
002A ; PORTA = cdata; //将命令字放在端口A
002A 0BBB out 0x1b,R16
002C .dbline 75
002C ; clr_RS;
002C AF98 cbi 0x15,7
002E .dbline 76
002E ; clr_CS;
002E A998 cbi 0x15,1
0030 .dbline 77
0030 ; _nop;
0030 0000 nop
0032 .dbline 78
0032 ; clr_WR;
0032 9598 cbi 0x12,5
0034 .dbline 79
0034 ; _nop;
0034 0000 nop
0036 .dbline 80
0036 ; set_WR;
0036 959A sbi 0x12,5
0038 .dbline 81
0038 ; _nop;
0038 0000 nop
003A .dbline 82
003A ; set_CS;
003A A99A sbi 0x15,1
003C .dbline 83
003C ; set_RS;
003C AF9A sbi 0x15,7
003E .dbline -2
003E L2:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbsym r cdata 16 c
0040 .dbend
0040 .dbfunc e Gen_Column_MSB _Gen_Column_MSB fc
0040 ; temp -> R20
0040 ; column -> R16
.even
0040 _Gen_Column_MSB::
0040 0E940000 xcall push_gset1
0044 .dbline -1
0044 .dbline 89
0044 ; }
0044 ;
0044 ;
0044 ;
0044 ; unsigned char Gen_Column_MSB(unsigned char column)
0044 ; {
0044 .dbline 91
0044 ; unsigned char temp; //用于保存列数的高4bit命令字
0044 ; temp = column+0x04 ;
0044 402F mov R20,R16
0046 4C5F subi R20,252 ; addi 4
0048 .dbline 92
0048 ; temp = temp >>4; //右移4位,得到高4位的列数据
0048 842F mov R24,R20
004A 8295 swap R24
004C 8F70 andi R24,#0x0F
004E 482F mov R20,R24
0050 .dbline 93
0050 ; temp |=0x10; //00010000,将列地址的DB4置1
0050 4061 ori R20,16
0052 .dbline 94
0052 ; return temp;
0052 042F mov R16,R20
0054 .dbline -2
0054 L3:
0054 0E940000 xcall pop_gset1
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r temp 20 c
005A .dbsym r column 16 c
005A .dbend
005A .dbfunc e Gen_Column_LSB _Gen_Column_LSB fc
005A ; temp -> R20
005A ; column -> R16
.even
005A _Gen_Column_LSB::
005A 0E940000 xcall push_gset1
005E .dbline -1
005E .dbline 101
005E ; }
005E ;
005E ;
005E ;
005E ;
005E ; unsigned char Gen_Column_LSB(unsigned char column)
005E ; {
005E .dbline 102
005E ; unsigned char temp = column;
005E 402F mov R20,R16
0060 .dbline 103
0060 ; temp = column+0x04 ;
0060 4C5F subi R20,252 ; addi 4
0062 .dbline 104
0062 ; temp &= 0x0f; //取出column的低四位
0062 4F70 andi R20,15
0064 .dbline 105
0064 ; return temp;
0064 042F mov R16,R20
0066 .dbline -2
0066 L4:
0066 0E940000 xcall pop_gset1
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r temp 20 c
006C .dbsym r column 16 c
006C .dbend
006C .dbfunc e Gen_Page _Gen_Page fc
006C ; temp -> R20
006C ; page -> R16
.even
006C _Gen_Page::
006C 0E940000 xcall push_gset1
0070 .dbline -1
0070 .dbline 112
0070 ; }
0070 ;
0070 ;
0070 ;
0070 ;
0070 ; unsigned char Gen_Page(unsigned char page)
0070 ; {
0070 .dbline 114
0070 ; unsigned char temp;
0070 ; temp = page & 0x0f;
0070 402F mov R20,R16
0072 4F70 andi R20,15
0074 .dbline 115
0074 ; temp |= 0xb0; //得到显示数据页的控制字
0074 406B ori R20,176
0076 .dbline 116
0076 ; return temp;
0076 042F mov R16,R20
0078 .dbline -2
0078 L5:
0078 0E940000 xcall pop_gset1
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r temp 20 c
007E .dbsym r page 16 c
007E .dbend
007E .dbfunc e Initial_LCD _Initial_LCD fV
.even
007E _Initial_LCD::
007E .dbline -1
007E .dbline 123
007E ; }
007E ;
007E ;
007E ;
007E ;
007E ; void Initial_LCD(void)
007E ; {
007E .dbline 124
007E ; Send_Command(0xe2); //初始化内部功能(RESET),初始化初始显示线,列地址,页地址和普通
007E 02EE ldi R16,226
0080 D0DF xcall _Send_Command
0082 .dbline 126
0082 ; //输出地址状态到初始状态,但是不能影响显示数据RAM的内容
0082 ; wait; //等待2个时钟周期
0082 0000 nop
0084 0000 nop
0086 .dbline 127
0086 ; Send_Command(0xaf); //Display on
0086 0FEA ldi R16,175
0088 CCDF xcall _Send_Command
008A .dbline 128
008A ; Send_Command(0x23); //internal voltage regulator resistor ratio,(4.5)0x23
008A 03E2 ldi R16,35
008C CADF xcall _Send_Command
008E .dbline 129
008E ; Send_Command(0x2f); //内部供电VC=VR=VF:111,使内部VC,VR,VF的电压控制电路工作
008E 0FE2 ldi R16,47
0090 C8DF xcall _Send_Command
0092 .dbline 130
0092 ; Send_Command(0x40); //初始化显示线在line address 0
0092 00E4 ldi R16,64
0094 C6DF xcall _Send_Command
0096 .dbline 131
0096 ; Send_Command(0x81); //设置参考电压模式对比度共64级
0096 01E8 ldi R16,129
0098 C4DF xcall _Send_Command
009A .dbline 132
009A ; Send_Command(0xa1);
009A 01EA ldi R16,161
009C C2DF xcall _Send_Command
009E .dbline 133
009E ; Send_Command(0xa1);
009E 01EA ldi R16,161
00A0 C0DF xcall _Send_Command
00A2 .dbline 134
00A2 ; Send_Command(0xa3); //选择LCD偏置电压比率以驱动LCD,bias=1
00A2 03EA ldi R16,163
00A4 BEDF xcall _Send_Command
00A6 .dbline 135
00A6 ; Send_Command(0xa4); //全亮显示,EON=0,normal display(不管显示RAM中有何数据)
00A6 04EA ldi R16,164
00A8 BCDF xcall _Send_Command
00AA .dbline 136
00AA ; Send_Command(0xb0); //设置页地址为0
00AA 00EB ldi R16,176
00AC BADF xcall _Send_Command
00AE .dbline 137
00AE ; Send_Command(0x0c); //选择COM(行地址)输出扫描方向,决定LCD驱动器的输出状态。SHL=0,normal direction(COM0-COM63)
00AE 0CE0 ldi R16,12
00B0 B8DF xcall _Send_Command
00B2 .dbline 138
00B2 ; Send_Command(0xad); //设置STATIC INDICATOR STATUS(SM=1,STATIC INDICATOR ON)
00B2 0DEA ldi R16,173
00B4 B6DF xcall _Send_Command
00B6 .dbline 139
00B6 ; Send_Command(0x03); //STATUS OF STATIC INDICATOR OUTPUT ALWAYS ON
00B6 03E0 ldi R16,3
00B8 B4DF xcall _Send_Command
00BA .dbline -2
00BA L6:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbend
00BC .dbfunc e Clear_DDRAM _Clear_DDRAM fV
00BC ; c_column_lsb -> R20
00BC ; c_column_msb -> R20
00BC ; start_page -> R22
00BC ; j -> R20
00BC ; i -> R12
00BC ; c_page_end -> R10
00BC ; c_page_start -> R12
.even
00BC _Clear_DDRAM::
00BC 0E940000 xcall push_gset4
00C0 A22E mov R10,R18
00C2 C02E mov R12,R16
00C4 .dbline -1
00C4 .dbline 145
00C4 ; }
00C4 ;
00C4 ;
00C4 ;
00C4 ; void Clear_DDRAM(unsigned char c_page_start,unsigned char c_page_end)
00C4 ; {
00C4 .dbline 148
00C4 ; unsigned char i,j;
00C4 ; unsigned char start_page; //用于存放清除的起始页数
00C4 ; unsigned char c_column_msb=0x10,c_column_lsb=0x04; //清除的起始列为第4列
00C4 40E1 ldi R20,16
00C6 .dbline 148
00C6 44E0 ldi R20,4
00C8 .dbline 150
00C8 ;
00C8 ; start_page = Gen_Page(c_page_start); //取得清除的起始页地址
00C8 0C2D mov R16,R12
00CA D0DF xcall _Gen_Page
00CC 602F mov R22,R16
00CE .dbline 151
00CE ; for(j=c_page_start;j<=c_page_end;j++)
00CE 4C2D mov R20,R12
00D0 10C0 xjmp L11
00D2 L8:
00D2 .dbline 152
00D2 ; {
00D2 .dbline 153
00D2 ; Send_Command(0x10); //从第4列开始清除LCD显示的数据
00D2 00E1 ldi R16,16
00D4 A6DF xcall _Send_Command
00D6 .dbline 154
00D6 ; Send_Command(0x04);
00D6 04E0 ldi R16,4
00D8 A4DF xcall _Send_Command
00DA .dbline 155
00DA ; Send_Command(start_page); //清除位置在第start_page页
00DA 062F mov R16,R22
00DC A2DF xcall _Send_Command
00DE .dbline 156
00DE ; for(i=0;i<=127;i++)
00DE CC24 clr R12
00E0 03C0 xjmp L15
00E2 L12:
00E2 .dbline 157
00E2 .dbline 158
00E2 0027 clr R16
00E4 8DDF xcall _Send_Byte
00E6 .dbline 159
00E6 L13:
00E6 .dbline 156
00E6 C394 inc R12
00E8 L15:
00E8 .dbline 156
00E8 8FE7 ldi R24,127
00EA 8C15 cp R24,R12
00EC D0F7 brsh L12
00EE .dbline 160
00EE 6395 inc R22
00F0 .dbline 161
00F0 L9:
00F0 .dbline 151
00F0 4395 inc R20
00F2 L11:
00F2 .dbline 151
00F2 A416 cp R10,R20
00F4 70F7 brsh L8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -