KS0108 128X64 LCD C语言AVR程序

发布者:ananan一二三四五最新更新时间:2017-12-13 来源: eefocus关键字:KS0108  128X64  LCD  AVR程序 手机看文章 扫描二维码
随时随地手机看文章

KS0108 128X64 LCD C语言AVR程序

/* 
LCD引脚定义 
1---GND  
2---VCC 
3---VLCD 
4---D/I 
5---R/W 
6---E 
7到14 D0-D7 
15--CS1 
16--CS2 
17--RESET 
18--VEE

19--SW 
20--NC  
*/ 
#include  
#include  

unsigned char CurOffset,CurRow,CurPage,CurCol;     

/*  常量定义  */ 
#define LCD_STATUS_BUSY 0x80 
#define  START_LINE0   0xc0 
#define  DISPLAY_ON    0x3f 
#define  DISPLAY_OFF   0x3e 
#define  PARA1         0x40 
//PORTA---数据口  PORTB----控制口 
volatile unsigned char *LCD_DIR_PORT = &DDRA; 
volatile unsigned char *LCD_IP_PORT  = &PINA; 
volatile unsigned char *LCD_OP_PORT  = &PORTA; 

volatile unsigned char *LCD_EN_PORT  = &PORTB; 
volatile unsigned char *LCD_CS2_PORT = &PORTB; 
volatile unsigned char *LCD_CS1_PORT = &PORTB; 
volatile unsigned char *LCD_RW_PORT  = &PORTB; 
volatile unsigned char *LCD_DI_PORT  = &PORTB; 

char LCD_EN_BIT  = BIT(4); 
char LCD_CS2_BIT = BIT(3); 
char LCD_CS1_BIT = BIT(2); 
char LCD_RW_BIT  = BIT(1); 
char LCD_DI_BIT  = BIT(0); 

#define SET_LCD_E                  *LCD_EN_PORT |= LCD_EN_BIT    //LCD使能 
#define CLEAR_LCD_E               *LCD_EN_PORT &= ~LCD_EN_BIT   //LCD禁止 

#define SET_LCD_DATA              *LCD_DI_PORT |= LCD_DI_BIT    //选择指令端口 
#define SET_LCD_CMD               *LCD_DI_PORT &= ~LCD_DI_BIT   //选择数据端口 

#define SET_LCD_READ              *LCD_RW_PORT |= LCD_RW_BIT    //读模式 
#define SET_LCD_WRITE              *LCD_RW_PORT &= ~LCD_RW_BIT   //写模式 

#define SET_LCD_CS2              *LCD_CS2_PORT |= LCD_CS2_BIT  //左屏选择禁止 
#define CLEAR_LCD_CS2              *LCD_CS2_PORT &= ~LCD_CS2_BIT //左屏选择使能 

#define SET_LCD_CS1              *LCD_CS1_PORT |= LCD_CS1_BIT  //左屏选择禁止 
#define CLEAR_LCD_CS1              *LCD_CS1_PORT &= ~LCD_CS1_BIT //左屏选择使能 

#define LEFT 0 
#define RIGHT 1 
#define CMD 0 
#define DATA 1 

void LCD_BUSY(unsigned char lr) //判断忙标志 

    unsigned char status; 
    CLI(); 
    if(lr==LEFT) 
    { 
        CLEAR_LCD_CS2; //cs2=0 
        SET_LCD_CS1;   //cs1=1 
    } 
    else 
    { 
        SET_LCD_CS2;   //cs2=1 
        CLEAR_LCD_CS1; //cs1=0 
    }     
    SET_LCD_CMD; 
    *LCD_DIR_PORT = 0x00; 
    *LCD_OP_PORT = 0xff;         
    SET_LCD_READ; 
    SET_LCD_E;                     
    asm("nop");    asm("nop"); 
    asm("nop");    asm("nop"); 
    while((*LCD_IP_PORT) & LCD_STATUS_BUSY) 
    { 
        CLEAR_LCD_E;                
        asm("nop");    asm("nop"); 
        asm("nop");    asm("nop"); 
        SET_LCD_E; 
        asm("nop");    asm("nop"); 
        asm("nop");    asm("nop"); 
    } 
    CLEAR_LCD_E; 
    SET_LCD_WRITE; 
    *LCD_OP_PORT = 0xff; 
    SEI(); 


