2849|6

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

12864液晶显示波形的管脚设置问题 [复制链接]

这个程序的管脚设置是哪里出错了吗,因为一直出现
Error[Pe020]: identifier "P5OUT" is undefined C:\Users\Administrator\Desktop\脉搏波显示1\12864.c 186
的错误
是这个语句的错误吗#define LCD_CMDOut    P5DIR|=0xe3
希望大家能够不吝赐教~~~


#include
#include
typedef unsigned char uchar;
typedef unsigned int uint;


#define LCD_DataIn    P4DIR=0x00    //数据口方向设置为输入
#define LCD_DataOut   P4DIR=0xff    //数据口方向设置为输出
#define LCD2MCU_Data  P4IN
#define MCU2LCD_Data  P4OUT
#define LCD_CMDOut    P5DIR|=0xe3
#define LCD_RS_H      P5OUT|=BIT5      //P5.5
#define LCD_RS_L      P5OUT&=~BIT5     //P5.5
#define LCD_RW_H      P5OUT|=BIT6      //P5.6
#define LCD_RW_L      P5OUT&=~BIT6     //P5.6
#define LCD_EN_H      P5OUT|=BIT7     //P5.7
#define LCD_EN_L      P5OUT&=~BIT7     //P5.7
#define LCD_PSB_H      P5OUT|=BIT0     //P5.0
#define LCD_PSB_L      P5OUT&=~BIT0     //P5.0
#define LCD_RST_H      P5OUT|=BIT1      //P5.1
#define LCD_RST_L      P5OUT&=~BIT1     //P5.1

/**************************************************
函数名称:Delay_1ms
功    能:延时1ms
参    数:无
返回值  :无
**************************************************/
void Delay_1ms(void)
{
  uchar i;
  for(i=150;i>0;i--) _NOP();
}

void Delay_Nms(uint n)
{
  uint i;
  for(i=n;i>0;i--) Delay_1ms();
}

/**************************************************
函数名称:Write_Cmd
功    能:向液晶中写控制命令
参    数:cmd--控制命令
返回值  :无
**************************************************/
void Write_Cmd(uchar cmd)
{
  uchar lcdtemp = 0;
  LCD_RS_L;
  LCD_RW_H;
  LCD_DataIn;
  do
  {
    LCD_EN_H;
    _NOP();
    lcdtemp = LCD2MCU_Data;
    LCD_EN_L;
  }
  while(lcdtemp&0x80);

  LCD_DataOut;
  LCD_RS_L;
  LCD_RW_L;
  MCU2LCD_Data = cmd;

  LCD_EN_H;
  _NOP();
  LCD_EN_L;
}

/**************************************************
函数名称:Write_Data
功    能:向液晶中写数据
参    数:dat--显示数据
返回值  :无
**************************************************/
void Write_Data(uchar dat)
{
   uchar lcdtemp;
   LCD_RS_L;
   LCD_RW_H;
   LCD_DataIn;
   do
   {
     LCD_EN_H;
     _NOP();
     lcdtemp = LCD2MCU_Data;
     LCD_EN_L;
   }
   while(lcdtemp&0x80);

   LCD_RS_H;
   LCD_RW_L;
   LCD_DataOut;
   MCU2LCD_Data = dat;
   LCD_EN_H;
   _NOP();
   LCD_EN_L;
}

/**************************************************
函数名称:Ini_lcd
功    能:初始化液晶模块
参    数:无
返回值  :无
**************************************************/
void Ini_lcd(void)
{
     LCD_CMDOut;    //液晶控制端口设置为输出

   // Delay_Nms(500);
    Write_Cmd(0x30);   //基本指令集
    Delay_1ms();
    Write_Cmd(0x02);   // 地址归位
    Delay_1ms();
    Write_Cmd(0x0c);   //整体显示打开,游标关闭
    Delay_1ms();
    Write_Cmd(0x01);   //清除显示
    Delay_1ms();
    Write_Cmd(0x06);   //游标右移
    Delay_1ms();
    Write_Cmd(0x80);   //设定显示的起始地址
}
/**************************************************
函数名称:Clear_GDRAM
功    能:清除液晶GDRAM中的随机数据
参    数:无
返回值  :无
**************************************************/

void Clear_GDRAM(void)
{
    uchar i,j,k;

        Write_Cmd(0x34);        //打开扩展指令集
        i = 0x80;            
        for(j = 0;j < 32;j++)
        {
        Write_Cmd(i++);
        Write_Cmd(0x80);
                  for(k = 0;k < 16;k++)
                  {
                      Write_Data(0x00);
                  }
        }
        i = 0x80;
        for(j = 0;j < 32;j++)
        {
            Write_Cmd(i++);
        Write_Cmd(0x88);          
                  for(k = 0;k < 16;k++)
                  {
                       Write_Data(0x00);
                   }
        }   
        Write_Cmd(0x30);        //回到基本指令集
}

