找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2141|回复: 11
收起左侧

求助,12864为什么只显示一个字

[复制链接]
ID:429204 发表于 2020-3-14 16:53 | 显示全部楼层 |阅读模式
使用12864想显示速度两个字,但是下载之后只显示一个速字,怎么解决?贴上数组和显示函数了,其他的都是程序化的函数就不贴了

捕获1.PNG
捕获2.PNG


回复

使用道具 举报

ID:704545 发表于 2020-3-14 19:56 | 显示全部楼层
信息量有点少。只显示"速"字还是"度"字呀,实际显示是不是在你想要的显示屏坐标位置?
回复

使用道具 举报

ID:429204 发表于 2020-3-14 19:57 | 显示全部楼层
求解啊,刚学12864,要疯了
回复

使用道具 举报

ID:452950 发表于 2020-3-14 22:06 | 显示全部楼层
用这个吧,显示汉字直接用PutStr(1,1,"速度");       
#include <reg52.h>
#include <intrins.h>
sbit CS =P2^5;//RS
sbit SID=P2^6;//RW
sbit SCK=P2^7;//E
/**************************************************************
      //串/并方式控制
/*******************************************************************
              常量声明区
********************************************************************/            
unsigned char code AC_TABLE[]={                                           //坐标编码
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};
/****************************************************************
声明:建议读者先查阅我们提供的12864word文档资料,理解12864定坐标的
方式。                                                                                                   
              发送一个字节
*****************************************************************/
void SendByte(unsigned char Dbyte)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                SCK = 0;
                Dbyte=Dbyte<<1;
                SID = CY;
                SCK = 1;
                SCK = 0;
        }
}
/**********************************************************
              接收一个字节
***********************************************************/

unsigned char ReceiveByte(void)
{
        unsigned char i,temp1,temp2;
        temp1=temp2=0;
        for(i=0;i<8;i++)
        {
                temp1=temp1<<1;
                SCK = 0;
                SCK = 1;               
                SCK = 0;
                if(SID) temp1++;
        }
        for(i=0;i<8;i++)
        {
                temp2=temp2<<1;
                SCK = 0;
                SCK = 1;
                SCK = 0;
                if(SID) temp2++;
        }
        return ((0xf0&temp1)+(0x0f&temp2));
}
/****************************************************************
                      检查忙状态
******************************************************************/
void CheckBusy( void )
{
        do SendByte(0xfc);     //11111,RW(1),RS(0),0
        while(0x80&ReceiveByte());
}

/******************************************************************
           写一个字节的指令
*******************************************************************/
void WriteCommand( unsigned char Cbyte )
{
        CS = 1;
        CheckBusy();
        SendByte(0xf8);          //11111,RW(0),RS(0),0
        SendByte(0xf0&Cbyte);
        SendByte(0xf0&Cbyte<<4);
        CS = 0;
}
/*************************************************************
                 写一个字节的数据
**************************************************************/
void WriteData( unsigned char Dbyte )
{
        CS = 1;
        CheckBusy();
        SendByte(0xfa);          //11111,RW(0),RS(1),0
        SendByte(0xf0&Dbyte);
        SendByte(0xf0&Dbyte<<4);
        CS = 0;
}

/******************************************************************
                         lcd初始化函数
*******************************************************************/
void LcmInit( void )
{
     WriteCommand(0x30);
     WriteCommand(0x03);
     WriteCommand(0x0c);
     WriteCommand(0x01);
     WriteCommand(0x06);
}

/*******************************************************************************************************
                                 设定光标函数
********************************************************************************************************/
void Location_xy_12864(unsigned char x,unsigned char y)
{
        switch(x)
        {
                case 0:
                        x=0x80;break;
                case 1:
                        x=0x90;break;
                case 2:
                        x=0x88;break;
                case 3:
                        x=0x98;break;
                default:
                        x=0x80;
        }
        y=y&0x07;
        WriteCommand(0x30);
        WriteCommand(y+x);
        WriteCommand(y+x);

}
/***********************************************************************************
                  清除文本
************************************************************************************/
void LcmClearTXT( void )
{
        unsigned char i;
        WriteCommand(0x30);
        WriteCommand(0x80);
        for(i=0;i<64;i++)
        WriteData(0x20);
        Location_xy_12864(0,0);            
}
/**************************************************************************************
                   清除图片
*****************************************************************************************/
/*
void LcmClearBMP( void )
{
        unsigned char i,j;
        WriteCommand(0x34);
        WriteCommand(0x36);
        for(i=0;i<32;i++)
        {
                WriteCommand(0x80|i);
                WriteCommand(0x80);
                for(j=0;j<32;j++)
                WriteData(0);
        }
}
*/
//显示温度