void write_LCD(unsigned char lr,unsigned char cd,unsigned char data) /*写入指令或数据*/ 
{     
    CLI(); 
    LCD_BUSY(lr); 
    if(cd==CMD)    SET_LCD_CMD; 
    else SET_LCD_DATA; 
    SET_LCD_WRITE;  
    SET_LCD_E; 
    *LCD_DIR_PORT = 0xff; 
    *LCD_OP_PORT = data; 
    asm("nop");    asm("nop"); 
    asm("nop");    asm("nop"); 
    CLEAR_LCD_E; 
    *LCD_OP_PORT = 0xff; 
    SEI(); 

unsigned char read_LCD(unsigned char lr)      /*  读显示数据 */ 

    unsigned char data; 

    CLI(); 
    LCD_BUSY(lr); 
    SET_LCD_DATA; 
    *LCD_DIR_PORT = 0x00; 
    *LCD_OP_PORT = 0xff; 
    SET_LCD_READ; 
    SET_LCD_E; 
    asm("nop");    asm("nop"); 
    asm("nop");    asm("nop"); 
    data=*LCD_IP_PORT; 
    CLEAR_LCD_E; 
    SET_LCD_WRITE; 

    LCD_BUSY(lr); 
    SET_LCD_DATA;  
    *LCD_DIR_PORT = 0x00; 
    *LCD_OP_PORT = 0xff; 
    SET_LCD_READ;  
    SET_LCD_E; 
    asm("nop");    asm("nop"); 
    asm("nop");    asm("nop"); 
    data=*LCD_IP_PORT; 
    CLEAR_LCD_E; 
    SET_LCD_WRITE; 

    SEI(); 
    return data; 


void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63 

    write_LCD(LEFT,CMD,0xc0|line);  


void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63 

    write_LCD(RIGHT,CMD,0xc0|line);  


void set_page_L(unsigned char page)    /*设置X地址 设置页*/  //0-7 

    write_LCD(LEFT,CMD,0xb8|page);                      

void set_page_R(unsigned char page)    /*设置X地址 设置页*/ //0-7 

    write_LCD(RIGHT,CMD,0xb8|page);                      


void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63 

    write_LCD(LEFT,CMD,0x40|col);                      


void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63 

    write_LCD(RIGHT,CMD,0x40|col);                      


void init_lcd(void) /*初始化函数*/ 

    set_start_line_L(0); /*显示起始行为0*/ 
    set_start_line_R(0); /*显示起始行为0*/ 
    write_LCD(LEFT,CMD,DISPLAY_ON); /*  开显示  */ 
    write_LCD(RIGHT,CMD,DISPLAY_ON); /*  开显示  */ 


void clr_lcd(void) /*清屏函数*/ 

    unsigned char pages,i; 
    for(pages=0;pages<8;pages++) 
        { 
            set_page_L(pages);  /* X 页地址 */ 
            set_page_R(pages);  /* X 页地址 */ 
            for(i=0;i<64;i++)    
                { 
                    set_col_addr_L(i);//Y 
                    set_col_addr_R(i);//Y 
                    write_LCD(LEFT,DATA,0x0); 
                    write_LCD(RIGHT,DATA,0x0); 
                } 
        } 


//ASCII 字模宽度及高度 
#define ASC_CHR_WIDTH    8 
#define ASC_CHR_HEIGHT    12 

typedef struct typFNT_ASC16    /* 汉字字模显示数据结构 */ 

    char Index[1]; 
    char Msk[16]; 
}; 
struct typFNT_ASC16 const ASC_16[] = {    /* 显示为8*16  Curier 10 常规*/ 
"1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00, 
"2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00, 
"3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00, 
"4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00, 
"5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00, 
"6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, 
"7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00, 
"8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, 
"9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00, 
"0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, 
".",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 
",",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00, 
":",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 
";",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00, 
"-",0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
"_",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 
"A",0x00,0x00,0x80,0x64,0x1C,0x60,0x80,0x00,0x00,0x04,0x07,0x05,0x01,0x05,0x07,0x04, 
"B",0x00,0x04,0xFC,0x44,0x44,0x44,0x44,0xB8,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x03, 
"C",0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02, 
"D",0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,0x04,0x07,0x04,0x04,0x04,0x02,0x01, 
"E",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x06, 
"F",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x00,0x00,0x00, 
" ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
"=",0x00,0x00,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
"(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00, 
")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00, 
"V",0x00,0x04,0x3C,0xC4,0x00,0xC4,0x3C,0x04,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x00, 
"m",0x00,0x20,0xE0,0x20,0xC0,0x20,0xC0,0x00,0x00,0x04,0x07,0x00,0x07,0x00,0x07,0x04, 
"H",0x00,0x04,0xFC,0x44,0x40,0x44,0xFC,0x04,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04, 
"*",0x90,0x90,0x60,0xFC,0x60,0x90,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00, 
}; 

