⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h3lcdtest.txt

📁 这是dsp5416控制液晶显示的源程序
💻 TXT
字号:
#pragma CODE_SECTION(vect,"vect")
unsigned int *pmem=0;
#define IMR    *(pmem+0x0000)
#define IFR    *(pmem+0x0001)
#define PMST   *(pmem+0x001d)
#define SWCR   *(pmem+0x002b)
#define SWWSR  *(pmem+0x0028)
#define CLKMD  *(pmem+0x0058)
#define ST1    *(pmem+0x007)
#define PRD0  *(pmem+0x0025)  /* timer0 period register */
#define TCR0  *(pmem+0x0026)  /* timer0 control register */


ioport    unsigned port8003; //液晶屏CS1地址读指令
ioport    unsigned port8004; //液晶屏CS1地址写指令
ioport    unsigned port8005; //液晶屏CS1地址写数据 

ioport    unsigned port8000; //液晶屏CS2地址
ioport    unsigned port8001; //液晶屏CS2地址
ioport    unsigned port8002; //液晶屏CS2地址
#define   cs1    port8003
#define   cs1rd  port8004
#define   cs1wd  port8005
#define   cs2    port8000
#define   cs2rd  port8001
#define   cs2wd  port8002

ioport    unsigned port4001; 
#define   adcs     port4001


#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
const uchar table0[]={
/*--  调入了一幅图像:这是您新建的图像  --*/
/*--  宽度x高度=128x64  --*/
0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x04,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
};

static const uchar table1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0xC0,0xFF,0x0F,0x00,0x00,0x00,0xC0,0x03,0xC0,0xFF,0x8F,0x02,0x00,0x00,
0xF0,0x0F,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,
0xFC,0x7F,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0xFC,0xFF,0x07,0xFF,0xFF,0xFF,0x01,0x00,
0xFC,0xFF,0xFD,0xFC,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0xFD,0xFD,0xFF,0xFF,0x03,0x00,
0xFC,0x7F,0xFE,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xDF,0x2E,0xE0,0xFF,0xFF,0x3F,0x00,
0xFC,0x8F,0xD2,0xBF,0xFF,0xFF,0x3F,0x00,0xFC,0xEF,0xDA,0xFF,0xFF,0xFF,0x3F,0x00,
0xFC,0x07,0xF7,0x7F,0xFF,0xFF,0x7F,0x00,0xFC,0x47,0xF7,0x7F,0xFF,0xFF,0x7F,0x00,
0xF4,0x37,0xFD,0x7F,0xFC,0xFF,0x7F,0x00,0xF8,0x0F,0xF8,0x7F,0xFC,0xFF,0xFF,0x00,
0x00,0x00,0xFA,0xFF,0xFC,0xFF,0xFF,0x00,0x00,0x00,0xFC,0x3F,0xFC,0xFF,0xFF,0x00,
0x00,0x00,0xF6,0xA7,0xFF,0xF3,0x7F,0x00,0x00,0x00,0xF6,0xE3,0xFF,0xF3,0x7F,0x00,
0x00,0x00,0xC3,0xCD,0xFB,0xFF,0xFF,0x1F,0x00,0x00,0x0A,0xDF,0xFF,0xFF,0xFF,0x3F,
0x00,0x00,0x7F,0xCF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xDC,0xFF,0xFF,0xFF,0x3F,
0x00,0x00,0xFE,0xCD,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFC,0xCD,0xFF,0xFF,0xFF,0x3F,
0x00,0x00,0xFC,0xCF,0xF3,0xFF,0xFF,0x1F,0x00,0x00,0xFD,0xD3,0xFC,0xFF,0xFF,0x1F,
0x00,0x00,0xFD,0x13,0xFF,0xFF,0xFF,0x0F,0xF0,0x0B,0xFC,0x6F,0xFF,0xFF,0xFF,0x0F,
0xFC,0x07,0xFC,0xBF,0xFF,0xFF,0xFF,0x07,0xFC,0x07,0xFC,0x9F,0xFF,0xFF,0xFF,0x07,
0xFE,0x07,0xF9,0x9F,0xFF,0xFF,0xFF,0x01,0xFE,0xE7,0xFB,0xDF,0xFF,0xFF,0xFF,0x01,
0xFE,0xFF,0xFA,0xCF,0xFF,0xFF,0x7F,0x00,0xFE,0x9F,0xD2,0xE3,0xFF,0xFF,0x7F,0x00,
0xFE,0xFF,0x4C,0xF0,0xFF,0xFF,0x7F,0x00,0xFE,0xFF,0x00,0xFC,0xFF,0xFF,0x3F,0x00,
0xFE,0xFF,0x00,0xFC,0xFF,0xFF,0x3F,0x00,0xFE,0xF7,0xFF,0xFF,0xFF,0xFF,0x33,0x00,
0xFE,0xEF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xFE,0xDF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,
0xFC,0x23,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0x3F,0x00,
0x00,0xE0,0xFE,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xE0,0xFB,0xFF,0xF3,0xFF,0x3F,0x00,
0x00,0xE0,0x06,0x00,0xF5,0xFF,0x3F,0x00,0x00,0xF0,0x01,0x00,0xF8,0xFF,0x3F,0x00,
0x00,0xD0,0x01,0x00,0xFC,0xFF,0x1F,0x00,0x00,0xF0,0x01,0x00,0xFC,0xFF,0x07,0x00,
0x00,0xF0,0x01,0x00,0xFC,0xFF,0x07,0x00,0x00,0xE0,0x00,0x80,0xFF,0xFF,0x03,0x00,
0x00,0xE0,0x00,0xC0,0xFF,0xFF,0x03,0x00,0x00,0x80,0x07,0xF0,0xFF,0xFF,0x01,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x1F,0x00,0x00,
0x00,0x00,0xFC,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,
0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0xFE,0x1F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//;以上您调入了一幅图象: 长度x宽度=64x64,  调整后为: 64x64
};

