打印
[51单片机]

求救LCD1602的问题

[复制链接]
693|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
淡定的牙粉|  楼主 | 2015-9-7 19:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 淡定的牙粉 于 2015-9-7 19:26 编辑

我将在STC89C52RC上调试成功的LCD1602程序移植到STC12C5A60S2上,延迟什么的都扩大了;但是只有数字以及标点符号显示正常,但是字母显示的是乱码,这是什么原因如果你有移植成功的程序,可以让我参考一下吗

相关帖子

沙发
ayb_ice| | 2015-9-8 07:59 | 只看该作者
调试吧,
扩大了不等于OK了,移植也不等于成功

使用特权

评论回复
板凳
NE5532| | 2015-9-8 08:43 | 只看该作者
如果所有位置上显示数字都可以正常,说明底层传输是OK的,找字符和数字之间的区别把(很有可能是编译问题)。

使用特权

评论回复
地板
ningling_21| | 2015-9-8 09:19 | 只看该作者
贴程序,跟程序有很大关系

使用特权

评论回复
5
淡定的牙粉|  楼主 | 2015-9-9 12:14 | 只看该作者
#include "stc12c5a60s2.h"
#include<intrins.h>
typedef unsigned char uchar;

sbit LCD1602_RS=P1^0;
sbit LCD1602_RW=P1^1;
sbit LCD1602_E=P2^5;
sbit du=P2^6;
sbit we=P2^7;

void Delayms(unsigned int ms)
{
    int i,j;
    for(i=ms;i>0;i--)
            for(j=110;j>0;j--);        
}
void CloseSmg()                                   //关数码管
{
        P0=0;
        du=1;
        du=0;
}
void LCD1602_Ready()
{
        P0=0XFF;
        LCD1602_RS=0;
        LCD1602_RW=1;
        LCD1602_E=1;
        while(P0&0X80);
        LCD1602_E=0;
}
void LCD1602_WriteCMD(uchar date)
{
        LCD1602_Ready();         
        LCD1602_RS=0;           
        LCD1602_RW=0;
        P0=date;
        LCD1602_E=1;
        Delayms(5);
        LCD1602_E=0;
}
void LCD1602_WriteDate(uchar date)
{
        LCD1602_Ready();
        LCD1602_RS=1;
        LCD1602_RW=0;
        P0=date;
        LCD1602_E=1;
        Delayms(5);
        LCD1602_E=0;
}

/***********设置光标所处位置**********/
void LCD1602_Position(uchar row,uchar list)        // 光标所处位置
{
        if(row==0) LCD1602_WriteCMD(list|0x80);
        else       LCD1602_WriteCMD(list|0xC0);
}
/*********显示单个字符到LCD1602上**********/
void LCD1602_ShowChar(uchar row,uchar list,uchar address)
{
        LCD1602_Position(row,list);        
        LCD1602_WriteDate(address);
}
/*********显示字符串到LCD1602上**********/
void LCD1602_ShowStr(uchar row,uchar list,uchar *str)  
{
        LCD1602_Position(row,list);
        while(*str!='\0')
                {
                        LCD1602_WriteDate(*str++);
                }        
}
/********初始化LCD1602************/
void LCD1602_Init ()
{
        CloseSmg();                                                 //关数码管
        LCD1602_E=0;
        LCD1602_WriteCMD(0x38);                                //数据写入设置
        LCD1602_WriteCMD(0x01);                                //清屏                        
        LCD1602_WriteCMD(0x06);             //光标及液晶屏移动
        LCD1602_WriteCMD(0x0C);                             //光标及液晶屏显示
}
void main()
{
        LCD1602_Init ();
        LCD1602_ShowStr(0,0,"()';123zj");
        while(1);
}

使用特权

评论回复
6
淡定的牙粉|  楼主 | 2015-9-9 12:16 | 只看该作者
ningling_21 发表于 2015-9-8 09:19
贴程序,跟程序有很大关系

你好,我已经贴上程序;麻烦您帮我看一下

使用特权

评论回复
7
ningling_21| | 2015-9-9 15:18 | 只看该作者
淡定的牙粉 发表于 2015-9-9 12:16
你好,我已经贴上程序;麻烦您帮我看一下
lcdwrdata('C');
                                        lcdwrdata('R');
                                        lcdwrdata('C');
                                        lcdwrdata('O');
                                        lcdwrdata('K');


像这样单独显示一个字符能否正常?

使用特权

评论回复
8
淡定的牙粉|  楼主 | 2015-9-9 15:42 | 只看该作者
ningling_21 发表于 2015-9-9 15:18
像这样单独显示一个字符能否正常?

不行,数字显示正常,但字母确显示的是符号(如 , ; ? !等等)而不是字母

使用特权

评论回复
9
ningling_21| | 2015-9-9 16:26 | 只看该作者
淡定的牙粉 发表于 2015-9-9 15:42
不行,数字显示正常,但字母确显示的是符号(如 , ; ? !等等)而不是字母 ...

是不是电路上1602和数码管互相影响

使用特权

评论回复
10
淡定的牙粉|  楼主 | 2015-9-9 16:28 | 只看该作者
淡定的牙粉 发表于 2015-9-9 15:42
不行,数字显示正常,但字母确显示的是符号(如 , ; ? !等等)而不是字母 ...

我弄好了,麻烦你了;原来单片机的一个IO口坏了

使用特权

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

本版积分规则

16

主题

34

帖子

0

粉丝