打印

真心求助,快哭了,求帮帮忙MSP430+LCD12864

[复制链接]
2583|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
快被弄疯了,真心求助,跪求别水贴,有什么不清楚的就问,我在线等,挺急的!谢过!!!
硬件:MSP430G2553+Lcd12864R,单片机由电脑供电,12864外接五负电源。
环境:IAR For MSP430
问题:下载成功无报错,但无显示
具体请款如下:
1、全部代码:
Main:
#include <msp430g2553.h>
#include"LCD12864P.h>
void main()
{
        WDTCTL = WDTPW + WDTHOLD;
        Ini_Lcd();
           lcd_pos(1,0);
           Disp_HZ("液晶12864",5);
           lcd_pos(3,4);
           Disp_HZ("欢迎使用",4);
           lcd_pos(2,3);
           Disp_SZ(0);
           Disp_SZ(3);
    while(1);
}
//LCD12864P.h
#include "LCD12864P.c"
#ifndef LCD12864_H_
#define LCD12864_H_
#define uint unsigned int
#define uchar unsigned char
extern uchar LCD_table[];//0123456789
extern void delay_1ms();
extern void delay_nms(uint n);
extern void Ini_Lcd(void);
extern void Send(uchar type,uchar transdata);//0-写控制命令,1-写数据
extern void lcd_pos(uchar x,uchar y);//定位
extern void Disp_HZ(const uchar * pt,uchar num);//显示汉字
extern void Disp_SZ(uchar shuzi);//显示一个数字
#endif /* LCD12864_H_ */
//LCD12864P.c
#include<msp430g2553.h>
#define BIT(x)        (1 << (x))
#define uint unsigned int
#define uchar unsigned char
uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

void Send(uchar type,uchar transdata);

#define cyCS      0    //P1.0,片选信号
#define cySID     1    //P1.1,串行数据
#define cyCLK     2    //P1.2,同步时钟
#define cyPORT    P1OUT
#define cyDDR     P1DIR

void delay_1ms()
{
        uint i;
        for(i=0;i<1140;i++);
}

void delay_nms(uint n)
{
    uint i = 0;
    for(i = n;i > 0;i--)
        delay_1ms();
}

void Ini_Lcd(void)
{
        cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS);   //相应的位端口设置为输出
        delay_nms(600);                 //延时等待液晶完成复位
        Send(0,0x30);  /*功能设置:一次送8位数据,基本指令集*/
        delay_nms(10);
        Send(0,0x02);  /*DDRAM地址归位*/
        delay_nms(5);
        Send(0,0x0c);  /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
        delay_nms(5);
        Send(0,0x01);  /*清屏,将DDRAM的位址计数器调整为“00H”*/
        delay_nms(500);
        Send(0,0x06);  /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
        delay_nms(10);
}

void Send(uchar type,uchar transdata)//0-写控制命令,1-写数据
{
        uchar firstbyte = 0xf8;
        uchar temp;
        uchar i,j = 3;

        if(type) firstbyte |= 0x02;

        cyPORT |= BIT(cyCS);
        cyPORT &= ~BIT(cyCLK);
        while(j > 0)
        {
                if(j == 3) temp = firstbyte;
                else if(j == 2) temp = transdata&0xf0;
                else  temp = (transdata << 4) & 0xf0;

                for(i = 8;i > 0;i--)
                {
                        if(temp & 0x80)        cyPORT |= BIT(cySID);
                        else                        cyPORT &= ~BIT(cySID);
                        cyPORT |= BIT(cyCLK);
                        temp <<= 1;
                        cyPORT &= ~BIT(cyCLK);
                }
                //三个字节之间一定要有足够的延时,否则易出现时序问题
                if(j == 3)        delay_nms(1);
                else               delay_nms(1);

                j--;
        }

        cyPORT &= ~BIT(cySID);
        cyPORT &= ~BIT(cyCS);
}

void lcd_pos(uchar x,uchar y)//定位
{
         uchar pos;
          switch(x)
          {
            case 1:pos=0x80;break;
            case 2:pos=0x90;break;
            case 3:pos=0x88;break;
            case 4:pos=0x98;break;
            default:pos=0x80;
          }
          pos += y;
          Send(0,pos);
}

void Disp_HZ(const uchar * pt,uchar num)//显示汉字
{
    uchar i;
           for(i = 0;i < (num*2);i++)
           Send(1,*(pt++));
}

void Disp_SZ(uchar shuzi)//显示一个数字
{
    Send(1,LCD_table[shuzi]);
}
2、硬件连接:
1:GND
2:VCC5V
3:Vo连接10k滑动变阻器滑动端
4::RS(CS)片选接430P1.0
5:R/W串行数据线SID接430P1.1
6:E时钟SCLK接430P1.2
7-14不接
15:PSB接5V电源GND
16:NC不接
17:RST接5V电源
18:VOUT,5V电源接10k滑动变阻器接此引脚
19:BLA接5V电源
20:BLK接5V电源GND
如下图所示:
file:///C:\Users\dell\AppData\Local\Temp\ksohtml\wps7CCD.tmp.png
file:///C:\Users\dell\AppData\Local\Temp\ksohtml\wpsC948.tmp.png
我被这个LCD困了一周了,实在找不到办法,网上所有相关的我几乎都看了,真心求助,跪谢各位大神指点,有的文档说大多厂家出厂就将板子的PSB焊成高电位故只能并行了,不知道是不是这个问题,我也无法求证,LCD就一直保持这个样子,我将单片机的三根数据线拔下来也是这样:
file:///C:\Users\dell\AppData\Local\Temp\ksohtml\wpsFA28.tmp.png

相关帖子

沙发
ostrovskylee|  楼主 | 2015-4-2 15:58 | 只看该作者



IMG_0812.JPG (1019.23 KB )

IMG_0812.JPG

IMG_0811.JPG (900.01 KB )

IMG_0811.JPG

IMG_0809.JPG (812.04 KB )

IMG_0809.JPG

使用特权

评论回复
板凳
dirtwillfly| | 2015-4-2 16:12 | 只看该作者
串行硬件接法?首先确定下你的12864支持这种操作吗?

使用特权

评论回复
地板
quray1985| | 2015-4-3 09:01 | 只看该作者

我用stm32写过串行的lcd,开始的时候,你让速率慢一些

使用特权

评论回复
5
xyz549040622| | 2015-4-4 10:17 | 只看该作者
12864,一般都是延时的问题,你最好找个别人写好的驱动试试。

使用特权

评论回复
6
lovecat2015| | 2015-4-4 13:01 | 只看该作者
quray1985 发表于 2015-4-3 09:01
我用stm32写过串行的lcd,开始的时候,你让速率慢一些

楼主先去网上找个别人写好的代码试一下,成功之后再改

使用特权

评论回复
7
quray1985| | 2015-4-4 14:06 | 只看该作者
lovecat2015 发表于 2015-4-4 13:01
楼主先去网上找个别人写好的代码试一下,成功之后再改

开始的时候延时一定要够
还有时钟频率不要太快了

使用特权

评论回复
8
yirongfu| | 2015-4-9 00:10 | 只看该作者
单片机3.3V,屏5V,我怀疑是不是串行口高电平没被LCD模块识别。
一般我不喜欢这样设计,还是找块3V的屏保险。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