/**************************************************
函数名称:Lcd_ReadData
功    能:读取12864中一个字节的数据
参    数:无
返回值  :显示的数据
**************************************************/


uchar Lcd_ReadData()
{
  unsigned char Data_Temp;
   uchar lcdtemp;
   LCD_RS_L;
   LCD_RW_H;
   LCD_DataIn;
   do
   {
     LCD_EN_H;
     _NOP();
     lcdtemp = LCD2MCU_Data;
     LCD_EN_L;
   }
   while(lcdtemp&0x80);

  LCD_RS_H;
  LCD_RW_H;
  LCD_DataIn;

  LCD_EN_H;
  _NOP();
  Data_Temp = LCD2MCU_Data;
  LCD_EN_L;

  return Data_Temp;
}

/**************************************************
函数名称:LCD_Set_Dot
功    能:任意位置画点,但覆盖原来的数据
参    数:X--横坐标
          Y--纵坐标
返回值  :无
**************************************************/

void LCD_Set_Dot(uchar X,uchar Y)
{
  uchar X_byte,X_bit;
  uchar Y_byte,Y_bit;
  X_byte = X<<4;
  X_bit  = X%16;

  Y_byte = Y<<5;  
  Y_bit  = Y%32;

  Write_Cmd(0x34);
  Write_Cmd(0x80 + Y_bit);
  Write_Cmd(0x80 + X_byte + (Y_byte<<3));

  if(X_bit < 8)
  {
    Write_Data(0x01<<(7 - X_bit)) ;
    Write_Data(0x00);
  }
  else
  {
    Write_Data(0x00);
    Write_Data(0x01<<(15 - X_bit));
  }
  Write_Cmd(0x36);
//  Write_Cmd(0x30);
}

/**************************************************
函数名称:LCD_Set_Dot1
功    能:任意位置画点,不覆盖原来的数据
参    数:X--横坐标
          Y--纵坐标
返回值  :无
**************************************************/


void LCD_Set_Dot1(uchar X,uchar Y)
{
  uchar X_byte,X_bit,Oldbyte_H;
  uchar Y_byte,Y_bit,Oldbyte_L;
  X_byte = X/16;
  X_bit  = X%16;

  Y_byte = Y/32;  
  Y_bit  = Y%32;

// Write_Cmd(0x34);
  Write_Cmd(0x80 + Y_bit);
  Write_Cmd(0x80 + X_byte + (Y_byte<<3));

  Lcd_ReadData();                 //没有这一条指令出错~!
  Oldbyte_H = Lcd_ReadData();
  Oldbyte_L = Lcd_ReadData();

//  Write_Cmd(0x34);
  Write_Cmd(0x80 + Y_bit);
  Write_Cmd(0x80 + X_byte + (Y_byte<<3));
  if(X_bit < 8)
  {
    Write_Data((Oldbyte_H) | (0x01<<(7 - X_bit))) ;
    Write_Data(Oldbyte_L);
  }
  else
  {
    Write_Data(Oldbyte_H);
    Write_Data((Oldbyte_L) | (0x01<<(15 - X_bit)));
  }
  Write_Cmd(0x36);
//  Write_Cmd(0x30);
}

/**************************************************
函数名称:LCD_ReSet_Dot1
功    能:任意位置点复位,不覆盖原来的数据
参    数:X--横坐标
          Y--纵坐标
返回值  :无
**************************************************/


void LCD_ReSet_Dot1(uchar X,uchar Y)
{
  uchar X_byte,X_bit,Oldbyte_H;
  uchar Y_byte,Y_bit,Oldbyte_L;
  X_byte = X/16;
  X_bit  = X%16;

  Y_byte = Y/32;  
  Y_bit  = Y%32;

//  Write_Cmd(0x34);
  Write_Cmd(0x80 + Y_bit);
  Write_Cmd(0x80 + X_byte + (Y_byte<<3));
  Lcd_ReadData();                 //没有这一条指令出错~!
  Oldbyte_H = Lcd_ReadData();
  Oldbyte_L = Lcd_ReadData();

//  Write_Cmd(0x34);
  Write_Cmd(0x80 + Y_bit);
  Write_Cmd(0x80 + X_byte + (Y_byte<<3));
  if(X_bit < 8)
  {
    Write_Data((Oldbyte_H) & (~(0x01<<(7 - X_bit)))) ;
    Write_Data(Oldbyte_L);
  }
  else
  {
    Write_Data(Oldbyte_H);
    Write_Data((Oldbyte_L) & (~(0x01<<(15 - X_bit))));
  }
  Write_Cmd(0x36);
//  Write_Cmd(0x30);
}


