打印

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

[复制链接]
3562|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 | 只看该作者
晶振在电容前面才对

使用特权

评论回复
5
maychang| | 2011-5-12 15:05 | 只看该作者
晶体两端接XTAL1和XTAL2,两电容接XTAL1和XTAL2,另端接地。
所有讲单片机的书上都有的。

使用特权

评论回复
6
兰天白云| | 2011-5-12 15:22 | 只看该作者
阴沟里翻船?

使用特权

评论回复
7
widpj|  楼主 | 2011-5-12 21:57 | 只看该作者
4# Dominator [/


应该不是这个原因的,改了之后还是不行,不能仿真!!!

使用特权

评论回复
8
ycz9999| | 2011-5-12 23:29 | 只看该作者
7# widpj 估计是时序的问题……

使用特权

评论回复
9
widpj|  楼主 | 2011-5-13 00:12 | 只看该作者
8# ycz9999
程序我都编译过了,没问题啊!

使用特权

评论回复
10
widpj|  楼主 | 2011-5-13 00:12 | 只看该作者
8# ycz9999
不信的话你可以试下啊!!?

使用特权

评论回复
11
chunyang| | 2011-5-13 00:19 | 只看该作者
MCU时钟电路错误。

使用特权

评论回复
12
widpj|  楼主 | 2011-5-13 06:35 | 只看该作者
11# chunyang
大侠能不能讲详细点??

使用特权

评论回复
13
widpj|  楼主 | 2011-5-13 06:48 | 只看该作者

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

使用特权

评论回复
14
ocon| | 2011-5-13 07:05 | 只看该作者
VEE没接

使用特权

评论回复
15
wangxl726| | 2011-5-13 09:48 | 只看该作者
初始化程序最后再延时2ms,我之前碰到过一次这个问题……希望对楼主有帮助

使用特权

评论回复
16
ycz9999| | 2011-5-13 12:20 | 只看该作者
16L正解

使用特权

评论回复
17
tom_xu| | 2011-5-13 13:23 | 只看该作者
proteus仿真,接不接晶振都一回事,
程序编译通过不等于运行就正常,
这种情况都是程序的问题。
时序没有符合LCD的要求

使用特权

评论回复
18
ssy250| | 2011-5-13 15:33 | 只看该作者
什么嘛。你的标号错了,单片机上是D0-D7,到了LCD变成了p0.0~~

使用特权

评论回复
19
widpj|  楼主 | 2011-5-13 21:20 | 只看该作者
19# ssy250   后面改过来了!!还是不行!!

使用特权

评论回复
20
widpj|  楼主 | 2011-5-15 21:08 | 只看该作者
今天终于把问题解决了,终于舒了口气。
原因就在于lcd1602的第三个引脚,我今天在测试的时候不小心把它和地接了起来,发现lcd的字幕闪了下,我一下看到了胜利的希望。原来我买的这个lcd1602的第三脚不能悬空,悬空根本没显示,而接+5v就全为方格,(但是我看到别人都是悬空的)这点有点想不通!!但总算把问题解决了,接下来可以接着往下做了,谢谢楼上的各位大虾!以后还有问题还得请教你们啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

40

帖子

0

粉丝