#define ASC_Hz_WIDTH    12 
//#define ASC_HZ_HEIGHT    12 

typedef struct typFNT_GB16    /*12*16 汉字字模显示数据结构 */ 

    char Index[2]; 
    char Msk[24]; 
}; 
struct typFNT_GB16 const GB_16[] = {    /* 宋体 9 显示为12*16 */ 
"科",0x8A,0x6A,0xFE,0x29,0x49,0x80,0x92,0xA4,0x80,0xFF,0x40,0x00,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00, 
"技",0x44,0x44,0xFF,0x24,0x00,0x64,0xA4,0x3F,0xA4,0x64,0x04,0x00,0x04,0x04,0x07,0x00,0x04,0x04,0x02,0x01,0x02,0x04,0x04,0x00, 
"有",0x42,0x22,0x12,0xFA,0x4E,0x4B,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x00,0x00,0x00,0x07,0x01,0x01,0x01,0x05,0x07,0x00,0x00,0x00, 
"限",0xFF,0x81,0x99,0xE7,0x00,0xFF,0x25,0xE5,0x25,0xBF,0x40,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x02,0x04,0x00, 
"公",0x20,0x10,0x08,0x07,0xC0,0x30,0x83,0x0C,0x10,0x20,0x20,0x00,0x00,0x04,0x06,0x05,0x04,0x04,0x02,0x03,0x06,0x00,0x00,0x00, 
"司",0x08,0x09,0xE9,0x29,0x29,0x29,0xED,0x09,0x01,0xFF,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x07,0x00,0x00, 
}; 

unsigned char GetPage(void) /*得到当前页*/ 

    return CurPage; 


unsigned char GetCol(void) /*得到当前列*/ 

    return CurCol; 


void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */ 

    CurPage = upage; 
    CurCol = ucol; 
    if(ucol<64) 
    { 
        set_page_L(upage); 
        set_col_addr_L(ucol); 
    } 
    else 
    { 
        set_page_R(upage); 
        set_col_addr_R(ucol-64); 
    } 


/* 设置当前显示的页和列 */ 
void SetRowCol(unsigned char urow, unsigned char ucol)  

    unsigned char page; 
    CurRow = urow; 
    CurCol = ucol; 
     
    switch(urow) 
    { 
        case 1: 
            page=0; 
            CurOffset=1; 
            break; 
        case 2: 
            page=1; 
            CurOffset=2; 
            break; 
        case 3: 
            page=3; 
            CurOffset=1; 
            break; 
        case 4: 
            page=4; 
            CurOffset=2; 
            break; 
        case 5: 
            page=6; 
            CurOffset=1; 
            break; 
    } 
    SetPageCol(page,ucol); 


