[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;
- }
|