标题:
单相逆变串口控制EG8010源码 显示屏输出25V,50hz,频率可调
[打印本页]
作者:
teleboy
时间:
2018-7-24 14:06
标题:
单相逆变串口控制EG8010源码 显示屏输出25V,50hz,频率可调
单相正弦逆变输出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)
2018-7-24 17:42 上传
点击文件名下载附件
单相正弦逆变输出25V 50Hz
下载积分: 黑币 -5
作者:
admin
时间:
2018-7-24 17:42
此贴需要补全原理图等资料后可获得大量积分
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1