#include <fun.h>
sbit CS = P3 ^ 0; /* 将CS位定义为P3.4引脚 */
sbit CLK = P3 ^ 1; /* 将CLK位定义为P1.0引脚 */
sbit DIO = P3 ^ 2; /* 将DIO位定义为P1.1引脚 */
char buff[30];
sbit Dir = P2 ^ 0;
sbit PWM = P2 ^ 1; //x
sbit Dir1 = P2 ^ 2;
sbit PWM1 = P2 ^ 3; //y
code char *name = "PhVoltaic Power";
bit flag1 = 1;
bit flag2 = 1;
unsigned char A_D1()
{
unsigned char i, dat;
CS = 1; /* 一个转换周期开始 */
CLK = 0; /* 为第一个脉冲作准备 */
CS = 0; /* CS置0,片选有效 */
DIO = 1; /* DIO置1,规定的起始信号 */
CLK = 1; /* 第一个脉冲 */
CLK = 0; /* 第一个脉冲的下降沿,此前DIO必须是高电平 */
DIO = 1; /* DIO置1, 通道选择信号 */
CLK = 1; /* 第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 */
CLK = 0; /* 第二个脉冲下降沿 */
DIO = 0; /* DI置0,选择通道0 */
CLK = 1; /* 第三个脉冲 */
CLK = 0; /* 第三个脉冲下降沿 */
DIO = 1; /* 第三个脉冲下沉之后,输入端DIO失去作用,应置1 */
CLK = 1; /* 第四个脉冲 */
for ( i = 0; i < 8; i++ ) /* 高位在前 */
{
CLK = 1; /* 第四个脉冲 */
CLK = 0;
dat <<= 1; /* 将下面储存的低位数据向右移 */
dat |= (unsigned char) DIO; /* 将输出数据DIO通过或运算储存在dat最低位 */
}
CS = 1; /* 片选无效 */
return(dat); /* 将读书的数据返回 */
}
unsigned char A_D2()
{
unsigned char i, dat;
CS = 1; /* 一个转换周期开始 */
CLK = 0; /* 为第一个脉冲作准备 */
CS = 0; /* CS置0,片选有效 */
DIO = 1; /* DIO置1,规定的起始信号 */
CLK = 1; /* 第一个脉冲 */
CLK = 0; /* 第一个脉冲的下降沿,此前DIO必须是高电平 */
DIO = 1; /* DIO置1, 通道选择信号 */
CLK = 1; /* 第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 */
CLK = 0; /* 第二个脉冲下降沿 */
DIO = 1; /* DI置1,选择通道1 */
CLK = 1; /* 第三个脉冲 */
CLK = 0; /* 第三个脉冲下降沿 */
DIO = 1; /* 第三个脉冲下沉之后,输入端DIO失去作用,应置1 */
CLK = 1; /* 第四个脉冲 */
for ( i = 0; i < 8; i++ ) /* 高位在前 */
{
CLK = 1; /* 第四个脉冲 */
CLK = 0;
dat <<= 1; /* 将下面储存的低位数据向右移 */
dat |= (unsigned char) DIO; /* 将输出数据DIO通过或运算储存在dat最低位 */
}
CS = 1; /* 片选无效 */
return(dat); /* 将读书的数据返回 */
}
void delay( unsigned int j )
{
for (; j > 0; j-- )
;
}
main()
{
unsigned char v;
float vv;
init_LCD(); /* 初始化液晶 */
lcdprintf( 0, 0, name ); /* 显示系统信息 */
delay( 50000 );
Dir = 1; /* 电机初始化引脚 */
Dir1 = 1; /* 电机初始化引脚 */
while ( 1 )
{
v = A_D1(); /* 采集传感器值 */
vv = 5 * (float) v / 0xff;
sprintf( buff, "X===Val : %5.3f ", vv * 20 ); /* 显示 */
lcdprintf( 0, 0, buff );
if ( vv < 3 && flag1 == 1 ) /* 如果X传感器值小于60 */
{
PWM = 1;
delay( 1 ); /* 启动X电机 */
PWM = 0;
flag1 = 0;
}else{
PWM = 1;
}
if ( vv >= 3 )
{
flag1 = 1;
}
v = A_D2(); /* 采集传感器值 */
vv = 5 * (float) v / 0xff;
sprintf( buff, "Y===Val : %5.3f ", vv * 20 ); /* 显示 */
lcdprintf( 0, 1, buff );
if ( vv < 3 && flag2 == 1 ) /* 如果Y传感器值小于60 */
{
PWM1 = 1;
delay( 1 );
PWM1 = 0; /* 启动Y电机 */
flag2 = 0;
}else{
PWM1 = 1;
}
if ( vv >= 3 )
{
flag2 = 1;
}
}
}
#include<fun.h>
void delay()
{
unsigned char i;
for(i=0;i<250;i++);
}
void init_LCD()
{
unsigned char i;
WR_COM=0x38; //设置为8位数据总线,16*2,5*7点阵
for(i=0;i<100;i++)
delay();
WR_COM=0x01; //清屏幕
for(i=0;i<50;i++)
delay();
WR_COM=0x06; //光标移动,显示区不移动,读写操作后AC加1
for(i=0;i<50;i++)
delay();
WR_COM=0x0c;//开显示,关光标显示,不闪烁
for(i=0;i<50;i++)
delay();
}
void lcdprintf(char x,char y,char *s)
{
if(y>1)y=1;
WR_COM=(y*0x40+x)|0x80;
delay();
delay();
while(*s!=0)
{
WR_DAT=*s;
|