野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11138|回复: 1

【求助】ILI9806G 屏不能显示颜色的问题

[复制链接]
发表于 2018-1-24 21:31:29 | 显示全部楼层 |阅读模式
本帖最后由 wyssss 于 2018-1-24 21:39 编辑

#include "lcd.h"
#include "stm32f4xx.h"
void delay_ms()
{
        u32 i=10000;
        while(i)
        {
                i--;
        }
}
void lcd_io_init()
{
        //PD PE PF PG
        RCC->AHB1ENR=0X0f<<3;
        
        //LCD_CS PG10
        GPIOG->MODER &= ~(0x03<<20);
        GPIOG->MODER |= 0x01<<20;
        GPIOG->OSPEEDR |= 0x03<<20;
        LCD_CS=1;
        
        //LCD_BL PF9
        GPIOF->MODER &= ~(0x03<<18);
        GPIOF->MODER |= 0x01<<18;
        LCD_BL=0;
        
        GPIOD->MODER &= (~(0X03<<0) | ~(0X03<<2) | ~(0X03<<16) | ~(0X03<<18) |
                        ~(0X03<<20) | ~((u32)0X03<<28) | ~((u32)0X03<<30) | ~((u32)0X03<<8) | ~(0X03<<10));
        GPIOD->MODER |= (0X01<<0) | (0X01<<2) | (0X01<<16) | (0X01<<18) | (0X01<<20) | ((u32)0X01<<28)
                                                                                | ((u32)0X01<<30) | (0X01<<8) | (0X01<<10);
        GPIOD->OSPEEDR |=(0X03<<0) | (0X03<<2) | (0X03<<16) | (0X03<<18) | (0X03<<20) | (u32)(0X03<<28)
                                                                                | ((u32)0X03<<30) | ((u32)0X03<<8) | ((u32)0X03<<10);
        
        GPIOE->MODER &= (~(0X03<<14) | ~(0X03<<16) | ~(0X03<<18) | ~(0X03<<20) | ~(0X03<<22) | ~(0X03<<24) |
                                                                        ~((u32)0X03<<26) | ~((u32)0X03<<28) | ~((u32)0X03<<30));
        GPIOE->MODER |= ((0X01<<14) | (0X01<<16) | (0X01<<18) | (0X01<<20) | (0X01<<22) | (0X01<<24) |
                                                                        (u32)(0X01<<26) | (u32)(0X01<<28) | (u32)(0X01<<30));
        GPIOE->OSPEEDR |=  ((0X03<<14) | (0X03<<16) | (0X03<<18) | (0X03<<20) | (0X03<<22) | (0X03<<24) |
                                                                        (u32)(0X03<<26) | (u32)(0X03<<28) | ((u32)0X03<<30));
}

//发送命令
void lcd_send_common(u8 common)
{
        LCD_RS=0;  //命令
        LCD_WR=1;
        LCD_RD=1;
        
        LCD_CS=0;   //片选
        LCD_WR=0;
        if(common & 0x01) LCD_D0=1; else LCD_D0=0;
        if(common & 0x02) LCD_D1=1; else LCD_D1=0;  
        if(common & 0x04) LCD_D2=1; else LCD_D2=0;  
        if(common & 0x08) LCD_D3=1; else LCD_D3=0;  
        if(common & 0x10) LCD_D4=1; else LCD_D4=0;  
        if(common & 0x20) LCD_D5=1; else LCD_D5=0;  
        if(common & 0x40) LCD_D6=1; else LCD_D6=0;
        if(common & 0x80) LCD_D7=1; else LCD_D7=0;
        LCD_WR=1;
        LCD_CS=1;   //取消片选
}

//发送命令参数
void lcd_send_parm(u8 data)
{
        LCD_RS=1;  //数据
        LCD_WR=1;
        LCD_RD=1;
        
        LCD_CS=0;   //片选
        LCD_WR=0;
        if(data & 0x01) LCD_D0=1; else LCD_D0=0;
        if(data & 0x02) LCD_D1=1; else LCD_D1=0;  
        if(data & 0x04) LCD_D2=1; else LCD_D2=0;  
        if(data & 0x08) LCD_D3=1; else LCD_D3=0;  
        if(data & 0x10) LCD_D4=1; else LCD_D4=0;  
        if(data & 0x20) LCD_D5=1; else LCD_D5=0;  
        if(data & 0x40) LCD_D6=1; else LCD_D6=0;
        if(data & 0x80) LCD_D7=1; else LCD_D7=0;
        LCD_WR=1;
        LCD_CS=1;   //取消片选
}

