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


#include               
#include                               
#include                
////////////////////////////////////////////////////////////////////////////////// 
#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 
///////////////////////////////////////////////////////////////////////////////////  
code uchar numtable[11*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, 
/*-- 小数点 宋体12;  此字体下对应的点阵为:宽x高=9x16   --*/ 
0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
}; 
 
code uchar hextable[20*16]= 
{  
/*--  文字:  0       0--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
/*--  文字:  1        1  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 
/*--  文字:  2       2--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 
/*--  文字:  3       3--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 
/*--  文字:  4       4--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, 
/*--  文字:  5       5 --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, 
/*--  文字:  6       6--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, 
/*--  文字:  7       7 --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, 
/*--  文字:  8       8--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, 
/*--  文字:  9       9--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
/*--  文字:  A       10--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00, 
/*--  文字:  B       11--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00, 
/*--  文字:  C       12 --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00, 
/*--  文字:  D       13--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00, 
/*--  文字:  E       14--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 
/*--  文字:  F       15--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 
/*--  文字:  S       16--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00, 
/*--  文字:  N       17--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08, 
 
/*--  文字:  O       18--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 
/*--  文字:  K       19--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00, 
}; 
code uchar zftable[11*8]=          /*显示8*8点阵字符库*/ 
{  
  0x00,0x3C,0x42,0x81,0x81,0x42,0x3C,0x00,//"0" 
  0x00,0x82,0x82,0xFF,0x80,0x80,0x00,0x00,//"1" 
  0x00,0xC6,0xA1,0x91,0x89,0x85,0xC3,0x00,//"2" 
  0x00,0x42,0x81,0x89,0x89,0x95,0x66,0x00,//"3" 
  0x00,0x38,0x24,0xA2,0xA1,0xFF,0xA0,0x00,//"4" 
  0x00,0x4F,0x89,0x85,0x85,0x49,0x39,0x00,//"5" 
  0x00,0x3E,0x52,0x89,0x89,0x53,0x20,0x00,//"6" 
  0x00,0x03,0x01,0x41,0x09,0x07,0x01,0x00,//"7" 
  0x00,0x66,0x91,0x91,0x91,0x91,0x66,0x00,//"8" 
  0x00,0x0C,0x92,0x91,0x91,0x52,0x37,0x00,//"9" 
  0x24,0x24,0x24,0x24,0xA5,0x66,0x24,0x18,//"=>"  
}; 
code uchar hztable[15*32]= 
{ 
/*--  文字:  分  0 --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00, 
0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00, 
/*--  文字:  机  1--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00, 
0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 
/*--  文字:  测  2--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00, 
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00, 
/*--  文字:  温  3--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00, 
0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00, 
/*--  文字:  器  4--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0x02,0x7E,0x45,0x45,0x44,0x7C,0x00,0x7C,0x44,0x45,0x45,0x7E,0x06,0x02,0x00, 
0x40,0x40,0x4F,0x49,0x49,0xC9,0xCF,0x70,0xC0,0xCF,0x49,0x59,0x69,0x4F,0x00,0x00, 
/*--  文字:  地  5--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x20,0x20,0x10,0x1F,0x08,0x08,0x00,0x3F,0x40,0x40,0x4F,0x42,0x44,0x43,0x70,0x00, 
0x10,0x10,0x10,0xFE,0x10,0x50,0x40,0xFE,0x20,0x20,0xFF,0x10,0x10,0xF8,0x10,0x00, 
/*--  文字:  址  6--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x10,0x30,0x10,0x1F,0x08,0x28,0x20,0x3F,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00, 
0x20,0x20,0x20,0xFE,0x20,0x20,0x00,0xE0,0x00,0x00,0xFF,0x40,0x40,0x40,0x00,0x00, 
/*--  文字:  号  7--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x02,0x07,0x02,0x02,0x22,0x42,0x82,0x42,0x3E,0x00,0x00,0x00,0x00, 
0x40,0x40,0x40,0x5F,0xD1,0x51,0x51,0x51,0x51,0x51,0x51,0x5F,0x40,0x40,0x40,0x00, 
/*--  文字:  传  8--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x00,0x00,0x00,0x02,0x0B,0x12,0x22,0x52,0x0A,0x07,0x02,0x00,0x00, 
0x40,0x20,0xF8,0x07,0x42,0x44,0x44,0x44,0xF4,0x4F,0x44,0x44,0x46,0x64,0x40,0x00, 
/*--  文字:  感  9--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x43,0x70,0x00,0x39,0x41,0x41,0x49,0x50,0x42,0x41,0x61,0x0A,0x34,0x27,0x00, 
0x00,0x00,0xFC,0x14,0xD4,0x54,0x54,0xD4,0x04,0x3F,0xC4,0x45,0x36,0x04,0x00,0x00, 
/*--  文字:  度  10--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00, 
0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00, 
/*--  文字:  值  11--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0xFF,0x00,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00, 
0x80,0x40,0xF0,0x2F,0x02,0x04,0xE4,0xA4,0xB4,0xAF,0xA6,0xA4,0xE4,0x04,0x00,0x00, 
/*--  文字:  序 12 --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x80,0x60,0x1F,0x00,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x03,0x01,0x00, 
0x00,0x00,0xFC,0x04,0x04,0x14,0x14,0x35,0x56,0x94,0x54,0x34,0x14,0x04,0x04,0x00, 
/*--  文字:  列  13--*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x41,0x40,0x20,0x10,0x09,0x06,0x01,0x00,0x00,0x00,0x07,0x20,0x40,0x3F,0x00,0x00, 
0x02,0x82,0x42,0xBA,0x16,0x12,0x92,0x7A,0x12,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00, 
/*--  温度符号    14   宽度x高度=16x16  --*/ 
0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,0x00,0x00, 
0x00,0x0C,0x0C,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0x3C,0x00,0x00,0x00,0x00,0x00, 
}; 
//管脚定义//////////////////////////////////////////////////////////////// 
sbit A0=P2^1; 
sbit CS=P2^4; 
sbit enter   =   P0^4; 
sbit inc     =   P0^5; 
sbit dec     =   P0^6; 
sbit exit    =   P0^7; 
 
uchar bdata oldkey; 
sbit  old_enter=oldkey^0; 
sbit  old_inc  =oldkey^1; 
sbit  old_dec  =oldkey^2; 
sbit  old_exit =oldkey^3; 
 
uchar bdata key; 
sbit  key_enter=key^0; 
sbit  key_inc  =key^1; 
sbit  key_dec  =key^2; 
sbit  key_exit =key^3; 
sbit  sktemp   =key^4; 
uchar curwnd,hotpot,Itemp; 
uchar value[1][2]; 
uchar xdata dotshift[128]; 
code uchar dottable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 
//函数列表////////////////////////////////////////////////////////////////// 
void wcode(uchar i);  
void wdata(uchar i); 
void clrsrc(void); 
void show88(uchar lin,uchar col,uint address); 
void shownum(uchar lin,uchar col,uint num,uchar res); 
void showhz(uchar lin,uchar col,uint hzcode1); 
void disp_dot(uchar lin,uchar col,uint val,uchar res); 
void dispnum(uchar lin,uchar col,uint val,uchar res); 
void disphex(uchar lin,uchar col,uchar val,uchar res) ; 
void showhex(uchar lin,uchar col,uint num,uchar res); 
void shownum(uchar lin,uchar col,uint num,uchar res); 
////////////////////////////////////////////////////////////////////////// 
//写控制命令到lcd                   
void wcode (uchar i)    //A0=0,CS=0 
{   
   SPSTAT=0xc0; 
   CS=1;_nop_(); 
   A0=0;_nop_(); 
   CS=0;_nop_(); 
   SPDAT=i; 
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   CS=1;_nop_(); 
   SPSTAT=0xc0; 
}  
 ////////////////////////////////////////////////////////////////////////// 
//写显示数据到lcd                  //A0=1,CS=0 
void wdata (uchar i)             
{    
   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(0xa3);//设置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); 
	   } 
    } 
}    
 
