单相正弦逆变输出25V 50Hz
单片机源程序如下:
- /**************************************************************/
- /*英特灵思科技技术支持
- */
- /****************************************************************/
- #include "stm32f10x.h"
- #include "pcb_config.h"
- #include "jlx.h"
- #include "bsp_usart1.h"
- /****************************************************************/
- static int freq = 0x7f; //频率初值
- int volat = 10; //电压初值
- int num = 0; //键值
- int volatflag=1,freqflag=1,times=0,flag=0;//标志位
- int buff[2]; //任意键值缓冲
- int start=1,close=1; //开关变量
- int sum=0; //任意键值的和
- int n=0,k=0; //任意键取值变量
- int Press_Second1=0,Press_Second2=0; //13键功能复用标志位
- int local=0; //输入数字位置排布
- u8 numstr[3]; //输入数字位置排布
- int freq1;
- /****************************************************************/
- int main(void)
- {
- unsigned char i,j;
- unsigned char u[17]={1,5,9,13, 2,6,10,14, 3,7,11,15, 4,8,12,16};
- /*********************初始化程序段******************************/
- System_Start();
- while (1)
- {
- i=Read_KeyValue();
- j = u[i-1];
- /************************键控程序段*****************************/
- switch(j)
- {
- case 1: //开机按键
- //SendforGet_Data();
- flag=1;num = 1;
- /********************测试显示程********************************/
- if(start==1)
- {
- clear_screen();
- display_GB2312_string(1,0, "电压");
- display_GB2312_string(1,65, "电流");
- display_GB2312_string(5,0, "频率");
- display_GB2312_string(5,65, "温度");
-
- display_GB2312_string(3,0, "25V" ) ;
- display_GB2312_string(7,0, "50Hz" );
-
- display_GB2312_string(3,65, "2A");
- display_GB2312_string(7,65 ,"27C" );
-
- start=0;
- close=1;
- local=1;
- }
-
- break;
-
- case 2: flag=1;num = 2;break;
- case 3: flag=1;num = 3; break;
- case 4: flag=1;num = 4; break;
- case 5: flag=1;num = 5; break;
- case 6: flag=1;num = 6; break;
- case 7: flag=1;num = 7; break;
- case 8: flag=1;num = 8; break;
- case 9: flag=1;num = 9; break;
- case 16: flag=1;num=0; break;
- case 10: //频率调节功能
- freqflag=1-freqflag; //取反标志位
- /**********************电压调节程序段********************************************/
- if(freqflag==0) //调压显示界面
- {
-
- clear_screen();
- display_GB2312_string(1,30, "调频模式");
- display_GB2312_string(5,30, "频率");
- sum=0;
- }
-
- if(freqflag==1)
- {
- clear_screen();
- display_GB2312_string(1,0, "电压");
- display_GB2312_string(1,65, "电流");
- display_GB2312_string(5,0, "频率");
- display_GB2312_string(5,65, "温度");
- display_GB2312_string(3,65, "2A");
- display_GB2312_string(7,65, "27C" );
- display_GB2312_string(3,0, "25V" ) ;
-
-
- Press_Second2=1;
- }
- break;
- case 11: //步进减频 不用立即显示
-
- if(freq<=0x33) freq=0x33;
- else if (freq>=0xff) freq==0xff; //freq=sum;
- //freq=sum;
- freq=freq-0x02;
-
- USART_SendData(USART1,0x84);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
-
- USART_SendData(USART1,freq);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET); //发送完成发送完成
-
- freq1=freq+0x01;
- freq1=freq/2.5;
-
- sprintf(numstr,"%dHz",freq1);
- display_GB2312_string(7,0, numstr);
-
- break;
- case 12: //步进增频
- if(freq<=0x33) freq=0x33;
- else if (freq>=0xff) freq=0xff; //freq=sum;
-
- freq=freq+0x02;
-
-
- USART_SendData(USART1,0x84);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
- USART_SendData(USART1,freq);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET); //发送完成发送完成
-
-
- freq1=freq-0x01;
- freq1=freq/2.5;
-
- sprintf(numstr,"%dHz",freq1);
- display_GB2312_string(7,0, numstr);
-
-
- break;
- case 13: //电压调节功能键
- volatflag=1-volatflag; //取反标志位
- /**********************电压调节程序段**************************/
- if(volatflag==0) //调压显示界面
- {
- clear_screen();
- display_GB2312_string(1,30, "调压模式");
- display_GB2312_string(5,30, "电压");
- sum=0;
- }
- if(volatflag==1)
- {
- clear_screen();
-
- display_GB2312_string(1,0, "电压");
- display_GB2312_string(1,65, "电流");
- display_GB2312_string(5,0, "频率");
- display_GB2312_string(5,65, "温度");
- display_GB2312_string(3,65, "2A");
- display_GB2312_string(7,65 ,"27C" );
- display_GB2312_string(7,0, "50Hz" );
-
- Press_Second1=1;
-
- }
- break;
- /***************************************************************/
- case 14: //步进减压
- //volat=sum;
- volat=volat+1;
- // if(volat==0xff) volat=0x01;
- // if(volat==0x00) volat=0xfb;
-
- USART_SendData(USART3,volat);
- while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET);
- // USART_SendData(USART1,volat);
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET); //发送完成
- //
- sprintf(numstr,"%dV",volat);
- display_GB2312_string(3,0, numstr);
- // Delay_us(20000);
- // SendforGet_Data();
- break;
- case 15: //步进增压
- //volat=sum;
- volat=volat-1;
- // if(volat==0xff) volat=0x01;
- // if(volat==0x00) volat=0xfb;
- USART_SendData(USART3,volat);
- while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET);
- // USART_SendData(USART1,0x83);
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
- // USART_SendData(USART1,volat);
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET); //发送完成
-
- sprintf(numstr,"%dV",volat);
- display_GB2312_string(3,0, numstr);
- // Delay_us(20000);
- // SendforGet_Data();
-
- break;
- } //switch结束
- /**************************************************************/
- if(flag==1)
- {
- buff[times++]=num;
- flag=0;
- }
- /***************************************************************/
- if(volatflag==0&&freqflag==1&&flag==0)
- {
- for(n=0;n<times;n++)
- {
- sum=sum*10+buff[n]*pow(10,(times-1-n));
- Delay_us(1000);
- if(local==1)
- {sum=0;local=0;}
- sprintf(numstr,"%dV",sum);
-
- display_GB2312_string(5,60, numstr);
- }
- times =0;
- }
- /**********************算法有误*********************************/
- if(freqflag==0&&volatflag==1&&flag==0)
- {
- for(n=0;n<times;n++)
- {
- sum=sum*10+buff[n]*pow(10,(times-1-n));
- Delay_us(1000);
- if(local==1)
- {sum=0;local=0;}
- sprintf(numstr,"%dHz",sum);
-
- display_GB2312_string(5,60, numstr);
- }
- times=0;
- }
- /**********************电压值转换成16进制************************/
- if(Press_Second1==1) //电压
- {
- sum =sum;
- volat=sum;
-
- // USART_SendData(USART1,0x83);
- //
- // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
- USART_SendData(USART3,volat);
-
- while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET); //发送完成
-
- Press_Second1=0;
- sprintf(numstr,"%dV",volat);
- display_GB2312_string(3,0, numstr);
- // Delay_us(20000);
- // SendforGet_Data();
- }
-
- if(Press_Second2==1) //频率
- {
- if(sum<20)
- {sum=20*2.5;}
-
- else if(sum>100)
- {
- sum=100*2.5;
- }
-
- else
- sum =sum*2.5;
-
- freq=sum/2.5;
- sum=sum+0x01;
- sprintf(numstr,"%dHz",freq);
- display_GB2312_string(7,0, numstr);
-
- USART_SendData(USART1,0x84);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
-
- USART_SendData(USART1,sum);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET); //发送完成
- freq=sum;
- // Delay_us(20000);
- // SendforGet_Data();
- Press_Second2=0;
-
- }
- }
- }
- /****************************************************************/
复制代码
所有资料51hei提供下载:
单相逆变串口控制EG8010+显示屏输出25V,50hz,频率可调.rar
(383.41 KB, 下载次数: 88)
|