www.pudn.com > TG12864.rar > jingsai.c


#include               
#include                               
#include                
////////////////////////////////////////////////////////////////////////////////// 
#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 
//管脚及变量定义//////////////////////////////////////////////////////////////// 
//define ADS1100 begain  
#define GENERATE_STOP        0x54     /* 置位 STO, 复位 STA 、 SI          */ 
#define RELEASE_BUS_ACK      0x44     /* 复位 STO,STA,SI 并置位  AA (ack)  */ 
#define RELEASE_BUS_NOACK    0x40     /* 复位 STO,STA,SI 并置位 AA (noack) */ 
#define RELEASE_BUS_STA      0x64     /* 起动总线/重新起动总线, 置位 STA   */ 
#define sla                  0x90 
#define wcr                  0x1c 
  
uchar idata a[3]; 
uint  idata output; 
uchar dat; 
 
//#define  R     1 
//define ADS1100 end 
  
//define dac begain 
sbit SS      =  P0^4; 
//define dac end 
 
//define LCD and key begain 
sbit  A0      =   P2^1; 
sbit  CS      =   P2^4; 
sbit  inc     =   P0^0; 
sbit  dec     =   P0^1; 
sbit  kinc    =   P0^2; 
sbit  kdec    =   P0^3; 
  
uchar bdata oldkey; 
sbit  old_inc   =oldkey^1; 
sbit  old_dec   =oldkey^2; 
sbit  old_kinc  =oldkey^3; 
sbit  old_kdec  =oldkey^4; 
sbit  key_kinc  =oldkey^5; 
sbit  key_kdec  =oldkey^6; 
  
uchar bdata key; 
sbit  key_inc  =key^1; 
sbit  key_dec  =key^2; 
sbit  sktemp   =key^4; 
//sbit  allowmenudis = key^7; 
sbit  fast_inc =key^5; 
sbit  fast_dec =key^6; 
 
//uchar count1; 
//uchar count2; 
 
uint  Itemp; 
uint  value=20; 
uint  value1; 
 
//uint  outdata; 
//long tempdat; 
//define LCD and key end 
//函数列表////////////////////////////////////////////////////////////////// 
//define funtion table begain 
void delay(uchar v); 
void dacspi (uchar i); 
void writedac(uint dat,bit dot);  
//define function table end  
     
//define LCD function table begain 
void wcode(uchar i);  
void wdata(uchar i); 
void clrsrc(void); 
void shownum(uchar lin,uchar col,uint num,uchar res); 
void showhz(uchar lin,uchar col,uint hzcode1); 
void dispnum(uchar lin,uchar col,uint val,uchar res); 
void showhex(uchar lin,uchar col,uint num,uchar res); 
void shownum(uchar lin,uchar col,uint num,uchar res); 
//define LCD function table end 
 
//ads1100 function table 
void  GetBus(); 
void  SendByte(uchar c); 
uchar ISendByte( uchar c); 
bit   IRcvStrExt(void); 
//ads1100 function table 
 
