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


#include               
#include                               
#include                
 #define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 
  
 
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[10*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, 
 
/*--  文字:  输  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00, 
0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00, 
 
/*--  文字:  入  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00, 
0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 
 
/*--  文字:  错  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00, 
0x40,0x30,0x2C,0xE7,0x24,0x24,0x40,0x48,0x7F,0x48,0x48,0x7F,0x48,0x48,0x40,0x00, 
 
/*--  文字:  误  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x3F,0x10,0x88,0x42,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0xE2,0x42,0x00, 
0x40,0x41,0xCE,0x04,0x00,0x40,0x5F,0x51,0x51,0xD1,0x51,0x51,0x5F,0x40,0x00,0x00, 
 
 
}; 
//管脚及变量定义//////////////////////////////////////////////////////////////// 
//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 LCD and key begain 
sbit A0=P2^1; 
sbit CS=P2^4; 
sbit inc     =   P0^1; 
sbit dec     =   P0^2; 
sbit mode    =   P0^0; 
sbit next    =   P0^3; 
  
uchar bdata oldkey; 
sbit  old_inc  =oldkey^1; 
sbit  old_dec  =oldkey^2; 
sbit  old_mode  =oldkey^3; 
sbit  old_next  =oldkey^0; 
  
uchar bdata key; 
sbit  key_inc  =key^1; 
sbit  key_dec  =key^2; 
sbit  key_mode  =key^0; 
sbit  key_next  =key^3; 
sbit  sktemp   =key^4; 
sbit  allowflag =key^5; 
sbit  endflag =key^6; 
 
uint Itemp,Itemp1; 
uint  value=200; 
uint  value1=200; 
  
uchar qian=0; 
uchar bai=2; 
uchar shi=0; 
uchar ge=0; 
uchar curwnd; 
uchar next1;  
//define LCD and key end 
 
//函数列表////////////////////////////////////////////////////////////////// 
//ads1100 function table 
void  GetBus(); 
void  SendByte(uchar c); 
uchar ISendByte( uchar c); 
bit   IRcvStrExt(void); 
//ads1100 function table 
//define funtion table 
void delay(uchar v); 
void dacspi (uchar i); 
void writedac(uint dat,bit dot);       
//define LCD and key 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); 
void dispmenu(void); 
//define LCD and key function table end 
 
//LCD programme begain 
 /*******************************通过spi写命令到LCD******************************************/ 
//写控制命令到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******************************************/ 
//写显示数据到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]); 
	    } 
}   
  
  
 /***************************键盘扫描子程序*****************************************/ 
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=mode;                         
	if(old_mode&!sktemp){key_mode=1;} 
	old_mode=sktemp; 
 
	sktemp=next;                        
	if(old_next&!sktemp){key_next=1;} 
	old_next=sktemp; 
 
   	if(curwnd==0&&endflag==1&&key_mode==1)  
	  {  
		curwnd=0; 
		value=200; 
		dispmenu(); 
		endflag=0; 
		qian=0; 
	    bai=2; 
	    shi=0; 
	    ge =0; 
	  } 
 
    if(allowflag==1&&key_mode==1) 
	  { 
	     key_mode = 0; 
		 value=qian*1000+bai*100+shi*10+ge; 
		 curwnd=0; 
		 allowflag=0; 
		 next1=0; 
		 endflag=1; 
		 dispmenu(); 
	  } 
 
   if(key_mode==1)  
	  { 
	    key_mode=0; 
	    ++curwnd; 
		if(curwnd==1) allowflag=1; 
	  } 
 
 if(curwnd==0) 
   { 
    if(key_inc==1) 
	  { 
	   key_inc=0; 
	   ++value; 
	   Itemp=2000; 
	   if(value>Itemp)value=200; 
	   } 
 
	if(key_dec==1) 
	  {  
	   key_dec=0; 
	   Itemp=200; 
	   if(value==Itemp)value=2000; 
	   else --value; 
	   } 
 
	dispnum(0,10,value+9,1); 
	dispnum(2,10,value1,0); 
   } 
 
  if(curwnd==1) 
  { 
    if (key_next==1) 
	 {	key_next=0; 
	    next1++; 
		if(next1>3)next1=0; 
	 } 
 
     switch(next1) 
      { 
	   case 0: 
	       
			 if(key_inc==1) 
	           { 
	            key_inc=0; 
	            ++qian; 
	            Itemp1=1; 
	            if(qian>Itemp1)qian=0; 
	           } 
 
	         if(key_dec==1) 
	           {  
	            key_dec=0; 
	            Itemp1=0; 
	            if(qian==Itemp1)qian=1; 
	            else --qian; 
	            } 
			  
		 shownum(0,10,qian,1); 
		 shownum(0,11,bai,0); 
		 shownum(0,12,shi,0); 
		 shownum(0,13,ge,0); 
	   break; 
	   case 1: 
	        if(key_inc==1) 
	           { 
	            key_inc=0; 
	            ++bai; 
	            Itemp1=9; 
	            if(bai>Itemp1)bai=0; 
	           } 
 
	         if(key_dec==1) 
	           {  
	            key_dec=0; 
	            Itemp1=0; 
	            if(bai==Itemp1)bai=9; 
	            else --bai; 
	            } 
		 shownum(0,10,qian,0); 
		 shownum(0,11,bai,1); 
		 shownum(0,12,shi,0); 
		 shownum(0,13,ge,0); 
	   break; 
	   case 2: 
	          if(key_inc==1) 
	           { 
	            key_inc=0; 
	            ++shi; 
	            Itemp1=9; 
	            if(shi>Itemp1)shi=0; 
	           } 
 
	         if(key_dec==1) 
	           {  
	            key_dec=0; 
	            Itemp1=0; 
	            if(shi==Itemp1)shi=9; 
	            else --shi; 
	            } 
		 shownum(0,10,qian,0); 
		 shownum(0,11,bai,0); 
		 shownum(0,12,shi,1); 
		 shownum(0,13,ge,0); 
	   break; 
	   case 3: 
	          if(key_inc==1) 
	           { 
	            key_inc=0; 
	            ++ge; 
	            Itemp1=9; 
	            if(ge>Itemp1)ge=0; 
	           } 
 
	         if(key_dec==1) 
	           {  
	            key_dec=0; 
	            Itemp1=0; 
	            if(ge==Itemp1)ge=9; 
	            else --ge; 
	            } 
		 shownum(0,10,qian,0); 
		 shownum(0,11,bai,0); 
		 shownum(0,12,shi,0); 
		 shownum(0,13,ge,1); 
	   break; 
     } 
   } 
} 
/******************************菜单显示子程序***********************************/  
//menu programme begain 
void dispmenu(void) 
{switch(curwnd) 
 {case 0: 
 showhz(0x00,0x00,0x00); 
 showhz(0x00,0x01,0x01); 
 showhz(0x00,0x02,0x04); 
 showhz(0x00,0x03,0x05); 
 showhex(0x00,0x08,0x02,0); 
 showhex(0x00,0x0e,0x00,0); 
 showhex(0x00,0x0f,0x01,0); 
   
 showhz(0x02,0x00,0x02); 
 showhz(0x02,0x01,0x03); 
 showhz(0x02,0x02,0x04); 
 showhz(0x02,0x03,0x05); 
 showhex(0x02,0x08,0x02,0); 
 showhex(0x02,0x0e,0x00,0); 
 showhex(0x02,0x0f,0x01,0); 
  break; 
 
  case 1: 
 showhz(0x00,0x00,0x00); 
 showhz(0x00,0x01,0x01); 
 showhz(0x00,0x02,0x04); 
 showhz(0x00,0x03,0x05); 
 showhex(0x00,0x08,0x02,0); 
 showhex(0x00,0x0e,0x00,0); 
 showhex(0x00,0x0f,0x01,0); 
   
 showhz(0x02,0x00,0x02); 
 showhz(0x02,0x01,0x03); 
 showhz(0x02,0x02,0x04); 
 showhz(0x02,0x03,0x05); 
 showhex(0x02,0x08,0x02,0); 
 showhex(0x02,0x0e,0x00,0); 
 showhex(0x02,0x0f,0x01,0); 
  break; 
 } 
} 
//TLV5638 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; 
 
} 
//end TLV5638 programme 
//dac  programme end 
 