/**************************************************
函数名称:Lcd_DrawLine_X
功    能:画横线
参    数:x_start--起始地址x坐标
          x_end  --结束地址x坐标
          y      --y坐标
返回值  :无
**************************************************/
void Lcd_DrawLine_X(uchar x_start,uchar x_end,uchar y)
{
  uchar temp;
  if(x_start > x_end)
  {
    temp = x_start;
    x_start = x_end;
    x_end = temp;
  }
  do
  {
    LCD_Set_Dot1(x_start,y);
    x_start++;
  }
  while(x_start <= x_end);
}

/**************************************************
函数名称:Lcd_DrawLine_Y
功    能:画竖线
参    数:y_start--起始地址y坐标
          y_end  --结束地址y坐标
          x      --x坐标
返回值  :无
**************************************************/
void Lcd_DrawLine_Y(uchar y_start,uchar y_end,uchar x)
{
  uchar temp;
  if(y_start > y_end)
  {
    temp = y_start;
    y_start = y_end;
    y_end = temp;
  }
  do
  {
    LCD_Set_Dot1(x,y_start);
    y_start++;
  }
  while(y_start <= y_end);
}

/**************************************************
函数名称:Lcd_ReDrawLine_Y
功    能:取消画的竖线
参    数:y_start--起始地址y坐标
          y_end  --结束地址y坐标
          x      --x坐标
返回值  :无
**************************************************/
void Lcd_ReDrawLine_Y(uchar y_start,uchar y_end,uchar x)
{
  uchar temp;
  if(y_start > y_end)
  {
    temp = y_start;
    y_start = y_end;
    y_end = temp;
  }
  do
  {
    LCD_ReSet_Dot1(x,y_start);
    y_start++;
  }
  while(y_start <= y_end);
}

/**************************************************
函数名称:Lcd_DrawLine
功    能:画任意直线
参    数:x_start--起始地址x坐标
          x_end  --结束地址x坐标
          y_start--起始地址y坐标
          y_end  --结束地址y坐标
返回值  :无
**************************************************/
void DrawLine(uchar x_start,uchar y_start,uchar x_end,uchar y_end)
{
  int range_x,range_y;
  int flagx,flagy;
  uchar distance,t;
  uchar xt,yt;
  range_x = x_end - x_start;
  range_y = y_end - y_start;

  if(range_x > 0) flagx = 1;
  else
    if(range_x == 0)
    {
      Lcd_DrawLine_Y(y_start,y_end,x_start);
      return;
    }
  else
  {
    flagx  = -1;
  }
/************Y轴****************/
  if(range_y > 0) flagy = 1;
  else
    if(range_y == 0)
    {
      Lcd_DrawLine_X(x_start,x_end,y_start);
      return;
    }
  else
  {
    flagy  = -1;
  }

  range_x = abs(range_x);
  range_y = abs(range_y);
  if(range_x > range_y) distance = range_x;
  else
    distance = range_y;


/************Bresenham 画线算法****************/
  for(t=0;t   {
     LCD_Set_Dot1(x_start,y_start);
     xt = xt + range_x;
     yt = yt + range_y;
     if(xt>distance)
     {
        xt = xt - distance;
        x_start = x_start + flagx;
     }
     if(yt > distance)
     {
        yt = yt - distance;
        y_start = y_start + flagy;
     }
  }

}
/**************************************************
函数名称:Draw_TX
功    能:画圆
参    数:Yaddr--Y地址
          Xaddr--Y地址
          dp   --指向图形数据存放地址的指针
返回值  :无
**************************************************/
void Lcd_DrawCircle(uchar x,uchar y,uchar r)
{
  uchar a,b;
  float c;
  a = 0;
  b = r;
//  c = 1.25 - r;
  c = 3 - 2*r;
  while(a < b)
  {
    LCD_Set_Dot1(x+a,y+b);
    LCD_Set_Dot1(x-a,y+b);
    LCD_Set_Dot1(x+a,y-b);
    LCD_Set_Dot1(x-a,y-b);

    LCD_Set_Dot1(x+b,y+a);
    LCD_Set_Dot1(x-b,y+a);
    LCD_Set_Dot1(x+b,y-a);
    LCD_Set_Dot1(x-b,y-a);

    if(c < 0)
    {
      c = c+4*a + 6;
    }
    else
    {
      c= c + 4*(a - b) + 10;
      b-=1;
    }
    a = a + 1;
  }
  if(a == b)
  {
    LCD_Set_Dot1(x+a,y+b);
    LCD_Set_Dot1(x-a,y+b);
    LCD_Set_Dot1(x+a,y-b);
    LCD_Set_Dot1(x-a,y+b);

    LCD_Set_Dot1(x+b,y+a);
    LCD_Set_Dot1(x-b,y+a);
    LCD_Set_Dot1(x+b,y-a);
    LCD_Set_Dot1(x-b,y-a);

  }
}

/**************************************************
函数名称:Disp_HZ
功    能:显示汉字
参    数:addr--指定行
          *pt--指向数据的指针
          num--汉字的个数
返回值  :无
**************************************************/
void Disp_HZ(uchar addr,const uchar *pt,uchar num)
{
    uchar i;
               
    Write_Cmd(addr);
      for(i = 0;i < (num*2);i++)
      Write_Data(*(pt++));
}

/*******************************************
函数名称:Draw_PM
功    能:在整个液晶屏幕上画图
参    数:无
返回值  :无
********************************************/
void Draw_PM(const uchar *ptr)
{
    uchar i,j,k;

        Write_Cmd(0x34);        //打开扩展指令集
        i = 0x80;            
        for(j = 0;j < 32;j++)
        {
        Write_Cmd(i++);
        Write_Cmd(0x80);
                  for(k = 0;k < 16;k++)
                  {
                      Write_Data(*ptr++);
                  }
        }
        i = 0x80;
        for(j = 0;j < 32;j++)
        {
            Write_Cmd(i++);
        Write_Cmd(0x88);          
                  for(k = 0;k < 16;k++)
                  {
                       Write_Data(*ptr++);
                   }
        }  
    Write_Cmd(0x36);        //打开绘图显示
        Write_Cmd(0x30);        //回到基本指令集
}


/**************************************************
函数名称:Draw_TX
功    能:显示一个16X16的图形
参    数:Yaddr--Y地址
          Xaddr--Y地址
          dp   --指向图形数据存放地址的指针
返回值  :无
**************************************************/
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar *dp)
{
  uchar j;
  uchar k=0;
  Write_Cmd(0x34);
  for(j=0;j<16;j++)
  {
    Write_Cmd(Yaddr++);
    Write_Cmd(Xaddr);
    Write_Data(dp[k++]);
    Write_Data(dp[k++]);
  }
  Write_Cmd(0x36);
}

