好消息 !!!hh 现在其余IO口可以正常使用了 原因是用了开发板,开发板上有好多其他的线路,将线路弄的电压不一了!!!!!!没办法 都是自己懒惹的祸~!!!#include "stc12c5a60s2.h"#include "intrins.h"
#define uint unsigned int#define uchar unsigned char
#define ADC_POWER 0x80 //ADC power control bit电源控制位#define ADC_FLAG 0x10 //ADCcomplete flag 标志位#define ADC_START 0x08 //ADC start control bit启动控制位#define ADC_SPEEDLL 0x00 //420 clocks#define ADC_SPEEDL 0x20 //280 clocks#define ADC_SPEEDH 0x40 //140 clocks#define ADC_SPEEDHH 0x60 //70 clocks

sbit LED=P1^3;
void InitUart(); //串口初始化程序void SentData(uchar dat); //串口发送数据void InitADC(); //初始化ADvoid Delay(unsigned int z); // 延时uintch=0,light_input,key_input,shi_input,number=0;
void main(){InitUart(); InitADC();IE=0xa0;P1ASF=0xE0; //设置AD输入通道为P1.0-1.2LED=1;while(1){ if (number==8000){ SentData(shi_input); SentData(light_input);SentData(key_input); LED=0;P2=0x00; //if (light_input<200)LED=!LED; number=0;}}}
void InitADC(){
ADC_RES = 0; //清除上次采集的结果 ADC_CONTR = ADC_POWER |ADC_SPEEDLL | ADC_START|ch ; //选择开启的通道 Delay(2); //上电启动AD转换的延时}
void Delay(unsigned int n){unsigned int x; while (n--){ x=5000; while (x--);}}
void InitUart() // 初始化,定义串口的波特率{TMOD = 0x20; PCON =0x00; SCON =0x5a; TH1 =0xFd; TL1 =0xFd; TR1 =1;
}void SentData(uchar dat){ while(!TI);TI=0;SBUF=dat;
}
void adc_isr(void) interrupt 5 using 1 //中断服务程序,每100ms读一次AD{
ADC_CONTR &=!ADC_FLAG;if (number==20){ if(ch==0 ) { shi_input=ADC_RES; } else if (ch==1) { light_input=ADC_RES; } else if (ch==2) { key_input=ADC_RES; } if(++ch>2) ch=0;} number++;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START|ch ;}