?? test.c
字號(hào):
#include <REG935.H>
#include"..\SOURCE\general.h"
#include <STRING.H>
//#include <stdio.h>
BYTE STATE;
DWORD DISTANCE,DISTANCENA,DISTANCEPA1,DISTANCEPA2;
BYTE PREDATA=100,j=0;
bit OVERFLOW=0;
/*********************************************************************************************************
* 函數(shù)名稱: X9C104
*
* 功能描述: 數(shù)字電位器X9C104控制程序。
*
* 入口參數(shù): X9C104DATA 數(shù)字電位器的中心抽頭的位置數(shù)值
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: delay
*
* 作 者: 汪帆
* 創(chuàng)建時(shí)間: 2006年1月10日
********************************************************************************************************/
void x9c104(BYTE X9C104DATA)
{
signed int i;
UD=0;
INC=0;
i= X9C104DATA-PREDATA;
if (i>0)
{
i=X9C104DATA-PREDATA;
UD=1;
do
{
INC=1;
_nop_();
INC=0;
i--;
}while (i>0);
}else if (i<0)
{
i=PREDATA-X9C104DATA;
do
{
INC=1;
_nop_();
INC=0;
i--;
}while (i>0);
}
PREDATA=X9C104DATA;
}
/*********************************************************************************************************
* 函數(shù)名稱: pulse
*
* 功能描述: 發(fā)送脈沖,并選擇脈沖寬度
*
* 入口參數(shù): ABC=0 范圍參數(shù)
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: 劉賢曙
* 創(chuàng)建時(shí)間: 2006年1月10日
********************************************************************************************************/
void pulse(BYTE ENSEL10)
{
//START=0;
CLR = 0;
delay(2);
LOAD = 0; //LOAD為脈沖下降沿有效
switch (ENSEL10)
{
case 1: EN=0;SEL1=0;SEL0=0;ENNP=0;break; //200米
case 2: EN=0;SEL1=0;SEL0=1;ENNP=0;break; //1000米
case 3: EN=0;SEL1=1;SEL0=0;ENNP=0;break; //4000米
case 4: EN=0;SEL1=1;SEL0=1;ENNP=0;break; //8000米
case 5: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
case 6: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
case 7: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
case 8: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
default: break;
}
DCLK=0;
//START=1;
CLR=1;
}
/*********************************************************************************************************
* 函數(shù)名稱: rdpulse
*
* 功能描述: 讀一次測(cè)試數(shù)據(jù)的值
*
* 入口參數(shù):
*
* 出口參數(shù): DISTANCE 一次測(cè)試后的記數(shù)值
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: 劉賢曙
* 創(chuàng)建時(shí)間: 2006年1月10日
********************************************************************************************************/
DWORD rdNAPA(void)
{
BYTE i,l;
for(l=0;l<255;l++)
{
_nop_();
_nop_();
}
P2=P2|0x18;
_nop_();
P2=P2&0xe7;
DISTANCE=0;
DCLK=0;
LOAD=0;
LOAD=1;
DCLK=1;
LOAD=0;
for (i=0;i<8;i++)
{
DCLK=1;
if(SD==1)
if(i<7)
DISTANCE<<=1;
DCLK=0;
}
DCLK=0;
//DISTANCE=1688;
return(DISTANCE);
}
/*********************************************************************************************************
* 函數(shù)名稱: gainDISTANCE
*
* 功能描述: 自動(dòng)測(cè)試程序
*
* 入口參數(shù): 無
*
* 出口參數(shù): DISTANCE 一次測(cè)試后的記數(shù)值 ;RANGE 完成測(cè)試時(shí)的范圍
* 當(dāng)DISTANCE=0x0fff,RANGE=7時(shí)說明測(cè)試距離過長(zhǎng),超出測(cè)試范圍。
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: 劉賢曙
* 創(chuàng)建時(shí)間: 2006年1月10日
********************************************************************************************************/
DWORD gainDISTANCE(void)
{
BYTE k=255;
do
{
j=0;
CCU_init(j*36);
delay(5);
DA(k); //數(shù)模轉(zhuǎn)換,從AD03(P2.0)輸出模擬電壓,為PA,NA檢測(cè)提供基準(zhǔn)電壓
_nop_();
_nop_();
_nop_();
do
{
j++;
if(j==9)
break;
pulse(j);
DISTANCE=rdNAPA();
}while(DISTANCE==0x00ff);
k=k-5;
if (k>10)
OVERFLOW=0;
else
{
OVERFLOW=1;
break;
}
}while(DISTANCE==0x00ff);
if ((j==1))
{
DISTANCE=(DISTANCE)*2;
}
else if ((j==2))
{
DISTANCE=(DISTANCE)*4;
}
else if ((j==3))
{
DISTANCE=(DISTANCE)*8;
}
else if ((j==4))
DISTANCE=(DISTANCE)*16;
if ((j==5))
{
DISTANCE=(DISTANCE)*32;
}
else if ((j==6))
{
DISTANCE=(DISTANCE)*64;
}
else if ((j==7))
{
DISTANCE=(DISTANCE)*128;
}
else if ((j==8))
DISTANCE=(DISTANCE)*256;
else if ((j==9))
DISTANCE=20000;
return(DISTANCE);
}
void autotest()
{
char xdata str1[50],*str2;
D0=1; //選中PA1事件測(cè)的數(shù)據(jù)
DISTANCEPA1 = gainDISTANCE();
D0=0; //選中NA事件測(cè)的數(shù)據(jù)
DISTANCENA = gainDISTANCE();
/*strcpy(str1,"斷線距離第一次。");
numtostr(str1,DISTANCEPA1);
if(OVERFLOW)
str2=strcat("測(cè)試距離太長(zhǎng)超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255);
if ((DISTANCEPA1)==0x03ff)
DISTANCE=DISTANCEPA2;
else
DISTANCE=DISTANCEPA1;*/
/*if ((j==1)||(j==2))
{
DISTANCE=(DISTANCE)*2;
DISTANCENA=(DISTANCENA)*2;
}
else if ((j==3)||(j==4))
{
DISTANCE=(DISTANCE)*4;
DISTANCENA=(DISTANCENA)*4;
}
else if ((j==5)||(j==6))
{
DISTANCE=(DISTANCE)*8;
DISTANCENA=(DISTANCENA)*8;
}
else if ((j==7)||(j==8))
{
DISTANCE=(DISTANCE)*16;
DISTANCENA=(DISTANCENA)*16;
}*/
DISTANCEPA1 = DISTANCEPA1-4;
DISTANCENA = DISTANCENA-4;
//if(DISTANCENA>DISTANCEPA1)
{
strcpy(str1,"斷線距離。");
numtostr(str1,DISTANCEPA1);
if(OVERFLOW)
str2=strcat("測(cè)試距離太長(zhǎng)超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255);
}
//else
{
strcpy(str1,"短路距離。");
numtostr(str1,DISTANCENA);
if(OVERFLOW)
str2=("測(cè)試距離太長(zhǎng)超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255);
}
}
void DA(BYTE da_val)
{
DWORD xdata i;
ADINS=0x08; //開轉(zhuǎn)換通道3
ADMODA=0x02; //設(shè)置轉(zhuǎn)換模式
ADMODB=0x44; //設(shè)置ADC模塊,0.5Mhz<ADC CLK<3.3Mhz,使能DAC0
ADCON0=0x04; //開啟DAC0模塊
//ADCON0&=0x7F; //清AD/DA轉(zhuǎn)換完成標(biāo)志位
AD0DAT3=da_val; //AD0DAT3的值為DAC0輸出的控制量
for(i=0;i<=1000;i++);
ADCON0=0x05; //啟動(dòng)DA轉(zhuǎn)換,立即啟動(dòng)方式
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -