⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddriver.lis

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -