打印

难题:12864液晶(YM12864R)数据口0(DB0)读不出高电平。

[复制链接]
7814|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cumjd820|  楼主 | 2011-11-15 07:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cumjd820 于 2011-11-15 19:12 编辑

液晶主体表现是汉字显示“混乱”?
如我在程序中写入“柔(c8e1)”而实际显示的是“揉(c8e0)";同样的有“舌(c9e0)”“舍(c9e1)”都实际显示的也是“揉”字。可以看出液晶把DB0口把所有的电平多读成低电平了。
同时我的DB0口是通过10k的上拉电阻接到p0^0口。连上电源我测了一下DB0的电压有5v左右。程序上应该是没有问题。
由此我猜测是液晶坏了(DB0口读不出高电平、)。
但是我不想从新买一个液晶、(你懂得、、哈哈)希望各位前辈大虾指点一下。(我是用这个液晶做万年历的。)看能不从硬件和软件上解决这个问题。。
还有个奇怪的问题我是我向数据口写命令0x00可以把液晶显示屏清屏(实际指令是0x01).
附上电路图、和字型码、、程序(见15楼)、、还请21ic 上的各位大侠帮帮我哦。不知道这次还能救不?就靠各位了。。。

相关帖子

沙发
xyz769| | 2011-11-15 08:25 | 只看该作者
 贴图,贴代码。。

使用特权

评论回复
板凳
cumjd820|  楼主 | 2011-11-15 09:18 | 只看该作者
图片、代码、今晚补上!现在没办法啊!我的液晶的数据口是连接到单s52的p0口、同时加了10k的上拉电阻接到电源!液晶现在显示其它(db0口没高电平的)的字是没问题的!楼上高手帮我想想啊!我觉得应该是液晶坏了、之前程序在硬件电路上跑过没有问题的!后来不小心不知道把那个地方短路了,把单片机给烧了!急啊、求解啊,21ic上的各位大侠们!

使用特权

评论回复
地板
hotpower| | 2011-11-15 10:38 | 只看该作者
其它字没问题?那就看看编译后的汇编代码是否有问题。若用keil c51,它有0xF3的bug,需要软件改正。

使用特权

评论回复
5
cumjd820|  楼主 | 2011-11-15 11:03 | 只看该作者
4# hotpower 4# hotpower 其它字是指它内码的最低位为0的,显示就正常!我用的是keil uv4,不知道有没有这个错误!同时hotpower大侠能不能把这个错误说具体的,菜鸟学习中!

使用特权

评论回复
6
hotpower| | 2011-11-15 11:18 | 只看该作者
你可以通过别的渠道把字符显示出去,例如串口,keil可以用软件仿真的,这样可以先排除字库或编译出错的问题,然后再找其它问题。要学会肯定与否定,即正确的判断。

使用特权

评论回复
7
cumjd820|  楼主 | 2011-11-15 12:29 | 只看该作者
6# hotpower 6# hotpower 串口还得学习!我在程序中只写一个汉字(且内码的最低位为高电平)实测db0为高电,而液晶显示出来的字对应的内码最低位却为低电平!(这样是否可以确认编译没有错?)如果真的是如我说的液晶DB0口读不出高电平!有没有其他的方法补救!我只写一个万年历!hotpower学习学习!

使用特权

评论回复
8
cumjd820|  楼主 | 2011-11-15 12:32 | 只看该作者
郁闷的同时还比较急……啊啊啊啊啊!

使用特权

评论回复
9
hotpower| | 2011-11-15 13:13 | 只看该作者
急什么?你改没确定编译是否正确,keil软件仿真很强大。你现在应该一个一个的解决。

使用特权

评论回复
10
cumjd820|  楼主 | 2011-11-15 13:48 | 只看该作者
现在没条件搞那东西呢……(得赚钱养自己啊……)晚上再弄去了!至于为什么急、吹牛了呗……得尽快弄好!嘿嘿……(我上面提的问题还望大侠给我解释一下啊!)

使用特权

评论回复
11
hotpower| | 2011-11-15 14:00 | 只看该作者
晕,俺告诉你方法也没什么条件呀。你现在必须先断定什么地方的错误。

使用特权

评论回复
12
cumjd820|  楼主 | 2011-11-15 14:51 | 只看该作者
哈哈……这么容易就晕了啊……还的靠你帮忙呢……我是说现在得上班(卖苦力,没条件用电脑)、得今天晚上回家才能弄!

使用特权

评论回复
13
hotpower| | 2011-11-15 15:07 | 只看该作者
晕,俺是农民条件更艰苦。

