⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.c

📁 数控直流恒流源
💻 C
字号:
#include<reg51.h>
#include"Config.h"
#include"IOCfg.c"
#include"TimeDLY.h"
#include"Key.h"
#include"ADC.h"
#include"LCD.h"
#include"ISD1420.h"
#include"DAC.h"

#define DAC_REF 5.0


INT16U  Temp1=0;
FP32    Measure_Current=0;
INT8U   Enter_Flag=0;

FP32   DAC_Data=0;
INT16U Temp=0;  //存储设定值
INT16U ADC_Data=0;//ADC数字量

INT8U data1[]={0,0,0,0};//当前值显示数组
INT8U data2[]={0,0,0,0};//设定值显示数组
INT8U data3[]={0,0,0,0};//测量值显示数组

INT16U CurrentData[]={0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,0xa3b8,0xa3b9};

//0x00~0x09 对应数字0~~9, 0x0a对应"点",0x0b对应"毫安",0x0c对应"电流设定值"
INT8U Voice_data[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c};

void InitIO()
{
	DACDIN   = 0;
	DACSCLK  = 0;
	DACCS    = 0;
	ADCPWRD  = 0;
	ADCBUSY  = 1;
	ADCRC    = 0;
	ADCDATA  = 1;
	ADCSCLK  = 0;
	ADCSYN   = 1;
	ADCSBTC  = 0;
	ADCEXINT = 0;
	ZLG7289CS  = 1;
	ZLG7289CLK = 0;
	ZLG7289DIO = 1;
	ZLG7289INT = 1;
	LCDRW    = 0;
	LCDRS    = 0;
  	LCDRST   = 0;
  	LCDE     = 0;
  	LCDData  = 0x00;
  	PLAYL	 = 0;
  	A4     = 0;
  	A3     = 0;  
  	A2     = 0;
  	A1     = 0;
	}
	
void process(INT16U i,INT8U *p)
{
	p[0]=i/1000;
 	i=i%1000;
 	p[1]=i/100;
 	i=i%100;
 	p[2]=i/10;
 	i=i%10;
 	p[3]=i;
	}

	
//放音数组函数:Sound_Play_A()
void Sound_Play_A(INT8U *Data)
{
	INT8U i;
	Sound_Play(Voice_data[12]);
	LDelay(50);
	if(Data[0]>0)
	{for(i=0;i<4;i++) {Sound_Play(Voice_data[Data[i]]);}}
	else
	{
		if(Data[1]>0)
   		{for(i=1;i<4;i++) {Sound_Play(Voice_data[Data[i]]);}}
		else
      	{
			if(Data[2]>0)
     		{for(i=2;i<4;i++) {Sound_Play(Voice_data[Data[i]]);}}
			else
			{
				if(Data[3]>0)
       			{for(i=3;i<4;i++) {Sound_Play(Voice_data[Data[i]]);}}
				}
			}
		}
	LDelay(50);
	Sound_Play(Voice_data[11]);
	LDelay(100);
	}

