#define channel_0 0 //表示选择通道0 #define channel_1 1 //表示选择通道1 #define channel_2 2 //表示选择通道2 #define channel_3 3 //表示选择通道2 uchar jieguo[5]; uchar dianya[3]; /////////////////////////////////
//12864 1接地 2接vcc 3和18接电位器 (3---18 ) 19接vcc 20接地 #define CS BIT0
//P2.0 片选端 //P2.1 数据口
//P2.2 时钟口
#define SID BIT1
#define SCLK BIT2 uchar f[10]; int c;
//#define PSB BIT3 //P2.3 PSB=0,串行;PSB=1,并行
int ad,i=1010,j=0,date,p=0,a=0,n=0,w=0;
double a1,a2=0,a3=0;
// 函数名称 :void DAC_TLV5618(unsigned int Dignum) // 函数功能 :进行DA转换
//=============================================================
// 入口参数 :Dignum:根据说明设置转化数据,头四位为特殊位用于选择转化方式,
// 以及用于通道选择.请自行设置.后12位为需要转换的值 // 出口参数 :无
void DAC_TLV5618( unsigned int Dignum ) {
unsigned int Dig=0; unsigned char i=0; SCLK_H;
CS_L; // Chip Enable
for(i=0;i<16;i++) // Write 16_Bits Datas {
Dig=Dignum&0x8000;
15
//=============================================================
} SCLK_H;
CS_H; // Chip Disenable }
// 函数名称 :void Write_A_B( float Analog_A , float Analog_B , // unsigned char Channal,unsigned char Mode ) // 函数功能 :模式、通道选择并进行DA转换 // 入口参数 :Analog_A:A通道转换的电压值 // Analog_B:B通道转换的电压值
// Channal:通道选择,其值为Channal_A,Channal_B,或Channal_AB // Model:速度控制位 0:slow mode 1:fast mode // 出口参数 :无
//说明: 范围为:0—0x0fff
// 本程序如果只需要一个通道时,另外一个通道的值可任意,但是不能缺省
void Write_A_B( float Analog_A , float Analog_B ,
unsigned char Channal,unsigned char Mode ) {
unsigned int Data_A = 0, Data_B = 0; unsigned int tmp = 0;
//Analog_A=2*Vref*(Data_A/0x1000) 822
16
if(Dig) } else { } SCLK_L; _NOP();
DIN_L;
{
DIN_H;
Dignum<<=1; SCLK_H; _NOP();
//=============================================================
//=============================================================
{ }
void Delay_Nms(uint n) { uint i;
for(i = n;i > 0;i--) Delay_1ms(); }
void Write_Cmd(uchar cmd) {
uchar flag;
P2DIR|=CS+SCLK+SID;
P2OUT&=~(CS+SCLK+SID);//P2OUT=0; uchar i; uchar i_data;
17
Data_A = (unsigned int)( Analog_A * 1000 ) ; Data_B = (unsigned int)( Analog_B * 1000 ) ; if( Mode ) tmp=0x4000; else
tmp=0x0000; switch( Channal ) {
case Channal_A: DAC_TLV5618( tmp | 0x8000 | ( 0x0fff & case Channal_B: DAC_TLV5618( tmp | 0x0000 | ( 0x0fff & case Channal_AB:DAC_TLV5618( tmp | 0x1000 | ( 0x0fff & DAC_TLV5618( tmp | 0x8000 | ( 0x0fff & default:break; } }
Data_A ) );break; Data_B ) );break; Data_B ) ); Data_A ) );break;
void Delay_1ms(void)
uchar i;
for(i = 150;i > 0;i--) _NOP();
i_data=0xf8;
P2OUT|=CS; //CS=1;= for(i=0;i<8;i++) { flag=SID&((i_data&0x80)>>6); if(flag!=0)P2OUT|=SID; else P2OUT&=~SID;
P2OUT&=~SCLK; //SCLK=0; P2OUT|=SCLK; //SCLK=1; i_data=i_data<<1;
}
i_data=cmd; i_data&=0xf0; for(i=0;i<8;i++) { flag=SID&((i_data&0x80)>>6); if(flag)P2OUT|=SID; else P2OUT&=~SID;
P2OUT&=~SCLK; //SCLK=0; P2OUT|=SCLK; //SCLK=1; i_data=i_data<<1;
}
i_data=cmd; i_data=i_data<<4; for(i=0;i<8;i++) { flag=SID&((i_data&0x80)>>6); if(flag)P2OUT|=SID; else P2OUT&=~SID;
P2OUT&=~SCLK; //SCLK=0; P2OUT|=SCLK; //SCLK=1; i_data=i_data<<1;
}
P2OUT&=~CS; //CS=0; Delay_Nms(10);
18
}
void Write_Data(uchar dat) { uchar flag;
P2DIR|=CS+SCLK+SID;
P2OUT&=~(CS+SCLK+SID);//P2OUT=0; //P2OUT&=~PSB; //PSB=0; uchar i; uchar i_data; i_data=0xfa;
P2OUT|=CS; //CS=1; for(i=0;i<8;i++) { flag=SID&((i_data&0x80)>>6); if(flag)P2OUT|=SID; else P2OUT&=~SID;
P2OUT&=~SCLK; //SCLK=0; P2OUT|=SCLK; //SCLK=1; i_data=i_data<<1;
}
i_data=dat; i_data&=0xf0; for(i=0;i<8;i++) { flag=SID&((i_data&0x80)>>6); if(flag)P2OUT|=SID; else P2OUT&=~SID;
P2OUT&=~SCLK; //SCLK=0; P2OUT|=SCLK; //SCLK=1; i_data=i_data<<1;
}
i_data=dat; i_data=i_data<<4; for(i=0;i<8;i++)
{
19