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); } }