网站导航: 首页 > 设计参考 > 正文 文章搜索
PIC16F716抽油烟机主控板程序
 
文章编号:
091111214643
文章分类: 单片机 PIC
点 击:
...
关 键 词: PIC16F716,抽油烟机
文章来源:
网络
摘 要:

 
  1. /**************************************************  
  2. **************抽油烟机主控板程序*******************  
  3. **************MCU=PIC16F716-04/pq*****************  
  4. **************deisigned By 小强**********************  
  5. **************date=2008年7月25日*******************  
  6. 说明:  
  7. 1,四个独立按键。  
  8. 2,ht1621驱动液晶  
  9. 3,用到的外围模块不是很多,但控制逻辑比较复杂点,对按键的处理要求也比较高的,另外还有时间显示和定时,倒计时功能,还有,液晶是段式显示的,还有图形转动,对处理技巧要求比较高,标志位也非常多,有些程序段稍微改亿下就可以用到你自己的程序中!  
  10. 4,用picc写的  
  11. /5,本着学自网络,奉献网络的精神发了本程序,希望对初学者有用  
  12. ***************************************************/  
  13. #include<pic16f716.h>   
  14. #define  uint unsigned int   
  15.   
  16. #define TMR0Init  0x3e   
  17.   
  18. #define keyOnDelay 0x08   
  19. #define keyBuzzerDelay 0x09   
  20.   
  21. #define off 0   
  22. #define on 1   
  23.   
  24. #define outLight RB0     //外部灯   
  25. #define we RB1    //弱风   
  26. #define st RB2    //强风   
  27. #define bz RB3   //蜂鸣器   
  28. #define backLight RB4 //背光灯   
  29. #define da RB5 //数据线   
  30. #define wr RB6   //控制线   
  31. #define cs RB7   //片选线   
  32. #define RBon 0  //低电平选通相应的功能 相当于负逻辑   
  33. #define RBoff 1 //高低电平关闭选通相应的功能   
  34.   
  35. #define switchKey  RA0   
  36. #define lightKey   RA1   
  37. #define adjustKey  RA2   
  38. #define setKey     RA3   
  39.   
  40. bit lightKeyFlag,switchKeyFlag,setKeyFlag,adjustKeyFlag,switchFlag,strongFlag,colFlag,f3Flag;   
  41. bit setFlag,endFlag,hourFlag,backLightFlag,twoMinutesFlag,halfSecondFlag ,LCDLightFlag,f2Flag;       
  42. bit f6Flag,f7Flag,f4Flag,f5Flag,longKeyFlag,shortKeyFlag,l1Flag,l2Flag,l3Flag,f1Flag;   
  43.   
  44. signed char timeNumber[4]={0,3,0,0};   
  45. signed char timeNumberTemp[4]={0,3,0,0};   
  46. char sWeiTemp,bWeiTemp,qWeiTemp;   
  47. char gWeiTemp;   
  48. char fiveSecondTime;//5秒定时;   
  49. char weakCount,strongCount,switchCount,setCount,endTimeCount;   
  50. uint count,backLightTime;   
  51. char gWei,sWei,bWei,qWei;   
  52. char count2;//倒计时关机用   
  53. char secondCount;//每秒递增;   
  54. char  keyOnTime;//每过0.05s钟,keyOnTime++;   
  55. uint twoMinutesCount;//每0.05s时twoMinutesCount自增1,当twoMinutesCoun=2400时到达两分钟,风机关闭;   
  56. char map[]={0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f};//映射到LCDRAM寄存器内容的MAP数组;   
  57. char num[]={0x5f,0x06,0x3d,0x2f,0x66,0x6b,0x7b,0x0e,0x7f,0x6f,0x00};//注意:0x00代表空显示,数字显示对应的笔段码,分别显示(0123456789空格)十个字符;   
  58. void delayms(unsigned char a);//延时函数    
  59. void sendHighBit(char data,char count);//发送data数据里的高count位   
  60. void sendLowBit(char data,char low);//发送data数据里的低low位   
  61. void init(void);//系统初始化   
  62. void writeData(char *pa, char *pm);//刷LCD新显示    
  63. void writeCommand(char command);//LCD写命令;    
  64. void refurbish(void);  //刷新MAP数组;   
  65. void strongWindOff(void);//关强风   
  66. void weakWindOff(void);//关弱风   
  67. void timeCount(void);//时间计时函数   
  68. void keyScan(void); //键盘扫描函数   
  69. void keyOnResponse(void);//按键起作用时通常要做出响应的函数   
  70. void recover(void);//还原定时时间   
  71. void colFliker(void);//秒针闪动函数   
  72. void twoMinutes(void);//当switchCount=1,也就是相当于开关按第2次时的处理程序   
  73. void endFunction(void);//endFlag==on时的处理程序片段         
  74. void setFlagOn();//*********************设置标志为ON时的相关操作   
  75.              
  76. void main()   
  77. {   
  78.  init();//初始化   
  79.  writeCommand(0x01); //lcd系统使能   
  80.  writeCommand(0x29); //占空比设置等   
  81.  writeCommand(0x03); //开启LCD   
  82.  writeData(0,map);//调用显示函数   
  83.     
  84.  while(1)   
  85.  {   
  86.   if(T0IF==1)   
  87.   {   
  88.    T0IF=0;   
  89.    TMR0=0x3e;//T0再赋计数初值      
  90.    count++;   
  91.    if(count==10)//到0.5S关蜂鸣器   
  92.     bz=RBoff;    
  93.    if(count==40)//延时2s   
  94.    {   
  95.     count=0;   
  96.     l3Flag=on;      
  97.     break;//跳出循环   
  98.    }   
  99.   }    
  100.  }    
  101.  while(1)   
  102.  {   
  103.   while(T0IF==1)   
  104.   {              
  105.    T0IF=0;   
  106.    TMR0=0x3e;//TMR0赋初值      
  107.    count++;//每50ms count自增1;   
  108.    if(backLightFlag==on)//backLightFlag==on,则背光源一直亮;   
  109.    {   
  110.     backLight=on;//背光开   
  111.    }    
  112.    else //backLightFlag==off时,若没有按任何键,则背光源过15秒熄灭   
  113.    {   
  114.     backLightTime++;    
  115.     if(backLightTime==300)   
  116.      backLight=off;//背光关   
  117.    }     
  118.    colFliker();//col每一秒闪烁一次   
  119.                timeCount();//时间   
  120.                keyScan();  //键盘扫描函数   
  121.                if(LCDLightFlag==on)   
  122.    {   
  123.     outLight=RBon;   
  124.    }    
  125.    else  
  126.    {   
  127.     LCDLightFlag=off;   
  128.     outLight=RBoff;   
  129.    }    
  130. //******************************************灯开光按键操作子程序*****************************************   
  131.                if((lightKeyFlag==on)&&(lightKey ==1))   
  132.    {   
  133.     lightKeyFlag=off;   
  134.     LCDLightFlag=!LCDLightFlag;   
  135.     keyOnResponse();   
  136.    }   
  137. //***************************************** 强弱风键操作  ********************************   
  138.    if(setFlag==off)//当setFlag==off时的处理;   
  139.    {   
  140.     if((adjustKeyFlag==on)&&(adjustKey==1))   
  141.     {   
  142.      adjustKeyFlag=off;   
  143.      if(switchFlag==on)   
  144.      {   
  145.       backLightTime=0;        
  146.       backLight=on;   
  147.             strongFlag=!strongFlag;     
  148.             keyOnResponse();   
  149.      }   
  150.     }   
  151.    }   
  152.    else//setFlag标志位起作用时的处理   
  153.    {   
  154.     if(setCount!=3)   
  155.     {   
  156.      if(adjustKeyFlag==on)   
  157.      { keyOnTime++;   
  158.       if(keyOnTime>10)   
  159.        longKeyFlag=on;   
  160.       if(adjustKey==1)   
  161.       {   
  162.        adjustKeyFlag=off;   
  163.        longKeyFlag=off;   
  164.        shortKeyFlag=on;   
  165.        keyOnTime=0;    
  166.        keyOnResponse();   
  167.       }   
  168.            
  169.      }   
  170.     }   
  171.     else  
  172.     {   
  173.      if((adjustKeyFlag==on)&&(adjustKey==1))   
  174.      {   
  175.       strongFlag=!strongFlag;   
  176.       adjustKeyFlag=off;   
  177.       keyOnResponse();   
  178.      }    
  179.         
  180.     }      
  181.    }     
  182. //*****************************************  排风开关按键处理程序片段  **********************************   
  183.    if((switchKeyFlag==on)&&(switchKey==1))   
  184.    {    
  185.     switchKeyFlag=off;   
  186.     twoMinutesFlag=off;   
  187.     if(switchFlag==off)   
  188.     {   
  189.      switchFlag=on;    
  190.      strongFlag=on;   
  191.     }    
  192.     else  
  193.     {   
  194.      switchCount++;   
  195.      if(switchCount==1)   
  196.       twoMinutesFlag=on;          
  197.      if(switchCount==2)//按两次按钮,关掉   
  198.      {   
  199.       switchCount=0;    
  200.       switchFlag=off;   
  201.       setFlag=off;    
  202.       recover();   
  203.       gWeiTemp=timeNumber[0];   
  204.       sWeiTemp=timeNumber[1];          
  205.       bWeiTemp=timeNumber[2];   
  206.       qWeiTemp=timeNumber[3];              
  207.      }    
  208.     }    
  209.     keyOnResponse();   
  210.    }   
  211. //**********************************设置按钮键操作处理程序段**************************************************************   
  212.    if((setKeyFlag==on)&&(setKey==1))    
  213.    {   
  214.     setKeyFlag=off;   
  215.     setFlag=on;   
  216.     setCount++;//按设置键的次数;   
  217.     fiveSecondTime=0;//时间计数复位   
  218.     keyOnTime=0;   
  219.     count2=0;   
  220.     hourFlag=off;   
  221.     if(switchFlag==on)   
  222.     {   
  223.      if(setCount>=4)   
  224.      {    
  225.       recover(); //数据从timeNumberTemp数组重新写回到timeNumber中;   
  226.       setFlag=0;   
  227.       gWeiTemp=timeNumber[0];   
  228.       sWeiTemp=timeNumber[1];          
  229.       bWeiTemp=timeNumber[2];   
  230.       qWeiTemp=timeNumber[3];    
  231.      }       
  232.     }   
  233.     else  
  234.     {   
  235.      if(setCount>=3)   
  236.      {   
  237.       recover(); //数据从timeNumberTemp数组重新写回到timeNumber中;   
  238.       setFlag=0;   
  239.       gWeiTemp=timeNumber[0];   
  240.       sWeiTemp=timeNumber[1];          
  241.       bWeiTemp=timeNumber[2];   
  242.       qWeiTemp=timeNumber[3];   
  243.      }    
  244.     }   
  245.     keyOnResponse();        
  246.    }   
  247. //*********************设置标志为ON时的相关操作*************************************************************     
  248.    setFlagOn();         
  249. //************************************ switchFlag标志为on或者off时的相应程序片段*************************************************   
  250.    if(switchFlag==on)   
  251.    {          
  252.     backLightFlag=on;   
  253.     if(strongFlag==on)   
  254.     {   
  255.      weakWindOff();   
  256.      st=RBon;   
  257.      l1Flag=on;    
  258.           strongCount++;   
  259.      switch(strongCount)   
  260.      {   
  261.       case 0x01: f1Flag=on; f2Flag=off; f3Flag=on; f4Flag=off; break;   
  262.       case 0x02: f1Flag=on; f2Flag=off; f3Flag=on; f4Flag=off; break;   
  263.       case 0x03: f1Flag=off; f2Flag=on; f3Flag=off; f4Flag=on; break;   
  264.       case 0x04: f1Flag=off; f2Flag=on; f3Flag=off; f4Flag=on; break;   
  265.       default:   strongCount=0x00; break;   
  266.      }    
  267.     }   
  268.     else  
  269.     {   
  270.      strongWindOff();   
  271.      we=RBon;   
  272.      l2Flag=on;   
  273.      weakCount++;         
  274.      switch(weakCount)   
  275.      {   
  276.       
  277.       case 0x01: f5Flag=on;f6Flag=on;f7Flag=off; break;   
  278.       case 0x02: f5Flag=on;f6Flag=on;f7Flag=off; break;   
  279.       case 0x03: f5Flag=off;f6Flag=on;f7Flag=on; break;   
  280.       case 0x04: f5Flag=off;f6Flag=on;f7Flag=on; break;   
  281.       case 0x05: f5Flag=on;f6Flag=off;f7Flag=on; break;   
  282.       case 0x06: f5Flag=on;f6Flag=off;f7Flag=on; break;   
  283.       default:   weakCount=0;break;   
  284.      }     
  285.     }    
  286.       
  287.    }   
  288.    else  
  289.    {   
  290.     strongWindOff();   
  291.     weakWindOff();   
  292.     backLightFlag=off;    
  293.     switchCount=0;    
  294.    }   
  295.    endFunction();      
  296.    twoMinutes();             
  297.    refurbish();//刷新寄存器   
  298.    writeData(0,map);//显示   
  299.    if(count==60000)   
  300.     count=0;           
  301.   }    
  302.  }    
  303. }   
  304.   
  305. //************************************** 时 间 计 时 函 数 **************************************************   
  306. void timeCount(void)   
  307. {   
  308.  if(count%20==0)   
  309.  {   
  310.   secondCount++;   
  311.   if(secondCount==60)   
  312.   {   
  313.    secondCount=0;   
  314.    gWei++;   
  315.    if(gWei==10)   
  316.    {   
  317.      gWei=0;   
  318.     sWei++;   
  319.     if(sWei==6)   
  320.     {   
  321.      sWei=0;   
  322.      bWei++;   
  323.      if(qWei==2&&bWei==4)   
  324.      {   
  325.       bWei=0;   
  326.       qWei=0;   
  327.      }    
  328.      if(bWei==10)   
  329.      {   
  330.       bWei=0;   
  331.       qWei++;           
  332.       }    
  333.      }               
  334.     }   
  335.   }   
  336.  }     
  337. }   
  338. //*******************************************键 盘 扫 描 函 数 *****************************************   
  339. void keyScan(void)   
  340. {                 
  341.  if(lightKeyFlag==off)   
  342.  {   
  343.   if(lightKey ==0)//判断lightKey 键是否按下,outLight灯和LCDLigh图形灯开关键   
  344.   {   
  345.    delayms(keyOnDelay);   
  346.    if(lightKey ==0)   
  347.    {   
  348.     lightKeyFlag=on;   
  349.    }    
  350.   }   
  351.  }   
  352.  if(switchKeyFlag==off)   
  353.  {   
  354.   if(switchKey==0)//判断switchKey键是否按下  风机开关键   
  355.   {   
  356.    delayms(keyOnDelay);   
  357.    if(switchKey==0)   
  358.    {   
  359.     switchKeyFlag=on;   
  360.    }    
  361.   }   
  362.  }   
  363.  if(setKeyFlag==off)   
  364.  {   
  365.   if(setKey==0)//判断setKey键是否按下  设置键   
  366.   {   
  367.    delayms(keyOnDelay);   
  368.    if(setKey==0)   
  369.    {   
  370.     setKeyFlag=on;   
  371.    }    
  372.   }   
  373.  }   
  374.  if(adjustKeyFlag==off)   
  375.  {   
  376.   if(adjustKey==0)//判断adjustKey键是否按下  强弱控制键   
  377.   {   
  378.    delayms(keyOnDelay);   
  379.    if(adjustKey==0)   
  380.    {   
  381.     adjustKeyFlag=on;   
  382.    }    
  383.   }    
  384.  }                   
  385. }   
  386. //************************************************刷 新  显 示 内 容*****************************************   
  387. void refurbish(void)  //刷新显示内容;LCD要显示的内容和本地的map数组一一对应;   
  388. {   
  389.  if(setFlag==1)   
  390.  {   
  391.   map[0]=num[gWeiTemp];    
  392.   map[1]=num[gWeiTemp]>>4;   
  393.   if(l3Flag==on)      
  394.    map[1]=map[1] | 0x08;   
  395.   map[2]=num[sWeiTemp];    
  396.   map[3]=num[sWeiTemp]>>4;   
  397.   if(colFlag==on)     
  398.    map[3]=map[3] | 0x08;   
  399.   map[4]=num[bWeiTemp];    
  400.   map[5]=num[bWeiTemp]>>4;   
  401.   if(l2Flag==on)   
  402.    map[5]=map[5] | 0x08;   
  403.   map[6]=num[qWeiTemp];    
  404.   map[7]=num[qWeiTemp]>>4;   
  405.  }   
  406.  else  
  407.  {   
  408.   map[0]=num[gWei];    
  409.   map[1]=num[gWei]>>4;   
  410.   if(l3Flag==on)      
  411.    map[1]=map[1] | 0x08;   
  412.   map[2]=num[sWei];    
  413.   map[3]=num[sWei]>>4;   
  414.   if(colFlag==on)     
  415.    map[3]=map[3] | 0x08;   
  416.   map[4]=num[bWei];    
  417.   map[5]=num[bWei]>>4;   
  418.   if(l2Flag==on)   
  419.    map[5]=map[5] | 0x08;   
  420.   map[6]=num[qWei];    
  421.   map[7]=num[qWei]>>4;    
  422.  }   
  423.  if(f6Flag==on)     
  424.   map[7]=map[7]| 0x08;   
  425. //*******************map[8]赋值*****************   
  426.  if(LCDLightFlag==on)   
  427.   map[8]=0x01;   
  428.  else  
  429.   map[8]=0;   
  430.  if(f1Flag==on)   
  431.   map[8]=map[8] | 0x02;   
  432.  if(f2Flag==on)   
  433.   map[8]=map[8] | 0x04;   
  434.  if(l1Flag==on)   
  435.   map[8]=map[8] |0x08;   
  436.      
  437. //*******************map[9]赋值*****************       
  438.  if(f4Flag==on)   
  439.   map[9]=0x01;   
  440.  else  
  441.   map[9]=0;   
  442.  if(f3Flag==on)   
  443.   map[9]=map[9] | 0x02;    
  444.  if(f5Flag==on)   
  445.   map[9]=map[9] | 0x04;   
  446.  if(f7Flag==on)   
  447.   map[9]=map[9] | 0x08;   
  448. }   
  449. //*****************************  系 统 初 始 化  ******************************************************   
  450. void init(void)   
  451. {   
  452.  GIE=0;//关总中断   
  453.  T0IE=0;//关T0中断   
  454.  OPTION=0x07;//设置预分频器TMR0并设置分频比为256;   
  455.  ADCON1=0x07;   
  456.  TMR0=TMR0Init;//赋初值   
  457.  T0IF=0;       
  458.  TRISB=0x00;//设置B口为输出   
  459.  TRISA0=1;//设置A口为输出   
  460.  TRISA1=1;   
  461.  TRISA2=1;   
  462.  TRISA3=1;   
  463.  backLight=on;//LCD背光亮   
  464.  bz=RBon;//蜂鸣器响   
  465.  we=RBoff; //弱风   
  466.  st=RBoff;   //强风//背光灯   
  467.  outLight=RBoff;   
  468.  lightKeyFlag=off;   
  469.  switchKeyFlag=off;   
  470.  setKeyFlag=off;   
  471.  adjustKeyFlag=off;   
  472.  strongFlag=off;   
  473.  switchFlag=off;   
  474.  LCDLightFlag=off;   
  475.  colFlag=on;//col标志置位   
  476.  setFlag=off;   
  477.  halfSecondFlag=off;    
  478.  twoMinutesFlag=0;   
  479.  longKeyFlag=off;   
  480.  shortKeyFlag=off;   
  481.  setCount=0;   
  482.  endFlag=off;   
  483.  backLightFlag=off;   
  484.  backLightTime=0;   
  485.  endTimeCount=0;   
  486.  fiveSecondTime=0;   
  487.  twoMinutesCount=0;   
  488.  keyOnTime=0;   
  489.  secondCount=0;   
  490.  count2=0;   
  491.  hourFlag=off;   
  492. }   
  493. //***************************************发送data数据里的低low位*************************   
  494. void sendLowBit(char data,char low)   
  495. {   
  496.  char i;   
  497.  for(i=0;i<low;i++)   
  498.  {   
  499.   if((data&0x01)==0)   
  500.    da=0;   
  501.   else  
  502.    da=1;   
  503.   wr=0;   
  504.   asm("nop");   
  505.   wr=1;   
  506.   asm("nop");   
  507.   data>>=1;   
  508.  }   
  509. }   
  510. //************************************发送data数据里的高count位************************   
  511. void sendHighBit(char data,char count)   
  512. {   
  513.  char i;   
  514.  for(i=0;i<count;i++)   
  515.  {   
  516.   if (data & 0x80)   
  517.    da = 1;   
  518.   else  
  519.    da = 0;   
  520.   wr = 0;   
  521.   asm("nop");   
  522.   wr = 1;   
  523.   asm("nop");   
  524.   data <<= 1;   
  525.  }   
  526. }   
  527. //***********************************************延时毫秒函数******************************   
  528. void delayms(unsigned char a)   
  529. {   
  530.  uint mmm;   
  531.  while(a-->1)    
  532.  {   
  533.   for(mmm = 0; mmm < 1000;mmm ++) {}   
  534.  }   
  535. }   
  536. //**********************************************刷新LCD显示********************************   
  537. void writeData(char *pa, char *pm)   
  538. {   
  539.  char i;   
  540.  cs=1;   
  541.  asm("nop");   
  542.  cs=0;   
  543.  asm("nop");   
  544.  sendHighBit(0xa0,3);//发送写数据命令   
  545.  sendHighBit(*pa<<2,6);//写器件地址; 高位先发; 在本程序里都是从第0位开始写   
  546.  for(i=0;i<10;i++)//数据4位4位的写,一共写10次;写数据时低位先发;   
  547.  {   
  548.   sendLowBit(*pm++,4);   
  549.  }   
  550. }   
  551. //*******************************************LCD写命令函数***********************************   
  552. void writeCommand(char command)   
  553. {   
  554.  cs=1;   
  555.  asm("nop");    
  556.  cs=0;   
  557.  asm("nop");   
  558.  sendHighBit(0x80,3);   
  559.  sendHighBit(command,9);    
  560. }   
  561. //************************************关  强  风****************************************************************   
  562. void strongWindOff()//关强风   
  563. {   
  564.  st=RBoff;   
  565.  l1Flag=off;   
  566.  f1Flag=off;   
  567.  f2Flag=off;   
  568.  f3Flag=off;   
  569.  f4Flag=off;    
  570. }   
  571. //************************************关  弱  风****************************************************************   
  572. void weakWindOff(void)   
  573. {   
  574.  we=RBoff;   
  575.  l2Flag=off;   
  576.  f5Flag=off;   
  577.  f6Flag=off;   
  578.  f7Flag=off;    
  579. }   
  580.   
  581. //********************************按键起作用时通常要做出的响应***************************************************   
  582. void keyOnResponse(void)   
  583. {   
  584.  bz=RBon;//蜂鸣器开   
  585.  backLightTime=0;//LCD背光延时时间清零;   
  586.  backLight=on;//LCD背光灯开   
  587.  delayms(keyBuzzerDelay);//蜂鸣器延时开   
  588.  bz=RBoff;//蜂鸣器关;     
  589. }   
  590. //*********************************从备份数组中去吃数据还原定时数据**********************************************   
  591. void recover(void)  //还原定时数据   
  592. {   
  593.  setCount=0;    
  594.  setFlag=off;   
  595.  timeNumber[0]=timeNumberTemp[0];   
  596.  timeNumber[1]=timeNumberTemp[1];   
  597.  timeNumber[2]=timeNumberTemp[2];   
  598.  timeNumber[3]=timeNumberTemp[3];    
  599. }   
  600. //***************************当switchCount=1,也就是相当于开关按第2次时的处理程序*********************************   
  601. void twoMinutes(void)   
  602. {   
  603.  if(twoMinutesFlag==on)   
  604.  {   
  605.   twoMinutesCount++;   
  606.   if(twoMinutesCount>=2400)   
  607.   {   
  608.    bz=RBon;   
  609.    LCDLightFlag=off;   
  610.    switchFlag=off;   
  611.    backLightFlag=off;   
  612.    backLight=off;   
  613.    switchCount=0;    
  614.    setFlag=0;   
  615.    if(twoMinutesCount==2404)   
  616.    {   
  617.     bz=RBoff;   
  618.     twoMinutesFlag=off;   
  619.     gWeiTemp=timeNumber[0];   
  620.     sWeiTemp=timeNumber[1];          
  621.     bWeiTemp=timeNumber[2];   
  622.     qWeiTemp=timeNumber[3];   
  623.    }   
  624.   }      
  625.  }   
  626.  else  
  627.  {   
  628.   twoMinutesCount=0;   
  629.  }    
  630. }   
  631. //***********************endFlag==on时的处理程序片段*************************************************************   
  632. void endFunction(void)//定时结束:当倒计时结束时,蜂鸣器以0.5S内发出三次提示音,一秒为一周期共5个周期.   
  633. {      
  634.  if(endFlag==on)   
  635.  {   
  636.           
  637.        backLight=off;   
  638.        setFlag=off;   
  639.        LCDLightFlag=off;   
  640.        switchFlag=off;       
  641.        endTimeCount++;   
  642.   if(endTimeCount%3==0)   
  643.    bz=!bz;   
  644.   if(endTimeCount==100)   
  645.   {   
  646.    bz=RBoff;   
  647.    endFlag=off;   
  648.    endTimeCount=0;   
  649.   }     
  650.  }   
  651. }   
  652.   
  653. //*********************设置标志为ON时的相关操作**********************************************************         
  654. void setFlagOn()   
  655. {    
  656.  if(setFlag==on)   
  657.  {   
  658.   if(setCount==1)   
  659.   {   
  660.     fiveSecondTime++;   
  661.     if(longKeyFlag==on)   
  662.     {   
  663.        backLightTime=0;    
  664.        fiveSecondTime=0;   
  665.        if(count%4==0)   
  666.        {   
  667.         timeNumber[2]++;   
  668.         if((timeNumber[3]==2)&&(timeNumber[2]==4))   
  669.         {   
  670.          timeNumber[3]=0;    
  671.          timeNumber[2]=0;   
  672.         }   
  673.         else  
  674.         {   
  675.          if(timeNumber[2]==10)   
  676.          {    
  677.           timeNumber[2]=0;   
  678.           timeNumber[3]++;    
  679.          }   
  680.         }   
  681.         timeNumberTemp[2]=timeNumber[2];//更新高2位显示数据   
  682.         timeNumberTemp[3]=timeNumber[3]; //更新高2位显示数据           
  683.        }    
  684.     }   
  685.     else  
  686.     {   
  687.        if(shortKeyFlag==on)   
  688.        {   
  689.         shortKeyFlag=off;    
  690.         fiveSecondTime=0;   
  691.         timeNumber[2]++;   
  692.         if((timeNumber[3]==2)&&(timeNumber[2]==4))   
  693.         {   
  694.          timeNumber[3]=0;   
  695.          timeNumber[2]=0;   
  696.         }   
  697.         else  
  698.         {   
  699.          if(timeNumber[2]==10)   
  700.          {   
  701.           timeNumber[2]=0;   
  702.           timeNumber[3]++;   
  703.              
  704.          }   
  705.         }   
  706.         timeNumberTemp[2]=timeNumber[2];   
  707.         timeNumberTemp[3]=timeNumber[3];             
  708.        }   
  709.     }   
  710.     if(fiveSecondTime%10==0)   
  711.       halfSecondFlag=!halfSecondFlag;   
  712.     if((longKeyFlag==off)&&(halfSecondFlag==off))//每一秒闪烁一次   
  713.     {   
  714.       bWeiTemp=10;   
  715.       qWeiTemp=10;        
  716.       colFlag=on;   
  717.     }     
  718.     else  
  719.     {   
  720.       gWeiTemp=timeNumber[0];   
  721.       sWeiTemp=timeNumber[1];          
  722.       bWeiTemp=timeNumber[2];   
  723.       qWeiTemp=timeNumber[3];   
  724.       colFlag=on;   
  725.     }   
  726.     if(fiveSecondTime==100)   
  727.     {   
  728.       fiveSecondTime=0;   
  729.       setFlag=off;   
  730.       setCount=0;   
  731.       keyOnTime=0;   
  732.     }     
  733.       
  734.   }   
  735. //××××××××××××××××××××××× if(setCount==2)时的处理程序  ××××××××××××××××××××××××××      
  736.   if(setCount==2)   
  737.   {    
  738.      fiveSecondTime++;   
  739.      if(longKeyFlag==on)   
  740.      {   
  741.         backLightTime=0;    
  742.         fiveSecondTime=0;   
  743.         if(count%4==0)   
  744.         {   
  745.          timeNumber[0]++;   
  746.          if(timeNumber[0]==10)   
  747.          {   
  748.           timeNumber[0]=0;   
  749.           timeNumber[1] ++;   
  750.           if(timeNumber[1]==6)   
  751.           {   
  752.            timeNumber[0]=0;   
  753.            timeNumber[1]=0;   
  754.           }    
  755.          }             
  756.          timeNumberTemp[0]=timeNumber[0];   
  757.          timeNumberTemp[1]=timeNumber[1];            
  758.         }    
  759.      }   
  760.      else  
  761.      {   
  762.         if(shortKeyFlag==on)   
  763.         {   
  764.          shortKeyFlag=off;   
  765.          fiveSecondTime=0;   
  766.          timeNumber[0]++;   
  767.          if(timeNumber[0]==10)   
  768.          {   
  769.           timeNumber[0]=0;   
  770.           timeNumber[1] ++;   
  771.           if(timeNumber[1]==6)   
  772.           {   
  773.            timeNumber[0]=0;   
  774.            timeNumber[1]=0;   
  775.           }    
  776.          }    
  777.          timeNumberTemp[0]=timeNumber[0];   
  778.          timeNumberTemp[1]=timeNumber[1];             
  779.         }   
  780.      }   
  781.      if(fiveSecondTime%10==0)   
  782.          halfSecondFlag=!halfSecondFlag;   
  783.      if((longKeyFlag==off)&&(halfSecondFlag==off))//每一秒闪烁一次   
  784.      {   
  785.          gWeiTemp=10;   
  786.          sWeiTemp=10;         
  787.          colFlag=on;   
  788.      }    
  789.      else  
  790.      {   
  791.          gWeiTemp=timeNumber[0];   
  792.          sWeiTemp=timeNumber[1];          
  793.          bWeiTemp=timeNumber[2];   
  794.          qWeiTemp=timeNumber[3];         
  795.          colFlag=on;   
  796.      }   
  797.      if(fiveSecondTime==100)   
  798.      {   
  799.          fiveSecondTime=0;   
  800.          setFlag=off;//回到上一次状态   
  801.          setCount=0;//   
  802.          keyOnTime=0;   
  803.      }   
  804.   }   
  805. //×××××××××××××××××××××××× setCount==3 时的处理程序段××××××××××××××××××   
  806.   if(setCount==3)   
  807.   {             
  808.     if(hourFlag==off)   
  809.     {                 
  810.            if((timeNumber[3]==0)&&(timeNumber[2]==0))   
  811.            {   
  812.           hourFlag=on;    
  813.           count2=0;        
  814.           timeNumber[3]=timeNumber[1];   
  815.           timeNumber[2]=timeNumber[0];          
  816.           timeNumber[1]=0;   
  817.           timeNumber[0]=0;           
  818.             }   
  819.             else  
  820.             {   
  821.                 if(count%20==0)   
  822.                 {           
  823.            count2++;   
  824.            if(count2==60)   
  825.            {   
  826.             count2=0;   
  827.             timeNumber[0]--;   
  828.   &nbs p;         if(timeNumber[0]<0)   
  829.             {   
  830.              timeNumber[0]=9;   
  831.              timeNumber[1]--;   
  832.              if(timeNumber[1]<0)   
  833.              {   
  834.               timeNumber[1]=5;   
  835.               timeNumber[2]--;    
  836.               if(timeNumber[2]<0)   
  837.               {   
  838.                timeNumber[2]=9;   
  839.                timeNumber[3]--;    
  840.                }     
  841.                }    
  842.                 }   
  843.                 }   
  844.                }   
  845.             }   
  846.         }        
  847.          else  
  848.         {   
  849.              if(count%20==0)   
  850.              {   
  851.                timeNumber[0]--;   
  852.          if(timeNumber[0]<0)   
  853.          {   
  854.           timeNumber[0]=9;   
  855.           timeNumber[1]--;   
  856.           if(timeNumber[1]<0)   
  857.           {   
  858.            timeNumber[1]=5;   
  859.            timeNumber[2]--;   
  860.            if(timeNumber[2]<0)   
  861.            {   
  862.             timeNumber[2]=9;   
  863.             timeNumber[3]--;   
  864.             if(timeNumber[3]<0)   
  865.             {   
  866.              endFlag=on;   
  867.              hourFlag=off;   
  868.              bz=RBon;   
  869.              recover();   
  870.              gWeiTemp=timeNumber[0];   
  871.              sWeiTemp=timeNumber[1];          
  872.              bWeiTemp=timeNumber[2];   
  873.              qWeiTemp=timeNumber[3];    
  874.             }    
  875.            }     
  876.           }   
  877.          }   
  878.        }      
  879.            
  880.           }         
  881.     gWeiTemp=timeNumber[0];   
  882.     sWeiTemp=timeNumber[1];          
  883.     bWeiTemp=timeNumber[2];   
  884.     qWeiTemp=timeNumber[3];   
  885.     colFlag=on;   
  886.   }                               
  887.  }   
  888.  else  
  889.  {   
  890.   setCount=0;   
  891.  }    
  892. }   
  893.   
  894. //*******************************col每 一 秒 闪 烁 一 次********************************************************   
  895. void colFliker(void)    
  896. {   
  897.  if(count%10==0)   
  898.  {   
  899.   colFlag=!colFlag;   
  900.  }    
  901. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4