使用特权

评论回复
14
cumjd820|  楼主 | 2011-11-15 18:20 | 只看该作者
hotpower大叔(好像大家都这样叫、、呵呵、、如有冒犯请私下跟我讲哦、、、)在这谁不知道你菜农大侠啊、、、还在这说你条件艰苦、、一看就是歧视新人啊、、、
切入正题: 我用keil仿真了一下、确定是给DB0口送了高电平、。。、还求大侠帮帮我啊。。

使用特权

评论回复
15
cumjd820|  楼主 | 2011-11-15 19:09 | 只看该作者
2# xyz769

大侠还请你帮帮忙啊、、、在此先谢过。。。附图、、附程序。。
#include <AT89X52.h>
#include <string.h>
#include <INTRINS.H>
#define  Lcd_Bus P0 //数据总线
//LCD接口定义
sbit RS = P2^4;//模式位,为0输入指令,为1输入数据
sbit RW = P2^5;//读写位,为1读,为0写
sbit E = P2^6;//使能位
sbit PSB = P2^1;     //   串并口控制, 1并行、 0、串行、
sbit LCD_RES=P2^3; // //复位控制、、0复位、、、
sbit Lcd_black=P2^7;//背光控制

/******************************************************************************/
//LCD驱动(DY12864CBL液晶显示屏并口驱动程序)
/******************************************************************************/
void chk_busy(){//检查忙位(底层)
   RS=0;
   RW=1;
   E=1;
   Lcd_Bus=0xff;
   while((Lcd_Bus&0x80)==0x80);
   E=0;
}
/******************************************************************************/
void write_com(unsigned char cmdcode){//写命令到LCD(底层)
chk_busy();
RS=0;
RW=0;
E=1;
Lcd_Bus=cmdcode;
E=0;
}
/******************************************************************************/
void write_data(unsigned char Dispdata){  //写数据到LCD(底层)
chk_busy();
RS=1;
RW=0;
E=1;
Lcd_Bus=Dispdata;
E=0;
}
/******************************************************************************/
void lcm_init(){//初始化LCD屏(被调用层)
   write_com(0x30);       //选择8bit数据流
   write_com(0x0c);       //开显示(无游标、不反白)
   write_com(0x01);       //清除显示,并且设定地址指针为00H
}

void main()
{
    lcm_init();
Lcd_black=0;
while(1)
{
       write_data(0xc9); // c9e0是舌字的字型码、、   而实际显示的是揉字(c8e0"")
    write_data(0xe0);   //    c9(11001001)   c8(11001000)
       while(1);
}
}

使用特权

评论回复
16
cumjd820|  楼主 | 2011-11-15 19:15 | 只看该作者
在线等各位大侠帮我解决啊、、、、还是hotpower最热心、、、超爱!!~~谢谢了、、、、

使用特权

评论回复
17
cumjd820|  楼主 | 2011-11-15 19:15 | 只看该作者
在线等各位大侠帮我解决啊、、、、还是hotpower最热心、、、超爱!!~~谢谢了、、、、

使用特权

评论回复
18
tyw| | 2011-11-15 19:29 | 只看该作者
本帖最后由 tyw 于 2011-11-15 19:31 编辑

从你的描述看,有点象PCB板或器件毛病.
先用通表量一下引脚,排除硬件故障,保证硬件正常再找其他原因.

使用特权

评论回复
19
cumjd820|  楼主 | 2011-11-15 19:57 | 只看该作者
18# tyw

电路上的“连接”我基本上多查了遍、、现在最大的可能是液晶坏了(DB0口读不了高电平、、)可是我不知道如何在硬件上测量液晶的好坏、、  
   如果真的是液晶的问题、、可否在程序搞定(做一个万年历)、或者是否可以在硬件上做一个简单的维修呢、、、  :(

使用特权

评论回复
20
hotpower| | 2011-11-15 19:58 | 只看该作者
哈哈,老T也上阵了。
俺认为有几个问题,你可以搜索“12864 hotpower”,我做过好些,但是并行的俺做的很少,喜欢串口的,接线简单。
感觉首先可能出现的在时序上,12864在命令间有延时问题。这个要看数据手册的。
还有就是在GPIO的控制交变之间适当加nop等待信号的稳定。
还有P0做GPIO需要上拉电阻的。否则读不回来信号的。
最后一个问题就是俺反复说的,你就是不执行。
看看编译后是否输出的是你的汉字。晕,这个必须首先确定呀。因为这样才能排除字库或编译的错误。

使用特权

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

本版积分规则

1

主题

39

帖子

1

粉丝