void disp_ch(unsigned char c) 

    unsigned char k,j,uPage,uCol,ch_r,ch_w; 
    unsigned char width; 
    unsigned char len; 
    uPage = GetPage(); 
    uCol = GetCol(); 
    len=sizeof(ASC_16)/sizeof(ASC_16[0]); 
    for(k=0;k    { 
        if(c == ASC_16[k].Index[0] ) break; 
    } 
    if(k    { 
         
        if(c==’-’||c==’:’)  
            width=ASC_CHR_WIDTH-2; 
        else if(c==’|’) 
            width=ASC_HZ_WIDTH-ASC_CHR_WIDTH; 
        else  
            width=ASC_CHR_WIDTH; 
         
        if(CurOffset==1) //下半部是写半个字节 
        { 
            for(j=0;j            { 
                SetPageCol(uPage,uCol+j); 
                ch_w=ASC_16[k].Msk[j]; 
                if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w); 
            } 
            SetPageCol(uPage+1,uCol); 
             
            for(j=0;j            { 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                else ch_r=read_LCD(RIGHT); 
                ch_r&=0xf0; 
                ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;  
                ch_w|=ch_r; 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w);  
            } 
        } 
        else //上半部是写半个字节 
        { 
            for(j=0;j            { 
                SetPageCol(uPage,uCol+j); 
                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                else ch_r=read_LCD(RIGHT); 
                ch_r&=0x0f; 
                ch_w=ASC_16[k].Msk[j]; 
                ch_w=ch_w<<4; 
                ch_w|=ch_r; 
                SetPageCol(uPage,uCol+j); 
                if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w);  
            } 
            SetPageCol(uPage+1,uCol); 
            for(j=0;j            { 
                SetPageCol(uPage+1,uCol+j); 
                 
                ch_r=ASC_16[k].Msk[j]; 
                ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]; 
                ch_r=ch_r>>4; 
                ch_w=ch_w<<4;  
                ch_w|=ch_r; 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w);  
            } 
        } 
    } 
    SetPageCol(uPage,uCol+width); 



void disp_hz(unsigned char *hz) 

    unsigned char k,j,uPage,uCol,ch_r,ch_w; 
    uPage = GetPage(); 
    uCol = GetCol(); 
    for(k=0;k    { 
        if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1]) 
            break; 
    } 

    if(CurOffset==1)  
    { 
    for(j=0;j    { 
        SetPageCol(uPage,uCol+j); 
        ch_w=GB_16[k].Msk[j]; 
        if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w); 
        else write_LCD(RIGHT,DATA,ch_w); 
    } 
    SetPageCol(uPage+1,uCol); 

    for(j=0;j    { 
        SetPageCol(uPage+1,uCol+j); 
        if(uCol+j<64) ch_r=read_LCD(LEFT); 
        else ch_r=read_LCD(RIGHT); 
        ch_r&=0xf0; 
        ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;  
        ch_w|=ch_r; 
        SetPageCol(uPage+1,uCol+j); 
        if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
        else write_LCD(RIGHT,DATA,ch_w); 
    } 
    SetPageCol(uPage,uCol+ASC_HZ_WIDTH); 
    } 

    else //汉字上半部是写半个字节 
    { 
    for(j=0;j    { 
        SetPageCol(uPage,uCol+j); 
        if(uCol+j<64) ch_r=read_LCD(LEFT); 
        else ch_r=read_LCD(RIGHT); 
        ch_r&=0x0f; 
        ch_w=GB_16[k].Msk[j]; 
        ch_w=ch_w<<4; 
        ch_w|=ch_r; 
        SetPageCol(uPage,uCol+j); 
        if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
        else write_LCD(RIGHT,DATA,ch_w);  
    } 
    SetPageCol(uPage+1,uCol); 
    for(j=0;j    { 
        SetPageCol(uPage+1,uCol+j); 

        ch_r=GB_16[k].Msk[j]; 
        ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]; 
        ch_r=ch_r>>4; 
        ch_w=ch_w<<4;  
        ch_w|=ch_r; 
        SetPageCol(uPage+1,uCol+j); 
        if(uCol+j<64)    write_LCD(LEFT,DATA,ch_w);  
        else write_LCD(RIGHT,DATA,ch_w);  
    } 
    SetPageCol(uPage,uCol+ASC_HZ_WIDTH); 
    } 


void disp_str(unsigned char *p) 

    unsigned char i=0; 
    while(p[i]>0) 
    { 
        if(p[i] < 128) 
        {    /* ASCII */ 
            disp_ch(p[i]); 
        } 
        else 
        {    /* 中文 */ 
            disp_hz(&p[i]); 
            i++; 
        } 
        i++; 
    } 


/*************************************/ 
/*             绘点函数              */ 
/*************************************/ 
/* XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点 */ 
void pixel(unsigned char xx,unsigned char yy,unsigned char flag) 

    unsigned int y,ch; 
    ch=yy%8;  //余数 

    y=1; 
    for(;ch!=0;) 
        { 
            y=y*2; 
            ch--; 
        } 
    if(xx<64) 
        { 
            set_page_L(yy/8); 
            set_col_addr_L(xx);     
            ch=read_LCD(LEFT); 
            set_col_addr_L(xx); 
            if(flag) 
                write_LCD(LEFT,DATA,ch|y); 
            else 
            { 
                y=~y; 
                ch&=y; 
                write_LCD(LEFT,DATA,ch|y); 
            } 
        } 
    else 
        { 
            set_page_R(yy/8); 
            set_col_addr_R(xx-64);     
            ch=read_LCD(RIGHT); 
            set_col_addr_R(xx-64);     
            if(flag) 
                write_LCD(RIGHT,DATA,ch|y); 
            else 
            { 
                y=~y; 
                ch&=y; 
                write_LCD(RIGHT,DATA,ch|y); 
            } 
        } 


关键字:KS0108  128X64  LCD  AVR程序 引用地址:KS0108 128X64 LCD C语言AVR程序

上一篇:RT12232F st7920驱动程序
下一篇:AVR单片机熔丝位锁死解密方法

推荐阅读最新更新时间:2024-03-16 15:49

AT89C2051 + SD卡 + 3310LCD = 音乐播放器
这个小玩意,采用 ATMEL 的传统51MCU作主控制芯片,加上SD卡和显示屏,就可以作简单的音乐播放器了,虽然音质不怎么样,不过作为DIY还是蛮有乐趣,希望大家喜欢。 没有采用FAT文件系统,只是按扇区读取SD卡,由于2051资源有限,改为4051有望可以操作FAT,但目前程序还在不断完善中。 128byte怎样读取512byte的扇区数据?可以采用边读边播放的方式,就能解决。音乐文件是32KHz取样率的WAV文件,所以和HIFI就沾不上边了。 程序是用C来编写,以方便交流,资料整理中,完善后再上传。 iframe id="iframe_0.7959302130620927" src="data:text/html;chars
[单片机]
AT89C2051 + SD卡 + 3310<font color='red'>LCD</font> = 音乐播放器
STN-LCD彩屏模块设计
STN-LCD彩屏模块设计 如何实现LCD平板显示屏驱动电路的高性能设计是当前手持设备设计工程师面临的重要挑战。本文分析了LCD显示面板的分类和性能特点,介绍了LCD显示屏设计中关键器件LDO,导通时间仅150μs" target=_blank LDO 和白光LED的选择要点,以及电荷泵LED驱动电路的设计方法。 STN-LCD彩屏模块的内部结构如图1所示,它的上部是一块由偏光片、玻璃、液晶组成的LCD屏,其下面是白光LED和背光板,还包括LCD驱动IC和给LCD驱动IC提供一个稳定电源的低压差稳压器(LDO),二到八颗白光LED以及LED驱动的升压稳压IC。 STN-LCD彩屏模块的电路结构如图2所示,外来电源V
[模拟电子]
STN-<font color='red'>LCD</font>彩屏模块设计
LCD电视线路原理图分析
LCD 电视的原理框图如下图所示,主要由以下几个部分组成: 1、普通模拟电视信号处理模块。该模块与普通电视机中的电视信号处理部分功能相同,其可接受多种输入信号格式,如RF电视射频信号、CVBS复合电视信号、S-Video信号、色差分量信号等。RF电视射频信号的接收一般使用一体化二合一高频头进行处理,处理后可直接输出复合电视信号和解调的伴音信号。同时,高频头也可输出第二伴音中频信号SIF提供给带丽音解码的机型使用。高频头输出的复合电视信号经视频解码IC处理后,输出模拟YUV(或RGB)信号及行场同步信号供数字板进行处理使用。 2、模拟信号/数字信号转换模块。该模块把三通道模拟YUV(或RGB)信号,通过AD转换器处理
[工业控制]
<font color='red'>LCD</font>电视线路原理图分析
六、2440裸机开发 lcd操作
LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。 s3c2440通过lcd来显示图像,在2440内部,存在lcd控制相关的寄存器,其结构图如下: 其中,REABANK是一些寄存器组主要包含17个设置参数的寄存器和256x16的调色板内存,其每个寄存器的作用将在下文一一展开;LCDCDMA是供LCD专用的
[单片机]
六、2440裸机开发 <font color='red'>lcd</font>操作
2018新iPhone贴膜再曝光 LCD版边框略宽
据悉,苹果今年秋季将发布三款新iPhone,包括5.8英寸,6.1英寸和6.5英寸三款,其中6.1英寸采用了LCD屏,是定位最廉价的一款型号。不久前,配件厂商Olixar又曝光了一组三款iPhone的贴膜谍照,方便大家对三款新机的尺寸有较为准确的认知。   可以看到,中间的一款贴膜边框明显较宽,这是LCD屏无法避免的短板。不过这也使得这款型号的价格可以下探到600-700美元之间。而回顾近期的传闻,LCD屏iPhone将采用多个配色,支持Face ID,无线充电,后置单摄,看起来是一款不错的机型,但是该机型将阉割掉3D Touch功能。   至于6.5英寸的iPhone X Plus,据传苹果将为该机型配备三后摄,增强AI表现
[手机便携]
基于DS3984/DS3988的LCD电视背光驱动电路设计
  LCD电视应用中可以采用多种架构产生驱动CCFL所需的交流波形,驱动多个CCFL时所要面对的三个关键的设计挑战是选择最佳的驱动架构、多灯驱动、灯频和脉冲调光频率控制。本文对四种常用驱动架构进行了对比分析,并提出多灯设计中解决亮度不均以及驱动频率可能干扰画面等问题的方法,并提出基於DS3984/DS3988的电路方案。      图1:Royer驱动器简单,但不太精确   液晶显示器(LCD)正成为电视的主流显示技术。LCD面板实际上是电子控制的光阀,需要靠背光源产生可视的影像,LCD电视通常用冷阴极萤光灯提供光源。其他背光技术,例如发光二极体也受到一定的重视,但由於成本过高限制了它的应用。   由於LCD电视是消费品
[电源管理]
基于DS3984/DS3988的<font color='red'>LCD</font>电视背光驱动电路设计
联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
SSD1306/SSD1315 OLED 0.96的128x64 OLED液晶屏是嵌入式应用中最常见的一种屏幕, 这种屏幕常见的pin脚类型有两种: I2C和SPI, 驱动通常是SSD1306, 最近会有一些是SSD1315 I2C类型的OLED只有4个pin脚, 不可修改连接模式, 比较好辨认 SPI类型的OLED有6/7/8pin几种类型, 最常见的是7pin, 带协议选项的模块, 这种模块的背面PCB会有三种模式的选择说明, 后面列出的Rx代表那些位置需要焊接电阻, 通常这些电阻阻值都是5KR, 默认出厂都是4线SPI的模式 在SPI模式下, SSD1306和SSD1315的驱动方式是一样的. 因为W806可以使用
[单片机]
联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 <font color='red'>128x64</font> OLED液晶屏
CRT即将成历史 市场份额萎缩至30%
  厂商纷推小尺寸LCD,大尺寸屏价格跳水   CRT市场份额萎缩至30%   近几年来,CRT显示器市场已经逐年萎缩,去年,CRT显示器的市场份额已经萎缩到不足30%.相应的,TFT-LCD出货量则大幅增长57%.   据市场调研机构DisplaySearch估计,今年CRT将继续衰退,出货量将由去年1760万平方米衰退到今年的1470万平方米,衰退幅度约16%,整个市场占有率将不足15%.   CRT即将成为历史   发明于1897年的CRT技术,在经历百年后,正在淡出历史舞台,将被TFT-LCD技术取代。   在研发方面,研究机构已经终止对CRT技术的研发,据BP日经报道,有着显示器技术风向标之称的日本信息显示学
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved