12864显示求助

2019-08-03 21:18发布

12864显示一直出问题,背景能亮,但是无法显示。忙检测无法跳出,就算屏蔽了不执行忙检测也没有显示。刚从51转到430.求教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
D-player
1楼-- · 2019-08-03 22:17
这是我写的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
2楼-- · 2019-08-03 22:41
忙检测都跳不出来?是不是时序问题呢?430的延时不够?你网上找个430的12864程序烧进去试试,但极力怀疑是不是你对430不熟悉引起的问题,所以建议你先烧别人好的工程试试
dirtwillfly
3楼-- · 2019-08-04 02:30
好长的代码
dirtwillfly
4楼-- · 2019-08-04 04:18
 精彩回答 2  元偷偷看……

一周热门 更多>