新手求教!1602LCD 调一天了为什么还是没法用?
时间:10-02
整理:3721RD
点击:
新买的 1602A 液晶屏,怎么搞都没法正常显示。
用的 STC89C52 ,自己焊板子搭线驱动 1602A。VDD<--->3.3V , 背光正极通过 560欧 接 +5V ,背光负极接 P0.3 控制背光亮灭, V0 通过 1K 电阻接地。
自己实在搞不清楚哪里出了问题,听说论坛里高手多,特来向大神们求教~! 第一次发帖不懂格式,见谅。
----------------------------------------------------------------- 1602LCD.c 代码如下: ---------------------------------------------------------------------
#include <reg52.h>
#include "1602LCD.h"
void Delay(unsigned int z){
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*
void CHECK_BUSY(){
DATA = 0XFF;
do
{
RS = 1;
RW = 1;
Delay(5);
E = 0;
Delay(5);
E = 1;
}while(BUSY);
E = 0;
}
*/
void W_CMD(unsigned char cmd){
//CHECK_BUSY();
RS = 0;
RW = 0;
DATA = cmd;
Delay(5);
E = 1;
Delay(5);
E = 0;
}
void W_DAT(unsigned char dat){
//CHECK_BUSY();
RS = 1;
RW = 0;
DATA = dat;
Delay(5);
E = 1;
// Delay(5);
// E = 0;
}
void Init(){
E = 0;
W_CMD(0X38); /* 显示模式设置 00111000 设置16*2显示 5*7点阵 8位数据接口 */
W_CMD(0X0F); /* 显示开关及光标设置 00001DCB
* D=1 开显示 D=0 关显示
* C=1 显示光标 C=0 不显示光标
* B=1 光标闪烁 B=0 光标不闪烁
*/
W_CMD(0X06); //地址指针自动+1且光标+1,写字符屏幕不会移动
W_CMD(0X01);
W_CMD(0X80);
}
void main(){
LIGHT = ON;
Init();
W_DAT('A');
while(1);
}
------------------------------------------------------------------------------- 1602LCD.h 代码如下: --------------------------------------------------------------------------
#ifndef _1602LCD_H_
#define _1602LCD_H_
#define OFF 1
#define ON 0
#define DATA P2
sbit RS = P0^0;
sbit RW = P0^1;
sbit E = P0^2;
sbit LIGHT = P0^3;
sbit BUSY = P2^7;
#endif
用的 STC89C52 ,自己焊板子搭线驱动 1602A。VDD<--->3.3V , 背光正极通过 560欧 接 +5V ,背光负极接 P0.3 控制背光亮灭, V0 通过 1K 电阻接地。
自己实在搞不清楚哪里出了问题,听说论坛里高手多,特来向大神们求教~! 第一次发帖不懂格式,见谅。
----------------------------------------------------------------- 1602LCD.c 代码如下: ---------------------------------------------------------------------
#include <reg52.h>
#include "1602LCD.h"
void Delay(unsigned int z){
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*
void CHECK_BUSY(){
DATA = 0XFF;
do
{
RS = 1;
RW = 1;
Delay(5);
E = 0;
Delay(5);
E = 1;
}while(BUSY);
E = 0;
}
*/
void W_CMD(unsigned char cmd){
//CHECK_BUSY();
RS = 0;
RW = 0;
DATA = cmd;
Delay(5);
E = 1;
Delay(5);
E = 0;
}
void W_DAT(unsigned char dat){
//CHECK_BUSY();
RS = 1;
RW = 0;
DATA = dat;
Delay(5);
E = 1;
// Delay(5);
// E = 0;
}
void Init(){
E = 0;
W_CMD(0X38); /* 显示模式设置 00111000 设置16*2显示 5*7点阵 8位数据接口 */
W_CMD(0X0F); /* 显示开关及光标设置 00001DCB
* D=1 开显示 D=0 关显示
* C=1 显示光标 C=0 不显示光标
* B=1 光标闪烁 B=0 光标不闪烁
*/
W_CMD(0X06); //地址指针自动+1且光标+1,写字符屏幕不会移动
W_CMD(0X01);
W_CMD(0X80);
}
void main(){
LIGHT = ON;
Init();
W_DAT('A');
while(1);
}
------------------------------------------------------------------------------- 1602LCD.h 代码如下: --------------------------------------------------------------------------
#ifndef _1602LCD_H_
#define _1602LCD_H_
#define OFF 1
#define ON 0
#define DATA P2
sbit RS = P0^0;
sbit RW = P0^1;
sbit E = P0^2;
sbit LIGHT = P0^3;
sbit BUSY = P2^7;
#endif