找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2127|回复: 5
打印 上一主题 下一主题
收起左侧

单片机新人求助,将风扇的控制方式改成自动控制

[复制链接]
跳转到指定楼层
楼主
30黑币
将程序中风扇的控制方式改成自动控制,要有程序注解,附 件有电路图和源程序

电路原理图如下:


单片机源程序如下:
  1. #include "STC12C5A60S2.H"
  2. #include "STC12C5A60S2_EEPROM.c"
  3. #include <math.h>
  4. #include "LCD1602.H"
  5. #include"DS18b20.h"
  6. bit send_success=0;
  7. //----------定义排气扇开关
  8. sbit Fan=P1^6;
  9. uchar grade=0;
  10. bit star=0;
  11. uchar scale=41,n; //转速控制变量

  12. uchar cp=0;
  13. uint Time_50ms;                                   //50ms变量
  14. int TP_H;
  15. uchar page_flag=0;
  16. int temp=0,temp1=0,temp2=0;//温度
  17. bit Read_DHT_Dat=0;
  18. bit TP_H_flag=0;
  19. bit flag=0;

  20. uchar state=0;                            //转态切换变量
  21. bit memory_flag=0;                   //存储标志位

  22. //---------->定义指示灯IO口
  23. sbit Led1=P3^3;
  24. sbit Led2=P1^4;

  25. //---------->定义按键IO口
  26. sbit key_1=P1^0;
  27. sbit key_2=P1^1;
  28. sbit key_3=P3^2;

  29. bit key1_flag=0;
  30. bit key2_flag=0;
  31. bit key3_flag=0;
  32. //---------->定义长按按键变量            
  33. unsigned char sec=0,sec1=0;
  34. bit  s0=0;
  35. //----------> GSM相关变量
  36. bit fasong_flag_1=1;
  37. uchar phone[11]=  "15225939196";    //手机号数组
  38. //-----> Uart1 And GSM  Definition
  39. unsigned char xdata Uart1_Buff[50];  //串口1缓冲数组
  40. unsigned char Uart1_Count=0;     //串口1累加变量

  41. unsigned char Quest_flag=1;                //初始化标志位
  42. unsigned int  GSM_Send_Time=0;        //GSM延时变量
  43. unsigned char GSM_Num=0;          //发送指令变量
  44. unsigned char GSM_Send=0;          //发送标志位
  45. unsigned char GSM_Send_Num=0; //发送具体短信内容变量



  46. //------------> 额外
  47. unsigned char Timer_e=0;
  48. #define S2RI  0x01          //S2CON.0
  49. #define S2TI  0x02          //S2CON.1
  50. #define S2RB8 0x04          //S2CON.2
  51. #define S2TB8 0x08          //S2CON.3
  52. bit busy;

  53. bit A_M=1;



  54. void delay(uint T)                                          //延时函数
  55. {
  56.         while(T--);
  57. }
  58. //GSM相关函数begin
  59. void Uart1Data(unsigned char dat)  //发送一个字节
  60. {
  61.         SBUF=dat;
  62.         while(!TI);
  63.         TI=0;
  64. }
  65. void UartData_Byte(char *s) //发送一串数据
  66. {
  67.     while (*s != '\0')                 
  68.     {
  69.         Uart1Data(*s++);  
  70.     }
  71. }



  72. void Uart2Data(unsigned char dat)
  73. {  
  74.         while (busy)
  75.         {
  76.                 if (S2CON & S2TI)
  77.             {
  78.                 S2CON &= ~S2TI;     //Clear transmit interrupt flag
  79.                 busy = 0;           //Clear transmit busy flag
  80.             }
  81.         }
  82.         busy = 1;
  83.         S2BUF=dat;
  84. }

  85. void Uart2DataByte(unsigned char *byte)
  86. {
  87.         while(*byte != '\0')
  88.         {
  89.           Uart2Data(*byte++);       
  90.         }
  91. }
  92. void Uart2_Init(void)    //串口 2 波特率配制,使用独立波特率发生器
  93. {
  94.         AUXR &= 0xF7;                //波特率不倍速
  95.         S2CON = 0x50;                //8位数据,可变波特率
  96.         AUXR &= 0xFB;                //独立波特率发生器时钟为Fosc/12,即12T
  97.         BRT = 0xFD;                //设定独立波特率发生器重装值
  98.         AUXR |= 0x10;                //启动独立波特率发生器
  99.         IE2 |= 0x01;
  100. }


  101. void memory()     //存储数据函数
  102. {
  103.         unsigned char q=0;
  104.    if(memory_flag)
  105.     {       
  106.                 memory_flag=0;
  107.                 IapEraseSector(0x0400);
  108.                 IapProgramuchar(0x0400,TP_H);
  109.                 for(q=0;q<11;q++)
  110.            {
  111.                IapProgramuchar(0x0401+q,phone[q]);
  112.            }
  113.         }
  114. }
  115. void read_memory()  //读取数据函数
  116. {
  117.         unsigned char q=0;
  118.            TP_H=IapReaduchar(0x0400);
  119.     for(q=0;q<11;q++)
  120.     {
  121.         phone[q]=IapReaduchar(0x0401+q);
  122.     }
  123.         if(TP_H>99||TP_H<-50)
  124.          {
  125.            TP_H=25;
  126.            memory_flag=1;
  127.          }

  128. }
  129. void LCE_Display()
  130. {
  131.                 LCD1602_write(0,0x80);
  132.                 //显示温度
  133.                 LCD1602_writebyte("Temp:");
  134.                 if(temp>=0)
  135.                 {
  136.                         LCD1602_writebyte(" ");
  137.                         LCD1602_write(1,0x30+temp/100%10);
  138.                         LCD1602_write(1,0x30+temp/10%10);
  139.                         LCD1602_writebyte(".");
  140.                         LCD1602_write(1,0x30+temp%10);                                       
  141.                 }
  142.                 else
  143.                 {
  144.                         LCD1602_writebyte("-");       
  145.                         LCD1602_write(1,0x30+temp*-1/100%10);
  146.                         LCD1602_write(1,0x30+temp*-1/10%10);
  147.                         LCD1602_writebyte(".");
  148.                         LCD1602_write(1,0x30+temp*-1%10);
  149.                                
  150.                 }
  151.                 LCD1602_write(1,0xdf);
  152.                 LCD1602_writebyte("C");
  153.                 LCD1602_writebyte("     ");
  154. //                if(A_M==1)           LCD1602_writebyte("M ");
  155. //                else                   LCD1602_writebyte("A ");



  156.                 LCD1602_write(0,0xC0);
  157.                 LCD1602_writebyte("TH:");
  158.                 if(state==1&&s0) LCD1602_writebyte("   ");
  159.                 else
  160.                 {
  161.                         if(TP_H>=0)
  162.                         {
  163.                                 LCD1602_writebyte(" ");
  164.                                 LCD1602_write(1,0x30+TP_H/10%10);
  165.                                 LCD1602_write(1,0x30+TP_H%10);
  166.                         }       
  167.                         else
  168.                         {
  169.                                 LCD1602_writebyte("-");       
  170.                                 LCD1602_write(1,0x30+TP_H*-1/10%10);
  171.                                 LCD1602_write(1,0x30+TP_H*-1%10);
  172.                         }
  173.                                                                
  174.                 }
  175.                 LCD1602_write(1,0xdf);
  176.                 LCD1602_writebyte("C ");
  177.                 LCD1602_writebyte("fan:");
  178.                 LCD1602_write(1,0x30+grade);
  179.                 LCD1602_writebyte("   ");       
  180.                        
  181. }
  182. void Key_dispose()
  183. {
  184.         uchar i=1;
  185.    if(!key_1)
  186.     {
  187.                  if(key1_flag)
  188.                   {
  189.                     key1_flag=0;
  190.                         state=(state+1)%2;
  191.                         if(state==0)
  192.                          {
  193.                            LCD1602_write(0,0x01);
  194.                          }
  195.                   }
  196.         }
  197.         else
  198.          {
  199.            key1_flag=1;
  200.          }
  201.     if(!key_2)
  202.     {
  203.          if(key2_flag||sec==0)
  204.           {
  205.          key2_flag=0;
  206.                  if(state==1)
  207.                  {
  208.                     if(TP_H<99)TP_H++;
  209.                  }
  210.                  else
  211.                  {
  212.                          if(TP_H_flag)
  213.                         {
  214.                                 if(grade<3)
  215.                                 grade++;       
  216.                         }
  217.                  }
  218.           }       
  219.         }
  220.         else
  221.          {
  222.            if(key2_flag==0)
  223.             {
  224.                   key2_flag=1;
  225.                   memory_flag=1;
  226.                 }
  227.            sec=2;
  228.          }

  229.     if(!key_3)
  230.     {
  231.          if(key3_flag||sec1==0)
  232.           {
  233.                 key3_flag=0;
  234.                 if(state==1)
  235.                 {
  236.                         if(TP_H>(-50))TP_H--;
  237.                 }
  238.                 else
  239.                 {
  240.                         if(TP_H_flag)
  241.                         {
  242.                                 if(grade>1)
  243.                                 grade--;       
  244.                         }
  245.                 }
  246.           }         
  247.         }
  248.         else
  249.          {
  250.            if(key3_flag==0)
  251.             {
  252.                   key3_flag=1;
  253.                   memory_flag=1;
  254.                 }
  255.            sec1=2;
  256.          }
  257. }
  258. void police()                 //报警函数处理
  259. {
  260.         //当温度数据高于上限值时
  261.         if(temp>TP_H*10)
  262.         {
  263.                 TP_H_flag=1;       
  264.                 if(fasong_flag_1==1)
  265.                 {
  266.                         fasong_flag_1=0;
  267.                     GSM_Send_Num=1;
  268.                         GSM_Send=1;
  269.                         grade=1;

  270.                 }               
  271.         }                             
  272.         else
  273.         {
  274.                 Led2=1;       
  275.                 TP_H_flag=0;         
  276.                 fasong_flag_1=1;
  277.                 grade=0;
  278.         }

  279. }


  280. void GSM_Init2()
  281. {
  282.    unsigned char G_Tab[20];
  283.    if(Quest_flag==1) //开始查询GSM状态//此时还没有初始化完成,首先,先初始化 ,发AT,能够响应上,关回显,设置短信处理方式
  284.          {
  285.                 switch(GSM_Num)
  286.                 {
  287.                         case 0: UartData_Byte("AT\r\n");                  break; //AT
  288.                         case 1: UartData_Byte("ATE1\r\n");                break;//关回显
  289.                         case 2: UartData_Byte("AT+CNMI=3,2,2,0,1\r\n");  break;//设置
  290.                         case 3: UartData_Byte("AT+CMGF=1\r\n");          break; //配制
  291.                         case 4: UartData_Byte("AT+COPS?\r\n");            break; //查询网络
  292.                         case 5: Quest_flag=0;  GSM_Num=0;                       break; //初始化彻底结束
  293.            }
  294.            GSM_Send_Time=10;
  295.          }
  296.          else
  297.          {                                          
  298.              GSM_Send_Time=40;
  299.                  if(GSM_Send==1)  //发送短信标志
  300.                         {       
  301.                                 if(GSM_Send_Num==0)  //Num 是短信编号,就是发送哪条短信,这个是返回Set End 的
  302.                                  {                 
  303.                                                 switch(GSM_Num)
  304.                                                 {
  305.                                                         case 0: UartData_Byte("AT+CMGF=1\r\n");              break;
  306.                                                        
  307.                                                         case 1: UartData_Byte("AT+CMGS=\"");                                          
  308.                                                                 UartData_Byte(phone);         
  309.                                                                     UartData_Byte("\"\r\n");                      break; //AT+CMGS="13343851798"
  310.                                                        
  311.                                                         case 2: UartData_Byte("Set End");  GSM_Num=3;                break;
  312.                                                        
  313.                                                         case 3: G_Tab[0]=0x1a;
  314.                                                                 Uart1Data(G_Tab[0]);                         break;
  315.                                                                          
  316.                                                         case 4: GSM_Num=0;   GSM_Send=0;                  break;                                                                
  317.                                                 }                       
  318.                                  }

  319.                                  else if(GSM_Send_Num==1)
  320.                                  {
  321.                                                 switch(GSM_Num)
  322.                                                 {
  323.                                                         case 0: UartData_Byte("AT+CMGF=0\r\n");      break;  
  324.                                                        
  325.                                                         case 1: UartData_Byte("AT+CMGS=35\r\n");     break;   

  326.                                                         case 2: UartData_Byte("0011000D9168");
  327.                                         G_Tab[0]=phone[1];
  328.                                                                         G_Tab[1]=phone[0];
  329.                                                                         G_Tab[2]=phone[3];
  330.                                                                         G_Tab[3]=phone[2];
  331.                                                                         G_Tab[4]=phone[5];
  332.                                                                         G_Tab[5]=phone[4];
  333.                                                                         G_Tab[6]=phone[7];
  334.                                                                         G_Tab[7]=phone[6];
  335.                                                                         G_Tab[8]=phone[9];
  336.                                                                         G_Tab[9]=phone[8];
  337.                                                                         G_Tab[10]='F';
  338.                                                                             G_Tab[11]=phone[10];
  339.                                                                         UartData_Byte(G_Tab);
  340.                                                                 UartData_Byte("0008A914"); //末尾两位数是 发送的短信长度
  341.                                     UartData_Byte("5F53524D6E295EA68FC79AD8FF0C8BF76CE8610F");//当前温度过高,请注意
  342.                                     GSM_Num=3;
  343.                                                         break;  
  344.                                                        
  345.                                                         case 3: G_Tab[0]=0x1a;  
  346.                                                                  Uart1Data(G_Tab[0]);                  break;   
  347.                                                         case 4:
  348.                                                                     UartData_Byte("AT+CMGF=1\r\n");
  349.                                                                 delay(666);delay(666);
  350.                                                                 GSM_Send = 0;
  351.                                                                     GSM_Num=0;                                                                       
  352.                                                         break;                                                  
  353.                                                  }                                                
  354.                                         }
  355.                        
  356.                                 }
  357.                                 else GSM_Num=0;       
  358.         }
  359. }
  360. void Uart_send()
  361. {
  362.                 UartData_Byte("Now Temp:");
  363.                 Uart1Data(0x30+temp/100);
  364.                 Uart1Data(0x30+temp/10%10);
  365.                 UartData_Byte(".");
  366.                 Uart1Data(0x30+temp%10);
  367.                 UartData_Byte(0xdf);
  368.                 UartData_Byte("C \r\n");

  369.                 UartData_Byte("Temp Limit:");
  370.                 Uart1Data(0x30+TP_H/10);
  371.                 Uart1Data(0x30+TP_H%10);
  372.                 UartData_Byte(0xdf);
  373.                 UartData_Byte("C \r\n");
  374. }
  375. void timer0_init()
  376. {
  377.         TMOD =0x01;           //定时器0配置,方式2,256自动重装,定时器1配置成方式1,50ms 中断一次
  378.         TH0=0x4C;
  379.         TL0=0x00;
  380.     ET0= 1;                    //打开定时器1
  381.     TR0= 1;                        //定时1开始定时


  382.         TMOD=TMOD|0x20; //配置定时器0,工作在方式1,用作常规定时,定时器1用作波特率发生器
  383.         TH1=0xFD;           //装载波特率9600
  384.         TL1=0xFD;
  385.         SCON=0x50;
  386.         PCON=0;
  387.         ES=1;         //ES-串行中断允许控制位   ES = 1   允许串行中断。
  388.         TR1=1;        //启动定时器开始工作
  389.         EA=1;                  //打开总中断


  390. }
  391. bit Send_Debug=1;
  392. void Uart2_Debug()
  393. {
  394.         Uart2DataByte("\r\n当前绑定手机号:");
  395.         phone[11]='\0';
  396.         Uart2DataByte(phone);
  397.         Uart2DataByte("\r\n当前温度:");
  398.         Uart2Data(0x30+temp/100%10);
  399.         Uart2Data(0x30+temp/10%10);
  400.         Uart2Data('.');
  401.         Uart2Data(0x30+temp%10);       
  402.         Uart2DataByte("℃");
  403.         Uart2DataByte("\r\n风扇等级:");
  404.         Uart2Data(0x30+grade/10%10);
  405.         Uart2Data(0x30+grade%10);
  406.         Uart2DataByte("\r\n\r\n");

  407. }       



  408. void main(void)
  409. {
  410.         uchar temp_count=0;
  411.         timer0_init();        
  412.         PS=1;
  413.         LCD1602_cls();         
  414.         Uart2_Init();         
  415.         read_memory();
  416.         UartData_Byte(phone);
  417.         delay(100);
  418.         do
  419.         {
  420.                 temp=ready_18b20();
  421.         }
  422.         while(temp>=850);        
  423.     Led1=0;
  424.         while(1)
  425.     {       
  426.        
  427.                 if(Send_Debug==1)
  428.                  {
  429.                    Send_Debug=0;
  430.                    Uart2_Debug();
  431.                  }
  432.        
  433.        
  434.                 //读取温度
  435.                    if(page_flag==1)
  436.                 {
  437.                      
  438.                         if(Read_DHT_Dat)
  439.                          {
  440.                            Read_DHT_Dat=0;
  441.                            if(temp_count==0)
  442.                             {
  443.                                           temp2=ready_18b20();
  444.                                 }
  445.                                 else if(temp_count==1)
  446.                                  {
  447.                                            temp1=ready_18b20();
  448.                                  }
  449.                                  else if(temp_count==2)
  450.                                   {
  451.                                            if(temp2>temp1)
  452.                                                  {
  453.                                                          if(temp2-temp1<50&&temp1!=0)
  454.                                                          {
  455.                                                            temp=temp1;
  456.                                                          }
  457.                                                  }
  458.                                                  else
  459.                                                   {
  460.                                                      if(temp1-temp2<50&&temp2!=0)
  461.                                                          {
  462.                                                            temp=temp1;
  463.                                                          }
  464.                                                   }
  465.                                   }
  466.                            temp_count=(temp_count+1)%3;
  467.                          }
  468.                 }
  469.           if(GSM_Send_Time==0)
  470.                 {
  471.                   GSM_Init2();
  472.                 }
  473.         LCE_Display();        //显示数据
  474.                 if(flag)
  475.         police();                //报警处理
  476.                 memory();     //存储数据函数       
  477.                 switch(grade)
  478.                 {
  479.                         case 1:scale=25;break;
  480.                         case 2:scale=12;break;                       
  481.                         case 3:scale=0;break;
  482.                         case 0:scale=31;break;
  483.                 }
  484.         }
  485. }

  486. void Timer0() interrupt 1
  487. {
  488.         TH0=0xDC;
  489.         TL0=0x00;


  490.         n++;                        //每10ms  n++
  491.         if(n>=31)
  492.         {       
  493.                 n=0;
  494.         }                                
  495.         if(n<scale)                 //n<设置比例时,打开灯
  496.         {
  497.                 Fan=1;
  498.         }
  499.         else
  500.         if(n>=scale)//n大于等于设置比例时 关闭灯
  501.         {
  502.                 Fan=0;
  503.         }

  504.         Timer_e++;
  505.         if(Timer_e>=5)
  506.          {
  507.             Timer_e=0;
  508.                 Time_50ms++;
  509.                 if(GSM_Send_Time!=0) GSM_Send_Time--;
  510.             Key_dispose();
  511.                 if(Time_50ms%4==0)       
  512.                 {   
  513.                 s0=~s0;
  514.                         if(TP_H_flag) Led2=~Led2;                    //指示灯提示   //指示灯提示
  515.                 }
  516.                 if(Time_50ms%10==0)       
  517.                 {   
  518.                          Read_DHT_Dat=1;
  519.                         Send_Debug=1;
  520.                 }
  521.                 if(Time_50ms%20==0)
  522.                 {
  523.                    if(sec!=0)  sec--;
  524.                    if(sec1!=0) sec1--;
  525.                    flag=1;          
  526.                    if(page_flag<1) page_flag++;
  527.                    Time_50ms=0;                             
  528.                 }
  529.          }





  530. }
  531.   
  532. //---->Uart1
  533. void Uart1() interrupt 4
  534. {
  535.    uchar i=0;
  536.    if(RI)
  537.     {
  538.           RI=0;       
  539.           Uart1_Buff[Uart1_Count] = SBUF;
  540.           Uart1_Count=(Uart1_Count+1)%50;
  541.           Uart1_Buff[Uart1_Count]=0;

  542.            if(Quest_flag==1) //说明此时在初始化
  543.                 {
  544.                    if(GSM_Num==0||GSM_Num==1||GSM_Num==2||GSM_Num==3) //这里都是返回的  OK
  545.                          {
  546.                            if(Uart1_Count>=4&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='K'&&Uart1_Buff[Uart1_Count-4]=='O')
  547.                                  {
  548.                                    GSM_Num++;
  549.                                    GSM_Send_Time=10;
  550.                                  }
  551.                          }
  552.                          else if(GSM_Num==4) //+COPS: 0,0,"CHINA MOBILE"
  553.                          {
  554.                            if(Uart1_Count>=25&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='"'&&Uart1_Buff[Uart1_Count-4]=='E'&&Uart1_Buff[Uart1_Count-11]=='A')
  555.                                  {
  556.                                    GSM_Num++;
  557.                                    GSM_Send_Time=10;
  558.                                  }
  559.                          }
  560.                 }
  561.                 else
  562.                 {
  563.                    if(GSM_Num==0||GSM_Num==2||GSM_Num==3) //这里都是返回的  OK
  564.                          {
  565.                            if(Uart1_Count>=4&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='K'&&Uart1_Buff[Uart1_Count-4]=='O')
  566.                                  {
  567.                                             GSM_Num++;
  568.                                          GSM_Send_Time=10;
  569.                                  }
  570.                            if(Uart1_Count>=7&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='R'&&Uart1_Buff[Uart1_Count-7]=='E')
  571.                                  { //ERROR
  572.                                    if(GSM_Num==3)
  573.                                          {
  574.                                             GSM_Num=0;
  575.                                                  GSM_Send_Time=10;
  576.                                          }
  577.                                  }                         
  578.                          }
  579.                          else if(GSM_Num==1) //>
  580.                          {
  581.                            if(Uart1_Count>=1&&Uart1_Buff[Uart1_Count-1]=='>')
  582.                                  {
  583.                                      GSM_Num++;
  584.                                          GSM_Send_Time=10;
  585.                                  }
  586.                          }         
  587.                 }
  588.          
  589.          
  590.          
  591.           if(Uart1_Count>=2&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-1]=='\n') //接收到回车符
  592.                 {
  593.                          //PHONE SMS:12345678911
  594.                          
  595.                          if(Uart1_Count>=23&&Uart1_Buff[Uart1_Count-23]=='P'&&Uart1_Buff[Uart1_Count-19]=='E'&&Uart1_Buff[Uart1_Count-15]=='S'&&Uart1_Buff[Uart1_Count-14]==':')
  596.                           {
  597.                                 for(i=0;i<11;i++)                                           //保存到单片机中的手机号
  598.                                 {
  599.                                         phone[i]=Uart1_Buff[(Uart1_Count-13)+i];       
  600.                                 }
  601.                                     GSM_Send=1;  
  602.                                         GSM_Send_Num=0;
  603.                                         memory_flag=1;
  604.                           }
  605.                          

  606. //  GSM_Send =1;GSM_Send_Num=0;   
  607.                         else
  608.                         if( Uart1_Count>=7&&                         //调速fan:a/b/c
  609.                                 Uart1_Buff[Uart1_Count-7]=='f'&&
  610.                            Uart1_Buff[Uart1_Count-6]=='a'&&Uart1_Buff[Uart1_Count-5]=='n'&&Uart1_Buff[Uart1_Count-4]==':'&&TP_H_flag==1)                           
  611.                           {                
  612.                                   switch(Uart1_Buff[Uart1_Count-3])
  613.                                 {
  614.                                         case 'a': grade=1;GSM_Send =1;GSM_Send_Num=0;break;
  615.                                         case 'b': grade=2;GSM_Send =1;GSM_Send_Num=0;break;
  616.                                         case 'c': grade=3;GSM_Send =1;GSM_Send_Num=0;break;
  617.                                 }
  618.                           }       
  619.                                  
  620.                          Uart1_Count=0;

  621.                 }
  622.         }
  623. }


  624. unsigned char Uart2_Dat=0;
  625. void Uart_2(void) interrupt 8
  626. {
  627.         if (S2CON & S2RI)
  628.     {
  629.         S2CON &= ~S2RI;
  630.                 Uart2_Dat=S2BUF;
  631.                 switch(Uart2_Dat)
  632.                  {
  633.                            case '0':         if(TP_H_flag)  {grade=0;} break;
  634.                            case '1':         if(TP_H_flag)  {grade=1;} break;
  635.                            case '2':         if(TP_H_flag)  {grade=2;} break;
  636.                            case '3':        if(TP_H_flag)  {grade=3;}    break;

  637.                  }
  638.                  Uart2_Dat=0;
  639.                                    
  640.                  


  641.         }

  642.         if (S2CON & S2TI)
  643.     {
  644.         S2CON &= ~S2TI;     //Clear transmit interrupt flag
  645.         busy = 0;           //Clear transmit busy flag
  646.     }
  647. }
复制代码

原理图.pdf (80.19 KB, 下载次数: 12)
程序.docx (36.06 KB, 下载次数: 6)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2019-4-28 16:23 | 只看该作者
改就是了,没有说到需要别人做什么?
回复

使用道具 举报

板凳
ID:462745 发表于 2019-4-30 09:42 | 只看该作者
yzwzfyz 发表于 2019-4-28 16:23
改就是了,没有说到需要别人做什么?

风扇的控制方式是手动控制的  想改成自动控制
回复

使用道具 举报

地板
ID:280876 发表于 2019-4-30 10:59 | 只看该作者
你直接把风扇的控制逻辑关联到温度就行了
回复

使用道具 举报

5#
ID:462745 发表于 2019-5-7 10:38 | 只看该作者
wushiye54 发表于 2019-4-30 10:59
你直接把风扇的控制逻辑关联到温度就行了

萌新,根本不会弄
回复

使用道具 举报

6#
ID:481641 发表于 2019-5-13 16:27 | 只看该作者
可以用检测温度改成自动控制,从而影响占空比
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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