标题:
LCD2004液晶测试程序有问题,液晶不显示
[打印本页]
作者:
wjn680086
时间:
2013-10-11 13:29
标题:
LCD2004液晶测试程序有问题,液晶不显示
/************************************************************************************************/
/*** LCD2004液晶显示 ***/
/*** 2013-10-9 ***/
/************************************************************************************************/
#include<aduc812.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P0 //定义LCM数据总线至P0
sbit RS=P2^5; //寄存器选择位(0指令1数据)
sbit RW=P2^6; //设置读写位(0写入1读取)
sbit E=P2^7; //使能为(0禁止1允许)
sbit BF=P1^7;
//uchar line1[]="LCM TEST PROGRAM"; //第一行显示字符
//uchar line2[]="Everything is OK!"; //第二行显示字符
//uchar line3[]="aaaaaaaaaaaaaaa"; //第三行显示字符
//uchar line4[]="bbbbbbbbbbbbbbb"; //第四行显示字符
void Init_LCD(void); //声明液晶初始化设置函数
void write_cmd(uchar); //声明写指令函数
void write_data(uchar); //声明写数据函数
void check_BF(void); //声明检测忙信号函数
void delay_1ms(uint); //声明延时函数
void set_xy(uchar x,uchar y); //声明显示位置
void display(uchar x,uchar y,uchar *s); //声明显示函数
/*********************1ms延时函数****************************************************************/
void delay_1ms(uint x)
{
uint i,j;
for(i=1;i<x;i++)
for(j=1;j<120;j++);
}
/*********************液晶初始化函数*************************************************************/
void Init_LCD(void)
{
write_cmd(0x38); //设置8位格式,2行,5x7
write_cmd(0x01); //设定输入方式,增量不移位
write_cmd(0x06); //整体显示,关光标,不闪烁
write_cmd(0x0c); //清除屏幕显示
}
/**********************写指令函数******************************************************************/
void write_cmd(uchar com)
{
check_BF();
RS=0;
RW=0;
DATA=com;
delay_1ms(2);
E=1;
delay_1ms(2);
E=0;
}
/**********************写数据函数*******************************************************************/
void write_data(uchar chardata)
{
check_BF();
RS=1;
RW=0;
DATA=chardata;
delay_1ms(2);
E=1;
delay_1ms(2);
E=0;
}
/**********************检查忙碌函数******************************************************************/
void check_BF(void)
{
E=0;
do
{
BF=1;
RS=0;
RW=1;
E=1;
}while(BF==1);
}
/**********************定义显示位置*******************************************************************/
void set_xy(uchar x,uchar y)
{
uchar add;
if(x==0)
add=0x80+y;
else
if(x==1)
add=0xc0+y;
else
if(x==2)
add=0x94+y;
else
if(x==3)
add=0xd4+y;
write_cmd(add);
}
/**********************显示函数***********************************************************************/
void display(uchar x,uchar y,uchar *s)
{
set_xy(x,y);
while(*s)
{
DATA=*s;
write_data(*s);
s++;
}
}
/**********************主函数*************************************************************************/
void main()
{
Init_LCD();
while(1)
{
display(0,0,"line1");
display(1,0,"line2");
display(2,0,"line3");
display(3,0,"line4");
}
}
作者:
mysy
时间:
2016-3-15 23:54
本帖最后由 mysy 于 2016-3-16 00:10 编辑
看你的硬件接口是否一样,他的打印函数很简单。。。 不一定对
作者:
mysy
时间:
2016-3-16 00:50
check_BF(); 有问题, 删除或修改
作者:
bg4rfb
时间:
2018-9-24 17:05
删除了忙检测还是不显示怎么办?
作者:
gwq
时间:
2019-5-7 18:15
初始化貌似有点小问题 我小白, 说错了别见怪
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1