void show88(uchar lin,uchar col,uint address)/*显示8*8点阵的字符,每行可显示16个字符*/ 
{   uchar i;                                     /*lin:0~7;   COL:0~15*/ 
    uchar temp,temp_h,temp_l; 
    uint addr; 
    addr=8*address;     
    temp_l=(col*8)&0x0f; 
    temp=((col*8)&0xf0)>>4; 
    temp_h=temp&0x0f;                        
    if(col>15) return; 
    wcode(0xB0|lin); 
    wcode(temp_h|0x10); 
	wcode(temp_l|0x00); 
    for(i=0;i<8;i++) 
	    {   
		 wdata(zftable[addr+i]); 
	    } 
  
} 
 
 
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); 
		} 
	 } 
}   
 
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 disphex(uchar lin,uchar col,uchar val,uchar res)  /*显示两位16进制数,lin=0~3;col=0~10,lin col为最高位的行、列坐标。*/ 
						   
						   /* VAL为所显示的数*/ 
						   /*res为反显标志,res=0:正显;res=1:反显*/ 
{uint ten,sig; 
   if((val<=0x0f)&&(val>=0)) 
  { 
   sig=val; 
   showhex(lin, col+1,sig,res); 
   showhex(lin,col,0,res); 
  } 
   
  if((val<=0xff)&&(val>0x0f)) 
  { 
   sig=val%16; 
   ten=(val-val%16)/16; 
   showhex(lin, col+1,sig,res); 
   showhex(lin,col,ten,res); 
  } 
} 
  
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); 
  }  
} 
 
