关于开源充电器中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;
} LCD1602 只有 4 位数据位. 仔细看整个程序,发现回复【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]