真的很急,有明白的帮帮我,我自己写了一个SPI通信的串行连接12864,程序在下面,不知道为什么就是屏幕不出字void Delay(int num);
unsigned char tab1[]={
" 电子万年历 "
" QQ478706146 "
" 13552955121 "
" 李引科 "
};
void sendbyte(unsigned char bbyte);
void initspi(void);
void write(unsigned int start, unsigned char ddata) ;
void LCM_WriteString(unsigned char *str) ; //写字符 例:LCM_WriteString("您好!");
void LCM_WriteDatOrCom(unsigned int b ,unsigned char a ); //(0,指令) (1,数据)
void LCM_w_byte(unsigned char bbyte); //写一个字节给LCM
void LCM_init(void); //LCM初始化
void LCM_clr(void); //清屏
//初始化LCM
void LCM_init(void)
{
write (0,0x30); /*30---基本指令动作*/
write(0,0x01); /*清屏,地址指针指向00H*/
Delay (100);
write (0,0x06); /*光标的移动方向*/
write(0,0x0c); /*开显示,关游标*/
}
//写指令或数据 (0,指令) (1,数据)
void initspi(void)
{
*SPICCR = 0x0007; //
*SPICTL = 0x000E; //
*SPIBRR = 0x0000A; //
*SPICCR = *SPICCR|0x0080; //
*SPIPRI=0x0010;
}
void write(unsigned int start, unsigned char ddata) //写指令或数据
{
unsigned char start_data,Hdata,Ldata;
if(start==0) start_data=0xf800; //写指令
else start_data=0xfa00; //写数据
Hdata=ddata&0x00f0; //取高四位
Hdata<<8;
Ldata=(ddata<<4)&0x00f0; //取低四位
Ldata<<8;
sendbyte(start_data); //发送起始信号
Delay(100); //延时是必须的
sendbyte(Hdata); //发送高四位
Delay(30); //延时是必须的
sendbyte(Ldata); //发送低四位
Delay(30); //延时是必须的
}
void sendbyte(unsigned char bbyte) //发送一个字节
{
unsigned int flag;
*SPITXBUF =bbyte;
while (1){
flag = *SPISTS&0x0040;
if(flag == 0x0040) break;
}
}
void chn_disp (unsigned char *chn)
{
unsigned char i,j;
write (0,0x30);
write (0,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
write(1,chn[j*16+i]);
}
}
//清屏函数
void LCM_clr(void)
{
write (0,0x30);
write (0,0x01);
Delay (180);
}
void Delay(int num)//延时函数
{
while(num--);
}
void main(void)
{
ini();//初始化,不用管
initspi(void); //SPI参数设定
LCM_init();//初始化液晶显示器
while(1)
{ chn_disp(tab1);//显示欢迎字
}
}
此帖出自
小平头技术问答
一周热门 更多>