void lcd_send_color(u16 data)
{
        LCD_RS=1;  //数据
        LCD_WR=1;
        LCD_RD=1;
        
        LCD_CS=0;   //片选
        LCD_WR=0;
        if(data & 0x01) LCD_D0=1; else LCD_D0=0;
        if(data & 0x02) LCD_D1=1; else LCD_D1=0;  
        if(data & 0x04) LCD_D2=1; else LCD_D2=0;  
        if(data & 0x08) LCD_D3=1; else LCD_D3=0;  
        if(data & 0x10) LCD_D4=1; else LCD_D4=0;  
        if(data & 0x20) LCD_D5=1; else LCD_D5=0;  
        if(data & 0x40) LCD_D6=1; else LCD_D6=0;
        if(data & 0x80) LCD_D7=1; else LCD_D7=0;
        if(data & 0x0100) LCD_D8=1; else LCD_D8=0;
        if(data & 0x0200) LCD_D9=1; else LCD_D9=0;  
        if(data & 0x0400) LCD_D10=1; else LCD_D10=0;  
        if(data & 0x0800) LCD_D11=1; else LCD_D11=0;  
        if(data & 0x1000) LCD_D12=1; else LCD_D12=0;  
        if(data & 0x2000) LCD_D13=1; else LCD_D13=0;  
        if(data & 0x4000) LCD_D14=1; else LCD_D14=0;
        if(data & 0x8000) LCD_D15=1; else LCD_D15=0;
        LCD_WR=1;
        LCD_CS=1;   //取消片选
}
void lcd_init()
{
        lcd_io_init();
        delay_ms();
        lcd_send_common(0xFF); // EXTC Command Set enable register
lcd_send_parm(0xFF);
lcd_send_parm(0x98);
lcd_send_parm(0x06);

//lcd_send_common(0xBA); // SPI Interface Setting
//lcd_send_parm(0x60);

lcd_send_common(0xBC); // GIP 1
lcd_send_parm(0x01);
lcd_send_parm(0x0E);
lcd_send_parm(0x61);
lcd_send_parm(0xFB);
lcd_send_parm(0x10);
lcd_send_parm(0x10);
lcd_send_parm(0x0B);
lcd_send_parm(0x0F);
lcd_send_parm(0x2E);
lcd_send_parm(0x73);
lcd_send_parm(0xFF);
lcd_send_parm(0xFF);
lcd_send_parm(0x0E);
lcd_send_parm(0x0E);
lcd_send_parm(0x00);
lcd_send_parm(0x03);
lcd_send_parm(0x66);
lcd_send_parm(0x63);
lcd_send_parm(0x01);
lcd_send_parm(0x00);
lcd_send_parm(0x00);

lcd_send_common(0xBD); // GIP 2
lcd_send_parm(0x01);
lcd_send_parm(0x23);
lcd_send_parm(0x45);
lcd_send_parm(0x67);
lcd_send_parm(0x01);
lcd_send_parm(0x23);
lcd_send_parm(0x45);
lcd_send_parm(0x67);

lcd_send_common(0xBE); // GIP 3
lcd_send_parm(0x00);
lcd_send_parm(0x21);
lcd_send_parm(0xAB);
lcd_send_parm(0x60);
lcd_send_parm(0x22);
lcd_send_parm(0x22);
lcd_send_parm(0x22);
lcd_send_parm(0x22);
lcd_send_parm(0x22);

lcd_send_common(0xC7); // Vcom
lcd_send_parm(0x6F);

lcd_send_common(0xED); // EN_volt_reg
lcd_send_parm(0x7F);
lcd_send_parm(0x0F);
lcd_send_parm(0x00);

lcd_send_common(0xC0); // Power Control 1
lcd_send_parm(0x37);
lcd_send_parm(0x0B);
lcd_send_parm(0x0A);

lcd_send_common(0xFC); // LVGL
lcd_send_parm(0x0A);

/*
lcd_send_common(0xDF); // Engineering Setting
lcd_send_parm(0x00);
lcd_send_parm(0x00);
lcd_send_parm(0x00);
lcd_send_parm(0x00);
lcd_send_parm(0x00);
lcd_send_parm(0x20);   
*/

lcd_send_common(0xF3); // DVDD Voltage Setting
lcd_send_parm(0x74);

lcd_send_common(0xB4); // Display Inversion Control
lcd_send_parm(0x00);
lcd_send_parm(0x00);
lcd_send_parm(0x00);

lcd_send_common(0xF7); // 480x854
lcd_send_parm(0x89);

lcd_send_common(0xB1); // Frame Rate
lcd_send_parm(0x00);
lcd_send_parm(0x12);
lcd_send_parm(0x13);

lcd_send_common(0xF2); //Panel Timing Control
lcd_send_parm(0x80);
lcd_send_parm(0x5B);
lcd_send_parm(0x40);
lcd_send_parm(0x28);

lcd_send_common(0xC1); // Power Control 2
lcd_send_parm(0x17);
lcd_send_parm(0x7D);
lcd_send_parm(0x7A);
lcd_send_parm(0x20);

lcd_send_common(0xE0);
lcd_send_parm(0x00); //P1
lcd_send_parm(0x11); //P2
lcd_send_parm(0x1C); //P3
lcd_send_parm(0x0E); //P4
lcd_send_parm(0x0F); //P5
lcd_send_parm(0x0C); //P6
lcd_send_parm(0xC7); //P7
lcd_send_parm(0x06); //P8
lcd_send_parm(0x06); //P9
lcd_send_parm(0x0A); //P10
lcd_send_parm(0x10); //P11
lcd_send_parm(0x12); //P12
lcd_send_parm(0x0A); //P13
lcd_send_parm(0x10); //P14
lcd_send_parm(0x02); //P15
lcd_send_parm(0x00); //P16

lcd_send_common(0xE1);
lcd_send_parm(0x00); //P1
lcd_send_parm(0x12); //P2
lcd_send_parm(0x18); //P3
lcd_send_parm(0x0C); //P4
lcd_send_parm(0x0F); //P5
lcd_send_parm(0x0A); //P6
lcd_send_parm(0x77); //P7
lcd_send_parm(0x06); //P8
lcd_send_parm(0x07); //P9
lcd_send_parm(0x0A); //P10
lcd_send_parm(0x0E); //P11
lcd_send_parm(0x0B); //P12
lcd_send_parm(0x10); //P13
lcd_send_parm(0x1D); //P14
lcd_send_parm(0x17); //P15
lcd_send_parm(0x00); //P16

lcd_send_common(0x35); //Tearing Effect ON
lcd_send_parm(0x00);

lcd_send_common(0x3A);  
lcd_send_parm(0x55);

lcd_send_common(0x11); //Exit Sleep
delay_ms();
lcd_send_common(0x29); // Display On

lcd_clear(RED);
LCD_BL=1;
        
}

void lcd_clear(u16 color)
{
        u32 i=LCD_W *LCD_H;
        lcd_send_common(0x2A);  
        lcd_send_parm (0);
        lcd_send_parm (0);
        lcd_send_parm ((LCD_W-1)>>8);
        lcd_send_parm ((LCD_W-1) &(0XFF));
        
        lcd_send_common(0x2B);  
        lcd_send_parm (0);
        lcd_send_parm (0);
        lcd_send_parm ((LCD_H-1)>>8);
        lcd_send_parm ((LCD_H-1) &(0XFF));
        
        lcd_send_common(0x2C);  
        while(i--)
        {
                lcd_send_color(color);
        }
        
}


回复

使用道具 举报

发表于 2018-1-25 08:59:47 | 显示全部楼层
参考我们407的液晶屏程序,就是9806的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-18 03:26 , Processed in 0.068982 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表