void main()
{
	INT8U key;
	InitIO();
	PLAYL = 1;
	InitLCD();
	SetDAC_B(FASTSP,EXTERNAL,DAC_REF,DAC_Data);
	
	 //以下是电流源输出显示
	DispOneWord(0,2,0xb5e7);    //"电"
	DispOneWord(0,3,0xc1f7);    //"流"
	DispOneWord(0,4,0xd4b4);    //"源"
	 
 	DispOneWord(1,0,0xc9e8);    //"设"
 	DispOneWord(1,1,0xb6a8);    //"定"
 	DispOneWord(1,2,0xd6b5);    //"值"
 	DispTwoCharacter(1,6,0xa3ed,0xa3c1);//"mA"
 	    
	
 	DispOneWord(2,0,0xb5b1);    //"当"	
 	DispOneWord(2,1,0xc7b0);    //"前"
 	DispOneWord(2,2,0xd6b5);    //"值"
 	DispTwoCharacter(2,6,0xa3ed,0xa3c1);//"mA"
	  
    //以下是测量数值显示
 	DispOneWord(3,0,0xb2e2);    //"测"
 	DispOneWord(3,1,0xc1bf);    //"量"
 	DispOneWord(3,2,0xd6b5);    //"值"
 	DispTwoCharacter(3,6,0xa3ed,0xa3c1);//"mA"
 	
	while(1)
	{
		if(!ZLG7289INT)           //如果有按键按下
		{
			key=ZLG7289_ReadKey();   //取得按键数值
		 	switch(key)
			{
				case 1://复位
				   		{	DAC_Data=0;
				    		Temp=0;
								Temp1=0;
				    		break;}
			 	case 2://取消,删除
				   		{ Temp=Temp/10;
								break;}
			 	case 3://确认
						  { Temp1=Temp;
								DAC_Data=Temp1*0.0025;
				    		Temp=0;
								Enter_Flag=1;
						   	break;}
			 	case 4://UP
					   {	Temp1+=1;
					   	  DAC_Data=Temp1*0.0025;
				    		Temp=0;
								Enter_Flag=1;
								break;}
			 	case 5://DOWN
				   	 {	Temp1-=1;
					   	  DAC_Data=Temp1*0.0025;
				    		Temp=0;
								Enter_Flag=1;
								break;}
			 	case 6://0
			       {	Temp=Temp*10;
				   			break;}
			 	case 7://1
			       {	Temp=Temp*10+1;
				    		break;}
			 	case 8://2
			       {	Temp=Temp*10+2;
				    		break;}
				case 9://3
			       {	Temp=Temp*10+3;
				    		break;}
			 	case 10://4
			       {	Temp=Temp*10+4;
				    		break;}
		    case 11://5
			       {	Temp=Temp*10+5;
				    		break;}
			 	case 12://6
			       {	Temp=Temp*10+6;
				    		break;}
			 	case 13://7
			       {	Temp=Temp*10+7;
				    		break;}
			 	case 14://8
			       {	Temp=Temp*10+8;
				    		break;}
			 	case 15://9
			       {	Temp=Temp*10+9;
				    		break;}
			 	default:break;
			 	}
			while(!ZLG7289INT);
			}
		if(Temp>0)	process(Temp,data2);
		else        process(Temp1,data2);
		DispOneWord(0,2,0xb5e7);    //"电"
		DispOneWord(0,3,0xc1f7);    //"流"
		DispOneWord(0,4,0xd4b4);    //"源"
		DispOneWord(1,0,0xc9e8);    //"设"
 		DispOneWord(1,1,0xb6a8);    //"定"
 		DispOneWord(1,2,0xd6b5);    //"值"
 		DispTwoCharacter(1,4,CurrentData[data2[0]],CurrentData[data2[1]]);
 		DispTwoCharacter(1,5,CurrentData[data2[2]],CurrentData[data2[3]]);
 		DispTwoCharacter(1,6,0xa3ed,0xa3c1);//"mA"
 		
 		SetDAC_B(FASTSP,EXTERNAL,DAC_REF,DAC_Data);
 		process(Temp1,data1);
 		DispOneWord(2,0,0xb5b1);    //"当"	
 		DispOneWord(2,1,0xc7b0);    //"前"
 		DispOneWord(2,2,0xd6b5);    //"值"
 		DispTwoCharacter(2,4,CurrentData[data1[0]],CurrentData[data1[1]]);
 		DispTwoCharacter(2,5,CurrentData[data1[2]],CurrentData[data1[3]]);
 		DispTwoCharacter(2,6,0xa3ed,0xa3c1);//"mA"
 		
 		ADC_Data = nSample(EXDCLK_RDNOW,BTC);
 		Measure_Current = 0.15*ADC_Data;
 		process((INT16U)Measure_Current,data3);
 		DispOneWord(3,0,0xb2e2);    //"测"
 		DispOneWord(3,1,0xc1bf);    //"量"
 		DispOneWord(3,2,0xd6b5);    //"值"
 		DispTwoCharacter(3,4,CurrentData[data3[0]],CurrentData[data3[1]]);
 		DispTwoCharacter(3,5,CurrentData[data3[2]],CurrentData[data3[3]]);
 		DispTwoCharacter(3,6,0xa3ed,0xa3c1);//"mA"
 		
 		//语音播报
 		if(Enter_Flag==1)
 		{
 			Sound_Play_A(data1);
    		Enter_Flag=0;
 			}   
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -