LCD1602液晶屏是一款较为传统的显示屏,由于采用并行方式传送数据十分占用引脚资源,为此可通过转接板将其改造为IIC接口的使用方式,其外观及电路见图1和图2所示。

图1 器件外观

图2 器件外观
为驱动该显示屏,它与开发板的连接关系为:
LCD1602_SCL-----P407
LCD1602_SDA----P408
实现该液晶屏显示驱动的程序为:
void IIC_Write_Byte(uint8_t date)
{
uint8_t i,temp;
temp=date;
IIC_OUTPUT_MODE_SET();
for(i=0;i<8;i++)
{
SCL_Clr();
if(temp & 0x80)
{
SDA_Set();
}
else
{
SDA_Clr();
}
temp=temp<<1;
delay_us();
delay_us();
SCL_Set();
delay_us();
}
SCL_Clr();
delay_us();
SDA_Set();
delay_us();
}
void IIC_Write_Comm_LCD(uint8_t comm)
{
uint8_t data_h = comm & 0xf0;
uint8_t data_l = (comm & 0x0f) << 4;
IIC_Write_Byte(0x00+data_h);
IIC_Ack();
IIC_Write_Byte(0x04+data_h);
IIC_Ack();
IIC_Write_Byte(0x00+data_h);
IIC_Ack();
delay(5);
IIC_Write_Byte(0x00+data_l);
IIC_Ack();
IIC_Write_Byte(0x04+data_l);
IIC_Ack();
IIC_Write_Byte(0x00+data_l);
IIC_Ack();
delay(5);
}
void IIC_Write_Date_LCD(uint8_t date)
{
uint8_t data_h = date & 0xf0;
uint8_t data_l = (date & 0x0f) << 4;
IIC_Write_Byte(0x01+data_h);
IIC_Ack();
IIC_Write_Byte(0x05+data_h);
IIC_Ack();
IIC_Write_Byte(0x01+data_h);
IIC_Ack();
delay(5);
IIC_Write_Byte(0x01+data_l);
IIC_Ack();
IIC_Write_Byte(0x05+data_l);
IIC_Ack();
IIC_Write_Byte(0x01+data_l);
IIC_Ack();
delay(5);
}
液晶屏的初始化函数为:
void LCD1602_Init()
{
uint8_t i = 0;
R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MICROSECONDS);
IIC_Start();
IIC_Write_Byte(ADDR);
IIC_Ack();
IIC_Write_Comm_LCD(0x02);
IIC_Write_Comm_LCD(0x28);
IIC_Write_Comm_LCD(0x08);
IIC_Write_Comm_LCD(0x0c);
IIC_Write_Comm_LCD(0x06);
IIC_Write_Comm_LCD(0x01);
for(i=0;i<String_len1;i++)
{
IIC_Write_Date_LCD(lcd_show1[i]);
}
IIC_Write_Comm_LCD(0xc0);
for(i=0;i<String_len2;i++)
{
IIC_Write_Date_LCD(lcd_show2[i]);
}
}
实现显示测试的主程序为:
void hal_entry(void)
{
IIC_OUTPUT_MODE_SET();
LCD1602_Init();
while(1);
}
经程序的编译和下载,其测试效果见图4所示。

图3 器件连接

图4 显示效果
在添加RTC计时功能的情况下,即可产生电子时钟功能。
演示视频:
电子时钟
|