xxq123 发表于 2010-1-11 15:16:29

关于开源充电器中LCD1602写命令函数

开源代码公布的原帖太长,开个新的地方。

请大家看看其中的写入数据函数,只将命令的高四位输入,而忘记了低四位。
版本为:
**============================================** 新虫版 0.14 的分割线 **=======================================================**


虫子花了很大的心思,终于完成了具有历史意义的0.14版
点击此处下载 ourdev_253803.rar(文件大小:878K) (原文件名:0.14.rar)


我下下来之后发现并不是PRMCharger_0.14,还是PRMCharger_V0.12c。


/*******************************************************************************************************
** 函数名称: lcd_write_cmd
** 功能描述: 最初的初始化设置中,写入数据函数
** 输入参数: INT8U cmd: 命令
** 输出参数: 无
********************************************************************************************************/
void lcd_write_cmd(INT8U cmd)
{
    LCD_CMD_MODE;
   
    if(cmd & BIT_POSITION7)
      {BIT_SET(LCD_DATA7_PORT, LCD_DATA7);}
    else
      {BIT_CLR(LCD_DATA7_PORT, LCD_DATA7);}
   
    if(cmd & BIT_POSITION6)
      {BIT_SET(LCD_DATA6_PORT, LCD_DATA6);}
    else
      {BIT_CLR(LCD_DATA6_PORT, LCD_DATA6);}
   
    if(cmd & BIT_POSITION5)
      {BIT_SET(LCD_DATA5_PORT, LCD_DATA5);}
    else
      {BIT_CLR(LCD_DATA5_PORT, LCD_DATA5);}
   
    if(cmd & BIT_POSITION4)
      {BIT_SET(LCD_DATA4_PORT, LCD_DATA4);}
    else
      {BIT_CLR(LCD_DATA4_PORT, LCD_DATA4);}
   
   
    LCD_E_HIGH;   // E 信号
    delay_us(5);
    LCD_E_LOW;

}

lvhaian 发表于 2010-1-11 15:17:30

LCD1602 只有 4 位数据位.

xxq123 发表于 2010-1-11 15:24:50

仔细看整个程序,发现回复【1楼】lvhaian 安哥
-----------------------------------------------------------------------

明白了
仔细看了整个程序,发现在使用该函数的时候都是后四位都是0,而在后四位非零情况时用的是
/*******************************************************************************************************
** 函数名称: lcd_write_byte
** 功能描述: 向LCD写入数据
** 输入参数: INT8U byte: 数据
**         INT8U type: 类型
** 输出参数: 无
********************************************************************************************************/
void lcd_write_byte(INT8U byte, INT8U type)
{
    if(type)
            {LCD_DATA_MODE;}
    else
            {LCD_CMD_MODE;}
   
   
    temp = byte;
   
   
    if(byte & BIT_POSITION7)
      {BIT_SET(LCD_DATA7_PORT, LCD_DATA7);}
    else
      {BIT_CLR(LCD_DATA7_PORT, LCD_DATA7);}
   
    if(byte&BIT_POSITION6)
      {BIT_SET(LCD_DATA6_PORT, LCD_DATA6);}
    else
      {BIT_CLR(LCD_DATA6_PORT, LCD_DATA6);}
   
    if(byte&BIT_POSITION5)
      {BIT_SET(LCD_DATA5_PORT, LCD_DATA5);}
    else
      {BIT_CLR(LCD_DATA5_PORT, LCD_DATA5);}
   
    if(byte&BIT_POSITION4)
      {BIT_SET(LCD_DATA4_PORT, LCD_DATA4);}
    else
      {BIT_CLR(LCD_DATA4_PORT, LCD_DATA4);}
   
   
    LCD_E_HIGH;    // E 信号
    delay_us(5);
    LCD_E_LOW;
   
    delay_xus(39); // 39 us!
   
    byte <<= 4;
   
    if(byte & BIT_POSITION7)
      {BIT_SET(LCD_DATA7_PORT, LCD_DATA7);}
    else
      {BIT_CLR(LCD_DATA7_PORT, LCD_DATA7);}
   
    if(byte & BIT_POSITION6)
      {BIT_SET(LCD_DATA6_PORT, LCD_DATA6);}
    else
      {BIT_CLR(LCD_DATA6_PORT, LCD_DATA6);}
   
    if(byte & BIT_POSITION5)
      {BIT_SET(LCD_DATA5_PORT, LCD_DATA5);}
    else
      {BIT_CLR(LCD_DATA5_PORT, LCD_DATA5);}
   
    if(byte & BIT_POSITION4)
      {BIT_SET(LCD_DATA4_PORT, LCD_DATA4);}
    else
      {BIT_CLR(LCD_DATA4_PORT, LCD_DATA4);}
   
   
    LCD_E_HIGH;   // E 信号
    delay_xus(5);
    LCD_E_LOW;
   
    delay_ms(2);// 延时 10 mS
       
}
页: [1]
查看完整版本: 关于开源充电器中LCD1602写命令函数