单片机1602液晶显示问题
这个是我的线路图,vee试过接地接10K电阻1K电阻都没显示下面是写的程序/**1602*/#include<reg52.h>typedefunsignedcharuin...
这个是我的线路图,vee试过接地接10K电阻1K电阻都没显示
下面是写的程序
/*
* 1602
*/
#include <reg52.h>
typedef unsigned char uint8;
sbit RS = P2^0 ;
sbit RW = P2^1 ;
sbit EN = P2^2 ;
sbit BUSY = P0^7;
/**
* 等待繁忙标志
*/
void wait(void)
{
P0 = 0xFF;
do
{
RS = 0;
RW = 1;
EN = 0;
EN = 1;
}while (BUSY == 1);
EN = 0;
}
/**
* 写数据
*/
void w_dat(uint8 dat)
{
wait();
EN = 0;
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 写命令
*/
void w_cmd(uint8 cmd)
{
wait();
EN = 0;
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 初始化1602
*/
void Init_LCD1602(void)
{
w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移
w_cmd(0x01); // 清屏
}
main()
{
Init_LCD1602();
w_cmd(0x80);
w_dat( 'A');
while (1);
}
求问为什么没有显示呢? 展开
下面是写的程序
/*
* 1602
*/
#include <reg52.h>
typedef unsigned char uint8;
sbit RS = P2^0 ;
sbit RW = P2^1 ;
sbit EN = P2^2 ;
sbit BUSY = P0^7;
/**
* 等待繁忙标志
*/
void wait(void)
{
P0 = 0xFF;
do
{
RS = 0;
RW = 1;
EN = 0;
EN = 1;
}while (BUSY == 1);
EN = 0;
}
/**
* 写数据
*/
void w_dat(uint8 dat)
{
wait();
EN = 0;
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 写命令
*/
void w_cmd(uint8 cmd)
{
wait();
EN = 0;
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 初始化1602
*/
void Init_LCD1602(void)
{
w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移
w_cmd(0x01); // 清屏
}
main()
{
Init_LCD1602();
w_cmd(0x80);
w_dat( 'A');
while (1);
}
求问为什么没有显示呢? 展开
展开全部
给初始化里面加一个
w_cmd(0x0f);
去掉那个busy 然后自己写个等待函数试一下
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" Hello world! ";
uchar code table1[]=" 2013/8/10 ";
uchar num;
sbit rs=P1^0;
sbit rw=P1^1;
sbit lcden=P2^5;
sbit sd=P2^6;
sbit ds1302=P2^7;
sbit dula=P2^0;
sbit wela=P2^1;
sbit cs88=P2^2;
void delay(uint zz)
{
uint xx,yy;
for (xx=zz;xx>0;xx--)
for(yy=110;yy>0;yy--);
}
void comwrite(uchar com)
{
rs=0;
P0=com;
delay(3);
lcden=1;
delay(5);
lcden=0;
delay(8);
}
void datawrite(uchar dat)
{
rs=1;
P0=dat;
delay(3);
lcden=1;
delay(5);
lcden=0;
delay(8);
}
void initlcd()
{
lcden=1;
rw=0;
comwrite(0x38);//设置1602显示
comwrite(0x0f);//开显示 显示光标 光标闪烁
comwrite(0x06);//光标指针加一
comwrite(0x01);//显示清零
comwrite(0x80);//光标指针初始化
}
void main()
{
wela=0;
dula=0;
cs88=0;
ds1302=0;
sd=0;
initlcd();
comwrite(0x80+0x12);
for(num=0;num<16;num++)
{
datawrite(table[num]);
}
comwrite(0x80+0x40+0x12);
for(num=0;num<16;num++)
{
datawrite(table1[num]);
}
for(num=0;num<18;num++)
{
comwrite(0x18);
delay(200);
}
while(1);
}
这是我今年8月份自己写的 你看看
追问
我这个没有dula,wela接口啊
追答
那个不用看 是跟液晶无关的 估计你是没写 0x0f命令这个命令是指:开显示 显示光标 光标闪烁
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询