//ads1100 programme begain 
 /******************************************************************* 
*                  申请总线 
* 功能:进行I2C总线的初始化--包括时钟选择,I2C使能,发送起始信号等等。 
*       I2EN为1,设置为主机;CRSEL位为0,使用内部SCL发生器。 
*******************************************************************/ 
void GetBus() 
{  
  I2SCLH = 15;				/* 设置SCL高电平的PCLK周期数 				    */ 
  I2SCLL = 15;              /* 设置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; 
  dispnum(2,10,value1,0); 
} 
//ads1100 programme end 
/****************************主函数******************************/ 
void main(void) 
{ 
  uchar loop; 
  P1M1=0x0c;P1M2=0x0c; 
  P0M1=0x00;P0M2=0x00;  
  P2M1=0xc0;P2M2=0xc0; 
  init_12864();	 
   
  SS=1; 
  writedac(0x0001,1); 
 
   ISendByte(wcr); 
  	 
  while(1)					  
   {  
     dispmenu(); 
     getkey(); 
	 writedac(2*value,0); 
	 ISendByte(wcr|0x80); 
	 while(1) 
		{ 
		  ++loop; 
			   
		  IRcvStrExt(); 
		  if(loop==5) break; 
		  if(a[2]==0x1c) break; 
		} 
 
	tacklenum();    
	 // writedac(0x0fff,0); 
 	 // delay(100); 
	   
 	 // writedac(0x0000,0);										     
 	 // delay(100); 
   } 
}