12864 只显示第一个汉字 怎么解决的,我找不到原因 同样问题 |
YYB_123456 发表于 2020-3-15 12:11 噢噢,原来是这个啊,我也觉得审核慢,要等很长时间,哈哈哈哈。这个问题已经解决了,谢谢啦 |
YYB_123456 发表于 2020-3-15 00:08 非常感谢您的指点,目前已解决这个问题 |
孤雪 发表于 2020-3-15 10:43 我说信息延时太离谱是指回复通过审核延迟。我写回复的时候最新的信息只能看到二楼你回复的,发出来过一会儿看通过审核的楼高了,中间已经有两个回复,我还仅以楼主位那个信息量在讨论,那我说的就不成立了呀,所以我也感觉挺郁闷。多个回复在排队等着出大门呢。 |
YYB_123456 发表于 2020-3-15 00:28 我用的是STC12C5A60S2,速度是C52的12倍,所以延时也就用了很大 |
![]() ![]() ![]() |
我大胆猜测一下,也许问题出在你没贴出来的所谓的程序化的函数上,看那调用显示函数的架势是用的带字库的12864吧,难道是后面那个字液晶屏没收到?可以试一下只显一个字或多几个字看看又是什么情况,有多年设计经验的人往往也会在一些小问题上翻船,定向思维作怪,老认为那里对的,然后就一笔带过了,恰好就是那里有问题。然后个人建议在提问题或回复的时候尽量多提供一些信息便于别人帮你分析,不同的条件会出现很多想象不到的问题。不是要疯了这样的,对问题毫无帮助,静下心来找原因,多分析一下总能找到问题所在。 |
用这个吧,显示汉字直接用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); }*/ |
求解啊,刚学12864,要疯了 |
信息量有点少。只显示"速"字还是"度"字呀,实际显示是不是在你想要的显示屏坐标位置? |