PIC18f4685和日立44780 LCD

时间:2012-05-06 03:55:44

标签: initialization pic lcd

对于PIC 18f4685到Hitachi LCD 2行显示器,有人肯定会使用4位接口C代码吗?我正在使用带有与日立44780兼容的LCD模块的Northmicro原型板。

将PORTB上的半字节降低到D4-7; E:RA4
RS:RB4
RW:RB5 背光:RA5

我已经浏览了Google的所有内容并找到了应该让我完成整个过程的内容,但没有为我的特定配置编写任何内容。我已经经历过,并认为我已经调整了它们用于我的用途,但我甚至无法让LCD初始化。当我通过MPlabSim运行它时,时间延迟似乎没问题。

我也试过使用mcc18 src文件夹中的库,但这也没用。

我正在寻找已知可行的代码,因此如果它是我糟糕的编码或电路板,我可以进行故障排除。到目前为止,我只能打开和关闭背光,但实际上并不算数,因为它只是一个连接到mosfet的引脚,与LCD的板载MCU无关。

过去一周我每天都在这里待了几个小时... 16个小时是花在这样一个愚蠢的项目上很长时间所以如果我能得到一个帮助,我会喜欢它请它。

1 个答案:

答案 0 :(得分:2)

我正在使用c语言编写的PIC18f458 / 16F877上运行的代码,并在micro c编译器中编译。希望它对你有帮助...

#define rs PORTB.F0
#define rw PORTB.F2
#define en PORTB.F1
#define lcd PORTD


    void delay()
    {
         int i;
         for(i=0;i<500;i++);

    }


    void lcd_cd(unsigned char c)
    {
         rs=0;
         lcd = (lcd & 0x0F) | (c & 0xF0);
         en=1;
         delay();
         en=0;
         lcd = (lcd & 0x0F) | (c <<4);
         en=1;
         delay();
         en=0;

    }



    void lcd_data(char *c)
    {
         rs=1;
         while(*c!='\0')
         {

             lcd = (lcd & 0x0F) | (*c &0xF0);
             en=1 ;
             delay();
             en=0;
             lcd = (lcd & 0x0F) | (*c <<4);
             en=1;
             delay();
             en=0;
             c++;
         }
    }



    void lcd_int()
    { 

         lcd_cd(0x02);
         delay();
         lcd_cd(0x28);
         delay();
         lcd_cd(0x80);
         delay();
         lcd_cd(0x01);
         delay();
         lcd_cd(0x0e);
         delay();
    }




    void main()
    {
         rw=0;
         TRISB=0X00;
         TRISD=0X00;

         while(1)
         {
              lcd_int();
              delay();
              lcd_data("HELLO INDIA");
              delay();
              lcd_cd(0xc2);
              lcd_data("HELLO INDIA");
              delay();
         }
    }