code uchar numtable[10*16]= 
{  
/*--  文字:  0  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
/*--  文字:  1  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 
/*--  文字:  2  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 
/*--  文字:  3  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 
/*--  文字:  4  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, 
/*--  文字:  5  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, 
/*--  文字:  6  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, 
/*--  文字:  7  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, 
/*--  文字:  8  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, 
/*--  文字:  9  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
}; 
 
code uchar hextable[3*16]= 
{  
 /*--  文字:  m  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 
 
/*--  文字:  A  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00, 
 
/*--  文字:  :  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, 
}; 
 
code uchar hztable[6*32]= 
{ 
 /*--  文字:  设  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00, 
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00, 
 
/*--  文字:  定  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x18,0x07,0x08,0x10,0x20,0x7F,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x00, 
0x00,0x10,0x0C,0xA4,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x14,0x0C,0x04,0x00, 
 
/*--  文字:  实  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x82,0x82,0x42,0x42,0x23,0x12,0x0A,0x07,0x0A,0x12,0xE2,0x42,0x02,0x02,0x00, 
0x00,0x10,0x0C,0x04,0x4C,0xB4,0x94,0x05,0xF6,0x04,0x04,0x04,0x14,0x0C,0x04,0x00, 
 
/*--  文字:  际  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0xFF,0x00,0x02,0x04,0x13,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x02,0x1C,0x08,0x00, 
0xFE,0x02,0x22,0x5A,0x86,0x20,0x20,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x20,0x00, 
 
/*--  文字:  电  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00, 
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, 
 
/*--  文字:  流  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00, 
0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00, 
}; 
 
//LCD programme begain 
 /*******************************通过spi写显示命令程序***********************************************/ 
//写控制命令到lcd                   
void wcode (uchar i)    //A0=0,CS=0 
{   
   SPCTL=0xdc; 
   SPSTAT=0xc0; 
   CS=1;//_nop_(); 
   A0=0;//nop_(); 
   CS=0;_nop_(); 
   SPDAT=i; 
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   CS=1;//_nop_(); 
   //SPSTAT=0xc0; 
}  
 /****************************通过spi写显示数据程序**********************************************/ 
 //写显示数据到lcd                  //A0=1,CS=0 
void wdata (uchar i)             
{    
   SPCTL=0xdc; 
   SPSTAT=0xc0; 
   CS=1;//_nop_(); 
   A0=1;//_nop_(); 
   CS=0;_nop_(); 
   SPDAT=i;  
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   CS=1;//_nop_(); 
   //SPSTAT=0xc0; 
}  
 /*******************************显示器初试化程序*************************************/ 
//液晶屏初始化 
void init_12864(void) 
{ 
           /*函数名为lcd_init 的LCM初始化子函数*/ 
 wcode(0xae);//开显示屏//0x00关显示;0x01开显示////1				  
 wcode(0xa1);  //设置ADC 为正常0---64 ///8 
 wcode(0xa6);//设置正常的开关状态/////9 
 wcode(0x2f);//设置能量控制16 
 wcode(0x81);wcode(0x08);//Electronic volume control  setting 18 
 wcode(0xa2);//设置lcd bias///////11 
 wcode(0xc8);///选择输出状态寄存器////15 
 wcode(0xa5);//全屏亮///10 
 //delay(4);		//////			  
 wcode(0xa4); //正常显示//////	10 
 wcode(0x40);//从第一行开始显示//////2 
 clrsrc();//清屏	///	 
 wcode(0xaf);//开显示屏//0x00关显示;0x01开显示////1 
} 
 /*********************************显示器清屏程序***************************************/ 
void clrsrc(void) /* 清显示屏*/ 
{ 
uchar i,j; 
uchar temp,temp_h,temp_l; 
for(i=0;i<8;i++) 
    { wcode(0xB0|i); 
	  for(j=0;j<132;j++) 
	   {  
	    temp_l=j&0x0f; 
        temp=(j&0xf0)>>4; 
        temp_h=temp&0x0f;   
	    wcode(temp_h|0x10); 
	    wcode(temp_l|0x00); 
	    wdata(0x00); 
	   } 
    } 
}    
 /**********************************显示8*16数字程序****************************************/ 
void shownum(uchar lin,uchar col,uint num,uchar res)/*显示 16*8 点阵的数,每行可显示15个数字*/ 
{                                                 /*res为反显标志,res=0:正显;res=1:反显*/ 
   uchar i,fxdat; 
   uchar temp,temp_h,temp_l; 
   uint numcode; 
   numcode=num*16; 
   lin=lin*2; 
   temp_l=(col*8)&0x0f; 
   temp=((col*8)&0xf0)>>4; 
   temp_h=temp&0x0f;    
   if(col>15) return; 
   wcode(0xB0|lin+1); 
   wcode(temp_h|0x10); 
   wcode(temp_l|0x00); 
   for(i=0;i<8;i++) 
	  {  
	   if(res==0) 
	     {  
		  wdata(numtable[numcode+i]); 
	     } 
	     else 
	     {   
		  fxdat=~numtable[numcode+i]; 
		  wdata(fxdat); 
		 } 
	  } 
   wcode(0xB0|lin); 
   wcode(temp_h|0x10); 
   wcode(temp_l|0x00);    
   for(i=0;i<8;i++) 
	  {  
	  if(res==0) 
		{  
		 wdata(numtable[numcode+i+8]); 
		} 
		else 
		{ 
		 fxdat=~numtable[numcode+i+8]; 
		 wdata(fxdat); 
		} 
	  } 
}  
/*********************************显示8*16数字程序*********************************************/  
void showhex(uchar lin,uchar col,uint num,uchar res)/*显示 16*8 点阵的数,每行可显示15个数字*/ 
 {                                                 /*res为反显标志,res=0:正显;res=1:反显*/ 
    uchar i,fxdat; 
   uchar temp,temp_h,temp_l; 
   uint numcode; 
   numcode=num*16; 
   lin=lin*2; 
   temp_l=(col*8)&0x0f; 
   temp=((col*8)&0xf0)>>4; 
   temp_h=temp&0x0f;    
   if(col>15) return; 
   wcode(0xB0|lin+1); 
   wcode((temp_h)|0x10); 
   wcode((temp_l+2)|0x00); 
   for(i=0;i<8;i++) 
	  { if(res==0) 
	      { 
	       wdata(hextable[numcode+i]); 
	      } 
	      else 
	      {  
		   fxdat=~hextable[numcode+i]; 
		   wdata(fxdat); 
		  } 
	  } 
   wcode(0xB0|lin); 
   wcode((temp_h)|0x10); 
   wcode((temp_l+2)|0x00);    
   for(i=0;i<8;i++) 
	  { if(res==0) 
		 { 
	      wdata(hextable[numcode+i+8]); 
		 } 
		 else 
		 { 
		  fxdat=~hextable[numcode+i+8]; 
		  wdata(fxdat); 
		 } 
	  } 
}    
 /**************************四位数显示程序******************************************/ 
void dispnum(uchar lin,uchar col,uint val,uchar res)   
{uint th,hu,ten,sig,temper0,temper1; 
   if((val<10)&&(val>=0)) 
  { 
  sig=val; 
  shownum(lin, col+3,sig,res); 
  shownum(lin,col+2,0,res); 
  shownum(lin,col+1,0,res); 
  shownum(lin,col,0,res); 
  } 
   
  if((val<100)&&(val>=10)) 
  { 
  sig=val%10; 
  ten=(val-val%10)/10; 
  shownum(lin, col+3,sig,res); 
  shownum(lin,col+2,ten,res); 
  shownum(lin,col+1,0,res); 
  shownum(lin,col,0,res); 
  } 
  
 if((val<1000)&&(val>=100)) 
  { 
  temper0=val%100; 
   sig=temper0%10; 
   ten=(temper0-temper0%10)/10; 
   hu=(val-ten*10-temper0%10)/100; 
   shownum(lin,col+3,sig,res); 
   shownum(lin,col+2,ten,res); 
   shownum(lin,col+1,hu,res); 
   shownum(lin,col,0,res); 
  }  
   
  if((val<10000)&&(val>=1000)) 
  { 
   temper0=val%1000; 
   temper1=temper0%100; 
   sig=temper1%10; 
   ten=(temper1-temper1%10)/10; 
   hu=(temper0-ten*10-temper1%10)/100; 
   th=(val-hu*100-ten*10-temper1%10)/1000; 
   shownum(lin,col+3,sig,res); 
   shownum(lin,col+2,ten,res); 
   shownum(lin,col+1,hu,res); 
   shownum(lin,col,th,res); 
  }  
} 
 /******************************显示16*16汉字程序***********************************/ 
void showhz(uchar lin,uchar col,uint hzcode1)/*显示16*16点阵的汉字,每行显示8个汉字,共显示4行8列汉字*/ 
{                                       /*hzcode1为字模数组的每个汉字的首地址*/ 
   uchar i; 
   uchar temp,temp_h,temp_l; 
   uint hzcode; 
   hzcode=hzcode1*32; 
   lin=lin*2; 
   temp_l=(col*16+2)&0x0f; 
   temp=((col*16)&0xf0)>>4; 
   temp_h=temp&0x0f;    
   if(col>8) return; 
   wcode(0xB0|lin+1); 
   wcode(temp_h|0x10); 
   wcode((temp_l)|0x00); 
   for(i=0;i<16;i++) 
	    {  
	     wdata(hztable[hzcode+i]); 
	    } 
   wcode(0xB0|lin); 
   wcode(temp_h|0x10); 
   wcode((temp_l)|0x00);    
   for(i=0;i<16;i++) 
	    {  
	     wdata(hztable[hzcode+i+16]); 
	    } 
}   
/******************************键盘扫描及处理程序***************************************/ 
///keyscan programme begain				 
void getkey(void) 
{ 
    sktemp=inc;                         
	if(old_inc&!sktemp){key_inc=1;} 
	old_inc=sktemp; 
 
	sktemp=dec;                        
	if(old_dec&!sktemp){key_dec=1;} 
	old_dec=sktemp; 
	 
	sktemp=kinc;                         
	if(old_kinc&!sktemp){key_kinc=1;} 
	old_kinc=sktemp; 
 
	sktemp=kdec;                        
	if(old_kdec&!sktemp){key_kdec=1;} 
	old_kdec=sktemp; 
 
    if(key_inc==1) 
	  { 
	   key_inc=0; 
	   ++value; 
	   Itemp=2000; 
	   if(value>Itemp)value=2000; 
	  } 
 
	if(key_dec==1) 
	  {  
	   key_dec=0; 
	   Itemp=20; 
	   if(value==Itemp)value=20; 
	   else --value; 
	  } 
 
	if(key_kinc==1) 
	  { 
	   key_kinc=0; 
	    value=value+10; 
	   Itemp=2000; 
	   if(value>Itemp)value=2000; 
	  } 
 
	if(key_kdec==1) 
	  {  
	   key_kdec=0; 
	   Itemp=20; 
	   if(value programme begain 
/********************延时子程序***********************************/ 
//void delay(uchar v) 
//{ 
//   while(v!=0) v--; 
//} 
 
/*********************通过spi口写8位数据到TLV538***************************************/ 
void dacspi (uchar i)             
{    
   //SPSTAT=0xc0; 
   SPDAT=i;  
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   SPSTAT=0xc0; 
}  
/*****************************写16位数据到TLV5638并输出电压******************************************/ 
void writedac(uint dat,bit dot) 
{ 
  uint temp; 
  uchar temp1,temp2; 
  SPCTL=0xd8; 
  SPSTAT=0xc0; 
  temp=dat; 
  if (dot==1) 
    { 
	  temp=temp|0xd000; 
	} 
  else  
    { 
	  temp=temp|0xc000; 
	} 
  temp1=temp&0x00ff; 
  temp=temp>>8; 
  temp2=temp&0x00ff; 
  SS=0; 
  dacspi(temp2); 
  dacspi(temp1); 
  SS=1; 
 
} 
 
//dac  programme end 
 
//ads1100 programme begain 
 /******************************************************************* 
*                  申请总线 
* 功能:进行I2C总线的初始化--包括时钟选择,I2C使能,发送起始信号等等。 
*       I2EN为1,设置为主机;CRSEL位为0,使用内部SCL发生器。 
*******************************************************************/ 
void GetBus() 
{  
  I2SCLH = 25;				/* 设置SCL高电平的PCLK周期数 				    */ 
  I2SCLL = 25;              /* 设置SCL低电平的PCLK周期数,6MHz时为100Kbit/S */ 
  /* 申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位。              */ 
  I2CON = RELEASE_BUS_STA; 	 
  while( SI==0 );        	/* 等待起始位的发送                             */ 
} 
/******************************************************************* 
*                    发送数据函数 
* 功能:用于向总线发送数据  
* 入口参数:ACC   待发送的数据                    
*******************************************************************/ 
void SendByte(uchar c) 
{  
  I2DAT = c; 
  I2CON = RELEASE_BUS_ACK;    	/* 清除SI位等等   		*/ 
  while( SI==0 );        		/* 等待数据的发送 		*/ 
} 
/******************************************************************* 
*                    向无子地址器件发送字节数据函数                
* 功能:从启动总线到发送地址,数据,结束总线的全过程。 
* 入口参数:sla		从器件地址 
*           c		待发送的数据 
* 出口参数:返回1表示操作成功,否则操作有误。 
********************************************************************/ 
uchar  ISendByte( uchar c) 
{ 
  GetBus();                 	/* 启动总线                    */ 
  SendByte(sla);            	/* 发送器件地址,并接收应答位  */ 
  if( I2STAT!=0x18 )			/* 无从机应答则退出操作        */ 
  { I2CON = GENERATE_STOP; 
    return(0); 
  } 
 
  SendByte(c);              	/* 发送数据                    */ 
  if( I2STAT!=0x28 ) 
  { I2CON = GENERATE_STOP; 
    return(0); 
  } 
  I2CON = GENERATE_STOP;        /* 结束总线                    */  
  return(1); 
} 
/******************************************************************* 
*                    向无子地址器件读取多字节数据函数                 
*功能:从启动总线到发送地址,子地址,读数据,结束总线的全过程。 
*入口参数:sla 		从器件地址 
*	   s	    	读出的内容存储区的指针 
*          no		读no个字节。 
*出口参数:函数返回1表示操作成功,否则操作有误。 
********************************************************************/ 
bit IRcvStrExt(void) 
{  
  uchar i; 
  GetBus();                	/* 启动总线						*/ 
  SendByte(sla+1); 
  if( I2STAT!=0x40 ) 
  {  
    I2CON = GENERATE_STOP; 
    return(0); 
  }  
    
  for(i=0; i<2; i++) 
  {  
    I2CON = RELEASE_BUS_ACK;   /* 接收一字节数据并发送应答位		*/ 
    while( SI==0 );            /* 等待接收数据						*/   
    if( I2STAT!=0x50 ) 
	{  
	  I2CON = GENERATE_STOP; 
	  return(0); 
	} 
    a[i] = I2DAT;                /* 读取数据							*/  
      
  }  
  I2CON = RELEASE_BUS_NOACK;   /* 接收最后一字节数据并发送非应答位	*/ 
  while( SI==0 );   
  a[2] = I2DAT; 
  I2CON = GENERATE_STOP;       /* 结束总线							*/  
 
  output=(uint)a[0]; 
  output=output<<8; 
  output=output+a[1]; 
  dat=a[2]; 
  return(1); 
} 
/******************************TLV5638显示数据处理子程序***********************************/ 
void tacklenum(void) 
{ 
//  uint temp; 
 // temp=output/512; 
//  temp=temp*33; 
//  temp=temp/64; 
//  temp=temp*100; 
//  value1=(uint)temp; 
  ulong temp; 
  temp=output*2; 
  temp=temp/16; 
  temp=temp*10; 
  temp=temp/16; 
  temp=temp*10; 
  temp=temp/16; 
  temp=temp*33; 
  temp=temp/16; 
//  temp=temp*100; 
  value1=(uint)temp; 
 
//  tempdat=value; 
//  tempdat=2*(2*tempdat-19)-value1; 
//  outdata=(uint)tempdat; 
 
  dispnum(2,10,value1,0); 
} 
//ads1100 programme end 
/****************************主函数******************************/ 
void main(void) 
{ 
  uchar loop; 
  P1M1=0x0c;P1M2=0x0c;	 
  P0M1=0x00;P0M2=0x00; 	  //端口init 
  P2M1=0x00;P2M2=0x00; 
  init_12864();			 //LCD init 
   
  SS=1;					 //adc init 
  writedac(0x0001,1); 
 
  ISendByte(wcr); 
  		 
  while(1)					  
   { 
    dispmenu(); 
    getkey(); 
	//writedac(outdata,0); 
    //writedac(2*(2*value-19)-value1,0); 
	writedac(2*value-19-6,0); 
	ISendByte(wcr|0x80);	   
		while(1) 
		   { 
		      ++loop; 
			   
		   	  IRcvStrExt(); 
			  if(loop==5) break; 
			  if(a[2]==0x1c) break; 
		    } 
 
	tacklenum();    
   }  
}