找回密码
 立即注册

QQ登录

只需一步,快速开始

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

汽车空调控制器单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:291613 发表于 2018-3-14 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
汽车空调程序

单片机源程序如下:
  1. //
  2. #include "gw801.h"
  3. void interrupt timer1(void)//中断服务程序
  4. {
  5.         if(TMR1IF)//timer
  6.          {
  7.                 wdcheck=wdcheck|0x80;
  8.                 TMR1IF=0;       
  9.                 TMR1H=0xf6;
  10.                 TMR1L=0x3b;
  11.                 T1CON=T1CON|0x30;
  12.                
  13.                 kbit=1;
  14.         //        LED_RDEF=!LED_RDEF;
  15.                
  16.                 if(tmr_delay>0)                tmr_delay--;
  17.                 if(tmr_ccpr>0)                tmr_ccpr--;
  18.                
  19.                 if(tempdtmr>0)                tempdtmr--;
  20.                 if(tempsttmr>0)                tempsttmr--;
  21.                 if(modedtmr>0)                modedtmr--;
  22.                 if(modesttmr>0)                modesttmr--;
  23.                 if(intakesttmr>0)        intakesttmr--;
  24.                 if(mem_tmr>0)                mem_tmr--;
  25.                 if(tmr_test>0)                tmr_test--;
  26.                
  27.                 if(((amb<30)||(amb>1000))&&(tmr_amb_error<1000)) tmr_amb_error++;                       
  28.                 else if(((amb>30)&&(amb<1000))&&(tmr_amb_error>0)) tmr_amb_error--;
  29.                
  30.                 if(((incar<30)||(incar>1000))&&(tmr_incar_error<1000)) tmr_incar_error++;                       
  31.                 else if(((incar>30)&&(incar<1000))&&(tmr_incar_error>0)) tmr_incar_error--;
  32.                
  33.                 if(((evap<30)||(evap>1000))&&(tmr_evap_error<1000)) tmr_evap_error++;                       
  34.                 else if(((evap>30)&&(evap<1000))&&(tmr_evap_error>0)) tmr_evap_error--;
  35.                
  36.                 if(((tempfb<5)||(tempfb>250))&&(tmr_temp_error<1000)) tmr_temp_error++;                       
  37.                 else if(((tempfb>5)&&(tempfb<250))&&(tmr_temp_error>0)) tmr_temp_error--;
  38.                        
  39.                 if(((modefb<5)||(modefb>250))&&(tmr_mode_error<1000)) tmr_mode_error++;                       
  40.                 else if(((modefb>5)&&(modefb<250))&&(tmr_mode_error>0)) tmr_mode_error--;
  41.                
  42.                 if(tmr_system>0) tmr_system--;
  43.                 else
  44.                 {
  45.                         tmr_system=500;
  46.                         adj|=0x3f;
  47.                 }
  48.                
  49.                 if(sensor_adtimer!=0) sensor_adtimer--;
  50.                 else
  51.                 {
  52.                         sensor_adtimer=50;
  53.                     adj|=0x20;
  54.                 }
  55.          }
  56. }
  57. //==========================
  58. void port_init(void)
  59. {
  60.         __CONFIG(0x0f7c);
  61.         __CONFIG(0xcaff);
  62.         OSCCON=0x73;        //IRCF2-0:101=2M 110=4M  111=8M  SCS=1 由内部时钟作为震荡器
  63.         LCDREF=0x00;
  64.         T0CS=0;
  65.         CM1CON0=0X00;        //关闭比较寄存器
  66.         CM2CON0=0X00;        //关闭比较寄存器       
  67.         WDTCON=0x12;        //1024分平  2*10/2*5=2*5=32ms
  68.         PSA=0;                        //将欲分频 分配给定时器0
  69.         SWDTEN=1;                //启动WDT        ???
  70.        
  71.         TRISA=0xb3;
  72.         PORTA=0x4c;
  73.         TRISB=0xfe;
  74.         PORTB=0x01;
  75.         TRISC=0xbb;
  76.         PORTC=0x00;
  77.         TRISD=0x00;
  78.         PORTD=0xfe;
  79.         TRISE=0x00;
  80.         PORTE=0x03;
  81.         TRISF=0xe2;
  82.         PORTF=0xed;
  83.         TRISG=0xf0;
  84.         PORTG=0x00;
  85. }
  86. //==========================
  87. void pwm_init(void)
  88. {
  89.         CCPTMRS0=0x3c; //ccp1:tmr2,ccp3:tmr2
  90.         CCPTMRS1=0x03; //ccp1:tmr2,ccp3:tmr2
  91.        
  92.         PR2=0x80;//====PWM周期:2M/64=31.25K
  93.         CCPR1L=126;
  94.         blowernow=126;
  95.         blowertg=126;
  96.        
  97.         CCPR4L=10;
  98.                
  99.         T2CON=0x6;//T2 ON ,PRESCALE 16,POSTSCALE 1
  100.         CCP1CON=0x0f;//设定CCP1为pwm mode
  101.         CCP4CON=0x0f;//设定CCP3为pwm mode
  102.         CCP2CON=0x05;//设定CCP3为capture mode
  103.         TMR2IE=0;//定时器2中断:不允许

  104. }
  105. //==========================
  106. void ad_init(void)
  107. {        //由ADCON1.ADCS2和ADCON0.ADCS0,ADCON0.ADCS1确定分频=FOSC/16
  108.         ANSELA=0x03;                //配置模拟输入口
  109.         ANSELE=0x00;
  110.         ANSELF=0xe2;                //配置模拟输入口
  111.         ANSELG=0x10;                //配置模拟输入口
  112.         ADCON0=0x01;                 //ADFM=1(right),Vref-=Vss,Vref+=Vdd,GO/DOWN=0,ADON=0
  113.         ADCON1=0xa0;       
  114. }
  115. //==========================
  116. void int_init(void)
  117. {
  118.         INTCON=0x0;                        //全局中断、外部设备禁止
  119.         TMR1H=0xf6;
  120.         TMR1L=0x3b;
  121.         T1CON=0x10;
  122.         TMR1IF=0;                        //清TMR1溢出标志
  123.         TMR1IE=1;                        //允许TMR1中断
  124.         TMR1ON=1;                        //star TMR1
  125.         CCP1IE=0;                        //不允许捕获 比较
  126.         PEIE=1;                                //允许外设中断
  127.         GIE=1;                                //全局中断、外部设备允许
  128. }
  129. //===================================
  130. void comm_init (void)
  131. {
  132.         TRISC7=1;
  133.         TRISC6=0;
  134.        
  135.         TX1STA=0x20;
  136.         SP1BRGL=0x33;//2400bpr
  137.         RC1STA=0x90;

  138.         RCIE=0;//接收中断允许
  139.        
  140.         PEIE=1;//
  141.         GIE=1;        //
  142.        
  143. }
  144. //==========================
  145. void ad_sample(void)
  146. {
  147.         switch(channel)
  148.         {
  149.                 case 0:
  150.                          ADCON0=0x01;//channel=0
  151.                          nop();
  152.                          nop();
  153.                          nop();
  154.                          nop();
  155.                         GO_nDONE=1;
  156.                          while(GO_nDONE) continue;
  157.                          amb=((ADRESH*256)+ADRESL)&0x03ff;
  158.                          channel=1;
  159.                          break;
  160.                         
  161.                 case 1:
  162.                          ADCON0=0x05;//channel=1
  163.                          nop();
  164.                          nop();
  165.                          nop();
  166.                          nop();
  167.                         GO_nDONE=1;
  168.                          while(GO_nDONE) continue;
  169.                          modefb=(((ADRESH*256)+ADRESL)&0x03ff)>>2;
  170.                          channel=2;
  171.                          break;
  172.                  
  173.                 case 2:
  174.                          ADCON0=0x15;//channel=5
  175.                          nop();
  176.                          nop();
  177.                          nop();
  178.                          nop();
  179.                         GO_nDONE=1;
  180.                          while(GO_nDONE) continue;
  181.                          incar=(((ADRESH*256)+ADRESL)&0x03ff);
  182.                          channel=3;
  183.                          break;
  184.                         
  185.                  case 3:
  186.                          ADCON0=0x19;//channel=6
  187.                          nop();
  188.                          nop();
  189.                          nop();
  190.                          nop();
  191.                         GO_nDONE=1;
  192.                          while(GO_nDONE) continue;
  193.                          ig=((((ADRESH*256)+ADRESL)&0x03ff));
  194.                          channel=4;
  195.                          break;
  196.                                 
  197.                  case 4:
  198.                          ADCON0=0x29;//channel=10
  199.                          nop();
  200.                          nop();
  201.                          nop();
  202.                          nop();
  203.                         GO_nDONE=1;
  204.                          while(GO_nDONE) continue;
  205.                          blowerfb=((ADRESH*256)+ADRESL)&0x03ff;
  206.                          channel=5;
  207.                          break;
  208.                         
  209.                  case 5:
  210.                          ADCON0=0x2d;//channel=11
  211.                          nop();
  212.                          nop();
  213.                          nop();
  214.                          nop();
  215.                         GO_nDONE=1;
  216.                          while(GO_nDONE) continue;
  217.                          evap=((ADRESH*256)+ADRESL)&0x03ff;
  218.                          channel=6;
  219.                          break;
  220.                                 
  221.                  case 6:
  222.                          ADCON0=0x31;//channel=12
  223.                          nop();
  224.                          nop();
  225.                          nop();
  226.                          nop();
  227.                         GO_nDONE=1;
  228.                          while(GO_nDONE) continue;
  229.                          tempfb=(((ADRESH*256)+ADRESL)&0x03ff)>>2;
  230.                          channel=0;
  231.                          break;       
  232.                                                          
  233.                 default:
  234.                         channel=0;
  235.                         break;
  236.          }

  237. }

  238. //==========================
  239. void tavgw_CONVERT(void)
  240. {
  241.         signed char dif;
  242.         signed int i;
  243.        
  244.         i=tavg_wstable-tavg;
  245.        
  246.         if(i>40)
  247.                 dif=tavgw_table[80];
  248.         else if(i<-40)
  249.                 dif=tavgw_table[0];
  250.         else                       
  251.         dif=tavgw_table[i+40];
  252.        
  253.         tavg_w=tavg_wstable+dif;                                       
  254. }
  255. //==========================
  256. void tavg_CONVERT(void)
  257. {
  258.         signed char i;
  259.        
  260.         if(tamb>30) i=-1;
  261.         else if(tamb>20) i=-1;
  262.         else if(tamb>10) i=-1;
  263.         else if(tamb>-0) i=-2;
  264.         else if(tamb>-10) i=-3;
  265.         else if(tamb>-20) i=-3;
  266.         else i=-3;
  267.                        
  268.         tavg=(tinc+i)*2;       
  269. }
  270. //==========================
  271. signed int evapSENSOR_CONVERT(unsigned int vol)
  272. {
  273.         unsigned int i;       
  274.         signed int thermo;
  275.        
  276.         if(vol>910) thermo=-30;
  277.         else if(vol<229) thermo=60;
  278.         else
  279.         {
  280.                 i=90;
  281.                 do
  282.                 {        
  283.                         i--;
  284.                 }        while(vol>=evapsensor_table[i]);
  285.                 thermo=i-30;       
  286.         }
  287.         return thermo;       
  288. }
  289. //==========================
  290. signed int ambSENSOR_CONVERT(unsigned int vol)
  291. {
  292.         unsigned int i;       
  293.         signed int thermo;
  294.        
  295.         if(vol>958) thermo=-30;
  296.         else if(vol<252) thermo=60;
  297.         else
  298.         {
  299.                 i=90;
  300.                 do
  301.                 {        
  302.                         i--;
  303.                 }        while(vol>=ambsensor_table[i]);
  304.                 thermo=i-30;       
  305.         }
  306.         return thermo;       
  307. }
  308. //==========================
  309. signed int incarSENSOR_CONVERT(unsigned int vol)
  310. {
  311.         unsigned int i;       
  312.         signed int thermo;
  313.        
  314.         if(vol>956) thermo=-30;
  315.         else if(vol<254) thermo=60;
  316.         else
  317.         {
  318.                 i=90;
  319.                 do
  320.                 {        
  321.                         i--;
  322.                 }        while(vol>=incarsensor_table[i]);
  323.                 thermo=i-30;       
  324.         }
  325.         return thermo;       
  326. }
  327. //==========================
  328. signed int tout_CONVERT(signed int vol1,unsigned char vol2,signed int vol3)//tout(tamb,tidef_effect,tavg_w)
  329. {
  330.         signed int thermo;
  331.         signed long int k;
  332.         signed long int b;
  333.        
  334.         k=((vol1*7)/10)+190;
  335.         b=-(95*vol1)-850;

  336.         thermo=(signed long int)(k*(vol3-vol2)+(b*2))/20;
  337.         return thermo;
  338. }
  339. //==========================
  340. void sensor_init(void)
  341. {
  342.         unsigned char i;
  343.        
  344.         for(i=0;i<4;i++)
  345.         {amb_table[i]=amb;}
  346.         tamb=ambSENSOR_CONVERT(amb);
  347.        
  348.         for(i=0;i<4;i++)
  349.         {incar_table[i]=incar;}
  350.         tinc=incarSENSOR_CONVERT(incar);
  351.        
  352.         for(i=0;i<4;i++)
  353.         {evap_table[i]=evap;}
  354.         tevap=evapSENSOR_CONVERT(evap);
  355.        
  356.         tavg_CONVERT();
  357.         tavg_wstable=tset*2;
  358.         tavgw_CONVERT();
  359.         tout=tout_CONVERT(tamb,tidef_effect,tavg_w);
  360.        
  361.         spi_data|=SENSOR_ON;
  362.        
  363.         adj|=0x3f;

  364. }
  365. //================================
  366. void error_test(void)
  367. {       
  368.         if(tmr_incar_error>500) {tinc=20;error_mode|=0x01;}
  369.         else error_mode&=0xfe;
  370.        
  371.         if(tmr_amb_error>500) {tamb=20;error_mode|=0x02;}
  372.         else error_mode&=0xfd;
  373.        
  374.         if(tmr_evap_error>500) {tevap=-2;error_mode|=0x04;}
  375.         else error_mode&=0xfd;
  376.        
  377.         if(tmr_mode_error>500)error_mode|=0x08;
  378.         else error_mode&=0xfb;
  379.        
  380.         if(tmr_temp_error>500)error_mode|=0x10;
  381.         else error_mode&=0xf7;
  382.        
  383. }
  384. //================================
  385. void sensor_process(void)
  386. {
  387.         unsigned char i=0;
  388.         signed int sum;
  389.        
  390.         spi_data|=SENSOR_ON;

  391.         if(adj&0x20)
  392.         {       
  393.                 for(i=0;i<3;i++)                                                //amb
  394.                 {amb_table[i]=amb_table[i+1];}
  395.                 amb_table[3]=amb;
  396.                 sum=0;
  397.                 for(i=0;i<4;i++)
  398.                 {sum=sum+amb_table[i];}
  399.                 sum=sum/4;
  400.                 tamb=ambSENSOR_CONVERT(sum);
  401.                
  402.                 for(i=0;i<3;i++)                                                //incar
  403.                 {evap_table[i]=evap_table[i+1];}
  404.                 evap_table[3]=evap;
  405.                 sum=0;
  406.                 for(i=0;i<4;i++)
  407.                 {sum=sum+evap_table[i];}
  408.                 sum=sum/4;
  409.                 tevap=evapSENSOR_CONVERT(sum);
  410.        
  411.                 for(i=0;i<3;i++)                                                //incar
  412.                 {incar_table[i]=incar_table[i+1];}
  413.                 incar_table[3]=incar;
  414.                 sum=0;
  415.                 for(i=0;i<4;i++)
  416.                 {sum=sum+incar_table[i];}
  417.                 sum=sum/4;
  418.                 tinc=incarSENSOR_CONVERT(sum);
  419.                
  420.                 error_test();
  421.                
  422.                 tavg_CONVERT();
  423.                 tavg_wstable=tset*2;
  424.                 tavgw_CONVERT();
  425.                 tout=tout_CONVERT(tamb,tidef_effect,tavg_w);
  426.                
  427.                 adj&=0xdf;
  428.         }
  429. }
  430. //==========================
  431. unsigned int LOOP_LS166(void)
  432. {
  433.         unsigned char jjj;
  434.         jjj=0xff;  
  435.        
  436.         if(KEY_OFF==0) jjj&=KOFF;
  437.         if(KEY_AUTO==0) jjj&=KAUTO;
  438.         if(KEY_REC==0) jjj&=KREC;
  439.         if(KEY_AC==0) jjj&=KAC;
  440.         if(KEY_DEF==0) jjj&=KDEF;
  441.        
  442.         return jjj;     
  443. }
  444. //====================================================
  445. void key_scan(void)
  446. {

  447.         keynew=LOOP_LS166();
  448.         if(kbit>0)
  449.            {   
  450.             if(keynew!=0xff)  
  451.              {
  452.                       if(keyold==keynew)
  453.                       {
  454.                                keyyear++;
  455.                         if(!response)
  456.                         {       
  457.                                 if(keynew==KTEST)
  458.                                 {       
  459.                                                 if(keyyear>=KEY_TIMELONG)
  460.                                             {
  461.                                                     keyyear=0;
  462.                                                     response=1;
  463.                                                     keycom=keyold;
  464.                                             }
  465.                                         }
  466.                                         else if(keyyear>=KEY_TIME)
  467.                                     {
  468.                                             keyyear=0;
  469.                                             response=1;
  470.                                             keycom=keyold;
  471.                                     }
  472.                                 }                                                                                                 
  473.                            else
  474.                                {                                
  475.                               keyyear=0;                                                                                       
  476.                               keycom=0xff;
  477.                       }
  478.                                               
  479.                      }   
  480.                         else
  481.                     {
  482.                              response=0;
  483.                              keyold=keynew;
  484.                              keyyear=0;
  485.                     }
  486.                    }
  487.                 else
  488.             {                   
  489.                      keyold=keynew;
  490.                      response=0;
  491.                      keyyear=0;                                              
  492.             }
  493.         kbit=0;
  494.         }

  495. }
  496. //==========================
  497. void key_process (void)
  498. {       
  499.         if(keycom!=0xff)
  500.         {
  501.                 mem_tmr=20;
  502.                 memflag=1;
  503.                 adj|=0x3f;
  504.                
  505.                 if(test_mode)
  506.                 {
  507.                         switch(keycom)
  508.                         {
  509.                                 case KAUTO:
  510.                                         test_mode=0;
  511.                                 break;
  512.                                
  513.                                 default:
  514.                                 break;
  515.                         }
  516.                 }
  517.                 else
  518.                 {
  519.                         switch(keycom)
  520.                         {
  521.                                 case KAC:
  522.                                         if(sys_mode&0x80)
  523.                                         {
  524.                                                 sys_mode&=0x77;
  525.                                                 ac_func&=0x7f;
  526.                                                 ac_func|=0x08;
  527.                                                 ac_old=ac_func;
  528.                                         }
  529.                                         else
  530.                                         {
  531.                                                 sys_mode&=0xf7;
  532.                                                 ac_func&=0x7f;
  533.                                                 if(ac_func&0x08) ac_func&=0xf7;
  534.                                                 else ac_func|=0x08;
  535.                                                 ac_old=ac_func;
  536.                                         }
  537.                                         break;

  538.                                 case KDEF:
  539.                                         if(sys_mode&0x80)
  540.                                         {
  541.                                                 sys_mode&=0x7f;
  542.                                                
  543.                                                 if(mode_func!=0x04)
  544.                                                 {
  545.                                                         mode_old=mode_func;
  546.                                                         ac_old=ac_func;
  547.                                                         blower_old=blower_func;
  548.                                                         intake_old=intake_func;
  549.                                                 }
  550.                                                
  551.                                                 mode_func=0x4;
  552.                                                 blower_func=0x07;
  553.                                                 intake_func=0x01;
  554.                                                 ac_func=0x08;
  555.                                                 break;
  556.                                         }
  557.                                         else
  558.                                         {
  559.                                                 if(mode_func!=4)
  560.                                                 {
  561.                                                         mode_old=mode_func;
  562.                                                         ac_old=ac_func;
  563.                                                         blower_old=blower_func;
  564.                                                         intake_old=intake_func;
  565.                                                
  566.                                                         mode_func=0x4;
  567.                                                         blower_func=0x07;
  568.                                                         intake_func=0x01;
  569.                                                         ac_func=0x08;       
  570.                                                 }
  571.                                                 else
  572.                                                 {
  573.                                                         mode_func=mode_old;
  574.                                                         blower_func=blower_old;
  575.                                                         intake_func=intake_old;
  576.                                                         ac_func=ac_old;
  577.                                                 }
  578.                                         }
  579.                                         break;       
  580.                                        
  581.                                 case KREC:
  582.                                         sys_mode&=0xf7;
  583.                                         if((intake_func&0x7f)==0x00) intake_func=0x01;
  584.                                         else intake_func=0x00;
  585.                                         intake_old=intake_func;
  586.                                         break;
  587.                                
  588.                                 case KOFF:
  589.                                         sys_mode|=0X80;
  590.                                         break;
  591.                                        
  592.                                 case KAUTO:
  593.                                         sys_mode=0x08;
  594.                                         mode_func|=0x80;       
  595.                                         blower_func|=0x80;       
  596.                                         ac_func|=0x80;
  597.                                         intake_func|=0x80;       
  598.                                         break;
  599.                                        
  600.                                 case KTEST:
  601.                                         test_mode=1;
  602.                                         tmr_test=0;                               
  603.                                         break;
  604.                                        
  605.                                 default:
  606.                                         keycom=0xff;
  607.                                         break;
  608.                         }
  609.                 }
  610.         }
  611.        
  612.         keycom=0xffff;
  613. }
  614. //==========================
  615. void temp_scan(void)
  616. {
  617.         KEY_TUP=1;
  618.            if(KEY_TUP==1)
  619.            {temp_scan1=1;tmr_tup=0;}
  620.         if((KEY_TUP==0)&&(temp_scan1==1))       
  621.         {
  622.                 tmr_tup++;
  623.                 if(tup==0)
  624.                 {
  625.                         if((tmr_tup>KEYT_TIME)&&(keycom1==0xff))
  626.                         {
  627.                                 tmr_tup=0;       
  628.                                 keycom1=0;
  629.                                 tup=1;
  630.                         }
  631.                 }
  632.                 else
  633.                 {
  634.                         tmr_tup=0;
  635.                         keycom1=0xff;
  636.                 }
  637.         }
  638.         else
  639.         {
  640.                 tmr_tup=0;       
  641.                 tup=0;
  642.         }
  643.        
  644.         KEY_TDN=1;
  645.         if(KEY_TDN==1)
  646.         {temp_scan2=1;tmr_tdn=0;}
  647.         if((KEY_TDN==0)&&(temp_scan2==1))       
  648.         {
  649.                 tmr_tdn++;
  650.                 if(tdn==0)
  651.                 {
  652.                         if((tmr_tdn>KEYT_TIME)&&(keycom2==0xff))
  653.                         {
  654.                                 tmr_tdn=0;       
  655.                                 keycom2=0;
  656.                                 tdn=1;
  657.                         }
  658.                 }
  659.                 else
  660.                 {
  661.                         tmr_tdn=0;
  662.                         keycom2=0xff;
  663.                 }
  664.         }
  665.         else
  666.         {
  667.                 tmr_tdn=0;       
  668.                 tdn=0;
  669.         }

  670.         KEY_MUP=1;
  671.            if(KEY_MUP==1)
  672.            {mode_scan1=1;tmr_mup=0;}
  673.         if((KEY_MUP==0)&&(mode_scan1==1))       
  674.         {
  675.                 tmr_mup++;
  676.                 if(mup==0)
  677.                 {
  678.                         if((tmr_mup>KEYT_TIME)&&(keycom5==0xff))
  679.                         {
  680.                                 tmr_mup=0;       
  681.                                 keycom5=0;
  682.                                 mup=1;
  683.                         }
  684.                 }
  685.                 else
  686.                 {
  687.                         tmr_mup=0;
  688.                         keycom5=0xff;
  689.                 }
  690.         }
  691.         else
  692.         {
  693.                 tmr_mup=0;       
  694.                 mup=0;
  695.         }

  696.         KEY_MDN=1;
  697.         if(KEY_MDN==1)
  698.         {mode_scan2=1;tmr_mdn=0;}
  699.         if((KEY_MDN==0)&&(mode_scan2==1))       
  700.         {
  701.                 tmr_mdn++;
  702.                 if(mdn==0)
  703.                 {
  704.                         if((tmr_mdn>KEYT_TIME)&&(keycom6==0xff))
  705.                         {
  706.                                 tmr_mdn=0;       
  707.                                 keycom6=0;
  708.                                 mdn=1;
  709.                         }
  710.                 }
  711.                 else
  712.                 {
  713.                         tmr_mdn=0;
  714.                         keycom6=0xff;
  715.                 }
  716.         }
  717.         else
  718.         {
  719.                 tmr_mdn=0;       
  720.                 mdn=0;
  721.         }

  722.         KEY_BUP=1;
  723.            if(KEY_BUP==1)
  724.            {blow_scan1=1;tmr_bup=0;}
  725.         if((KEY_BUP==0)&&(blow_scan1==1))       
  726.         {
  727.                 tmr_bup++;
  728.                 if(bup==0)
  729.                 {
  730.                         if((tmr_bup>KEYT_TIME)&&(keycom3==0xff))
  731.                         {
  732.                                 tmr_bup=0;       
  733.                                 keycom3=0;
  734.                                 bup=1;
  735.                         }
  736.                 }
  737.                 else
  738.                 {
  739.                         tmr_bup=0;
  740.                         keycom3=0xff;
  741.                 }
  742.         }
  743.         else
  744.         {
  745.                 tmr_bup=0;       
  746.                 bup=0;
  747.         }
  748.        
  749.         KEY_BDN=1;
  750.         if(KEY_BDN==1)
  751.         {blow_scan2=1;tmr_bdn=0;}
  752.         if((KEY_BDN==0)&&(blow_scan2==1))       
  753.         {
  754.                 tmr_bdn++;
  755.                 if(bdn==0)
  756.                 {
  757.                         if((tmr_bdn>KEYT_TIME)&&(keycom4==0xff))
  758.                         {
  759.                                 tmr_bdn=0;       
  760.                                 keycom4=0;
  761.                                 bdn=1;
  762.                         }
  763.                 }
  764.                 else
  765.                 {
  766.                         tmr_bdn=0;
  767.                         keycom4=0xff;
  768.                 }
  769.         }
  770.         else
  771.         {
  772.                 tmr_bdn=0;       
  773.                 bdn=0;
  774.         }
  775.        
  776.         if((keycom1==0)&&(test_mode==0))
  777.         {
  778.                 if(!(sys_mode&0x80))
  779.                 {
  780.                         if((sys_mode&0x03)==0x01)
  781.                         {
  782.                                 if(mode_func!=0x04)       
  783.                                 {
  784.                                         mode_func=mode_old;
  785.                                         blower_func=blower_old;
  786.                                         intake_func=intake_old;
  787.                                         ac_func=ac_old;
  788.                                 }
  789.                                 tset=20;
  790.                                
  791.                                 sys_mode&=0xfc;
  792.                         }
  793.                         else if(tset<30) tset=tset+2;
  794.                         else if((sys_mode&0x03)==0x02);
  795.                         else                                                                //hi
  796.                         {
  797.                                 sys_mode=(sys_mode&0xfc)|0x02;
  798.                                
  799.                                 if(mode_func!=0x04)
  800.                                 {
  801.                                         mode_old=mode_func;
  802.                                         ac_old=ac_func;
  803.                                         blower_old=blower_func;
  804.                                         intake_old=intake_func;
  805.                                        
  806.                                         mode_func=0x2;
  807.                                         blower_func=0x07;
  808.                                         intake_func=0x01;
  809.                                         ac_func=0x00;
  810.                                 }
  811.                         }
  812.                         adj|=0x3f;
  813.                 }
  814.                
  815.                 mem_tmr=20;
  816.                 memflag=1;
  817.         }
  818.         keycom1=0xff;
  819.        
  820.         if((keycom2==0)&&(test_mode==0))
  821.         {
  822.                
  823.                 if(!(sys_mode&0x80))
  824.                 {
  825.                         if((sys_mode&0x03)==0x02)
  826.                         {
  827.                                 if(mode_func!=0x04)       
  828.                                 {
  829.                                         mode_func=mode_old;
  830.                                         blower_func=blower_old;
  831.                                         intake_func=intake_old;
  832.                                         ac_func=ac_old;
  833.                                 }
  834.                                 tset=30;
  835.                                 sys_mode&=0xfc;
  836.                         }
  837.                         else if(tset>20) tset=tset-2;
  838.                         else if((sys_mode&0x03)==0x01);
  839.                         else                                                                //lo
  840.                         {
  841.                                 sys_mode=(sys_mode&0xfc)|0x01;
  842.                                
  843.                                 if(mode_func!=0x04)
  844.                                 {
  845.                                         mode_old=mode_func;
  846.                                         ac_old=ac_func;
  847.                                         blower_old=blower_func;
  848.                                         intake_old=intake_func;
  849.                                                        
  850.                                         mode_func=0x0;
  851.                                         blower_func=0x07;
  852.                                         intake_func=0x00;
  853.                                         ac_func=0x08;
  854.                                 }
  855.                         }
  856.                         adj|=0x3f;
  857.                 }
  858.                
  859.                 mem_tmr=20;
  860.                 memflag=1;

  861.         }
  862.         keycom2=0xff;
  863.        
  864.         if((keycom3==0)&&(test_mode==0))
  865.         {
  866.                 if(!(sys_mode&0x80))
  867.                 {
  868.                         sys_mode&=0xf7;
  869.                         blower_func&=0x7f;
  870.                         if(blower_func<8) blower_func++;
  871.                         blower_old=blower_func;
  872.                         adj|=0x3f;
  873.                 }
  874.                 else sys_mode&=0x7f;
  875.                
  876.                 mem_tmr=20;
  877.                 memflag=1;
  878.         }
  879.         keycom3=0xff;
  880.        
  881.         if((keycom4==0)&&(test_mode==0))
  882.         {
  883.                 if(!(sys_mode&0x80))
  884.                 {
  885.                         sys_mode&=0xf7;
  886.                         blower_func&=0x7f;
  887.                         if(blower_func>1) blower_func--;
  888.                         blower_old=blower_func;
  889.                         adj|=0x3f;       
  890.                 }
  891.                 else sys_mode&=0x7f;
  892.                
  893.                 mem_tmr=20;
  894.                 memflag=1;

  895.         }
  896.         keycom4=0xff;
  897.        
  898.         if((keycom5==0)&&(test_mode==0))
  899.         {
  900.                 if(sys_mode&0x80)
  901.                 {
  902.                         sys_mode&=0x7f;
  903.                 }
  904.                 else
  905.                 {
  906.                         if(mode_func==0x04)
  907.                         {
  908.                                 mode_func=mode_old;
  909.                                 blower_func=blower_old;
  910.                                 intake_func=intake_old;
  911.                                 ac_func=ac_old;
  912.                         }
  913.                         else
  914.                         {
  915.                                 sys_mode&=0xf7;
  916.                                 mode_func&=0x7f;
  917.                                 if(mode_func<3) mode_func++;
  918.                                 mode_old=mode_func;
  919.                         }
  920.                 }
  921.                 mem_tmr=20;
  922.                 memflag=1;

  923.         }
  924.         keycom5=0xff;
  925.        
  926.         if((keycom6==0)&&(test_mode==0))
  927.         {
  928.                 if(sys_mode&0x80)
  929.                 {
  930.                         sys_mode&=0x7f;
  931.                 }
  932.                 else
  933.                 {
  934.                         if(mode_func==0x04)
  935.                         {
  936.                                 mode_func=mode_old;
  937.                                 blower_func=blower_old;
  938.                                 intake_func=intake_old;
  939.                                 ac_func=ac_old;
  940.                         }
  941.                         else
  942.                         {
  943.                                 sys_mode&=0xf7;
  944.                                 mode_func&=0x7f;
  945.                                 if(mode_func>0) mode_func--;
  946.                                 mode_old=mode_func;
  947.                         }
  948.                 }
  949.                 mem_tmr=20;
  950.                 memflag=1;

  951.         }
  952.         keycom6=0xff;       
  953.                        
  954. }
  955. //==========================
  956. void ac_drv(void)
  957. {
  958.         if((sys_mode&0x80)==0x00)
  959.         {
  960.                 if((ac_func&0x80)&&(!(sys_mode&0x03)))
  961.                 {
  962.                         if(adj&0x01)
  963.                         {
  964.                                 if(tamb>=((tout-20)/10)) ac_func|=0x08;
  965.                                 if(tamb<((tout-40)/10)) ac_func&=0xf7;
  966.                                 adj&=0xfe;               
  967.                         }
  968.                 }
  969.                
  970.                 if(tamb<0) ac_func&=0xf7;
  971.                
  972.                 if(ac_func&0x08)
  973.                 {
  974.                         ac_func|=0x01;
  975.                 }
  976.                 else ac_func&=0xfe;
  977.         }
  978.         else ac_func&=0xfe;
  979.        
  980.         if(ac_func&0x01)
  981.         {
  982.                 spi_data|=AC_ON;
  983.         }
  984.         else
  985.         {
  986.                 spi_data&=AC_OFF;
  987.         }
  988. }
  989. //==========================
  990. void intake_proc(void)
  991. {                       
  992.         if(!(sys_mode&0x80))
  993.         {       
  994.                 if((intake_func&0x80)&&(!(sys_mode&0x03)))
  995.                 {
  996.                         if((adj&0x08)&&(!(sys_mode&0x20)))
  997.                         {
  998.                                 if(ac_func&0x08) intake_func=0x80;                        //内循环
  999.                                 else intake_func=0x81;
  1000.                                 adj&=0xf7;
  1001.                         }
  1002.                 }
  1003.         }
  1004. }
  1005. //==========================
  1006. void mode_proc(void)                                //tout<29vent,tout>31mix
  1007. {
  1008.         if(!(sys_mode&0x80))
  1009.         {
  1010.                 if((mode_func&0x80)&&(!(sys_mode&0x03)))
  1011.                 {
  1012.                           if(adj&0x02)
  1013.                         {
  1014.                                 if(tout<=290) mode_func=0x80;//vent
  1015.                                 if((tout>=310)&&(tout<=360)) mode_func=0x81;//bi
  1016.                                 if(tout>=380) mode_func=0x82;//foot
  1017.                                
  1018.                                 if((tout<310)&&(tout>290))
  1019.                                 {if((mode_func!=0x80)&&(mode_func!=0x81))
  1020.                                 mode_func=0x80;}
  1021.                                 if((tout<380)&&(tout>360))
  1022.                                 {if((mode_func!=0x82)&&(mode_func!=0x81))
  1023.                                 mode_func=0x82;}
  1024.                                        
  1025.                                 adj&=0xfd;
  1026.                         }                       
  1027.                 }
  1028.                
  1029.                 modetg=mode_table[mode_func&0x7];
  1030.         }
  1031. }
  1032. //==========================
  1033. unsigned char Angle_convet(signed int t1,signed int t2,unsigned char a1,unsigned char a2,signed int t3)
  1034. {
  1035.         signed long int k;
  1036.         signed long int b;
  1037.         signed char a3;
  1038.         signed long int i;
  1039.        
  1040.         //k=((a2-a1)*1000)/(t2-t1);
  1041.         k=(signed long int)a2-a1;
  1042.         k=k*100;
  1043.         i=t2-t1;
  1044.         k=k/i;
  1045.         b=(signed long int)a1*100;
  1046.         i=(signed long int)k*t1;
  1047.         b=b-i;
  1048.         a3=((k*t3)+b)/100;
  1049.        
  1050.         return a3;       
  1051. }
  1052. //==========================
  1053. void temp_proc(void)
  1054. {       
  1055.         unsigned char i;
  1056.         signed char j;
  1057.         signed int tout1;
  1058.         signed int tout2;
  1059.         signed int tout3;
  1060.         signed int tout4;
  1061.         signed int tout5;
  1062.         signed int tout6;
  1063.        
  1064.         if(ac_func&0x01)
  1065.         {
  1066.                 tevap=5;
  1067.         }
  1068.         else if(intake_func&0x7f)
  1069.         {
  1070.                 tevap=tamb+2;
  1071.         }
  1072.         else
  1073.         {
  1074.                 tevap=tinc+2;
  1075.         }
  1076.        
  1077.         if(!(sys_mode&0x80))
  1078.         {       
  1079.                 if((sys_mode&0x03)==0x01)        temptg=TEMP_MAX;                                                //cool
  1080.                 else if((sys_mode&0x03)==0x02)        temptg=TEMP_MIN;                                                //heat
  1081.                 else if(adj&0x10)
  1082.                 {
  1083.                         if(tevap<=-20)
  1084.                         {i=0;j=-30;}
  1085.                         else if(tevap<=-10)
  1086.                         {i=6;j=-20;}
  1087.                         else if(tevap<=0)
  1088.                         {i=12;j=-10;}
  1089.                         else if(tevap<=10)
  1090.                         {i=18;j=0;}       
  1091.                         else if(tevap<=20)
  1092.                         {i=24;j=10;}
  1093.                         else if(tevap<=30)
  1094.                         {i=30;j=20;}       
  1095.                         else
  1096.                         {i=36;j=30;}       
  1097.                        
  1098.                         if((mode_func&0xf)<=1)
  1099.                         {
  1100.                                 tout1=((atempvent_table[i+6]-atempvent_table[i])*(tevap-j))/10+atempvent_table[i];
  1101.                                 tout2=((atempvent_table[i+7]-atempvent_table[i+1])*(tevap-j))/10+atempvent_table[i+1];
  1102.                                 tout3=((atempvent_table[i+8]-atempvent_table[i+2])*(tevap-j))/10+atempvent_table[i+2];
  1103.                                 tout4=((atempvent_table[i+9]-atempvent_table[i+3])*(tevap-j))/10+atempvent_table[i+3];
  1104.                                 tout5=((atempvent_table[i+10]-atempvent_table[i+4])*(tevap-j))/10+atempvent_table[i+4];
  1105.                                 tout6=((atempvent_table[i+11]-atempvent_table[i+5])*(tevap-j))/10+atempvent_table[i+5];
  1106.                         }
  1107.                         else
  1108.                         {
  1109.                                 tout1=((atempfoot_table[i+6]-atempfoot_table[i])*(tevap-j))/10+atempfoot_table[i];
  1110.                                 tout2=((atempfoot_table[i+7]-atempfoot_table[i+1])*(tevap-j))/10+atempfoot_table[i+1];
  1111.                                 tout3=((atempfoot_table[i+8]-atempfoot_table[i+2])*(tevap-j))/10+atempfoot_table[i+2];
  1112.                                 tout4=((atempfoot_table[i+9]-atempfoot_table[i+3])*(tevap-j))/10+atempfoot_table[i+3];
  1113.                                 tout5=((atempfoot_table[i+10]-atempfoot_table[i+4])*(tevap-j))/10+atempfoot_table[i+4];
  1114.                                 tout6=((atempfoot_table[i+11]-atempfoot_table[i+5])*(tevap-j))/10+atempfoot_table[i+5];               
  1115.                         }
  1116.                                
  1117.                         if(tout<=tout1) temptg=TEMP_MAX;//coo
  1118.                         else if(tout<=tout2)temptg=Angle_convet(tout1,tout2,ATEMP1,ATEMP2,tout);
  1119.                         else if(tout<=tout3)temptg=Angle_convet(tout2,tout3,ATEMP2,ATEMP3,tout);
  1120.                         else if(tout<=tout4)temptg=Angle_convet(tout3,tout4,ATEMP3,ATEMP4,tout);
  1121.                         else if(tout<=tout5)temptg=Angle_convet(tout4,tout5,ATEMP4,ATEMP5,tout);
  1122.                         else if(tout<=tout6)temptg=Angle_convet(tout5,tout6,ATEMP5,ATEMP6,tout);
  1123.                         else temptg=TEMP_MIN;//hot
  1124.                        
  1125.                         adj&=0xef;
  1126.                 }       
  1127.         }
  1128. }
  1129. //==========================
  1130. void blower_proc(void)
  1131. {
  1132.         signed char i;
  1133.         signed char j;
  1134.         unsigned char l;
  1135.        
  1136.         unsigned char blowertg1;
  1137.         unsigned char blowertg2;

  1138.         if(!(sys_mode&0x80))
  1139.         {
  1140.                 if((blower_func&0x80)&&(!(sys_mode&0x03)))
  1141.                 {
  1142.                         if(adj&0x04)
  1143.                         {       
  1144.                                 l=(((tset*2)-tidef_effect)/2)-10;
  1145.                                
  1146.                                 if(tamb>=40)
  1147.                                 {
  1148.                                         blowertg1=blow_autotable40[l];
  1149.                                         blowertg2=blow_autotable40[l];
  1150.                                         i=40;
  1151.                                         j=40;
  1152.                                 }                       
  1153.                                 else if(tamb>=30)
  1154.                                 {
  1155.                                         blowertg1=blow_autotable40[l];
  1156.                                         blowertg2=blow_autotable30[l];
  1157.                                         i=30;
  1158.                                         j=40;
  1159.                                 }
  1160.                                 else if(tamb>=20)
  1161.                                 {
  1162.                                         blowertg1=blow_autotable30[l];
  1163.                                         blowertg2=blow_autotable20[l];
  1164.                                         i=20;
  1165.                                         j=30;
  1166.                                 }
  1167.                                 else if(tamb>=10)
  1168.                                 {
  1169.                                         blowertg1=blow_autotable20[l];
  1170.                                         blowertg2=blow_autotable10[l];
  1171.                                         i=10;
  1172.                                         j=20;
  1173.                                 }
  1174.                                 else if(tamb>=0)
  1175.                                 {
  1176.                                         blowertg1=blow_autotable10[l];
  1177.                                         blowertg2=blow_autotable0[l];
  1178.                                         i=0;
  1179.                                         j=10;
  1180.                                 }
  1181.                                 else if(tamb>=-10)
  1182.                                 {
  1183.                                         blowertg1=blow_autotable0[l];
  1184.                                         blowertg2=blow_autotablen10[l];
  1185.                                         i=-10;
  1186.                                         j=0;                       
  1187.                                 }
  1188.                                 else if(tamb>=-20)
  1189.                                 {
  1190.                                         blowertg1=blow_autotablen10[l];
  1191.                                         blowertg2=blow_autotablen20[l];
  1192.                                         i=-20;
  1193.                                         j=-10;
  1194.                                 }
  1195.                                 else
  1196.                                 {
  1197.                                         blowertg1=blow_autotablen20[l];
  1198.                                         blowertg2=blow_autotablen30[l];
  1199.                                         i=-30;
  1200.                                         j=-20;
  1201.                                 }
  1202.                                
  1203.                         if(blowertg1>=blowertg2)       
  1204.                                 blowertg=blowertg2+((abs_delta(blowertg1,blowertg2)*(tamb-i))/10);
  1205.                         else
  1206.                                 blowertg=blowertg1+((abs_delta(blowertg1,blowertg2)*(j-tamb))/10);       
  1207.                        
  1208.                                 adj&=0xfb;
  1209.                         }
  1210.                                        
  1211.                         i=6;
  1212.                         do
  1213.                         {        
  1214.                                  i--;
  1215.                          }        while(blowertg>blow_table[i]);
  1216.                          blower_func=(i+2)|0x80;
  1217.                         
  1218.                          if(blower_func>=0x87) blower_func=0x86;
  1219.                
  1220.                 }
  1221.         }
  1222. }
  1223. //==========================
  1224. void blower_drv(void)
  1225. {
  1226.         if(sys_mode&0x80)
  1227.         {
  1228.                 CCPR1L=110;
  1229.                 blowernow=110;
  1230.                 blowertg=110;
  1231.                 BLC=0;
  1232.                 spi_data&=HS_OFF;
  1233.         }
  1234.         else if(blower_func&0x80)
  1235.         {
  1236.                 BLC=1;
  1237.                 spi_data&=HS_OFF;
  1238.         }
  1239.         else if((blower_func&0x7f)==8)
  1240.         {
  1241.                 blowertg=0;
  1242.                 BLC=1;
  1243.                 if(CCPR1L==0)
  1244.                         spi_data|=HS_ON;
  1245.                 else  spi_data&=HS_OFF;
  1246.         }
  1247.         else
  1248.         {
  1249.                 blowertg=blow_table[(blower_func&0x7f)-1];
  1250.                 BLC=1;
  1251.                 spi_data&=HS_OFF;
  1252.         }
  1253.                
  1254.         if (tmr_ccpr==0)
  1255.         {
  1256.                 if(blowernow<blowertg)                 blowernow++;
  1257.                 else if(blowernow>blowertg) blowernow--;
  1258.                 if(CCPR1L!=blowernow)                 CCPR1L=blowernow;
  1259.                 tmr_ccpr=5;
  1260.         }       
  1261. }
  1262. //==========================
  1263. void temp_drv(void)
  1264. {
  1265.         unsigned char tempmin;
  1266.         unsigned char tempmax;

  1267.         if((TEMP_MAX-temptg)>30) tempmax=temptg+30;
  1268.         else tempmax=TEMP_MAX;
  1269.         if((temptg-TEMP_MIN)>30) tempmin=temptg-30;
  1270.         else tempmin=TEMP_MIN;
  1271.        
  1272.         switch (tempws_mode)
  1273.         {
  1274.                   case 0:
  1275.                        temptgn=temptg;
  1276.                        if (temptgn>temptgo)
  1277.                        {
  1278.                                tempsttmr=STALLTMR;
  1279.                                tempws_mode=1;
  1280.                                spi_data&=TOFF;
  1281.                                spi_data|=TUP;
  1282.                                temptgo=temptgn;
  1283.                        }
  1284.                        else if (temptgn<temptgo)
  1285.                        {
  1286.                                tempsttmr=STALLTMR;
  1287.                                tempws_mode=2;
  1288.                                spi_data&=TOFF;
  1289.                                 spi_data|=TDN;
  1290.                                temptgo=temptgn;
  1291.                        }
  1292.                        else
  1293.                        {
  1294.                                spi_data&=TOFF;
  1295.                                spi_data|=TSTOP;
  1296.                        }
  1297.                        break;
  1298.                       
  1299.                   case 1:
  1300.                        if(tempfb>tempmax)
  1301.                        {
  1302.                                tempws_mode=0;
  1303.                                spi_data&=TOFF;
  1304.                                spi_data|=TSTOP;
  1305.                                temptgo=tempfb;
  1306.                        }
  1307.                        else if(tempsttmr==0)
  1308.                        {
  1309.                                spi_data&=TOFF;
  1310.                                spi_data|=TSTOP;
  1311.                                tempws_mode=0;
  1312.                                temptgo=temptgn;
  1313.                        }
  1314.                        else if(temptg!=temptgn) tempws_mode=0;
  1315.                        else if (temptgn==tempfb)
  1316.                        {
  1317.                                spi_data&=TOFF;
  1318.                                spi_data|=TSTOP;
  1319.                                tempws_mode=0;
  1320.                                temptgo=tempfb;
  1321.                        }
  1322.                        break;
  1323.                       
  1324.                case 2:
  1325.                        if(tempfb<tempmin)
  1326.                        {
  1327.                                tempws_mode=0;
  1328.                                spi_data&=TOFF;
  1329.                                spi_data|=TSTOP;
  1330.                                temptgo=tempfb;                     
  1331.                        }
  1332.                        else if(tempsttmr==0)
  1333.                        {
  1334.                                spi_data&=TOFF;
  1335.                                spi_data|=TSTOP;
  1336.                                tempws_mode=0;
  1337.                                temptgo=temptgn;
  1338.                        }       
  1339.                        else if(temptg!=temptgn) tempws_mode=0;
  1340.                        else if (temptgn==tempfb)
  1341.                        {
  1342.                                spi_data&=TOFF;
  1343.                                spi_data|=TSTOP;
  1344.                                tempws_mode=0;
  1345.                        }
  1346.                        break;

  1347.                default:
  1348.                        tempws_mode=0;
  1349.                        break;         
  1350.         }
  1351. }
  1352. //==========================
  1353. void mode_drv(void)
  1354. {
  1355.         unsigned char modemin;
  1356.         unsigned char modemax;

  1357.         if((MODE_MAX-modetg)>30) modemax=modetg+30;
  1358.         else modemax=MODE_MAX;
  1359.         if((modetg-MODE_MIN)>30) modemin=modetg-30;
  1360.         else modemin=MODE_MIN;
  1361.                
  1362.         switch (modews_mode)
  1363.         {
  1364.                   case 0:
  1365.                        modetgn=modetg;
  1366.                        if (modetgn>modetgo)
  1367.                        {
  1368.                                modesttmr=STALLTMR;
  1369.                                modews_mode=1;
  1370.                                spi_data&=MOFF;
  1371.                                spi_data|=MUP;
  1372.                                modetgo=modetgn;
  1373.                        }
  1374.                        else if (modetgn<modetgo)
  1375.                        {
  1376.                                modesttmr=STALLTMR;
  1377.                                modews_mode=2;
  1378.                                spi_data&=MOFF;
  1379.                                 spi_data|=MDN;
  1380.                                modetgo=modetgn;
  1381.                        }
  1382.                        else
  1383.                        {
  1384.                                spi_data&=MOFF;
  1385.                                spi_data|=MSTOP;
  1386.                        }
  1387.                        break;
  1388.                       
  1389.                   case 1:
  1390.                        if(modefb>modemax)
  1391.                        {
  1392.                                modews_mode=0;
  1393.                                spi_data&=MOFF;
  1394.                                spi_data|=MSTOP;
  1395.                                modetgo=modefb;
  1396.                        }
  1397.                        else if(modesttmr==0)
  1398.                        {
  1399.                                spi_data&=MOFF;
  1400.                                spi_data|=MSTOP;
  1401.                                modews_mode=0;
  1402.                                modetgo=modetgn;
  1403.                        }
  1404.                        else if(modetg!=modetgn) modews_mode=0;
  1405.                        else if (modetgn==modefb)
  1406.                        {
  1407.                                spi_data&=MOFF;
  1408.                                spi_data|=MSTOP;
  1409.                                modews_mode=0;
  1410.                                modetgo=modefb;
  1411.                        }
  1412.                        break;
  1413.                       
  1414.                case 2:
  1415.                        if(modefb<modemin)
  1416.                        {
  1417.                                modews_mode=0;
  1418.                                spi_data&=MOFF;
  1419.                                spi_data|=MSTOP;
  1420.                                modetgo=modefb;                     
  1421.                        }
  1422.                        else if(modesttmr==0)
  1423.                        {
  1424.                                spi_data&=MOFF;
  1425.                                spi_data|=MSTOP;
  1426.                                modews_mode=0;
  1427.                                modetgo=modetgn;
  1428.                        }       
  1429.                        else if(modetg!=modetgn) modews_mode=0;
  1430.                        else if (modetgn==modefb)
  1431.                        {
  1432.                                spi_data&=MOFF;
  1433.                                spi_data|=MSTOP;
  1434.                                modews_mode=0;
  1435.                        }
  1436.                        break;

  1437.                default:
  1438.                        modews_mode=0;
  1439.                        break;         
  1440.         }
  1441. }
  1442. //==========================
  1443. void intake_drv(void)
  1444. {

  1445.         if(intake_func!=intake_old2)
  1446.         {
  1447.                 intakesttmr=STALLTMR;
  1448.                 intake_old2=intake_func;
  1449.         }
  1450.        
  1451. /*        if(intakesttmr)
  1452.         {
  1453.                 if(intake_func)
  1454.                 {
  1455.                         spi_data&=IOFF;
  1456.                         spi_data|=IFRE;
  1457.                 }
  1458.                 else
  1459.                 {       
  1460.                         spi_data&=IOFF;
  1461.                         spi_data|=IREC;
  1462.                 }
  1463.         }
  1464.         else
  1465.         {
  1466.                 spi_data&=IOFF;
  1467.         }
  1468. */       
  1469. }
  1470. //==========================
  1471. void act_drv(void)
  1472. {

  1473.        

  1474. }
  1475. //==========================
  1476. void EEROM_proc (void)
  1477. {
  1478.         if ((memflag!=0)&&(mem_tmr==0))
  1479.         {
  1480.                 switch (memflag)
  1481.                 {
  1482.                         case 1: {EEPROM_WRITE(0x20,tset);memflag=2;} break;
  1483.                         case 2: {EEPROM_WRITE(0x21,mode_func); memflag=3;} break;
  1484.                         case 3: {EEPROM_WRITE(0x22,intake_func); memflag=4;} break;
  1485.                         case 4: {EEPROM_WRITE(0x23,ac_func);memflag=5;}break;
  1486.                         case 5:        {EEPROM_WRITE(0x24,blower_func);memflag=6;}break;               
  1487.                         case 6: {EEPROM_WRITE(0x25,sys_mode); memflag=7;}break;
  1488.                         case 7: {EEPROM_WRITE(0x26,mode_old); memflag=0;}break;
  1489.                         default :   
  1490.                         {memflag=0; } break;  
  1491.                 }
  1492.         }
  1493. }
  1494. //==========================
  1495. void EEPROM_init(void)
  1496. {
  1497.         tset=EEPROM_READ(0x20);
  1498.         if((tset<20)||(tset>30))
  1499.         {
  1500.                 tset=24;
  1501.                 sys_mode=0x80;
  1502.                 mode_func=0;
  1503.                 ac_func=0;
  1504.                 blower_func=0x01;
  1505.                 intake_func=0x01;
  1506.         }
  1507.         else
  1508.         {
  1509.                 mode_func=EEPROM_READ(0x21);
  1510.                 intake_func=EEPROM_READ(0x22);
  1511.                 ac_func=EEPROM_READ(0x23);
  1512.                 blower_func=EEPROM_READ(0x24);
  1513.                 sys_mode=EEPROM_READ(0x25);
  1514.         }
  1515.        
  1516.         mode_old=0x0;
  1517.         ac_old=0x0;
  1518.         blower_old=0x01;
  1519.         intake_old=0x01;
  1520.        
  1521. }
  1522. //==========================
  1523. void led_drv(void)
  1524. {
  1525.         if((sys_mode&0x80)==0)
  1526.         {
  1527.                 if(ac_func&0x08)
  1528.                 {
  1529.                         LED_AC=0;
  1530.                 }
  1531.                 else LED_AC=1;
  1532.                
  1533.                 if((sys_mode&0x08)&&(mode_func!=4)) LED_AUTO=0;
  1534.                 else LED_AUTO=1;
  1535.                
  1536.                 if((sys_mode&0x03)==0x01) t_show=0x01;
  1537.                 else if((sys_mode&0x03)==0x02) t_show=0x08;
  1538.                 else if(tset==20) t_show=0x02;
  1539.                 else if(tset==22) t_show=0x03;
  1540.                 else if(tset==24) t_show=0x04;
  1541.                 else if(tset==26) t_show=0x05;
  1542.                 else if(tset==28) t_show=0x06;
  1543.                 else if(tset==30) t_show=0x07;
  1544.                
  1545.                 switch(t_show)
  1546.                 {
  1547.                         case 1:
  1548.                                 LEDT18=0;
  1549.                                 LEDT20=1;
  1550.                                 LEDT22=1;
  1551.                                 LEDT24=1;
  1552.                                 LEDT26=1;
  1553.                                 LEDT28=1;
  1554.                                 LEDT30=1;
  1555.                                 LEDT32=1;
  1556.                                 break;
  1557.                         case 2:
  1558.                                 LEDT18=1;
  1559.                                 LEDT20=0;
  1560.                                 LEDT22=1;
  1561.                                 LEDT24=1;
  1562.                                 LEDT26=1;
  1563.                                 LEDT28=1;
  1564.                                 LEDT30=1;
  1565.                                 LEDT32=1;
  1566.                                 break;
  1567.                         case 3:
  1568.                                 LEDT18=1;
  1569.                                 LEDT20=1;
  1570.                                 LEDT22=0;
  1571.                                 LEDT24=1;
  1572.                                 LEDT26=1;
  1573.                                 LEDT28=1;
  1574.                                 LEDT30=1;
  1575.                                 LEDT32=1;
  1576.                                 break;
  1577.                         case 4:
  1578.                                 LEDT18=1;
  1579.                                 LEDT20=1;
  1580.                                 LEDT22=1;
  1581.                                 LEDT24=0;
  1582.                                 LEDT26=1;
  1583.                                 LEDT28=1;
  1584.                                 LEDT30=1;
  1585.                                 LEDT32=1;
  1586.                                 break;
  1587.                         case 5:
  1588.                                 LEDT18=1;
  1589.                                 LEDT20=1;
  1590.                                 LEDT22=1;
  1591.                                 LEDT24=1;
  1592.                                 LEDT26=0;
  1593.                                 LEDT28=1;
  1594.                                 LEDT30=1;
  1595.                                 LEDT32=1;
  1596.                                 break;
  1597.                         case 6:
  1598.                                 LEDT18=1;
  1599.                                 LEDT20=1;
  1600.                                 LEDT22=1;
  1601.                                 LEDT24=1;
  1602.                                 LEDT26=1;
  1603.                                 LEDT28=0;
  1604.                                 LEDT30=1;
  1605.                                 LEDT32=1;
  1606.                                 break;
  1607.                         case 7:
  1608.                                 LEDT18=1;
  1609.                                 LEDT20=1;
  1610.                                 LEDT22=1;
  1611.                                 LEDT24=1;
  1612.                                 LEDT26=1;
  1613.                                 LEDT28=1;
  1614.                                 LEDT30=0;
  1615.                                 LEDT32=1;
  1616.                                 break;
  1617.                         case 8:
  1618.                                 LEDT18=1;
  1619.                                 LEDT20=1;
  1620.                                 LEDT22=1;
  1621.                                 LEDT24=1;
  1622.                                 LEDT26=1;
  1623.                                 LEDT28=1;
  1624.                                 LEDT30=1;
  1625.                                 LEDT32=0;
  1626.                                 break;
  1627.                         default:break;
  1628.                 }
  1629.                
  1630.                 switch(mode_func&0x7f)
  1631.                 {
  1632.                         case 0:
  1633.                                 LEDVENT=0;
  1634.                                 LEDBL=1;
  1635.                                 LEDFOOT=1;
  1636.                                 LEDMIX=1;
  1637.                                 LEDDEF=1;
  1638.                                 break;
  1639.                         case 1:
  1640.                                 LEDVENT=1;
  1641.                                 LEDBL=0;
  1642.                                 LEDFOOT=1;
  1643.                                 LEDMIX=1;
  1644.                                 LEDDEF=1;
  1645.                                 break;
  1646.                         case 2:
  1647.                                 LEDVENT=1;
  1648.                                 LEDBL=1;
  1649.                                 LEDFOOT=0;
  1650.                                 LEDMIX=1;
  1651.                                 LEDDEF=1;
  1652.                                 break;
  1653.                         case 3:
  1654.                                 LEDVENT=1;
  1655.                                 LEDBL=1;
  1656.                                 LEDFOOT=1;
  1657.                                 LEDMIX=0;
  1658.                                 LEDDEF=1;
  1659.                                 break;
  1660.                         case 4:
  1661.                                 LEDVENT=1;
  1662.                                 LEDBL=1;
  1663.                                 LEDFOOT=1;
  1664.                                 LEDMIX=1;
  1665.                                 LEDDEF=0;
  1666.                                 break;
  1667.                         default:break;
  1668.                 }
  1669.                
  1670.                 switch(blower_func&0x7f)
  1671.                 {
  1672.                         case 1:
  1673.                                 LEDB1=1;
  1674.                                 LEDB2=0;
  1675.                                 LEDB3=0;
  1676.                                 LEDB4=0;
  1677.                                 LEDB5=0;
  1678.                                 LEDB6=0;
  1679.                                 LEDB7=0;
  1680.                                 break;
  1681.                         case 2:
  1682.                                 LEDB1=1;
  1683.                                 LEDB2=1;
  1684.                                 LEDB3=0;
  1685.                                 LEDB4=0;
  1686.                                 LEDB5=0;
  1687.                                 LEDB6=0;
  1688.                                 LEDB7=0;
  1689.                                 break;
  1690.                         case 3:
  1691.                                 LEDB1=1;
  1692.                                 LEDB2=1;
  1693.                                 LEDB3=1;
  1694.                                 LEDB4=0;
  1695.                                 LEDB5=0;
  1696.                                 LEDB6=0;
  1697.                                 LEDB7=0;
  1698.                                 break;
  1699.                         case 4:
  1700.                                 LEDB1=1;
  1701.                                 LEDB2=1;
  1702.                                 LEDB3=1;
  1703.                                 LEDB4=1;
  1704.                                 LEDB5=0;
  1705.                                 LEDB6=0;
  1706.                                 LEDB7=0;
  1707.                                 break;
  1708.                         case 5:
  1709.                                 LEDB1=1;
  1710.                                 LEDB2=1;
  1711.                                 LEDB3=1;
  1712.                                 LEDB4=1;
  1713.                                 LEDB5=1;
  1714.                                 LEDB6=0;
  1715.                                 LEDB7=0;
  1716.                                 break;
  1717.                         case 6:
  1718.                                 LEDB1=1;
  1719.                                 LEDB2=1;
  1720.                                 LEDB3=1;
  1721.                                 LEDB4=1;
  1722.                                 LEDB5=1;
  1723.                                 LEDB6=1;
  1724.                                 LEDB7=0;
  1725.                                 break;
  1726.                         case 7:
  1727.                                 LEDB1=1;
  1728.                                 LEDB2=1;
  1729.                                 LEDB3=1;
  1730.                                 LEDB4=1;
  1731.                                 LEDB5=1;
  1732.                                 LEDB6=1;
  1733.                                 LEDB7=1;
  1734.                                 break;
  1735.                         default:break;
  1736.                 }
  1737.         }
  1738.         else
  1739.         {
  1740.                 LED_AC=1;
  1741.                 LED_AUTO=1;
  1742.                 LEDT18=1;
  1743.                 LEDT20=1;
  1744.                 LEDT22=1;
  1745.                 LEDT24=1;
  1746.                 LEDT26=1;
  1747.                 LEDT28=1;
  1748.                 LEDT30=1;
  1749.                 LEDT32=1;
  1750.                 LEDVENT=1;
  1751.                 LEDBL=1;
  1752.                 LEDFOOT=1;
  1753.                 LEDMIX=1;
  1754.                 LEDDEF=1;
  1755.                 LEDB1=0;
  1756.                 LEDB2=0;
  1757.                 LEDB3=0;
  1758.                 LEDB4=0;
  1759.                 LEDB5=0;
  1760.                 LEDB6=0;
  1761.                 LEDB7=0;
  1762.         }
  1763.                
  1764.         if(intake_func&0x7f) LED_REC=1;
  1765.         else LED_REC=0;
  1766. }
  1767. //==========================
  1768. ……………………

  1769. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
汽车空调程序.rar (9.62 KB, 下载次数: 64)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:300591 发表于 2018-4-1 23:22 | 只看该作者
楼主你好,毫不犹豫的冲了20元的800黑币就为下载你的资料【捂脸】
有些细节问题想和楼主交流一下,留个wx:Royalfun88,求带求带
回复

使用道具 举报

板凳
ID:535889 发表于 2019-5-13 00:49 来自手机 | 只看该作者
没有硬件图??这咋去连线,
回复

使用道具 举报

地板
ID:1054982 发表于 2022-12-1 11:02 | 只看该作者
对车用空调控制器程序非常感兴趣。想学习了解一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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