关于12864只能显示有限个字符的问题
杰特JET 2014-07-31 07:50:58 我用msp430G2553驱动ST7920,已经能显示出来,但是很疑惑只能显示10个字,五个字节,再多就没办法显示了,可以再屏幕的不同位置输出,但是总量只有十个字- -;有人能帮帮我吗?下面是代码#include <msp430g2553.h>
#define uchar unsigned char
#define uint unsigned int
#define CS BIT5 //片选信号//下面几个信号都是p1
#define SID BIT6 //数据信号
#define SCLK BIT7 //时钟信号
#define RST BIT2 //复位信号
#define CH BIT4 //并行、串行选择信号
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t){
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<11; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
P1OUT|=SID;
}
else
{
P1OUT&=~SID;
}
P1OUT|=SCLK;
P1OUT&=~SCLK;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
P1OUT|=CS;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
P1OUT|=CS;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
write_com(0x30);
//delay(50);
write_com(0x0c);
//delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char *s)
{
while(*s >0)
{
write_data(*s);
s++;
delay(5);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
char *b="voltage";
write_com(0x03);//允许输入垂直卷动地址
delay(50);
write_com(0x91);
hzkdis(b);
write_com(0x98);
hzkdis(b);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
P1DIR|=BIT2+BIT4+BIT5+BIT6+BIT7;
P1OUT|=0X00;
P1OUT&=~CH;
delay(1);
lcdinit();
delay(10);
Test();
while(1);
}
就想test函数中那样,函数中描述的是在不同的地方显示两边voltage,但实际上只能显示voltage vol