找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2818|回复: 4
收起左侧

msp430g2553驱动12864显示不了

[复制链接]
ID:220848 发表于 2018-1-27 14:43 | 显示全部楼层 |阅读模式
1黑币
程序如下,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)!='\0';i++)
                write_data(s);
}
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空转
}

回复

使用道具 举报

ID:279646 发表于 2018-1-27 19:44 | 显示全部楼层
没用过12864,我用1602的时候也是程序检查很久不知道问题在哪。后来发现不是程序的问题。是对比度那个引脚接的电阻大小有问题。
你可以看看12864是否有对比度调节的引脚,接的电阻大小是否正确

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:280288 发表于 2018-1-27 21:08 | 显示全部楼层
msp430g2553是3.3v供电,LCD如果是5V 的则不能显示或不能正常显示,购买3,。3v的lcd即可。
回复

使用道具 举报

ID:280288 发表于 2018-1-27 21:13 | 显示全部楼层
msp430g2553是3.3v供电,接口输出是小于3.3v电平的信号,与5vLCD 的接口不匹配,以前我也试过,后购买了3.3v的LCD就显示正常了。
回复

使用道具 举报

ID:273292 发表于 2018-1-27 21:56 | 显示全部楼层
确定不是电路的问题么
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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