📄 shiyan.c
字号:
D++;
SHIJTZ6(void);//调整到秒显示
}
if(D==6) //秒调整完成
{
D++;
SHIJTZ7(void);//调整到返回显示
}
if(D==7) //时间调整完成返回
{
D=0;
SHIJIAN(void);
}
}
else if(C!=0) //时间显示、调整、返回。
{
if(C==1)
{
E=1;
XIANSHISJ(void); //显示时间子程序,
}
if(C==2)
TIAOZHENGSJ(void); //时间调整子程序
if(C==3)
{
A=1;
CHUSHIXS(void); //返回到量程、时间、打印的选择界面
}
}
else if(B!=0) //量程选择。
{
if(B==1)
CL1(void); //0.1A测量
E=1;
if(B==2)
CL2(void); //1A测量
E=1;
if(B==3)
CL3(void); //10A测量
E=1;
if(B==4)
{
A=1;
CHUSHIXS(void); //返回到量程、时间、打印的选择界面
}
}
else if(A!=0) //量程、时间、打印的选择
{
if(A==1)
CL(void); //量程选择界面
if(A==2)
SJ(void); //时间控制界面
if(A==3)
{
DAYIN(void); //打印子程序
A=1;
CHUSHIXS(void);
}
}
else if(E==1)
{
A=1
CHUSHIXS(void); //测量后返回
}
}
//发送中断
void __attribute__((__interrupt__)) _U2TXInterrupt(void)
{
IFS1bits.U2TXIF = 0;
}
//接受中断
void __attribute__((__interrupt__)) _U2RXInterrupt(void)
{
IFS1bits.U2RXIF = 0;
while( DataRdyUART2())
{
( *(Receiveddata)++) = ReadUART2();
}
}
//异步串行通讯初始化
void InitUART2(void)
{
CloseUART2(); // Turn off UART1module
ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 &
UART_TX_INT_EN & UART_TX_INT_PR2); // Configure uart2 receive and transmit interrupt
baudvalue = 64; //Baud 2400 // Configure UART2 module to transmit 8 bit data with one stopbit.Also DISable loopback mode
U2MODEvalue = UART_EN & UART_IDLE_CON &
UART_EN_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U2STAvalue = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE & UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
}
//异步串行信号写操作子程序
unsigned char UART2Write(unsigned char AA)
{
OpenUART2(U2MODEvalue, U2STAvalue, baudvalue); // Load transmit buffer and transmit the same till null character is encountered
WriteUART2 (AA); // send to a data
while(BusyUART2()); // If ‘1’ is returned, it indicates that UART is busy in transmission
while(!IFS1bits.U2RXIF); // Waiting for produce interrupt
IFS1bits.U2RXIF=0; // clear interrupt flag
}
//D/A数据输入子程序
unsigned int DAWrite(unsigned int AA)
{unsigned int i,BB;
DASCLK=0;
if (AA&0x80)
{
DADIN=1;
}
else
{
DADIN=0;
}
DASCLK=1;
for(i=0,i<7,i++)
{
DASLCK=0;
BB=AA;
if ((AA<<1)&0x80)
{
DADIN=1;
}
else
{
DADIN=0;
}
DASCLK=1;
}
delay(500);
for(i=0,i<8,i++)
{
DASCLK=0;
if ((BB<<1)&0x80)
{
DADIN=1;
}
else
{
DADIN=0;
}
DASCLK=1;
}
}
//时钟芯片写子程序
unsigned int SZWrite(unsigned int AA,unsigned int BB)
{
SRET=0;
SCLK=0;
SRET=1;
AA<<8;
for(i=0,i<8,i++)
{
SCLK=0;
if ((AA<<1)&0x80)
{
SIO=1;
}
else
{
SIO=0;
}
SCLK=1;
}
BB<<8;
for(i=0,i<8,i++)
{
SCLK=0;
if ((BB<<1)&0x80)
{
SIO=1;
}
else
{
SIO=0;
}
SCLK=1;
}
}
//时钟芯片读子程序
unsigned int SZRead(unsigned int AA,unsigned int BB)
{
unsigned int CC,DD;
BB=0;
SRET=0;
SCLK=0;
SRET=1;
AA<<8;
for(i=0,i<8,i++)
{
SCLK=0;
if ((AA<<1)&0x80)
{
SIO=1;
}
else
{
SIO=0;
}
SCLK=1;
}
for(i=0,i<8,i++)
{ CC=1;
DD=0;
SCLK=0;
if (SIO==1)
{
CC<<i;
BB=BB|CC;
}
else
{
DD<<i;
BB=BB|CC;
}
SCLK=1;
}
}
//void uart1int(void);
//void uart1int(void);
//void CloseUART2(void);
void EnablePSV(void);
void spiint(void);
//void DisablePSV(void);
//float counter1,counter2;
//unsigned char c,e;
//unsigned char a,b;
int main (void)
{
//unsigned char a,b,s1,s2;
//unsigned char ch_status1,ch_status2;
// int c,d,e,f,g,i;
//int max1, max2;
// int min1, min2;
// unsigned int base;
// volatile unsigned int fudu1,fudu2;
//double maxd1,mind1,maxd2,mind2;
// double FuDud1,FuDud2;
inital();
delaydms(5000);
//ONhighpower();
//uart1int();
//AD1int();
//spiint();
while(1)
{
ZDWR2=!ZDWR2;
CONTROLZF=1;
CONTROLAD=1;
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
CONTROLZF= 0;
CONTROLAD= 0;
ZDWR2=!ZDWR2;
ZDWR20=!ZDWR20;
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
ZDWR20=!ZDWR20;
ZDWR200=!ZDWR200;
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
ZDWR200=!ZDWR200;
BDWR200=!BDWR200;
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
BDWR200=!BDWR200;
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
delaydms(50000);
HIGHPOWER=!HIGHPOWER;
delaydms(50000);
HIGHPOWER=!HIGHPOWER;
delaydms(50000);
}
//while(1)
//{
// nop();
//}
/**********************************************************************************
do
{
WriteSPI2(0x0f);
while(SPI2STATbits.SPITBF);
//WriteSPI2(0x0f);
// while(SPI2STATbits.SPITBF);
SPI2BUF=0;
while(!DataRdySPI2()); //If ‘1’ indicates that the data has been received in the receive buffer and is to be read.
(unsigned char)datard = ReadSPI2();
if(datard==0xaa) break;
//{
// s1=datard;
// WriteSPI2(0x55);
// while(SPI2STATbits.SPITBF);
//}
SPI2BUF=0;
while(!DataRdySPI2()); //If ‘1’ indicates that the data has been received in the receive buffer and is to be read.
(unsigned char)datard = ReadSPI2();
if(datard==0xaa) break;
//{
// s1=datard;
// WriteSPI2(0x55);
// while(SPI2STATbits.SPITBF);
//}
}while(1);//datard!=0xaa);
//nop();
//nop();
do
{
WriteSPI2(0x55);
while(SPI2STATbits.SPITBF);
//WriteSPI2(0x55);
//while(SPI2STATbits.SPITBF);
SPI2BUF=0;
while(!DataRdySPI2()); //If ‘1’ indicates that the data has been received in the receive buffer and is to be read.
(unsigned char)datard = ReadSPI2();
if(datard==0xff) break;
//{
//s1=datard;
//}
SPI2BUF=0;
while(!DataRdySPI2()); //If ‘1’ indicates that the data has been received in the receive buffer and is to be read.
(unsigned char)datard = ReadSPI2();
if(datard==0xff) break;
//{
//s1=datard;
//}
}while(1);
WriteSPI2(0x0f);
while(SPI2STATbits.SPITBF);
PORTGbits.RG12=!PORTGbits.RG12;
}
PORTGbits.RG0=0; //复位2120
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
delaydms(500);
PORTGbits.RG0=1;
PORTGbits.RG1=0; //启动4100
do
{
putsUART1(Buf); //发一个字符数据
while(BusyUART1()); // Wait for transmission to complete If ‘1’ is returned, it indicates that UART is busy in transmission
nop(); nop();
while(!IFS0bits.U1RXIF);
IFS0bits.U1RXIF =0;
while(DataRdyUART1()) // Read all the data remaining in receive buffer which are unread
{
a=ReadUART1();
}
}while(a!=0xaa); //while(a!=0x55);
for(b=3;b>0;b--)
{
putsUART1((Buf+1)); //发一个字符数据
while(BusyUART1()); // Wait for transmission to complete If ‘1’ is returned, it indicates that UART is busy in transmission
}
do
{
max1=0;
min1=2046;
max2=0;
min2=2046;
s1=0;s2=0;
PORTCbits.RC1 = 1; // set out A/D
for(c=1000;c>0;c--)
{
ADread();
if(e>max1) max1=e;
if(e<min1) min1=e;
if(g>max2) max2=g;
if(g<min2) min2=g;
//PORTDbits.RD9=1;
}
PORTCbits.RC1 = 0;
maxd1=(double)max1;
mind1=(double)min1;
maxd2=(double)max2;
mind2=(double)min2;
FuDud1=(maxd1-mind1)/2;
FuDud2=(maxd2-mind2)/2;
fudu1=(int)FuDud1; //正或反幅度
fudu2=(int)FuDud2; //标准幅度
PORTDbits.RD10=0; //开标准选当4051
PORTDbits.RD11=0; //开正接选当4051
if(fudu1>FuDufirst)
{
hdcx1();
}
else
{
if((fudu1*10)<=FuDufirst)
{
if((fudu1*100)<=FuDufirst)
{
if((fudu1*1000)<=FuDufirst)
{
PORTDbits.RD8=1; //关闭正档3(2欧姆)
PORTDbits.RD7=1; //关闭正档2(20欧姆)
PORTDbits.RD6=1; //关闭正档1(220欧姆)
hdcx1();
}
else
{
PORTDbits.RD8=1; //关闭正档3(2欧姆)
PORTDbits.RD7=1; //关闭正档2(20欧姆)
PORTDbits.RD6=0; //选通正档1(220欧姆)
hdcx1();
}
}
else
{
PORTDbits.RD8=1; //关闭正档3(2欧姆)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -