mytask.c

来自「时间触发式单片机最小系统」· C语言 代码 · 共 119 行

C
119
字号
/*----------------------------------------------*-
 Mytask.c
 create my own task
-*----------------------------------------------*/
#include"main.h"
#include"mytask.h"

#define state1 0x01
#define state2 0x02

uchar state;
bit key0_pressed_flag=0;
bit key1_pressed_flag=0; 
bit key2_pressed_flag=0; 
bit key3_pressed_flag=0;
uint data timeout = 0x5000;
uchar  erect_measure_count=0;
   
void Mytask_Init(void)   
{   
 P3=0xff;                      
 state=state1;   
}                                    
void key_scan(void)                          //利用 state machine 进行键盘扫描
{    
  switch(state)
     {
     case state1:
        if(!key0||!key1||!key2||!key3)                               //低电平时表示被按下   
          state=state2;  

     case state2:
        if(!key0)
          {
           while(key0==0 && --timeout)
           key0_pressed_flag=1;
          }
        else if(!key1)
          {
           while(key1==0 && --timeout)

           key1_pressed_flag=1;
          }
        else if(!key2)
          {
           while(key2==0 && --timeout)
           key2_pressed_flag=1;
          }
        else if(!key3)
          {
           while(key3==0 && --timeout)
           key3_pressed_flag=1;
          }
           state=state1;
         break;
     }
}


void Mytask(void)
  {
    if(key0_pressed_flag)
     {
       measure_modify=0;
       delay4us();
       measure_modify=1;
       delay4us();
       state=state1;
       key0_pressed_flag=0;
     }
    else if(key1_pressed_flag)
     {
       erect_measure_count++;        //通过变量的自加来达到模拟开关计数的目的
           if(erect_measure_count==4)    
              erect_measure_count=0;
            switch(erect_measure_count)
               {
                 case 0: 
                   P12=1;
                   delay4us();
                   P12=0;
                   switch_modify0=0;
				   delay1us();
                   switch_modify1=0;
				   delay1us();
                   break;
                 case 1:
                   P12=1;
                   delay4us();
                   P12=0;
                   switch_modify0=0;
				   delay1us();
                   switch_modify1=1;
				   delay1us();
                   break;
                 case 2:
                   P12=1;
                   delay4us();
                   P12=0;
                   switch_modify0=1;
				   delay1us();
                   switch_modify1=0;
				   delay1us();
                   break;
                 case 3:
                   P12=1;
                   delay4us();
                   P12=0;
                   switch_modify0=1;
				   delay1us();
                   switch_modify1=1;
				   delay1us();
                   break;
               }
        key1_pressed_flag=0;
      }
   }
       

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?