/**************************************************
函数名称:Draw_Font
功    能:显示一个3X8的图形
参    数:Yaddr--Y地址
          Xaddr--Y地址
          dp   --指向图形数据存放地址的指针
返回值  :无
**************************************************/
void Draw_Font(uchar Yaddr,uchar Xaddr,uchar *dp)
{
  uchar j,i;
//  uchar k=0;
//  Write_Cmd(0x34);
  for(i=0;i<3;i++)
  {
    for(j=0;j<8;j++)
    {
      if( (0x80>>j) & (*dp) )
        LCD_Set_Dot1(Xaddr+i,Yaddr+j);
      else
        LCD_ReSet_Dot1(Xaddr+i,Yaddr+j);
    }
    dp++;
  }
/*  for(j=0;j<16;j++)
  {
    Write_Cmd(Yaddr++);
    Write_Cmd(Xaddr);
    Write_Data(dp[k++]);
    Write_Data(dp[k++]);
  }*/
//  Write_Cmd(0x36);
}

QQ图片20160516111904.png (28.21 KB, 下载次数: 0)

12864管脚

12864管脚

最新回复

那你的程序搬得也太直接了吧,头文件都不改,才报一个错已经很不错了  详情 回复 发表于 2016-5-17 08:34
 
点赞 关注

回复
举报

2549

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
msp430f2274哪来的P5口?????????????????????????
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
数码小叶 发表于 2016-5-17 08:30
msp430f2274哪来的P5口?????????????????????????

(⊙o⊙)…,我用的是MSP430F149

点评

那你的程序搬得也太直接了吧,头文件都不改,才报一个错已经很不错了  详情 回复 发表于 2016-5-17 08:34
 
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

4
 

来着群里网友的回答,没有P5
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

5
 
数码小叶 发表于 2016-5-17 08:30
msp430f2274哪来的P5口?????????????????????????

我调出来界面了,可是为什么我关了开发板的电源再打开的时候液晶就不显示了呢,
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

6
 
monkeylan 发表于 2016-5-17 08:32
(⊙o⊙)…,我用的是MSP430F149

那你的程序搬得也太直接了吧,头文件都不改,才报一个错已经很不错了
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
数码小叶 发表于 2016-5-17 08:30
msp430f2274哪来的P5口?????????????????????????

那个确实没有P5
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表