void delay10ms()
{int  i,j,k;
for (i=0;i<2;i++)
for (j=0;j<2;j++)
for (k=0;k<2;k++);
}

void dicenga(void)     /*片选1的查询函*/
{uchar d;
  d=cs1;
  while(d&0x80==0);
{ d=cs1;}
  delay10ms();
}

void dicengb(void)     /*片选2的查询函数*/
{ uchar d;
  d=cs2;
 while(d&0x80==0);
 { d=cs2;}
 delay10ms();
}

void lcdwc1(uchar dat) /*片选1的写控制?*/
{
dicenga();
cs1rd=dat;
delay10ms();
}

void lcdwc2(uchar dat)  /*片选2的写控制字函数*/
{
dicengb();
cs2rd=dat;
delay10ms();
}

void lcdwd1(uchar dat)  /*片选1的写数据函数*/
{
dicenga();
cs1wd=dat;
delay10ms();
adcs=0x0;
}

void lcdwd2(uchar dat)  /*片选2的写数据函数*/
{
dicengb();
cs2wd=dat;
delay10ms();
adcs=0x0;
}

void lcdreset(void)   /*lcd reset */
{uchar dat;
 dat=0x3f;
 lcdwc1(dat);
 lcdwc2(dat);
 dat=0xc0;
 lcdwc1(dat);
 lcdwc2(dat);
}

void lcdwd(uchar dat,uchar ypos,uchar xpos)  /* lcd write data*/
{
uchar bbb;
bbb=dat;
dat=xpos;
if(dat<64)
   {
dat=bbb;
 lcdwd1(dat);
    }
else
   {
dat=bbb;
  lcdwd2(dat);
   }
}

void lcdpos(uchar ypos,uchar xpos)
{
uchar bbb;
bbb=xpos;
if(bbb<64)
  {
bbb=ypos;
bbb=bbb&0x07;
bbb=bbb+0x0B8;
lcdwc1(bbb);
bbb=xpos;
bbb=bbb&0x3f;
bbb=bbb+0x40;
lcdwc1(bbb);
   }
else
    {
bbb=ypos;
bbb=bbb&0x07;
bbb=bbb+0x0b8;
lcdwc2(bbb);
bbb=xpos;
bbb=bbb&0x3F;
bbb=bbb+0x40;
lcdwc2(bbb);
   }
}

void lcdwrite(uchar dat,uchar ypos,uchar xpos)
{
lcdpos( ypos, xpos);
lcdwd(dat,ypos,xpos);
}

void lcdfill()                      /*液晶屏清屏程序*/
{
uchar dat,ypos, xpos;
dat=0x00;
for(ypos=0;ypos<=7;ypos++)
   {
    for(xpos=0;xpos<=127;xpos++)
       {
     lcdwrite(dat,ypos,xpos);
       }
   }
}
void play()
{
   uchar dat1,ypos,xpos;
   ulong x;
   x=0;
  for(xpos=31;xpos<95;xpos++)
  {
      for(ypos=0;ypos<=7;ypos++)
      {
      dat1=table1[x];
      lcdwrite(dat1,ypos,xpos);
      x=x+1;
      }
  }
}
void play1()
{
   uchar dat1,ypos,xpos;
   ulong x;
   x=0;
    for(xpos=0;xpos<128;xpos++)
     {
      for(ypos=0;ypos<=7;ypos++)
       {
      dat1=table0[x];
      lcdwrite(dat1,ypos,xpos);
      x=x+1;
       }
  }
}


void cpu_init()                       /*初始化DSP*/
{
   asm(" ssbx intm");
   PMST=0xe8;
   SWWSR=0x7fff;
   SWCR=0x0001;
   IMR=0x0; 
   IFR=0xffff;  
   CLKMD=0x000;
}
//**************************** 主测试程序********************************************
void main()
{  
   cpu_init(); 
   lcdreset();
   lcdfill();
   play();
   for(;;)
   {  };
}
////***********************************************************************************
void  vect()
{
   asm(" .ref _c_int00");
   asm(" b _c_int00");  /* reset */
   asm(" nop");
   asm(" nop");
   
   asm(" rete");        /* nmi  */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");        //
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete ");       /* int0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");       /* int1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");      /* brint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");      /* bxint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");      /* dmac0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");       /* tint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete");       /* hpint */
   asm(" nop");
   asm(" nop");
   asm(" nop");

   asm(" rete ");       /* brint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");       /* bxint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");       /* dmac4 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" rete");        /* dmac5 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -