disp1(show0); Delayms();
b=ADC_TURNON(3,4);
show0[0]=(unsigned char)(b/1000);
show0[1]=(unsigned char)((b00)/100);
show0[2]=(unsigned char)(((b00)0)/10); show0[3]=(unsigned char)(((b00)0)); disp2(show0); Delayms();
kp=ADC_TURNON(3,3); ki=ADC_TURNON(3,2); kd=ADC_TURNON(3,1); spec=ADC_TURNON(3,0); yk=ADC_TURNON(3,4);
da=pid(kp/100,ki/10,kd/10,spec/10,yk/10); dac(da);
if(p02==0&&flag==1) { flag++; disp_kp(); delay(20); }
if(p02==0&&flag==2) { flag++; disp_ki(); delay(20); }
if(p02==0&&flag==3) {flag=1; disp_kd(); delay(20); }
}//while的终止 }//main的终止
void delay(unsigned int x)
{unsigned int m,k ; for (m=0;m {for (k=0;k<0xffff;k++); } } n=(unsigned char)((b00)/100); } //disp.c用来led显示结果 #include sbit P15 =P1^5; sbit P16 = P1^6; sbit P17 = P1^7; #define din P17 #define load P16 #define clk P15 #define NoOp 0x00 #define Digit0 0x01 #define Digit1 0x02 #define Digit2 0x03 #define Digit3 0x04 #define Digit4 0x05 #define Digit5 0x06 #define Digit6 0x07 #define Digit7 0x08 #define DecodeMode 0x09 #define Intensity 0x0a #define ScanLimit 0x0b #define ShutDown 0x0c #define DisplayTest 0x0f unsigned char code dispcode_char[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b, 0x0, 0x1}; extern unsigned int ADC_TURNON(unsigned char speed,chanl); void MAX7219_Write(unsigned char com, unsigned char dat); void Delayms(void) { unsigned int a,b; for(a=0;a<20;a++) for(b=0;b<100;b++); } void MAX7219_Write(unsigned char com, unsigned char dat) { unsigned char temp,i,j; load=0; clk=0; for(i=0;i<8;i++) { temp=com; if((temp&(0x80>>i))!=0) din=1; else din=0; clk=1; for(j=0;j<5;j++); clk=0; } for(i=0;i<8;i++) { temp=dat; if((temp&(0x80>>i))!=0) din=1; else din=0; clk=1; for(j=0;j<5;j++); clk=0; } load=1; } void MAX7219_Init() { MAX7219_Write(ShutDown ,0x00); Delayms(); MAX7219_Write(ShutDown ,0x01); MAX7219_Write(DecodeMode,0xff); MAX7219_Write(Intensity ,0x0a); // Intensity Register Format MAX7219_Write(ScanLimit,0x07); } void MAX7219_Init1() { MAX7219_Write(ShutDown ,0x00); Delayms(); MAX7219_Write(ShutDown ,0x01); MAX7219_Write(DecodeMode,0x00); MAX7219_Write(Intensity ,0x0a); // Intensity Register Format MAX7219_Write(ScanLimit,0x07); } void disp1(unsigned char dat[4]) { load=1; clk=1; din=1; MAX7219_Init(); //设P1.0/P1.1/P1.2/P1.3/P1.4为高阻输入,其他为IO P1M0=0x1F; P1M1=0x00; MAX7219_Write(Digit0,dat[0]); MAX7219_Write(Digit1,dat[1]); MAX7219_Write(Digit2,dat[2]); MAX7219_Write(Digit3,dat[3]); } void disp2(unsigned char dat[4]) { load=1; clk=1; din=1; MAX7219_Init(); P1M0=0x1F; P1M1=0x00; MAX7219_Write(Digit4,dat[0]); MAX7219_Write(Digit5,dat[1]); MAX7219_Write(Digit6,dat[2]); MAX7219_Write(Digit7,dat[3]); } void disp_kp() //用于显示kp,ki,kd的值 { unsigned int b; unsigned char m,n,x,y; load=1; clk=1; din=1; MAX7219_Init1(); P1M0=0x1F; P1M1=0x00; MAX7219_Write(Digit0,0); MAX7219_Write(Digit1,0x0F); MAX7219_Write(Digit2,0x67); MAX7219_Write(Digit3,0); b=ADC_TURNON(3,3); m=(unsigned char)(b/1000); n=(unsigned char)((b00)/100); x=(unsigned char)(((b00)0)/10); y=(unsigned char)(((b00)0)); MAX7219_Write(Digit4,dispcode_char[m]); MAX7219_Write(Digit5,dispcode_char[n]); MAX7219_Write(Digit6,dispcode_char[x]); MAX7219_Write(Digit7,dispcode_char[y]); } void disp_ki() //用于显示kp,ki,kd的值 { unsigned int b; unsigned char m,n,x,y; load=1; clk=1; din=1; MAX7219_Init1(); P1M0=0x1F; P1M1=0x00; MAX7219_Write(Digit0,0); MAX7219_Write(Digit1,0x0F); MAX7219_Write(Digit2,0x30); MAX7219_Write(Digit3,0); b=ADC_TURNON(3,2);