caoweidongediy 发表于 2013-1-8 21:10:51

各位有对LCD1602屏比较熟悉的么 我的屏点的时候显示出现了...

1602的液晶采用4位驱动的方式 这个屏只能4位驱动
显示出来的字母数字都是镜像的 摸不清楚怎么回事 有没有懂的朋友指点指点!
   write_com(0x33);          //16*2显示,5*7点阵,8位数据
    delay(100);
    write_com(0x32);         
    delay(100);
    write_com(0x28);         
    delay(100);
    write_com(0x0c);          //显示开,关光标
    delay(100);
                write_com(0x04);          //移动光标
    delay(100);
                while(0);
                write_com(0x01);          //清除LCD的显示内容
    delay(100);

以上是初始化部分的函数!

HeP028 发表于 2013-1-8 22:23:56

#include "LCD1602.H"

//mode:bit 4

#define LCD_DATA_DDRDDRF
#define        LCD_DATA_PORT PORTF
#define LCD_RS_DDR          DDRF
#define LCD_RS_PORT          PORTF
#define LCD_EN_DDR          DDRF
#define LCD_EN_PORT          PORTF
#define        LCD_RS                  BIT(PF2)
#define LCD_EN          BIT(PF3)
#define LCD_DATA          BIT(PF2) | BIT(PF2) | BIT(PF2) | BIT(PF2)       

void LCDWriteEn(void)
{
        LCD_EN_PORT |=LCD_EN;                                //enhigh
        delayNus(10);
        LCD_EN_PORT &= ~LCD_EN;                                //enlow
}

void LCDWriteCommandorWriteData(unsigned char CommandorData,unsigned char Mode)       
{
        delayNus(26);
        switch (Mode)
        {
               case 0:        LCD_RS_PORT &= ~LCD_RS;        break;//RS在写命令时候为L
                case 1:        LCD_RS_PORT |=LCD_RS;        break;//RS在写命令时候为H
        }       
        LCD_DATA_PORT &= 0X0F;
        LCD_DATA_PORT |= CommandorData & 0XF0;                //把数据准备好
        LCDWriteEn();
        CommandorData = CommandorData << 4;
        LCD_DATA_PORT &= 0x0f;
        LCD_DATA_PORT |= CommandorData & 0XF0;                //把数据准备好
        LCDWriteEn();
}


void LCDUsePortInitial(void)
{
        LCD_DATA_DDR |= LCD_DATA;
        LCD_RS_DDR   |= LCD_RS;
        LCD_EN_DDR   |= LCD_EN;
}

//--------------------------------------------------
//函数名称:初始化
//            ->RS RW D7 D6 D5 D4 D3 D2 D1 D0
//清屏      ->0000000001
//功能设置    ->0000001DL NF
//显示开关控制->00001DCB**
//输入方式    ->00000001 I/D S
//--------------------------------------------------
void LCDdisplayInitial(void)
{
        LCDWriteCommandorWriteData(0x28,0);        LCDWriteEn();
        LCDWriteCommandorWriteData(0x28,0); delayNms(10);       
        LCDWriteCommandorWriteData(0x01,0);        delayNms(10);
        LCDWriteCommandorWriteData(0x0c,0); delayNms(10);
}


//----------------------------------
//函数名称:指定位置写数据
//入口参数:unsigned char X,unsigned char Y,unsigned char dataSend
//返回的值:--
//----------------------------------
void LCDWriteoneChar(unsigned char X,unsigned char Y,unsigned char dataSend)
{          
        LCDWriteCommandorWriteData((0x80 + (Y << 6) + X),0);
        LCDWriteCommandorWriteData(dataSend,1);
}                                                                  

//----------------------------------
//函数名称:写字符串
//入口参数:unsigned char X,unsigned char Y,unsigned char *dataSend
//返回的值:--
//----------------------------------
void LCDWriteString(unsigned char X,unsigned char Y,unsigned char *dataSend)
{       
        LCDWriteCommandorWriteData((0x80 + (Y << 6) + X),0);
    while(*dataSend != '\0')
        {       
                LCDWriteCommandorWriteData(*dataSend,1);
                dataSend++;
        }
}

//----------------------------------
//函数名称:写自定义字符
//入口参数:unsigned char Address,unsigned char *Per
//返回的值:--
//备    注:地址Address范围<0-7>
//----------------------------------
void        LCDWriteCgram(unsigned char Address,unsigned char *Per)
{
                if (Address > 7)
                        {
                                Address = 0;
                        }
                LCDWriteCommandorWriteData(0x40 + (Address * 8),0);        //写入自定义数据初始地址
                while(*Per != '\0')
                        {
                                LCDWriteCommandorWriteData(*Per,1);                        //写如自定义数据
                                Per++;
                        }
}               

抄的~参考吧。可用

caoweidongediy 发表于 2013-1-8 22:27:40

HeP028 发表于 2013-1-8 22:23 static/image/common/back.gif
抄的~参考吧。可用

谢谢LS的这位朋友 屏现在能正常的点 只是点出来的字符是镜像的! 查阅了很多1602的寄存器配置中没有对字符做镜像处理的配置!所以觉得无从下手!
页: [1]
查看完整版本: 各位有对LCD1602屏比较熟悉的么 我的屏点的时候显示出现了...