#include <reg51.h>
#include <reg.h>
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
//#include<time.h>
//---------------------------------------------------------------------
void UART_int(void);
void delay1();
void delay2();
void delay3();
void mod1();
void mod2();
void mod3();
void mod4();
void off();
//********************************************************************
// 主程式
//********************************************************************
main()
{
SCON = 0x52; // 8 bit UART (mode 1), 啟動 Timer 1
TMOD = 0x20; // T0 mod 0, T1 mode 1
TH1 = 256-(28800/9600); //baudrate=9600
TL1 = TH1;
TR1 = 1; // 用KEIL C的 puts(), gets() 等來傳送RS232資料
ES = 1; // 開啟序列(RS232)中斷的開關
EA = 1; // 開啟中斷的總開關
}
//---------------------------------------------------
void UART_int(void) interrupt 4
{
//while(1)
//{
if(SBUF=="1")
{
mod1();
RI=0;
}
else if(SBUF=="2")
{
mod2();
RI=0;
}
else if(SBUF=="3")
{
mod3();
RI=0;
}
else if(SBUF=="4")
{
mod4();
RI=0;
}
else off;
//}
}
//-----------------------------------------------------
void mod1 ()
{
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x55&&ADCdata_1<=0xFF)
{
P0_3=0; delay2();
puts("a");delay2();
RI=0;
}
else if(ADCdata_2>0x55&&ADCdata_2<=0xFF)
{
P0_4=0; delay2();
puts("b");
RI=0;
}
else if(ADCdata_3>0x55&&ADCdata_3<=0xFF)
{
P0_5=0; delay2();
puts("c");
RI=0;
}
else if(ADCdata_4>0x55&&ADCdata_4<=0xFF)
{
P0_6=0; delay2();
puts("d");
RI=0;
}
else if(ADCdata_5>0x55&&ADCdata_5<=0xFF)
{
P0_7=0; delay2();
puts("e");
RI=0;
}
else
{
P0=0xff;
RI=0;
break;
}
if(SBUF!="2")
{
RI=0;
}
}
}
//-------------------------------------------------------------
void mod2 ()
{
P0=~0x08;
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x80;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
//-------------------------------------------------------------
void mod3 ()
{
P0=~0x80;
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x08;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
//--------------------------------------------------------
/*
void mod4(void){
int r;
int i;
int sides = 5;
srand((unsigned) time(NULL));
for(i=0;i<10;i++){
r = 1 + rand() % sides;
}
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x80;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
*/
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
void off()
{
P0=0x00;
}
//************************************************************************
unsigned int Adc0832_1(unsigned char channel)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI_1=1;
ADCS_1=0;//拉低CS端
ADCLK_1=1;//拉高CLK端
ADCLK_1=0;//拉低CLK端,形成下降沿1
ADCLK_1=1;//拉高CLK端
ADDI_1=channel&0x1;
ADCLK_1=0;//拉低CLK端,形成下降沿2
ADCLK_1=1;//拉高CLK端
ADDI_1=(channel>>1)&0x1;
ADCLK_1=0;//拉低CLK端,形成下降沿3
ADDI_1=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_1;//收?据
ADCLK_1=1;
ADCLK_1=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_1;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_1;//收?据
ADCLK_1=1;
ADCLK_1=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_1=1;//拉低CS端
ADCLK_1=0;//拉低CLK端
ADDO_1=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//************************************************************************
unsigned int Adc0832_2(unsigned char channe2)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe2==0)channe2=2;
if(channe2==1)channe2=3;
ADDI_2=1;
ADCS_2=0;//拉低CS端
ADCLK_2=1;//拉高CLK端
ADCLK_2=0;//拉低CLK端,形成下降沿1
ADCLK_2=1;//拉高CLK端
ADDI_2=channe2&0x1;
ADCLK_2=0;//拉低CLK端,形成下降沿2
ADCLK_2=1;//拉高CLK端
ADDI_2=(channe2>>1)&0x1;
ADCLK_2=0;//拉低CLK端,形成下降沿3
ADDI_2=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_2;//收?据
ADCLK_2=1;
ADCLK_2=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_2;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_2;//收?据
ADCLK_2=1;
ADCLK_2=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_2=1;//拉低CS端
ADCLK_2=0;//拉低CLK端
ADDO_2=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_3(unsigned char channe3)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe3==0)channe3=2;
if(channe3==1)channe3=3;
ADDI_3=1;
ADCS_3=0;//拉低CS端
ADCLK_3=1;//拉高CLK端
ADCLK_3=0;//拉低CLK端,形成下降沿1
ADCLK_3=1;//拉高CLK端
ADDI_3=channe3&0x1;
ADCLK_3=0;//拉低CLK端,形成下降沿2
ADCLK_3=1;//拉高CLK端
ADDI_3=(channe3>>1)&0x1;
ADCLK_3=0;//拉低CLK端,形成下降沿3
ADDI_3=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_3;//收?据
ADCLK_3=1;
ADCLK_3=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_3;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_3;//收?据
ADCLK_3=1;
ADCLK_3=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_3=1;//拉低CS端
ADCLK_3=0;//拉低CLK端
ADDO_3=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_4(unsigned char channe4)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe4==0)channe4=2;
if(channe4==1)channe4=3;
ADDI_4=1;
ADCS_4=0;//拉低CS端
ADCLK_4=1;//拉高CLK端
ADCLK_4=0;//拉低CLK端,形成下降沿1
ADCLK_4=1;//拉高CLK端
ADDI_4=channe4&0x1;
ADCLK_4=0;//拉低CLK端,形成下降沿2
ADCLK_4=1;//拉高CLK端
ADDI_4=(channe4>>1)&0x1;
ADCLK_4=0;//拉低CLK端,形成下降沿3
ADDI_4=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_4;//收?据
ADCLK_4=1;
ADCLK_4=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_4;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_4;//收?据
ADCLK_4=1;
ADCLK_4=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_4=1;//拉低CS端
ADCLK_4=0;//拉低CLK端
ADDO_4=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_5(unsigned char channe5)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe5==0)channe5=2;
if(channe5==1)channe5=3;
ADDI_5=1;
ADCS_5=0;//拉低CS端
ADCLK_5=1;//拉高CLK端
ADCLK_5=0;//拉低CLK端,形成下降沿1
ADCLK_5=1;//拉高CLK端
ADDI_5=channe5&0x1;
ADCLK_5=0;//拉低CLK端,形成下降沿2
ADCLK_5=1;//拉高CLK端
ADDI_5=(channe5>>1)&0x1;
ADCLK_5=0;//拉低CLK端,形成下降沿3
ADDI_5=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_5;//收?据
ADCLK_5=1;
ADCLK_5=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_2;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_5;//收?据
ADCLK_5=1;
ADCLK_5=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_5=1;//拉低CS端
ADCLK_5=0;//拉低CLK端
ADDO_5=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
void delay1() //0.2s
{
int j,k;
for(j=0;j<20;j++)
for(k=0;k<2000;k++);
}
void delay2() //1s
{
int j,k;
for(j=0;j<20;j++)
for(k=0;k<2000;k++);
}
void delay3() //0.5s
{
int j,k;
for(j=0;j<25;j++)
for(k=0;k<2000;k++);
}
|