//九院十所大电源
#include "p30fxxxx.h"
#include "p30f6012A.h"
#include "DataEEPROM.h"
#include "timer.h"
#include "uart.h"
#include "dci.h"
#include "ports.h"
#include "dsp.h"
//电流设置超过256,因此将单次或连续的高位定义为电流设置的高位字节
//脉宽设置超过256,因此将内触发或外触发高位定义为脉宽设置的高位字节
//九环电器激光电源项目
unsigned int m;
_FOSC(CSW_FSCM_OFF & ECIO_PLL4 );
//_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PWRT_64 );
_FGS(CODE_PROT_ON);
#define FCY 12000000
#define CS PORTFbits.RF1
#define SDIN PORTGbits.RG1
#define SCLK PORTGbits.RG0
#define SET PORTBbits.RB11 //KEY*/
#define ESC PORTBbits.RB12 //KEY*/
#define UP PORTBbits.RB13 //KEY*/
#define DOWN PORTBbits.RB15 //KEY*/
#define START PORTBbits.RB14 //KEY*/
#define STOP PORTBbits.RB10 //KEY*/
#define DATA7 PORTDbits.RD7
#define DATA6 PORTDbits.RD6
#define DATA5 PORTDbits.RD5
#define DATA4 PORTDbits.RD4
#define DATA3 PORTDbits.RD3
#define DATA2 PORTDbits.RD2
#define DATA1 PORTDbits.RD1
#define DATA0 PORTCbits.RC14
#define TRIS_DATA7 TRISDbits.TRISD7
#define TRIS_DATA6 TRISDbits.TRISD6
#define TRIS_DATA5 TRISDbits.TRISD5
#define TRIS_DATA4 TRISDbits.TRISD4
#define TRIS_DATA3 TRISDbits.TRISD3
#define TRIS_DATA2 TRISDbits.TRISD2
#define TRIS_DATA1 TRISDbits.TRISD1
#define TRIS_DATA0 TRISCbits.TRISC14
#define E PORTCbits.RC13 /* PORT for E */
#define RW PORTDbits.RD0 /* PORT for RW */
#define RS PORTDbits.RD11 /* PORT for RS */
#define TRIS_E TRISCbits.TRISC13 /* TRIS for E */
#define TRIS_RW TRISDbits.TRISD0 /* TRIS for RW */
#define TRIS_RS TRISDbits.TRISD11 /* TRIS for RS */
#define i_control PORTGbits.RG6
#define i_out PORTCbits.RC2
#define caution PORTBbits.RB8
#define water_SW PORTBbits.RB9
//编解码器地址
#define L_LINE_VOLUME 0x00
#define R_LINE_VOLUME 0x01
#define L_HEADPHONE_VOLUME 0x02
#define R_HEADPHONE_VOLUME 0x03
#define A_AUDIO_PATH 0x04
#define D_AUDIO_PATH 0x05
#define POWER_CON 0x06
#define D_AUDIO_INTERFACE 0x07
#define SAMPLE_RATE 0x08
#define D_INTERFACE_ACT 0x09
#define RESET 0x0f
//配置编解码器参数
#define L_LINE_VOLUME_VAL 0x097 //左声道0分贝
#define R_LINE_VOLUME_VAL 0x097 //右声道禁音,禁用
#define L_HEADPHONE_VOLUME_VAL 0x0fe //左声道耳机输出使能,5分贝
#define R_HEADPHONE_VOLUME_VAL 0x0b0 //
#define A_AUDIO_PATH_VAL 0x012 //
#define D_AUDIO_PATH_VAL 0x000 //
#define POWER_CON_VAL 0x003 //
#define D_AUDIO_INTERFACE_VAL 0x002 //
#define SAMPLE_RATE_VAL 0x004 //
#define D_INTERFACE_ACT_VAL 0x001 //
#define RESET_VAL 0x000 //
unsigned int k=0,j=0,a_v,Buf2[3], f_temp, f_temp1;
unsigned int SET_F=0; //SET标志,1:限制电流;2:脉宽;3:电流;4:频率;5:负载电压;6:内或外触发
unsigned int SET_F1=0; //是否在设置状态标志,当为1时在设置状态,为0时退出设置状态
unsigned int MOD_F=1; //单次或连续输出标志,当为1时,单次,否则为连续;
unsigned int MOD_F1=0; //内部触发或外部触发标志,当为1时内触发,为0时外触发;
unsigned long int F_num=12000000,timer4_vol,Timer2_val,water_f=0,Timer2_val1; //触发脉冲的频率
unsigned int F=1,timer5_vol;
unsigned int W_num=1200; //触发脉冲的脉宽1200-12000
unsigned int Ib;
unsigned int A_VOL=1;
unsigned int U2RX_ruturn=0,on_f=0;
const char * DISPLAY0;
const char * DISPLAY1;
int DCI_BUF0=0,DCI_temp;
unsigned int DCI_BUF2=0X0;//,caution;//
/* Received data is stored in array Buf */
unsigned int Buf[8],U2R_F=0;//U2R_F串口响应信号,为1已响应,为0未响应
unsigned int * Receiveddata = Buf;
unsigned int Buf_hand[8]={0xfe,0x01,0x02,0x03,0x04,0x05,0x06,0xff};//握手信号
unsigned int Buf_start[8]={0xfe,0x55,0x55,0x55,0x55,0x55,0x55,0xff};//START信号
unsigned int Buf_stop[8]={0xfe,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xff};//STOP信号
unsigned int U1RXInt_f,U2RXInt_f=0;
void putsUART2(unsigned int *buffer);
/*Declare constants/coefficients/calibration data to be stored in DataEEPROM*/
unsigned int _EEDATA(32) ZHG[16];
/*Declare variables to be stored in RAM*/
unsigned int Z[16],uart_temp,uart_temp1;
unsigned char DCI_step=1,DCI_f=0,DCI_start,WORK_F=0,DCI_num=0;
unsigned int temp;
void WriteUART2_Z(void);
void A_show(void);
void W_show(unsigned int W_num1);
void F_show(unsigned int F_num1);
void Ib_show(void);
void U_show(unsigned int U_temp);
int main(void);
void DCIInit (void);
void __attribute__((__interrupt__)) _DCIInterrupt(void);
void configINT0(unsigned int) __attribute__ ((section (".libperi")));
void WriteUART1_Z(void);
void NOP(void)
{
unsigned int rr=0;
rr++;
}
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0;
}
void __attribute__((__interrupt__)) _U2TXInterrupt(void)
{
IFS1bits.U2TXIF = 0;
}
void A_vol(unsigned int A_N);
void __attribute__((__interrupt__)) _INT0Interrupt(void);
void WaitForEnable()
{
TRIS_E=0;
TRIS_RW=0;
TRIS_RS=0;
RW=0;
E=0;
RS=0;
DATA0=DATA1=DATA2=DATA3=DATA4=DATA5=DATA6=DATA7=0;
TRIS_DATA0=TRIS_DATA1=TRIS_DATA2=TRIS_DATA3=TRIS_DATA4=TRIS_DATA5=TRIS_DATA6=TRIS_DATA7=1;
RS=0;
RW=1;
NOP();
E = 1;
while(DATA7) //液晶遇忙等待
{
}
E = 0;
DATA0=DATA1=DATA2=DATA3=DATA4=DATA5=DATA6=DATA7=0;
TRIS_DATA0=TRIS_DATA1=TRIS_DATA2=TRIS_DATA3=TRIS_DATA4=TRIS_DATA5=TRIS_DATA6=TRIS_DATA7=0;
}
//液晶显示命令 E =1 RS=0 RW=0
void LcdWriteCommand( unsigned char CMD,unsigned char AttribC )
{
if (AttribC) WaitForEnable(); //AtrribC为1检测忙信号,为0跳过
if(CMD&0X1) DATA0 = 1;
else DATA0 = 0;
if((CMD>>1)&0X1) DATA1 = 1;
else DATA1 = 0;
if((CMD>>2)&0X1) DATA2 = 1;
else DATA2 = 0;
if((CMD>>3)&0X1) DATA3 = 1;
else DATA3 = 0;
if((CMD>>4)&0X1) DATA4 = 1;
else DATA4 = 0;
if((CMD>>5)&0X1) DATA5 = 1;
else DATA5 = 0;
if((CMD>>6)&0X1) DATA6 = 1;
else DATA6 = 0;
if((CMD>>7)&0X1) DATA7 = 1;
else DATA7 = 0;
RS = 0;
RW= 0;
NOP();
// 送控制字子程序
E = 1;
NOP();
E = 0; // 操作允许脉冲信号
}
void delay(unsigned long int wu)
{
while(wu)wu--;
}
void FREQUENCY(unsigned int W_N)
{
unsigned long temp_F3;
temp_F3=FCY/F-W_num;
OpenTimer45(T4_OFF & T4_GATE_OFF &
T4_PS_1_1 & T4_32BIT_MODE_ON &
T4_SOURCE_INT,temp_F3);
}
void FREQUENCY_ext(void)
{
OpenTimer45(T4_OFF & T4_GATE_OFF &
T4_PS_1_1 & T4_32BIT_MODE_ON &
T4_SOURCE_INT,0X00f3a980);
}
void LcdReset()
{
delay(30000);
LcdWriteCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
delay(30000);
LcdWriteCommand( 0x38, 0); // 共三次
delay(30000);
LcdWriteCommand( 0x38, 0);
delay(30000);
LcdWriteCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
LcdWriteCommand( 0x08, 1); // 显示关闭
LcdWriteCommand( 0x01, 1); // 显示清屏
LcdWriteCommand( 0x06, 1); // 显示光标移动设置
LcdWriteCommand( 0x0c, 1); // 显示开及光标设置;0X0F显示闪烁光标
}
//当前位置写字符子程序: E =1 RS=1 RW=0
void LcdWriteData(unsigned char dataW )
{
WaitForEnable(); /