找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3825|回复: 1
收起左侧

单相逆变串口控制EG8010源码 显示屏输出25V,50hz,频率可调

[复制链接]
ID:341701 发表于 2018-7-24 14:06 | 显示全部楼层 |阅读模式
单相正弦逆变输出25V 50Hz

单片机源程序如下:
  1. /**************************************************************/
  2. /*英特灵思科技技术支持
  3. */
  4. /****************************************************************/
  5. #include  "stm32f10x.h"
  6. #include  "pcb_config.h"
  7. #include  "jlx.h"
  8. #include "bsp_usart1.h"
  9. /****************************************************************/
  10. static int  freq = 0x7f;   //频率初值
  11. int  volat    = 10;   //电压初值
  12. int  num = 0;           //键值

  13. int  volatflag=1,freqflag=1,times=0,flag=0;//标志位
  14. int  buff[2];           //任意键值缓冲
  15. int  start=1,close=1;   //开关变量
  16. int  sum=0;             //任意键值的和
  17. int  n=0,k=0;           //任意键取值变量
  18. int  Press_Second1=0,Press_Second2=0; //13键功能复用标志位
  19. int  local=0;           //输入数字位置排布
  20. u8   numstr[3];         //输入数字位置排布

  21. int freq1;
  22. /****************************************************************/
  23. int main(void)
  24. {
  25.         unsigned char i,j;
  26.   unsigned char u[17]={1,5,9,13,    2,6,10,14,  3,7,11,15,    4,8,12,16};
  27. /*********************初始化程序段******************************/        
  28.         System_Start();
  29.         while (1)
  30.         {                        

  31.                   i=Read_KeyValue();
  32.                         j = u[i-1];
  33. /************************键控程序段*****************************/
  34.             switch(j)
  35.                   {         
  36.                   case 1:          //开机按键
  37.             //SendforGet_Data();        
  38.                                     flag=1;num = 1;
  39. /********************测试显示程********************************/
  40.                                                 if(start==1)
  41.                                                 {
  42.                                                   clear_screen();               
  43.                                             display_GB2312_string(1,0,  "电压");
  44.                     display_GB2312_string(1,65, "电流");
  45.                     display_GB2312_string(5,0,  "频率");
  46.                     display_GB2312_string(5,65, "温度");
  47.                                                         
  48.                                                         display_GB2312_string(3,0, "25V" ) ;               
  49.               display_GB2312_string(7,0, "50Hz" );
  50.                                                         
  51.                     display_GB2312_string(3,65, "2A");         
  52.               display_GB2312_string(7,65 ,"27C" );
  53.                                                         
  54.                                                   start=0;
  55.                                                   close=1;
  56.                                                         local=1;
  57.                                                 }
  58.                                        
  59.                                                    break;                 
  60.                                                 
  61.                 case 2:  flag=1;num = 2;break;                                         
  62.                 case 3:  flag=1;num = 3; break;
  63.                 case 4:  flag=1;num = 4; break;
  64.                 case 5:  flag=1;num = 5; break;
  65.                 case 6:  flag=1;num = 6; break;
  66.                 case 7:  flag=1;num = 7; break;
  67.                 case 8:  flag=1;num = 8; break;
  68.                 case 9:  flag=1;num = 9; break;        
  69.                 case 16: flag=1;num=0;   break;
  70.                 case 10:                       //频率调节功能
  71.                         freqflag=1-freqflag;   //取反标志位      
  72. /**********************电压调节程序段********************************************/
  73.                         if(freqflag==0)        //调压显示界面
  74.                                                 {  
  75.                            
  76.                                                         clear_screen();        
  77.                                                         display_GB2312_string(1,30, "调频模式");
  78.                                                         display_GB2312_string(5,30, "频率");
  79.               sum=0;                                                        
  80.                                                 }
  81.                                                 
  82.                                                 if(freqflag==1)
  83.                                                 {
  84.                                                         clear_screen();               
  85.                                             display_GB2312_string(1,0,  "电压");
  86.                     display_GB2312_string(1,65, "电流");
  87.                     display_GB2312_string(5,0,  "频率");
  88.                     display_GB2312_string(5,65, "温度");
  89.                                                         display_GB2312_string(3,65, "2A");         
  90.               display_GB2312_string(7,65, "27C" );
  91.                                                         display_GB2312_string(3,0,  "25V" ) ;               
  92.             
  93.                                                 
  94.                                                         Press_Second2=1;                                 
  95.                                                 }        
  96.                                           break;                                
  97.                 case 11:                             //步进减频 不用立即显示
  98.                         
  99.                            if(freq<=0x33) freq=0x33;
  100.                         else if (freq>=0xff) freq==0xff;                             //freq=sum;        
  101.                                                            //freq=sum;
  102.                               freq=freq-0x02;        
  103.                
  104.             USART_SendData(USART1,0x84);
  105.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        
  106.                
  107.                                                 USART_SendData(USART1,freq);
  108.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);         //发送完成发送完成
  109.                         
  110.                         freq1=freq+0x01;
  111.                         freq1=freq/2.5;
  112.                
  113.                                     sprintf(numstr,"%dHz",freq1);
  114.                               display_GB2312_string(7,0, numstr);
  115.                               
  116.                         break;                 
  117.                 case 12:                              //步进增频        
  118.             if(freq<=0x33) freq=0x33;
  119.                         else if (freq>=0xff) freq=0xff;                             //freq=sum;        
  120.                
  121.                                                 freq=freq+0x02;        
  122.                                        
  123.                
  124.                         USART_SendData(USART1,0x84);
  125.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        
  126.                                                 USART_SendData(USART1,freq);
  127.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        //发送完成发送完成
  128.                
  129.                
  130.                         freq1=freq-0x01;
  131.                               freq1=freq/2.5;
  132.                
  133.                                     sprintf(numstr,"%dHz",freq1);
  134.                               display_GB2312_string(7,0, numstr);
  135.                         
  136.                         

  137.                         break;                 
  138.                 case 13:                               //电压调节功能键
  139.                          volatflag=1-volatflag;        //取反标志位      
  140. /**********************电压调节程序段**************************/
  141.                         if(volatflag==0)               //调压显示界面
  142.                                                 {  
  143.                            clear_screen();        
  144.                                                         display_GB2312_string(1,30, "调压模式");
  145.                                                         display_GB2312_string(5,30, "电压");
  146.                                                         sum=0;
  147.                                                 }
  148.                                                 if(volatflag==1)
  149.                                                 {
  150.                                                   clear_screen();
  151.                                                         
  152.                                                         display_GB2312_string(1,0,  "电压");
  153.                     display_GB2312_string(1,65, "电流");
  154.                     display_GB2312_string(5,0,  "频率");
  155.                     display_GB2312_string(5,65, "温度");
  156.                                                         display_GB2312_string(3,65, "2A");         
  157.               display_GB2312_string(7,65 ,"27C" );
  158.                                                         display_GB2312_string(7,0,  "50Hz" );
  159.                                                 
  160.                                                         Press_Second1=1;
  161.                                                 
  162.                                                 }        
  163.                                           break;
  164. /***************************************************************/                 
  165.                 case 14:                              //步进减压
  166.                                                             //volat=sum;
  167.                             volat=volat+1;        
  168. //                                          if(volat==0xff) volat=0x01;
  169. //                                                if(volat==0x00) volat=0xfb;
  170.                
  171.                                   USART_SendData(USART3,volat);
  172.                                   while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET);         
  173. //                                          USART_SendData(USART1,volat);
  174. //                                          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        //发送完成
  175. //               
  176.                         sprintf(numstr,"%dV",volat);
  177.                               display_GB2312_string(3,0, numstr);
  178. //            Delay_us(20000);
  179. //            SendforGet_Data();               
  180.                         break;                 
  181.                 case 15:                                                             //步进增压
  182.                                                                                            //volat=sum;
  183.                                                 volat=volat-1;
  184. //                                        if(volat==0xff)  volat=0x01;
  185. //                                        if(volat==0x00)  volat=0xfb;
  186.                          USART_SendData(USART3,volat);
  187.                                      while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET);         
  188. //                  USART_SendData(USART1,0x83);
  189. //                  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);         
  190. //                  USART_SendData(USART1,volat);
  191. //                  while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        //发送完成
  192.                                     
  193.                         sprintf(numstr,"%dV",volat);
  194.                               display_GB2312_string(3,0, numstr);
  195. //                        Delay_us(20000);
  196. //                         SendforGet_Data();
  197.                
  198.                         break;                                         
  199. } //switch结束                        
  200. /**************************************************************/
  201.                         if(flag==1)
  202.                         {
  203.                                 buff[times++]=num;                                                               
  204.                                 flag=0;
  205.                   }
  206. /***************************************************************/        
  207.                 if(volatflag==0&&freqflag==1&&flag==0)
  208.                 {
  209.                         for(n=0;n<times;n++)
  210.                         {   
  211.                                 sum=sum*10+buff[n]*pow(10,(times-1-n));
  212.                                 Delay_us(1000);
  213.                                 if(local==1)
  214.                                 {sum=0;local=0;}
  215.                                 sprintf(numstr,"%dV",sum);
  216.                                 
  217.                                 display_GB2312_string(5,60, numstr);
  218.                         }
  219.                           times =0;
  220.                 }
  221. /**********************算法有误*********************************/
  222.                 if(freqflag==0&&volatflag==1&&flag==0)
  223.                 {
  224.                         for(n=0;n<times;n++)
  225.                         {   
  226.                                 sum=sum*10+buff[n]*pow(10,(times-1-n));
  227.                                 Delay_us(1000);
  228.                                 if(local==1)
  229.                                 {sum=0;local=0;}
  230.                                 sprintf(numstr,"%dHz",sum);
  231.                                 
  232.                           display_GB2312_string(5,60, numstr);
  233.                         }
  234.                           times=0;
  235.                 }
  236. /**********************电压值转换成16进制************************/
  237.                 if(Press_Second1==1)           //电压
  238.                 {
  239.                         sum =sum;        
  240.                         volat=sum;
  241.                         
  242. //                        USART_SendData(USART1,0x83);
  243. //                        
  244. //                        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
  245.                         USART_SendData(USART3,volat);
  246.                         
  247.                         while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==Bit_RESET);        //发送完成
  248.                         
  249.                         Press_Second1=0;        
  250.                         sprintf(numstr,"%dV",volat);
  251.                         display_GB2312_string(3,0, numstr);
  252. //                        Delay_us(20000);
  253. //                  SendforGet_Data();        
  254.                 }
  255.                
  256.                 if(Press_Second2==1)                                            //频率
  257.                 {        
  258.                         if(sum<20)
  259.                         {sum=20*2.5;}
  260.                         
  261.                         else if(sum>100)
  262.                         {
  263.                         sum=100*2.5;
  264.                         }
  265.                         
  266.                         else
  267.                         sum =sum*2.5;
  268.                         
  269.                         freq=sum/2.5;
  270.                         sum=sum+0x01;
  271.                   sprintf(numstr,"%dHz",freq);
  272.                         display_GB2312_string(7,0, numstr);
  273.                                                 
  274.                         USART_SendData(USART1,0x84);               
  275.                         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
  276.                         
  277.                         USART_SendData(USART1,sum);
  278.                         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);        //发送完成        
  279.                         freq=sum;
  280. //    Delay_us(20000);
  281. //                SendforGet_Data();        
  282.                         Press_Second2=0;
  283.                         
  284.                 }
  285.         }
  286. }
  287. /****************************************************************/
复制代码

所有资料51hei提供下载:
单相逆变串口控制EG8010+显示屏输出25V,50hz,频率可调.rar (383.41 KB, 下载次数: 81)
回复

使用道具 举报

ID:1 发表于 2018-7-24 17:42 | 显示全部楼层
此贴需要补全原理图等资料后可获得大量积分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表