lcd不能正常显示,怎么办啊??急求大虾现身……

[复制链接]
5589|23
 楼主| widpj 发表于 2011-5-12 12:13 | 显示全部楼层 |阅读模式
本帖最后由 widpj 于 2011-5-13 21:24 编辑

大侠们帮忙看下我这电路图错在哪?为什么不能仿真?程序我也贴出来了!!  
急啊…………

大虾们能不能直接点中要害,指出一个模糊概念本人实在不知道怎么办!!!
   #include <reg52.h>
#include <string.h>                               // 包含头文件
#define uchar unsigned char
#define unint unsigned int
char data1[]="time is always go!" ;
char data2[]="never stop!! "  ;
//**********************延时函数*******************************************//
void DelayS(unsigned int a)
{    unint i,j ;
     for(i=0;i<a;i++)
     { for(j=0;j<255;j++)
     {;;}
     }
}
void DelayS250(void){
DelayS(250);
}
   
//=================================lcd模块驱动===========================================//
/********************************************************************************************/
#define      lcd_DB0_DB7      P0             // 定义lcd的数据总线
sbit lcd_RS   = P1^0;                      // 定义lcd的RS控制线
sbit lcd_RW   = P1^2;                      // 定义lcd的RW控制线
sbit lcd_E    = P1^1;                      // 定义lcd的E控制线
//sbit lcd_Busy = P1 ^ 3;                      // 定义lcd的测忙线(与lcd_DB0_DB7关联)
//******************************************检测lcd状态***********************************//
//void lcd_TestBusy(void){
//    lcd_DB0_DB7 = 0xff;//设备读状态
//    lcd_RS = 0;
//    lcd_RW = 1;
//    lcd_E = 1;
//    while(lcd_Busy);//等待LCD不忙 (P0口得第七位) 如果lcd_Busy为真(及1)重复,否则退出循环。
//    lcd_E = 0;//
//    }
//**************************写数据************************************************//
void lcd_writedata(uchar lcd_data)
{

//   lcd_TestBusy();
   lcd_DB0_DB7 = lcd_data;
   lcd_RS = 1;
   lcd_RW = 0;
   lcd_E = 1;
   lcd_E = 0;
}
//***********************lcd 写指令**********************************************//
void lcdwrite_command( uchar lcdwrite_command )
{  
// lcd_TestBusy();
lcd_DB0_DB7 = lcdwrite_command;
lcd_RS = 0;
lcd_RW = 0;
lcd_E = 1;
lcd_E = 0;
}
//************************lcd 初始化******************************************//
void init_lcd(void)
{
   DelayS(15);
   lcdwrite_command(0x38);
   DelayS(5);            
   lcdwrite_command(0x38);
   DelayS(5);
   lcdwrite_command(0x38);
   lcdwrite_command(0x38);// 显示显示模式设置
   lcdwrite_command(0x08); // 显示关闭
   lcdwrite_command(0x01);  //显示清屏
   lcdwrite_command(0x06);//显示光标移动设置
   lcdwrite_command(0x0c) ; //显示开及光标设置
   
   
}
//*************************** 显示****************************//
// void print(uchar a,uchar b)
// {  lcdwrite_command(a);
//    lcdwrite_data(b);
//
// }
//***************************************************************//
void print(uchar a,uchar *str){
  lcdwrite_command(a);
  while(*str != '\0'){
   lcd_writedata(*str++);
        }
  *str = 0;}
//*******************************主函数********************************//
void main(void)
{
  
   
init_lcd();
   while(1)  
    {
    print(0x80,"time is always go!");
    print(0xc0,"never stop!! ");
    DelayS(255);
    lcdwrite_command(0x07);
    DelayS(255);
    DelayS(255);    DelayS(255);
    DelayS(255);
    print(0x80,"time is always go!");
    print(0xc0,"never stop!! ");
    }
   

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
cobraking 发表于 2011-5-12 14:07 | 显示全部楼层
晶振显然接错了。
 楼主| widpj 发表于 2011-5-12 14:42 | 显示全部楼层
2# cobraking


接错了吗??那该怎么接啊??
Dominator 发表于 2011-5-12 15:03 | 显示全部楼层
晶振在电容前面才对
maychang 发表于 2011-5-12 15:05 | 显示全部楼层
晶体两端接XTAL1和XTAL2,两电容接XTAL1和XTAL2,另端接地。
所有讲单片机的书上都有的。
兰天白云 发表于 2011-5-12 15:22 | 显示全部楼层
阴沟里翻船?
 楼主| widpj 发表于 2011-5-12 21:57 | 显示全部楼层
4# Dominator [/


应该不是这个原因的,改了之后还是不行,不能仿真!!!
ycz9999 发表于 2011-5-12 23:29 | 显示全部楼层
7# widpj 估计是时序的问题……
 楼主| widpj 发表于 2011-5-13 00:12 | 显示全部楼层
8# ycz9999
程序我都编译过了,没问题啊!
 楼主| widpj 发表于 2011-5-13 00:12 | 显示全部楼层
8# ycz9999
不信的话你可以试下啊!!?
chunyang 发表于 2011-5-13 00:19 | 显示全部楼层
MCU时钟电路错误。
 楼主| widpj 发表于 2011-5-13 06:35 | 显示全部楼层
11# chunyang
大侠能不能讲详细点??
 楼主| widpj 发表于 2011-5-13 06:48 | 显示全部楼层

根据楼上的要求我将晶振电路改过来了,但结果依然令人失望!o(︶︿︶)o唉

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ocon 发表于 2011-5-13 07:05 | 显示全部楼层
VEE没接
wangxl726 发表于 2011-5-13 09:48 | 显示全部楼层
初始化程序最后再延时2ms,我之前碰到过一次这个问题……希望对楼主有帮助
ycz9999 发表于 2011-5-13 12:20 | 显示全部楼层
16L正解
tom_xu 发表于 2011-5-13 13:23 | 显示全部楼层
proteus仿真,接不接晶振都一回事,
程序编译通过不等于运行就正常,
这种情况都是程序的问题。
时序没有符合LCD的要求
ssy250 发表于 2011-5-13 15:33 | 显示全部楼层
什么嘛。你的标号错了,单片机上是D0-D7,到了LCD变成了p0.0~~
 楼主| widpj 发表于 2011-5-13 21:20 | 显示全部楼层
19# ssy250   后面改过来了!!还是不行!!
 楼主| widpj 发表于 2011-5-15 21:08 | 显示全部楼层
今天终于把问题解决了,终于舒了口气。
原因就在于lcd1602的第三个引脚,我今天在测试的时候不小心把它和地接了起来,发现lcd的字幕闪了下,我一下看到了胜利的希望。原来我买的这个lcd1602的第三脚不能悬空,悬空根本没显示,而接+5v就全为方格,(但是我看到别人都是悬空的)这点有点想不通!!但总算把问题解决了,接下来可以接着往下做了,谢谢楼上的各位大虾!以后还有问题还得请教你们啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

40

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部