一个12864屏,不知如何辨认脚位,只有9根线。

2020-02-04 09:24发布

一个12864屏,不知如何辨认脚位,只有9根线。

(原文件名:未命名12864.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
Hamyou
2020-02-05 10:24
传一个这个屏的驱动,测试过,没问题

#ifndef __12864COG_H__
#define __12864COG_H__

#define uchar unsigned char
#define uint unsigned int


#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define DISPLAY_START_LINE 0x40   //0
#define DISPLAY_PAGE 0xB0
#define DISPLAY_ADC_L 0xA0    //the LSB is first
#define DISPLAY_ADC_M 0xA1
#define DISPLAY_REVERSE_OFF 0xA6
#define DISPLAY_REVERSE_ON 0xA7
#define DISPLAY_ENTIRE_ON 0xA5
#define DISPLAY_ENTIRE_OFF 0xA4
#define DISPLAY_SHL_NOM 0xC0
#define DISPLAY_SHL_REV 0xC8

#define LCD_POWER_CV 0x2C
#define LCD_POWER_RV 0x2E
#define LCD_POWER_FV 0x2F

#define LCD_REPOWER_1 0x81
#define LCD_REPOWER_2 0x31
#define LCD_RESISTOR 0x20

#define LCD_RESET 0xE2
#define DISPLAY_COLUMN_MSB 0x10    //0
#define DISPLAY_COLUMN_LSB 0x00                        //0

sbit  LCD_CS=P1^0;
sbit  LCD_RES=P1^1;
sbit  LCD_RS=P1^2;
sbit  LCD_SCK=P1^3;
sbit  LCD_SDA=P1^4;

#define LCD_CS_H LCD_CS=1
#define LCD_CS_L LCD_CS=0

#define LCD_RES_H  LCD_RES=1
#define LCD_RES_L  LCD_RES=0

#define LCD_RS_H   LCD_RS=1
#define LCD_RS_L   LCD_RS=0

#define LCD_SCK_H  LCD_SCK=1
#define LCD_SCK_L  LCD_SCK=0

#define LCD_SDA_H  LCD_SDA=1
#define LCD_SDA_L  LCD_SDA=0





void Write_DAT(uchar dat);
void Write_CMD(uchar com);
void Initialize_LCD(void);
void Write_word(uchar x,uchar y,uchar dat[]);
void Write_char(uchar x,uchar y,uchar dat[]);
void Displaychars(uchar x,uchar y,uchar dat[]);
void Displaywords(uchar x,uchar y,uchar dat[]);
void Clr_LCD(void);

/*******************************************************************************
*函数名:延时函数
*功能:延时
*输入:uchar n(延时长度)
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/
void Delayus(uchar n)
{
     for(;n>0;n--);

}



/*******************************************************************************
*函数名:写数据函数
*功能:写一个数据到液晶
*输入:uchar com(数据)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/


/*******************发送数据***********************/
void Write_DAT(uchar dat)
{
    uchar i;
    LCD_RS_H;
    LCD_CS_L;
        LCD_SCK_L;
    for(i=0;i<8;i++)
    {
               if(dat&0x80) LCD_SDA_H;
        else         LCD_SDA_L;
                   LCD_SCK_H;
            //Delayus(5);
                 LCD_SCK_L;
                   dat=dat<<1;
    }
        LCD_CS_H;
}

/*******************************************************************************
*函数名:写指令函数
*功能:写一个指令到液晶
*输入:uchar com(命令)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/


/*******************发送命令***********************/
void Write_CMD(uchar com)
{
        uchar i;
          LCD_RS_L;
          LCD_CS_L;
        LCD_SCK_L;
          for(i=0;i<8;i++)
           {
            if(com&0x80) LCD_SDA_H;
        else         LCD_SDA_L;
                   LCD_SCK_H;
            //Delayus(5);
                 LCD_SCK_L;
                 com=com<<1;
          }
        LCD_CS_H;
}

/*******************************************************************************
*函数名:初始化函数
*功能:启动液晶,初始化液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD(),延时函数Delay()
*版本:1.0
*
*******************************************************************************/

void Initialize_LCD(void)
{
        LCD_RES_L;
        delayms(100);
        LCD_RES_H;
        Write_CMD(DISPLAY_ADC_L);
        Write_CMD(DISPLAY_SHL_NOM);
        Write_CMD(0xA2);
        Write_CMD(LCD_POWER_CV);
        delayms(100);
        Write_CMD(LCD_POWER_RV);
        delayms(100);
        Write_CMD(LCD_POWER_FV);
        Write_CMD(LCD_REPOWER_1);
        Write_CMD(LCD_REPOWER_2);
        Write_CMD(LCD_RESISTOR);
        Write_CMD(DISPLAY_START_LINE+32);
        Write_CMD(DISPLAY_SHL_REV);
        Write_CMD(DISPLAY_ON);       
}

void Write_oneDat(uchar x,uchar y,uchar p)
{
        uchar COH,COL;
        COH=DISPLAY_COLUMN_MSB + x/16;
        COL=DISPLAY_COLUMN_LSB + x%16;
        Write_CMD(COH);
        Write_CMD(COL);
        Write_CMD(DISPLAY_PAGE + y-1);
        Write_DAT(p);
       

}


/*******************************************************************************
*函数名:写字符函数
*功能:写字符函数,写一个字符到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/



void Write_char(uchar x,uchar y,uchar *p)
{
        uchar i,COH,COL;
        COH=DISPLAY_COLUMN_MSB + x/16;
        COL=DISPLAY_COLUMN_LSB + x%16;
        Write_CMD(COH);
        Write_CMD(COL);
        Write_CMD(DISPLAY_PAGE + 2*(y-1));
        for(i=0;i<8;i++)
        {
                Write_DAT(*(p+i));
        }
        Write_CMD(COH);
        Write_CMD(COL);
        Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
        for(i=0;i<8;i++)
        {
                Write_DAT(*(p+i+8));
        }
       
}
void Write_word(uchar x,uchar y,uchar *p)
{
        uchar i,COH,COL;
        COH=DISPLAY_COLUMN_MSB + x/16;
        COL=DISPLAY_COLUMN_LSB + x%16;
        Write_CMD(COH);
        Write_CMD(COL);
        Write_CMD(DISPLAY_PAGE + 2*(y-1));
        for(i=0;i<16;i++)
        {
                Write_DAT(*(p+i));
        }
        Write_CMD(COH);
        Write_CMD(COL);
        Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
        for(i=0;i<16;i++)
        {
                Write_DAT(*(p+i+16));
        }
       
}
void Write_words(uchar x,uchar y,uchar num,uchar *p)
{
        uchar i;
        for(i=0;i<num;i++)
        {
           Write_word(x,y,p);
           x+=16;
           p+=32;
        }
}


/*******************************************************************************
*函数名:清屏函数
*功能:将液晶清屏液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/


void Clr_LCD(void)
{
        uchar i,j;
        Write_CMD(DISPLAY_COLUMN_MSB);
        Write_CMD(DISPLAY_COLUMN_LSB);
        for(i=0;i<9;i++)
        {
                Write_CMD(DISPLAY_PAGE + i);
                Write_CMD(DISPLAY_COLUMN_MSB);
                Write_CMD(DISPLAY_COLUMN_LSB);
                for(j=0;j<132;j++)
                {
                        Write_DAT(0x00);
                }
        }
}
#endif

一周热门 更多>