#include "lcd1602.h"
#include "delay.h"
#include "sys.h"
void Lcd1602_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void Lcd_TestBusy(void)
{
GPIO_Write(GPIOF,0xff);
Lcd1602_RS=0;
Lcd1602_RW=1;
Lcd1602_E=1;
while(Lcd1602_Busy);
Lcd1602_E=0;
}
void Lcd1602_Write_Com(u8 com)
{
Lcd_TestBusy();
GPIO_Write(GPIOF,com);
Lcd1602_RS=0;
Lcd1602_RW=0;
Lcd1602_E=0;
delay_us(10);
Lcd1602_E=1;
delay_us(10);
Lcd1602_E=0;
}
void Lcd1602_Write_Data(u8 date)
{
Lcd_TestBusy();
GPIO_Write(GPIOF,date);
Lcd1602_RS=1;
Lcd1602_RW=0;
Lcd1602_E=0;
delay_us(10);
Lcd1602_E=1;
delay_us(10);
Lcd1602_E=0;
}
void Lcd1602_Init(void)
{
Lcd1602_Write_Com(0x38); //设置显示模式
Lcd1602_Write_Com(0x0c); //开启显示,不开光标,光标不闪烁
Lcd1602_Write_Com(0x06); //数据指针加1
Lcd1602_Write_Com(0x01); //清屏
Lcd1602_Write_Com(0x80); //设置数据指针起点
}
/****************************************************
*** 0x0c 开启显示,不开光标,光标不闪烁
*** 0x0f 开启显示, 开光标,光标 闪烁
*** 0x0e 开启显示, 开光标,光标不闪烁
*** 0x06 数据指针向“右”移动加1
*** 0x04 数据指针向“左”移动加1
****************************************************/
主函数
#include "lcd1602.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
delay_init();
Lcd1602_GPIO_Init();
Lcd1602_Init();
while(1)
{
Lcd1602_Write_Com(0x80);
Lcd1602_Write_Data(6);
delay_us(10);
}
}