單相正弦逆變輸出25V 50Hz
單片機源程序如下:
- /**************************************************************/
- /*英特靈思科技技術(shù)支持
- */
- /****************************************************************/
- #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; //開關(guān)變量
- int sum=0; //任意鍵值的和
- int n=0,k=0; //任意鍵取值變量
- int Press_Second1=0,Press_Second2=0; //13鍵功能復用標志位
- int local=0; //輸入數(shù)字位置排布
- u8 numstr[3]; //輸入數(shù)字位置排布
- 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: //頻率調(diào)節(jié)功能
- freqflag=1-freqflag; //取反標志位
- /**********************電壓調(diào)節(jié)程序段********************************************/
- if(freqflag==0) //調(diào)壓顯示界面
- {
-
- clear_screen();
- display_GB2312_string(1,30, "調(diào)頻模式");
- 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); //發(fā)送完成發(fā)送完成
-
- 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); //發(fā)送完成發(fā)送完成
-
-
- freq1=freq-0x01;
- freq1=freq/2.5;
-
- sprintf(numstr,"%dHz",freq1);
- display_GB2312_string(7,0, numstr);
-
-
- break;
- case 13: //電壓調(diào)節(jié)功能鍵
- volatflag=1-volatflag; //取反標志位
- /**********************電壓調(diào)節(jié)程序段**************************/
- if(volatflag==0) //調(diào)壓顯示界面
- {
- clear_screen();
- display_GB2312_string(1,30, "調(diào)壓模式");
- 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); //發(fā)送完成
- //
- 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); //發(fā)送完成
-
- sprintf(numstr,"%dV",volat);
- display_GB2312_string(3,0, numstr);
- // Delay_us(20000);
- // SendforGet_Data();
-
- break;
- } //switch結(jié)束
- /**************************************************************/
- 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;
- }
- /**********************電壓值轉(zhuǎn)換成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); //發(fā)送完成
-
- 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); //發(fā)送完成
- freq=sum;
- // Delay_us(20000);
- // SendforGet_Data();
- Press_Second2=0;
-
- }
- }
- }
- /****************************************************************/
復制代碼
所有資料51hei提供下載:
單相逆變串口控制EG8010+顯示屏輸出25V,50hz,頻率可調(diào).rar
(383.41 KB, 下載次數(shù): 88)
2018-7-24 17:42 上傳
點擊文件名下載附件
單相正弦逆變輸出25V 50Hz 下載積分: 黑幣 -5
|