hpcsx 发表于 2011-10-4 20:41:02

求救:1602液晶的程序,不知道错在哪里。望指教,谢谢!

//====初始设定函数(8位元传输模式)===================
void init_LCM(void)
{   
    E->DATA = 0;
      
    write_inst(0x38);
    write_inst(0x38);
   
   write_inst(0x0c);
    write_inst(0x01);
   write_inst(0x06);
   
   
}                     // init_LCM()函数结束


            

//==== 写入指令函数 / 检测忙信号的=======================ok
void write_inst(char inst)
{   
    E->DATA = 0;
    RS->DATA = 0;
   RW->DATA = 0;   delay1ms(5);
    DB->DATA = inst;   delay1ms(5);
    E->DATA = 1; delay1ms(5);
    E->DATA = 0; delay1ms(5);
   
    check_BF();             // 检查是否忙碌
}                           // write_inst()函数结束

//==== 写入字符数据函数 ============================ok
void write_char(char chardata)
{   
    E->DATA = 0;
    RS->DATA = 1;
   RW->DATA = 0;   delay1ms(5);
    DB->DATA = chardata;   delay1ms(5);
    E->DATA = 1; delay1ms(5);
    E->DATA = 0; delay1ms(5);
   
    check_BF();             // 检查是否忙碌
   
   
    delay1ms(1000);
}                           // write_char()函数结束


//====检查忙碌函数================================ok
void check_BF(void)
{   
      
      RS->DATA = 0;
      RW->DATA = 1; delay1ms(5);
      E->DATA = 1;   delay1ms(5);
      
      while(DB->DATA & 0x80);      // 忙碌继续等
   
      E->DATA=0;                  // 禁止读写动作
      
}                           //check_BF()函数结束


//==== 延迟函数 ================================ok
void delay1ms(int x)
{
    usleep(1100*x);   
}


另外一个版本的初始化函数:
//====初始设定函数(8位元传输模式)===================
void init_LCM(void)
{   
    delay1ms(15);       //5.1
    write_inst_n(0x38);   // 5.2
    delay1ms(5);          //5.3
    write_inst_n(0x38);   // 5.4
    delay1ms(5);          //5.5   
    write_inst_n(0x38);   // 5.6
   

    write_inst(0x38);   // 5.8 英文LCM设定两列,中交LCM可忽略
    write_inst(0x08);   // 5.9 显示功能-关显示幕-无游标-游标不闪
    write_inst(0x01);   // 5.10 清除显示幕(填0x20,I/D=1)
    write_inst(0x06);   // 5.11 输入模式-位址递增-关显示幕
    write_inst(0x0c);   // 5.12 显示功能-开显示幕-无游标-游标不闪
}                     // init_LCM()函数结束


请大家指教,谢谢!

hpcsx 发表于 2011-10-4 21:15:59

补充:

D0~D7设置为1个bidir型8位PIO。RS、RW、E各为1为输出型PIO。
编译的时候,没有提示错误。通过AS方式下载,发现初始化的函数可以运行,但好像运行不正确(白屏)。后面预期显示的字符都显示不出来。从加入的LED显示知道,初始化函数、显示字符的语句都是运行到了的。
页: [1]
查看完整版本: 求救:1602液晶的程序,不知道错在哪里。望指教,谢谢!