打印

12864显示求助

[复制链接]
816|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
D-player|  楼主 | 2014-7-18 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
D-player|  楼主 | 2014-7-18 23:11 | 只看该作者
这是我写的12864的C文件。这个文件在51上执行没有任何问题。真心不明白啊
#include "msp430x54x.h"
#include <stdlib.h>
#include <stdio.h>
#include "PIN_DEF.H"
#include "12864.h"
#define unchar unsigned char
#define unint unsigned int

//12864初始化 控制端口置为输出
void _12864_init()
{
  P3DIR|=BIT7;
  P3OUT|=BIT7;
  P1DIR|=BIT2;
  P1OUT&=~BIT2;
  RW_OUT_MOD;
  E_OUT_MOD;
  RS_OUT_MOD;
}
//检测忙信号
unchar busy()
{
  unchar result;
  unchar record;
  data_in_mod;
  RS_OUT_MOD;
  RW_OUT_MOD;
  E_OUT_MOD;
  RW_H;
  RS_L;
  E_H;
  __delay_cycles(100);
  record=P4IN;
  result=(unchar)(record&0x80);
  E_L;
  return(result);
}
//写指令
void write(unchar cmd)
{
  while(busy());
  RS_OUT_MOD;
  RW_OUT_MOD;
  E_OUT_MOD;
  RS_L;
  RW_L;
  E_L;
  __delay_cycles(100);
  data_out_mod;
  P4OUT=cmd;
  __delay_cycles(100);
  E_H;
  __delay_cycles(100);
  E_L;
}
//写数据
void write_data(unchar data)
{
  RS_OUT_MOD;
  RW_OUT_MOD;
  E_OUT_MOD;
  RS_H;
  RW_L;
  E_L;
  __delay_cycles(100);
  data_out_mod;
  P4OUT=data;
  __delay_cycles(100);
  E_H;
  __delay_cycles(100);
  E_L;
}
//读数据
unchar read_data()
{
  RS_OUT_MOD;
  RW_OUT_MOD;
  E_OUT_MOD;
  unchar data;
  while(busy());
  data_in_mod;
  RS_H;
  RW_L;
  __delay_cycles(100);
  data=P4IN;
  E_L;
  return(data);
}
//确定基本参数如基本动作还是高级动作
void LCD_init()
{
  write(0x30);
  __delay_cycles(100);
  write(0x0c);
  __delay_cycles(100);
  write(0x01);
  __delay_cycles(100);
}
//基本动作显示字符的显示位子
void lcd_pos(unchar X,unchar Y)
{
  unchar pos;
  if(X==0)
  {X=0x80;}
  else if(X==1)
  {X=0x90;}
  else if(X==2)
  {X=0x88;}
  else if(X==3)
  {X=0x98;}
  pos=X+Y;
  write(pos);
}
//清屏
void LCD_clear()
{
  unchar hang,lie;
        write(0x34);//开扩充指令集

       
       
        for(hang=0;hang<32;hang++)
                {
                       
                       
                                write(0x80+hang);//先写Y坐标
                                write(0x80);//写X坐标
                       
                        for(lie=0;lie<16;lie++)
                        {
                                write_data(0X00);       
                        }
                }
       
       
        for(hang=0;hang<32;hang++)
        {
                 write(0x80+hang);//先写Y坐标
                 write(0x88);//写X坐标
                                //X范围0~7
                 for(lie=0;lie<16;lie++)
                        {
                                write_data(0X00);       
                        }
        }
        write(0x36);
        write(0x30);
}

使用特权

评论回复
板凳
xyz549040622| | 2014-7-19 08:02 | 只看该作者
忙检测都跳不出来?是不是时序问题呢?430的延时不够?你网上找个430的12864程序烧进去试试,但极力怀疑是不是你对430不熟悉引起的问题,所以建议你先烧别人好的工程试试

使用特权

评论回复
地板
dirtwillfly| | 2014-7-19 21:48 | 只看该作者
好长的代码

使用特权

评论回复
5
dirtwillfly| | 2014-7-20 21:03 | 只看该作者
楼主问题解决了吗?

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