0

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

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

我环顾了 Google 的各个角落,找到了可以帮助我完成整个过程的内容,但没有针对我的特定配置编写任何内容。我已经完成并认为我已经为我的用途调整了它们,但我什至无法让 LCD 初始化。当我通过 MPlabSim 运行时,时间延迟似乎没问题。

我也尝试使用 mcc18 src 文件夹中的库,但这也不起作用。

我正在寻找已知可以工作的代码,以便我可以排除故障是我糟糕的编码还是电路板。到目前为止,我只能打开和关闭背光,但这并不重要,因为它只是一个连接到 MOSFET 的引脚,与 LCD 的板载 mcu 无关。

在过去的一周里,我每天都在做几个小时...... 16 小时对于这样一个愚蠢的项目来说是很长的时间,所以如果我能得到帮助,我会很高兴的。

4

1 回答 1

2

我给出了在 PIC18f458/16F877 上运行的代码,用 c 编写并在 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();
         }
    }
于 2013-01-03T07:18:34.330 回答