/****************************************************************************************
                      显示字符串
*****************************************************************************************/
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{   
        WriteCommand(0x30);
        WriteCommand(AC_TABLE[8*row+col]);
        while(*puts != '\0')
        {
                if(col==8)
                {
                        col=0;
                        row++;
                }
                if(row==4) row=0;
                WriteCommand(AC_TABLE[8*row+col]);
                WriteData(*puts);
                puts++;
                if(*puts != '\0')
                {
                        WriteData(*puts);
                        puts++;
                        col++;
                }  
        }
}
/*
//显示一个四位的数字
void PutNum(unsigned char row,unsigned char col,unsigned int num)
{
    WriteCommand(0x30);
    WriteCommand(AC_TABLE[8*row+col]);
    WriteData((num/1000)+48);
    WriteData(((num%1000)/100)+48);
    WriteData(((num%100)/10)+48);
    WriteData((num%10)+48);   
}*/
回复

使用道具 举报

ID:429204 发表于 2020-3-14 22:53 | 显示全部楼层
YYB_123456 发表于 2020-3-14 19:56
信息量有点少。只显示"速"字还是"度"字呀,实际显示是不是在你想要的显示屏坐标位置?

位置正确,只显示速字 捕获z.PNG 捕获s.PNG d.PNG 捕获f.PNG

回复

使用道具 举报

ID:704545 发表于 2020-3-15 00:08 | 显示全部楼层
我大胆猜测一下,也许问题出在你没贴出来的所谓的程序化的函数上,看那调用显示函数的架势是用的带字库的12864吧,难道是后面那个字液晶屏没收到?可以试一下只显一个字或多几个字看看又是什么情况,有多年设计经验的人往往也会在一些小问题上翻船,定向思维作怪,老认为那里对的,然后就一笔带过了,恰好就是那里有问题。然后个人建议在提问题或回复的时候尽量多提供一些信息便于别人帮你分析,不同的条件会出现很多想象不到的问题。不是要疯了这样的,对问题毫无帮助,静下心来找原因,多分析一下总能找到问题所在。
回复

使用道具 举报

ID:704545 发表于 2020-3-15 00:28 | 显示全部楼层
这信息延时太离谱了,当我没说就好
回复

使用道具 举报

ID:429204 发表于 2020-3-15 10:43 | 显示全部楼层
YYB_123456 发表于 2020-3-15 00:28
这信息延时太离谱了,当我没说就好

我用的是STC12C5A60S2,速度是C52的12倍,所以延时也就用了很大
回复

使用道具 举报

ID:704545 发表于 2020-3-15 12:11 来自手机 | 显示全部楼层
孤雪 发表于 2020-3-15 10:43
我用的是STC12C5A60S2,速度是C52的12倍,所以延时也就用了很大

我说信息延时太离谱是指回复通过审核延迟。我写回复的时候最新的信息只能看到二楼你回复的,发出来过一会儿看通过审核的楼高了,中间已经有两个回复,我还仅以楼主位那个信息量在讨论,那我说的就不成立了呀,所以我也感觉挺郁闷。多个回复在排队等着出大门呢。
回复

使用道具 举报

ID:429204 发表于 2020-3-18 19:07 | 显示全部楼层
YYB_123456 发表于 2020-3-15 00:08
我大胆猜测一下,也许问题出在你没贴出来的所谓的程序化的函数上,看那调用显示函数的架势是用的带字库的12 ...

非常感谢您的指点,目前已解决这个问题
回复

使用道具 举报

ID:429204 发表于 2020-3-18 19:08 | 显示全部楼层
YYB_123456 发表于 2020-3-15 12:11
我说信息延时太离谱是指回复通过审核延迟。我写回复的时候最新的信息只能看到二楼你回复的,发出来过一会 ...

噢噢,原来是这个啊,我也觉得审核慢,要等很长时间,哈哈哈哈。这个问题已经解决了,谢谢啦
回复

使用道具 举报

ID:102505 发表于 2020-11-9 00:26 | 显示全部楼层
12864 只显示第一个汉字
怎么解决的,我找不到原因
同样问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表