我用LCD 16x2文本编写程序接口STM32F411vet6但是当我将代码传送到套件时它不能运行。有人可以检查我的代码并找到错误吗?非常感谢你!
描述:
void ENEable(void):等待微秒到RS引脚可以接收命令。
void WriteNibble(int8_t data,int8_t flag):写高半字节(flag = 0)和低半字节(flag = 1)
void LCDCmd(int8_t cmd):需要KIT运行命令
void LCDInit(void):初始化LCD。
Code LCD 16x2:
void ENEable(void)
{
HIGH_PIN(EN_PIN);
DelayMicros(5);
LOW_PIN(EN_PIN);
DelayMicros(100);
}
void WriteNibble(int8_t data, int8_t flag)
{
flag = 4 * flag;
if(data & (0x80 >> flag))
{
HIGH_PIN(D7_PIN);
}
else
{
LOW_PIN(D7_PIN);
}
if(data & (0x40 >> flag))
{
HIGH_PIN(D6_PIN);
}
else
{
LOW_PIN(D6_PIN);
}
if(data & (0x20 >> flag))
{
HIGH_PIN(D5_PIN);
}
else
{
LOW_PIN(D5_PIN);
}
if(data & (0x10 >> flag))
{
HIGH_PIN(D4_PIN);
}
else
{
LOW_PIN(D4_PIN);
}
}
void LCDCmd(int8_t cmd)
{
LOW_PIN(RS_PIN);
DelayMicros(100);
WriteNibble(cmd, 0);
ENEable();
WriteNibble(cmd, 1);
ENEable();
switch(cmd){
case 0x01:
case 0x02:
DelayMilis(2);
DelayMicros(250);
break;
default:
DelayMicros(53);
break;
}
}
void LCDInit(void)
{
DelayMilis(15);
LCDCmd(0x03);
ENEable();
DelayMilis(4); //delay 4.1 milisencond
DelayMicros(100);
LCDCmd(0x03);
ENEable();
DelayMicros(100); //delay 100 microsecond
LCDCmd(0x03);
ENEable();
DelayMicros(100); //delay 100 microsecond
LCDCmd(0x02);
ENEable();
DelayMicros(100); //delay 100 microsecond
LCDCmd(0x28); // use control: 4 bit, 2 line, 5x8;
LCDCmd(0x0F); // turn on display, setting, cusor blink
LCDCmd(0x01); // clear lcd
LCDCmd(0x06); // set entry mode
}
void SendData(int8_t data)
{
HIGH_PIN(RS_PIN);
DelayMicros(5);
WriteNibble(data, 0);
ENEable();
WriteNibble(data, 1);
ENEable();
}
延迟功能:
说明:
void DelayMicros(uint32_t timer):延迟微秒 void DelayMilis(uint32_t timer):延迟mili秒
void DelayMicros(uint32_t timer)
{
uint32_t count = 0;
while(timer--)
{
count = SystemCoreClock / 1000 / 1000 / 4;
while(count--);
}
}
void DelayMilis(uint32_t timer)
{
uint32_t count = 0;
while(timer--)
{
count = SystemCoreClock / 1000 / 4;
while(count--);
}
}
我搜索了互联网,但我找不到原因。我是新手。
谢谢!祝你有愉快的一天!
答案 0 :(得分:0)
请记住,LCD 16x2有一个可调节对比度的引脚(引脚3)。您应该将此引脚的电压在0到Vcc之间变化,直到您在液晶显示屏上看到某些内容。
如果不是这种情况,那么在使用经典的16x2 LCD时会出现很多问题。引脚接触不良,Vcc不足,时序错误或设置正确的位。如果没有董事会,很难说清楚。我不得不把头撞到墙上好几天让它第一次工作,而这不是第一次尝试。祝你好运。