3086|4

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用1602LCD碰到的奇怪问题(难) [复制链接]

我用AT89S52与1602LCD相连,P1口与LCD的D0-D7相连,编写了一个程序,但LCD上显示的如果是数字,那只能显示偶数,如果是字母,那只能是b,d,f...我应该是D0脚有问题,每次这里测电平都是低电平,这跟前面的电路没有关系把?因为我是直接把P1.0和D1相连的,也没什么线接到P1.0中,芯片的底座也没坏,因为引出一跟线测过,P1和D的连接也全好的,也没把P1口连到地,究竟怎么回事啊?大家来谈下你的见解啊?还有别的什么原因吗?

最新回复

把main函数改成: main{ P1=0x03; while(1); } 测量P1口,如果电平正常,那就说明是你的程序设计有问题 如果P1口不正常,取下屏来测,则可以判断出是哪个部分出的问题  详情 回复 发表于 2007-2-10 22:49
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不只数据传输靠那8根并行线吧?定位应该也靠它,送指令,如关显开显也靠它。如果定位没问题,送指令没问题,应该软件逻辑错。
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
#include
#include

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;

sbit rs        = P3^7;                //
sbit rw = P3^6;
sbit ep = P3^5;      //这三个改成控制端口

BYTE code dis1[] = {"pp51.com"};
BYTE code dis2[] = {"http://ww51.com "};

delay(BYTE ms)
{                                                        // 延时子程序
        BYTE i;
        while(ms--)
        {
                for(i = 0; i< 250; i++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
        }
}

BOOL lcd_bz()
{                                                        // 测试LCD忙碌状态
        BOOL result;
        rs = 0;
        rw = 1;
        ep = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result = (BOOL)(P1 & 0x80);
        ep = 0;
        return result;       
}

lcd_wcmd(BYTE cmd)
{                                                        // 写入指令数据到LCD
        while(lcd_bz());
        rs = 0;
        rw = 0;
        ep = 0;
        _nop_();
        _nop_();       
        P1 = cmd;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep = 0;               
}

lcd_pos(BYTE pos)
{                                                        //设定显示位置
        lcd_wcmd(pos | 0x80);
}

lcd_wdat(BYTE dat)       
{                                                        //写入字符显示数据到LCD
        while(lcd_bz());
        rs = 1;
        rw = 0;
        ep = 0;
        P1 = dat;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep = 0;       
}

lcd_init()
{                                                        //LCD初始化设定
        lcd_wcmd(0x38);                        //
        delay(1);
        lcd_wcmd(0x0c);                        //
        delay(1);
        lcd_wcmd(0x06);                        //
        delay(1);
        lcd_wcmd(0x01);                        //清除LCD的显示内容
        delay(1);
}

main()
{
        BYTE i;
        lcd_init();                                // 初始化LCD                       
        delay(10);

        lcd_pos(4);                                // 设置显示位置为第一行的第5个字符
        i = 0;
        while(dis1 != '\0')
        {                                                // 显示字符pp51.com
                lcd_wdat(dis1);
                i++;
        }

        lcd_pos(0x41);                        // 设置显示位置为第二行第二个字符
        i = 0;
        while(dis2 != '\0')
        {
                lcd_wdat(dis2);        // 显示字符" http://ww51.com
                i++;
        }

        while(1);
       
}这是我的程序,应该没错啊,但它显示出来就不对了,偶数能显示的,奇数一个都不会显示。显示出来的位置是对的,就是奇数不会显示,各位大侠帮下忙。。。。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
我把程序烧到芯片里,再放进去,测试了下电压,我本来写着P1=0X03的,那D0、D1应该是高电平,但测试出来的结果却是D0、D1、D2、D3这4个都是高电平,究竟怎么回事啊?越来越怪了
我现在把P1口设为0X02,第2脚确实是高电平5V,但第1,第3,第4脚都是2.3V,别的脚都是低电平0V,第1,第3,第4脚怎么会出现既不是低电平,又不是高电平的情况啊?
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

5
 
把main函数改成:

main{
P1=0x03;
while(1);
}

测量P1口,如果电平正常,那就说明是你的程序设计有问题
如果P1口不正常,取下屏来测,则可以判断出是哪个部分出的问题
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表