void disp_dot(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+4,sig,res); 
  shownum(lin,col+3,0,res); 
  shownum(lin,col+2,10,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+4,sig,res); 
   shownum(lin,col+3,ten,res); 
   shownum(lin,col+2,10,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+4,sig,res); 
   shownum(lin,col+3,ten,res); 
   shownum(lin,col+2,10,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+4,sig,res); 
   shownum(lin,col+3,ten,res); 
   shownum(lin,col+2,10,res); 
   shownum(lin,col+1,hu,res); 
   shownum(lin,col,th,res); 
  }  
} 
 
 
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=enter;                        
	     if(old_enter&!sktemp){key_enter=1;} 
		 old_enter=sktemp; 
 
         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=exit;                       
	     if(old_exit&!sktemp){key_exit=1;} 
	     old_exit=sktemp; 
 
		 if(curwnd==0) 
           {   
		      if(key_inc==1) 
		       { 
			     key_inc=0; 
		         ++value[curwnd][hotpot]; 
			     Itemp=255; 
			     if(value[curwnd][hotpot]>Itemp)value[curwnd][hotpot]=0; 
			   } 
 
		      if(key_dec==1) 
			   {  
			     key_dec=0; 
				 Itemp=0; 
				 if(value[curwnd][hotpot]==Itemp)value[curwnd][hotpot]=255; 
				 else --value[curwnd][hotpot]; 
			   } 
			   
			  if(key_enter) 
		       {  
	             key_enter=0; 
	             hotpot++; 
	             if(hotpot>2)hotpot=0; 
		         if(hotpot==0) 
		           {   
			        dispnum(0,11,value[0][0],1); 
			        dispnum(2,11,value[0][1],0); 
			 
		           } 
		 
		         if(hotpot==1) 
		           { 
		  
			       dispnum(0,11,value[0][0],0); 
			       dispnum(2,11,value[0][1],1);  
			       } 
		        } 
          } 
} 
 
/*	  此部分是动态扫描程序,只须修改FIFO程序即可实现时时动态扫描 
void showdot(uchar col,uchar dat) 	 ///画单个点的程序 
{                               
    uchar temp,temp_h,temp_l,temp2,temp3; 
    temp3=dat/8; 
	temp2=dat%8; 
    temp_l=(col)&0x0f; 
    temp=((col)&0xf0)>>4; 
    temp_h=temp&0x0f;                        
    wcode(0xB0|temp3); 
    wcode(temp_h|0x10); 
	wcode(temp_l|0x00); 
    wdata(dottable[temp2]);	 
} 
 
void numdot(void)				 //产生波形 
{  
  uchar i; 
  for(i=0;i<64;i++) 
   { 
     dotshift[i]=i; 
	 dotshift[i+64]=64-i; 
   } 
   
} 
void FIFO(void)					   //移位程序 
{ 
  uchar i,temp; 
  temp=dotshift[128]; 
  for(i=0;i<128;i++) 
     { 
       dotshift[128-i]=dotshift[127-i]; 
     } 
  dotshift[0]=temp; 
}   
void dotshiftshow(uchar *dat) 
{ 												 //	页扫描 
  uchar i; 
   for(i=0;i<128;i++) 
      { 
        showdot(i,64-*dat); 
        dat++; 
      } 
} 
void delay(ulong v) 
{ 
   while(v!=0)v--; 
}  
void shiftsin(void)								  //方波产生显示程序 
{ 
    
  while(1) 
     { 
	 clrsrc(); 
     dotshiftshow(dotshift); 
     FIFO(); 
	 delay(2000); 
     } 
} 
*/                                   
/****************************主函数******************************/ 
void main(void) 
{ 
  P0M1=0X00;P0M2=0X00;  
  P2M1=0xc0;P2M2=0xc0; 
  SPCTL=0xdc; 
  SPSTAT=0xc0; 
  init_12864();		 
//  numdot();				  
  while(1)					  
   { getkey(); 
     // dispnum(0,11,value[0][0],0); 
	 // dispnum(2,11,value[0][1],0); 
     // shiftsin(); 
	             if(hotpot==0) 
		           {   
			        dispnum(0,11,value[0][0],1); 
			        dispnum(2,11,value[0][1],0); 
			 
		           } 
		 
		         if(hotpot==1) 
		           { 
		  
			       dispnum(0,11,value[0][0],0); 
			       dispnum(2,11,value[0][1],1);  
			       } 
    if(key_enter==1) 
	{ 
  
       
	} 
	if(key_inc==1) 
	{ 
  
       
	} 
	if(key_dec==1) 
	{ 
	  
      
	} 
	if(key_exit==1) 
	{ 
	  
      
	 } 
   } 
}