|
#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; /* 一個(gè)轉(zhuǎn)換周期開始 */
CLK = 0; /* 為第一個(gè)脈沖作準(zhǔn)備 */
CS = 0; /* CS置0,片選有效 */
DIO = 1; /* DIO置1,規(guī)定的起始信號(hào) */
CLK = 1; /* 第一個(gè)脈沖 */
CLK = 0; /* 第一個(gè)脈沖的下降沿,此前DIO必須是高電平 */
DIO = 1; /* DIO置1, 通道選擇信號(hào) */
CLK = 1; /* 第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0 */
CLK = 0; /* 第二個(gè)脈沖下降沿 */
DIO = 0; /* DI置0,選擇通道0 */
CLK = 1; /* 第三個(gè)脈沖 */
CLK = 0; /* 第三個(gè)脈沖下降沿 */
DIO = 1; /* 第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1 */
CLK = 1; /* 第四個(gè)脈沖 */
for ( i = 0; i < 8; i++ ) /* 高位在前 */
{
CLK = 1; /* 第四個(gè)脈沖 */
CLK = 0;
dat <<= 1; /* 將下面儲(chǔ)存的低位數(shù)據(jù)向右移 */
dat |= (unsigned char) DIO; /* 將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位 */
}
CS = 1; /* 片選無效 */
return(dat); /* 將讀書的數(shù)據(jù)返回 */
}
unsigned char A_D2()
{
unsigned char i, dat;
CS = 1; /* 一個(gè)轉(zhuǎn)換周期開始 */
CLK = 0; /* 為第一個(gè)脈沖作準(zhǔn)備 */
CS = 0; /* CS置0,片選有效 */
DIO = 1; /* DIO置1,規(guī)定的起始信號(hào) */
CLK = 1; /* 第一個(gè)脈沖 */
CLK = 0; /* 第一個(gè)脈沖的下降沿,此前DIO必須是高電平 */
DIO = 1; /* DIO置1, 通道選擇信號(hào) */
CLK = 1; /* 第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0 */
CLK = 0; /* 第二個(gè)脈沖下降沿 */
DIO = 1; /* DI置1,選擇通道1 */
CLK = 1; /* 第三個(gè)脈沖 */
CLK = 0; /* 第三個(gè)脈沖下降沿 */
DIO = 1; /* 第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1 */
CLK = 1; /* 第四個(gè)脈沖 */
for ( i = 0; i < 8; i++ ) /* 高位在前 */
{
CLK = 1; /* 第四個(gè)脈沖 */
CLK = 0;
dat <<= 1; /* 將下面儲(chǔ)存的低位數(shù)據(jù)向右移 */
dat |= (unsigned char) DIO; /* 將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位 */
}
CS = 1; /* 片選無效 */
return(dat); /* 將讀書的數(shù)據(jù)返回 */
}
void delay( unsigned int j )
{
for (; j > 0; j-- )
;
}
main()
{
unsigned char v;
float vv;
init_LCD(); /* 初始化液晶 */
lcdprintf( 0, 0, name ); /* 顯示系統(tǒng)信息 */
delay( 50000 );
Dir = 1; /* 電機(jī)初始化引腳 */
Dir1 = 1; /* 電機(jī)初始化引腳 */
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 ); /* 啟動(dòng)X電機(jī) */
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; /* 啟動(dòng)Y電機(jī) */
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; //設(shè)置為8位數(shù)據(jù)總線,16*2,5*7點(diǎn)陣
for(i=0;i<100;i++)
delay();
WR_COM=0x01; //清屏幕
for(i=0;i<50;i++)
delay();
WR_COM=0x06; //光標(biāo)移動(dòng),顯示區(qū)不移動(dòng),讀寫操作后AC加1
for(i=0;i<50;i++)
delay();
WR_COM=0x0c;//開顯示,關(guān)光標(biāo)顯示,不閃爍
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;
仿真圖
|
評(píng)分
-
查看全部評(píng)分
|