📄 lcddriver.lis
字号:
0050 0FEF ldi R16,255
0052 .dbline 38
0052 ; SETDDRD();//要输出LCD_DATA_OUT
0052 8FEF ldi R24,255
0054 81BB out 0x11,R24
0056 .dbline 39
0056 ; LCD_DATA_OUT=0xFF;
0056 82BB out 0x12,R24
0058 .dbline 40
0058 ; CLRPORTC(LCD_RS);
0058 A898 cbi 0x15,0
005A .dbline 41
005A ; SETPORTC(LCD_RW); //读命令
005A A99A sbi 0x15,1
005C .dbline 42
005C ; CLRPORTC(LCD_CS1); //片使能
005C AD98 cbi 0x15,5
005E 08C0 xjmp L20
0060 L19:
0060 .dbline 44
0060 ; while((read_data&0x80)==0x80)
0060 ; {
0060 .dbline 45
0060 ; SETPORTC(LCD_E);
0060 AA9A sbi 0x15,2
0062 .dbline 46
0062 ; ;
0062 .dbline 47
0062 ; SETPORTD();
0062 8FEF ldi R24,255
0064 82BB out 0x12,R24
0066 .dbline 48
0066 ; CLRDDRD();//要输入LCD_DATA_IN
0066 2224 clr R2
0068 21BA out 0x11,R2
006A .dbline 49
006A ; SETPORTD();
006A 82BB out 0x12,R24
006C .dbline 50
006C ; ;
006C .dbline 51
006C ; read_data=LCD_DATA_IN;
006C 00B3 in R16,0x10
006E .dbline 52
006E ; CLRPORTC(LCD_E);
006E AA98 cbi 0x15,2
0070 .dbline 53
0070 ; }
0070 L20:
0070 .dbline 43
0070 802F mov R24,R16
0072 8078 andi R24,128
0074 8038 cpi R24,128
0076 A1F3 breq L19
0078 X4:
0078 .dbline 54
0078 ; CLRPORTC(LCD_E);
0078 AA98 cbi 0x15,2
007A .dbline 55
007A ; SETPORTC(LCD_CS1); //片禁能
007A AD9A sbi 0x15,5
007C .dbline -2
007C L18:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r read_data 16 c
007E .dbend
007E .dbfunc e send_cmd _send_cmd fV
007E ; cmd -> R10
.even
007E _send_cmd::
007E AA92 st -y,R10
0080 A02E mov R10,R16
0082 .dbline -1
0082 .dbline 59
0082 ; }
0082 ; //=====写命令到寄存器=========
0082 ; void send_cmd(uchar cmd)
0082 ; {
0082 .dbline 60
0082 ; check_busy();
0082 E6DF xcall _check_busy
0084 .dbline 61
0084 ; CLRPORTC(LCD_RS);
0084 A898 cbi 0x15,0
0086 .dbline 62
0086 ; CLRPORTC(LCD_RW); //写命令
0086 A998 cbi 0x15,1
0088 .dbline 63
0088 ; CLRPORTC(LCD_CS1); //片使能
0088 AD98 cbi 0x15,5
008A .dbline 64
008A ; SETDDRD(); //要输出LCD_DATA_OUT
008A 8FEF ldi R24,255
008C 81BB out 0x11,R24
008E .dbline 65
008E ; LCD_DATA_OUT=cmd;
008E A2BA out 0x12,R10
0090 .dbline 66
0090 ; SETPORTC(LCD_E);
0090 AA9A sbi 0x15,2
0092 .dbline 67
0092 ; ;
0092 .dbline 68
0092 ; CLRPORTC(LCD_E);
0092 AA98 cbi 0x15,2
0094 .dbline 69
0094 ; ;
0094 .dbline 70
0094 ; SETPORTC(LCD_CS1); //片禁能
0094 AD9A sbi 0x15,5
0096 .dbline -2
0096 L22:
0096 .dbline 0 ; func end
0096 A990 ld R10,y+
0098 0895 ret
009A .dbsym r cmd 10 c
009A .dbend
009A .dbfunc e send_dat _send_dat fV
009A ; dat -> R10
.even
009A _send_dat::
009A AA92 st -y,R10
009C A02E mov R10,R16
009E .dbline -1
009E .dbline 74
009E ; }
009E ; //=====写数据到DDRAM=========
009E ; void send_dat(uchar dat)
009E ; {
009E .dbline 75
009E ; check_busy();
009E D8DF xcall _check_busy
00A0 .dbline 76
00A0 ; SETPORTC(LCD_RS);
00A0 A89A sbi 0x15,0
00A2 .dbline 77
00A2 ; CLRPORTC(LCD_RW); //写数据
00A2 A998 cbi 0x15,1
00A4 .dbline 78
00A4 ; CLRPORTC(LCD_CS1); //片使能
00A4 AD98 cbi 0x15,5
00A6 .dbline 79
00A6 ; SETDDRD(); //要输出LCD_DATA_OUT
00A6 8FEF ldi R24,255
00A8 81BB out 0x11,R24
00AA .dbline 80
00AA ; LCD_DATA_OUT=dat;
00AA A2BA out 0x12,R10
00AC .dbline 81
00AC ; SETPORTC(LCD_E);
00AC AA9A sbi 0x15,2
00AE .dbline 82
00AE ; ;
00AE .dbline 83
00AE ; CLRPORTC(LCD_E);
00AE AA98 cbi 0x15,2
00B0 .dbline 84
00B0 ; ;
00B0 .dbline 85
00B0 ; SETPORTC(LCD_CS1); //片禁能
00B0 AD9A sbi 0x15,5
00B2 .dbline -2
00B2 L23:
00B2 .dbline 0 ; func end
00B2 A990 ld R10,y+
00B4 0895 ret
00B6 .dbsym r dat 10 c
00B6 .dbend
00B6 .dbfunc e LCD_Ini _LCD_Ini fV
.even
00B6 _LCD_Ini::
00B6 .dbline -1
00B6 .dbline 88
00B6 ; }//=======初始化==============
00B6 ; void LCD_Ini(void)
00B6 ; {
00B6 .dbline 90
00B6 ; //控制端口设置为输出:
00B6 ; DDRC=0xFF;;
00B6 8FEF ldi R24,255
00B8 84BB out 0x14,R24
00BA .dbline 90
00BA .dbline 91
00BA ; SETPORTC(LCD_RES);
00BA AC9A sbi 0x15,4
00BC .dbline 92
00BC ; CLRPORTC(LCD_E);
00BC AA98 cbi 0x15,2
00BE .dbline 93
00BE ; Delay(50);
00BE 02E3 ldi R16,50
00C0 10E0 ldi R17,0
00C2 AADF xcall _Delay
00C4 .dbline 94
00C4 ; send_cmd(LCD_ADC_NORMAL);
00C4 00EA ldi R16,160
00C6 DBDF xcall _send_cmd
00C8 .dbline 95
00C8 ; send_cmd(LCD_COMMON_REVERSE);
00C8 08EC ldi R16,200
00CA D9DF xcall _send_cmd
00CC .dbline 96
00CC ; send_cmd(LCD_BIAS_1DIV9);
00CC 02EA ldi R16,162
00CE D7DF xcall _send_cmd
00D0 .dbline 97
00D0 ; send_cmd(LCD_POWER_CONTROL+4);
00D0 0CE2 ldi R16,44
00D2 D5DF xcall _send_cmd
00D4 .dbline 98
00D4 ; send_cmd(LCD_POWER_CONTROL+6);
00D4 0EE2 ldi R16,46
00D6 D3DF xcall _send_cmd
00D8 .dbline 99
00D8 ; send_cmd(LCD_POWER_CONTROL+7);
00D8 0FE2 ldi R16,47
00DA D1DF xcall _send_cmd
00DC .dbline 100
00DC ; send_cmd(LCD_RESISTOR_RATIO+5);
00DC 05E2 ldi R16,37
00DE CFDF xcall _send_cmd
00E0 .dbline 101
00E0 ; send_cmd(LCD_ELEC_VOLUME_SET);
00E0 01E8 ldi R16,129
00E2 CDDF xcall _send_cmd
00E4 .dbline 102
00E4 ; send_cmd(0x14); //0X14
00E4 04E1 ldi R16,20
00E6 CBDF xcall _send_cmd
00E8 .dbline 103
00E8 ; send_cmd(LCD_ON);
00E8 0FEA ldi R16,175
00EA C9DF xcall _send_cmd
00EC .dbline 104
00EC ; send_cmd(LCD_RMW);
00EC 00EE ldi R16,224
00EE C7DF xcall _send_cmd
00F0 .dbline 105
00F0 ; send_cmd(LCD_START_LINE_SET);
00F0 00E4 ldi R16,64
00F2 C5DF xcall _send_cmd
00F4 .dbline -2
00F4 L24:
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbend
00F6 .dbfunc e Set_Page_Address _Set_Page_Address fV
00F6 ; dat -> R20
.even
00F6 _Set_Page_Address::
00F6 4A93 st -y,R20
00F8 402F mov R20,R16
00FA .dbline -1
00FA .dbline 109
00FA ; }
00FA ; //=======写页地址==============
00FA ; void Set_Page_Address(unsigned char dat)
00FA ; {
00FA .dbline 110
00FA ; send_cmd(LCD_PAGE_SET|dat);
00FA 042F mov R16,R20
00FC 006B ori R16,176
00FE BFDF xcall _send_cmd
0100 .dbline -2
0100 L25:
0100 .dbline 0 ; func end
0100 4991 ld R20,y+
0102 0895 ret
0104 .dbsym r dat 20 c
0104 .dbend
0104 .dbfunc e Set_Colume_Address _Set_Colume_Address fV
0104 ; tmp -> R20
0104 ; dat -> R22
.even
0104 _Set_Colume_Address::
0104 4A93 st -y,R20
0106 6A93 st -y,R22
0108 602F mov R22,R16
010A .dbline -1
010A .dbline 114
010A ; }
010A ; //=======写列地址==============
010A ; void Set_Colume_Address(unsigned char dat)
010A ; {
010A .dbline 116
010A ; unsigned char tmp;
010A ; tmp=dat>>4;
010A 462F mov R20,R22
010C 4295 swap R20
010E 4F70 andi R20,#0x0F
0110 .dbline 117
0110 ; send_cmd(LCD_COLUME_SET_H|tmp); //送列地址高三位
0110 042F mov R16,R20
0112 0061 ori R16,16
0114 B4DF xcall _send_cmd
0116 .dbline 118
0116 ; tmp=0x0f&dat;
0116 462F mov R20,R22
0118 4F70 andi R20,15
011A .dbline 119
011A ; send_cmd(tmp); //送列地址低四位
011A 042F mov R16,R20
011C B0DF xcall _send_cmd
011E .dbline -2
011E L26:
011E .dbline 0 ; func end
011E 6991 ld R22,y+
0120 4991 ld R20,y+
0122 0895 ret
0124 .dbsym r tmp 20 c
0124 .dbsym r dat 22 c
0124 .dbend
0124 .dbfunc e PrintOneASCII _PrintOneASCII fV
0124 ; Tmp -> R22
0124 ; j -> R20
0124 ; Asc -> R20
0124 ; l -> R10
0124 ; h -> R12
.even
0124 _PrintOneASCII::
0124 0E940000 xcall push_xgsetF03C
0128 A22E mov R10,R18
012A C02E mov R12,R16
012C 4885 ldd R20,y+8
012E .dbline -1
012E .dbline 126
012E ; }
012E ;
012E ; //在指定的位置显示1个ASCII码字符
012E ; //h,l:行位置与列位置
012E ; //Asc:字符的ASC值,注意ASC字符为可显示字符(ASCII>=0x20)
012E ; void PrintOneASCII(uchar h,uchar l,uchar Asc)
012E ; {
012E .dbline 128
012E ; uchar Tmp,j;
012E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -