打印

从机可控硅控制,三路输出,一路采样,供参考

[复制链接]
382|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子学长|  楼主 | 2018-6-20 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[table][tr][td]
<div class="blockcode"><div id="code_A5G">

  • #include<stc.h>
  • #include<intrins.h>
  • #include <string.h>

  • //----------------------------------------------------------宏名替换---------------------------------
  • //----------------------------------------------------------宏名替换---------------------------------
  • //----------------------------------------------------------宏名替换---------------------------------
  • #define uchar unsigned char
  • #define uint unsigned int
  • #define ulong unsigned long
  • //---------------------------------------------------------IO口的位定义------------------------------
  • //---------------------------------------------------------IO口的位定义------------------------------
  • //---------------------------------------------------------IO口的位定义------------------------------
  • //---------------------------------------------------------IO口的位定义------------------------------
  • //---------------------------------------------------------IO口的位定义------------------------------

  • sbit one=P3^4;//风温
  • sbit two=P3^5;//座温
  • sbit three=P3^6;//水温

  • sbit zerocheck=P3^7;

  • sbit p26=P2^6;
  • sbit p35=P3^5;
  • //------------------------------------------------------------定义全局变量----------------------------
  • //------------------------------------------------------------定义全局变量----------------------------
  • //------------------------------------------------------------定义全局变量----------------------------
  • //------------------------------------------------------------定义全局变量----------------------------
  • //------------------------------------------------------------定义全局变量----------------------------
  • uchar         comdflag,
  •                 workflag_one,workflag_two,workflag_three,
  •                 one_num,two_num,three_num,
  •                 key,
  •                 up,down,
  • //                *p,
  •                 i,
  •                 uart_i,
  •                 up1,up2,up3,
  •                 down1,down2,down3;
  •                
  • ulong timer_flag=0;               

  • uchar comdof_host[9]={0};

  • //------------------------------------------------------子函数声明----------------------------------
  • //------------------------------------------------------子函数声明----------------------------------
  • //------------------------------------------------------子函数声明----------------------------------
  • //------------------------------------------------------子函数声明----------------------------------


  • void initio();
  • void uartinit();
  • void intinit();
  • void initflag();

  • //=====================================================主程序======================================
  • //=====================================================主程序======================================
  • //=====================================================主程序======================================
  • //=====================================================主程序======================================
  • //=====================================================主程序======================================



  • void main()
  • {
  •         initflag();  //                  初始化标志
  •          initio();         //                  初始化io口
  •         uartinit();         //                  初始化串口        
  •         intinit();         //                  初始化中断

  •         PS=1;                 //                  串口优先级最高




  •    while(1)
  •    {

  •            //====================================//急停开关==============================================
  •                  if(key==1)                 
  •                         {
  •         
  •                                 workflag_one=0;
  •                                 workflag_two=0;
  •                                 workflag_three=0;

  •                                 
  •                                 up=0;down=0;
  •                                    up1=0;up2=0;up3=0;
  •                                 down1=0;down2=0;down3=0;
  •                                 one=0;
  •                                 two=0;
  •                                 three=0;
  •                         
  •                         }

  •            
  •            //========================================//正常停止==========================================        

  •                 if(workflag_one==0 && zerocheck==0)  
  •                         {                                                        
  •                                 up1=0;
  •                                  down1=0;
  •                                  one=0;        
  •                                 
  •                         }
  •                 if(workflag_two==0 && zerocheck==0)  
  •                         {                                                        
  •                                 up2=0;
  •                                  down2=0;
  •                                  two=0;        
  •                                 
  •                         }
  •                 if(workflag_three==0 && zerocheck==0)  
  •                         {                                                        
  •                                 up3=0;
  •                                  down3=0;
  •                                  three=0;        
  •                                 
  •                         }        


  •         //====================================启动可控硅====================================////////////////////////////


  •                      
  •                    // ---------------------------------------------------------------------------风温
  •                    if(workflag_one==1 && key==0)        
  •                    {
  •                                    if(zerocheck==0 && up1==0)//正半周期
  •                                 {
  •                                   up1=1;
  •                                   down1=0;

  •                                 }
  •                                 if(zerocheck!=0 && down1==0)//负半周期
  •                                 {
  •                                   down1=1;
  •                                   up1=0;        
  •                                 
  •                                 }

  •                    }

  •                    //-----------------------------------------------------------------------------座温
  •                    if(workflag_two==1 && key==0)
  •                    {
  •                                 if(zerocheck==0 && up2==0)//正半周期
  •                                 {
  •                                   up2=1;
  •                                   down2=0;
  •                                 
  •                                 }
  •                                 if(zerocheck!=0 && down2==0)//负半周期
  •                                 {
  •                                    down2=1;
  •                                    up2=0;
  •                                 
  •                                 }
  •                         }


  •                    //-------------------------------------------------------------------------------水温
  •                         if(workflag_three==1 && key==0)
  •                    {
  •                                 if(zerocheck==0 && up3==0)//正半周期
  •                                 {
  •                                         up3=1;
  •                                         down3=0;
  •                                 
  •                                 }
  •                                 if(zerocheck!=0 && down3==0)//负半周期
  •                                 {
  •                                         down3=1;
  •                                         up3=0;
  •                                 
  •                                 }
  •                   
  •                    }
  •                    //-------------------------------------------------------------------------------


  •    }

  • }

  • //=====================================================中断入口程序======================================
  • //=====================================================中断入口程序======================================
  • //=====================================================中断入口程序======================================
  • //=====================================================中断入口程序======================================
  • //=====================================================中断入口程序======================================



  • //==========================================================================////外部中断 0
  • void TOUCH_int(void) interrupt 0                 
  • {

  •         comdflag=1;                                //外部中断0提示一个标志,说明有触摸屏操作

  • }



  • //==========================================================================////定时器0
  • void intserv1(void) interrupt 1                //50us
  • {
  • //====================
  • TH0=(65536-50)/256;
  • TL0=(65536-50)%256;
  • //====================


  • if(up1>0) up1++;
  • if(up2>0) up2++;
  • if(up3>0) up3++;

  • if(down1>0) down1++;
  • if(down2>0) down2++;           
  • if(down3>0) down3++;


  • if(up1>250) up1=0;
  • if(up2>250) up2=0;
  • if(up3>250) up3=0;

  • if(down1>250) down1=0;
  • if(down2>250) down2=0;
  • if(down3>250) down3=0;

  •         

  •          if(one_num<160 && workflag_one==1)
  •         {
  •                 if(one_num==0) {one=0;goto loop1;}
  •                 if(up1==160-one_num && zerocheck==0)                one=1;         if(up1>160-one_num)                one=0;
  •                 if(down1==190-one_num && zerocheck!=0)        one=1; if(down1>190-one_num)        one=0;
  •                                        
  •         }
  • loop1: ;

  •         if(two_num<160 && workflag_two==1)
  •         {
  •                 if(two_num==0) {two=0;goto loop2;}
  •                  if(up2==160-two_num && zerocheck==0)        two=1;         if(up2>160-two_num && zerocheck==0)        two=0;
  •                 if(down2==190-two_num && zerocheck!=0)        two=1;         if(down2>190-two_num && zerocheck!=0)        two=0;               
  •         }
  • loop2: ;

  •         if(three_num<160 && workflag_three==1)
  •         {
  •                 if(three_num==0) {three=0;goto loop3;}
  •                 if(up3==160-three_num && zerocheck==0)        three=1;         if(up3>160-three_num && zerocheck==0)        three=0;
  •                 if(down3==190-three_num && zerocheck!=0)three=1;         if(down3>190-three_num && zerocheck!=0)three=0;               
  •         }
  • loop3: ;



  • }



  • //==========================================================================//串口中断
  • //----数据帧格式----------9个字节
  • //-----------------------------------------------------------------------------------
  • //【0xc0】-----------------------------帧头
  • //【总开关】
  • //【开启风温】【风温档位】
  • //【开启座温】【座温档位】
  • //【开启水温】【水温档位】
  • //【0x0c】-----------------------------帧尾
  • //-----------------------------------------------------------------------------------
  • void UART_receive(void) interrupt 4         
  • {
  •             
  •          
  •                           if(RI==1)
  •                                   {  
  •                                  
  •                                          if(comdflag==1)         
  •                                         {                                                                                                
  •                                                 comdof_host[uart_i]=SBUF;
  •                                                 uart_i++;

  •                                                 if(uart_i==9 && comdof_host[0]==0xc0 && comdof_host[8]==0x0c )
  •                                                 {
  •                                                         key=comdof_host[1];

  •                                                         workflag_one=comdof_host[2];
  •                                                         one_num=comdof_host[3];

  •                                                         workflag_two=comdof_host[4];
  •                                                         two_num=comdof_host[5];

  •                                                         workflag_three=comdof_host[6];
  •                                                         three_num=comdof_host[7];

  •                                                         
  •                                                    
  •                                                         uart_i=0;                        
  •                                                         comdflag=0;
  •                                                         p26=!p26;
  •         
  •                                                 }
  •                                         }
  •                                                 
  •                                            RI=0;                                       
  •                                 }
  •                         else   
  •                                 TI=0;


  • }



  • //=====================================================子函数======================================




  • void initio()
  • {
  • P3M1=0x01;                  // 0000.0001                3.0输入
  • P3M0=0x72;                  // 0111.0010

  • P1M1=0x00;                  // 0000.0000                1.1  1.1  1.3  输出
  • P1M0=0x0e;                  // 0000.1110

  • P2M1=0x00;                  
  • P2M0=0x0f;
  • }
  • void uartinit()           //波特率115200
  • {


  •         SCON = 0x50;                //8位数据,可变波特率
  •         AUXR |= 0x04;                //定时器2时钟为Fosc,即1T
  •         T2L = 0xE6;                //设定定时初值
  •         T2H = 0xFF;                //设定定时初值
  •         AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
  •         AUXR |= 0x10;                //启动定时器2

  •         
  •         ES=1;                        //允许串口中断程序
  •         EA=1;                        //开总中断

  • }
  • void intinit()        //中断0 中断1 定时器0 开启
  • {
  •            IT0=1;

  •         EX0=1;


  •         TMOD|=0x01;
  •         ET0=1;
  •         TR0=1;
  •         TH0=(65536-50)/256;
  •         TL0=(65536-50)%256;
  •         EA=1;

  • }
  • void initflag()
  • {
  • //                p=comdof_host;

  •                 one=0;
  •                    two=0;
  •                    three=0;
  •                 comdflag=0;

  •                 workflag_one=0;
  •                 workflag_two=0;
  •                 workflag_three=0;
  •                 one_num=0;
  •                 two_num=0;
  •                 three_num=0;

  •                 key=1;
  •                 up=0;
  •                 down=0;
  •                
  •                
  •                 uart_i=0;
  •                 up1=0;
  •                 up2=0;
  •                 up3=0;
  •                 down1=0;
  •                 down2=0;
  •                 down3=0;

  • }

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

447

帖子

1

粉丝