#include<reg51.h> //头文件
#include<intrins.h>
sbit led=P2^0;
sbit CS =P1^0; //片选使能端
sbit CLK =P1^1; //时钟脉冲
sbit DI =P1^2; //数据信号输入端
sbit DO =P1^2; //数据输出端
sbit CS1 =P1^3; //片选使能端
sbit CLK1 =P1^4; //时钟脉冲
sbit DI1 =P1^5; //数据信号输入端
sbit DO1 =P1^5; //数据输出端
unsigned int k1;
unsigned int k2;
unsigned int Adc0832() //测环境光照值
{
unsigned int i;
unsigned int re1=0x00; //由高到低
unsigned int re2=0x00; //由低到高
CS=0; //片选使能
DI=1;
CLK=1;
CLK=0; //产生的第一个脉冲,启动转换
CLK=1;
DI=1;
CLK=0;
CLK=1; //第二个脉冲选通道0 DI输入1 0选择单通道
DI=0;
CLK=0; //第三个脉冲输入0表明通道0
DO=1; //控制命令结束,数据线拉高准备接受数据
for(i=0;i<8;i++) //每一个CLK下降沿输出一位数,先输出高位
{
re1|=DO; //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0
CLK=1;
CLK=0; //形成一次时钟脉冲
re1<<=1;////0000 0001最高位先出,并左移
if(DO==1)
re1|=0x01;
}
for(i=0;i<8;i++) //每一个CLK下降沿输出一位数,先输出低位
{ re2=re2|DO;
if(DO==1)
re2 = re2 | 0x80;
CLK=1;
CLK=0; //形成一次时钟脉冲
}
CS=1; //拉低CS端
CLK=1; //拉低CLK端
DI=1; //拉高数据端,回到初始状态
re1<<=8;
re1|=re2;
return(re1); //返回数据
}
unsigned int adc() //测路灯照度
{
unsigned int j;
unsigned int re3=0x00; //由高到低
unsigned int re4=0x00; //由低到高
CS1=0; //片选使能
DI1=1;
CLK1=1;
CLK1=0; //产生的第一个脉冲,启动转换
CLK1=1;
DI1=1;
CLK1=0;
CLK1=1; //第二个脉冲选通道0 DI输入1 0选择单通道
DI1=0;
CLK1=0; //第三个脉冲输入0表明通道0
DO1=1; //控制命令结束,数据线拉高准备接受数据
for(j=0;j<8;j++) //每一个CLK下降沿输出一位数,先输出高位
{
re3|=DO; //收数据,“|”位或,如果2位中有一位为1,则结果为1,否则为0
CLK1=1;
CLK1=0; //形成一次时钟脉冲
re3<<=1;////0000 0001最高位先出,并左移
if(DO1==1)
re3|=0x01;
}
for(j=0;j<8;j++) //每一个CLK下降沿输出一位数,先输出低位
{ re4=re4|DO;
if(DO1==1)
re4 = re4 | 0x80;
CLK1=1;
CLK1=0; //形成一次时钟脉冲
}
CS1=1; //拉低CS端
CLK1=1; //拉低CLK端
DI1=1; //拉高数据端,回到初始状态
re3<<=8;
re3|=re4;
return(re3); //返回数据
}
void main()//主函数
{
while(1)
{
k1=(Adc0832()/255)*5;//读取电压值
k2=(adc()/255)*5;//读取电压值
if(k1<=125)//小于等于上限
led=0;
else
led=1;
}
}
k1可以用,k2无法用。
将if语句中的k1换为k2,电路无法正常工作。
k1和k2都可以使用。
有偿。