g2553驱动12864驱动不了呀

2019-03-23 22:15发布

程序如下,cs脚我接的是vcc,用的是5v电压的12864,之前怀疑是因为引脚只有3.3v才不显示的,但是之后加了缓冲器升到5v还是没有显示,程序检查半天也没看到错误
//12864液晶串行显示测试程序
//P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚)
//4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式
//17脚(RST信号)根据注释提示悬空
#include <MSP430g2231.h>

void int_port(void)                    //管脚初始化
{
//  P1SEL&=~(BIT4+BIT5);                        //P1.4模拟SID,设置为i/o口输出方向
  P1DIR|=(BIT4+BIT5);
}
void delay(unsigned int t)             //延时函数
{                                      //粗略延时,满足时序要求
unsigned int i,j;
for(i=0; i<t;  i++)
        for(j=0; j<10; j++);
}
void sendbyte(unsigned char zdata)     //数据传送函数
{
         P1OUT&=~BIT5;
  unsigned char code_seg7;
  unsigned char i;
  code_seg7=zdata;
  for(i=0; i<8; i++)
  {
          P1OUT&=~BIT5;
    if((code_seg7<<i)&0x80)
      P1OUT|=BIT4;                     //SID为1
    else
      P1OUT&=~BIT4;                    //SID为0
    delay(20);
    P1OUT|=BIT5;//产生时钟信号上沿
    delay(20);
     P1OUT&=~BIT5; //产生时钟信号下沿

  }
}
void write_com(unsigned char cmdcode)  //写命令函数
{                                      //串口控制格式(11111AB0)
                                //A数据方向控制,A=H时读,A=L时写
                                       //B数据类型选择,B=H时为显示数据,B=L时为命令
sendbyte(0xf8);                //MCU向LCD发命令

        sendbyte(cmdcode & 0xf0);      //发高四位数据(数据格式D7D6D5D4_0000)
sendbyte((cmdcode << 4) & 0xf0);//发低四位数据(数据格式D3D2D1D0_0000)
delay(20);                      //延时等待
}
void write_data(unsigned char Dispdata)//写数据函数
{

sendbyte(0xfa);                //MCU向LCD发数据
sendbyte(Dispdata & 0xf0);     //发高四位数据
sendbyte((Dispdata << 4) & 0xf0);//发低四位数据
delay(20);
}
void lcdinit()                         //LCD初始化
{
delay(20000);                  //复位等待(内部自带上电复位电路),时间较长
write_com(0x30);               //功能设定:基本指令集操作
delay(500);                     //延时等待
write_com(0x02);
delay(500);
write_com(0x0c);               //整体显示,关游标
delay(500);
write_com(0x01);
delay(500);
write_com(0x06);               //屏幕清零
delay(500);
write_com(0x80);
}
void write_pos(unsigned char x,unsigned char y)
{
        unsigned char pos;
        if(x==1)
                x=0x80;
        else if(x==2)
                x=0x90;
        else if(x==3)
                x=0x88;
        else if(x==4)
                x=0x98;
        pos=x+y-1;
        write_com(pos);
}
void print_string(unsigned char x,unsigned char y,unsigned char *s)          //发送字符串
{
        unsigned char i;
        lcdinit();
        write_pos(x,y);
        for(i=0;*(s+i)!='';i++)
                write_data(s[i]);
}
void Test()
{
        print_string(1,1,"频率计:");
        delay(50);
        write_pos(2,7);
        write_data('H');
        write_data('z');
        delay(50);
}
void main()//正确结果:屏幕显示:德州仪器MSP430(第一行) 频率:  1234HZ(第二行)
{
WDTCTL=WDTPW+WDTHOLD;          //关闭看门狗
int_port();                    //端口初始化
lcdinit();                     //LCD初始化
Test();                        //测试
while(1);                      //CPU空转
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
jxydyh
2019-03-24 19:02
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章