⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switch_read.c

📁 CODE for embedded C ,hand coding version
💻 C
字号:
/*---------------------------------------------------------*-
   Switch_read.c(v1.00)
   Author : 06_Digital_Media 
  ------------------------------------------------------------
  A simple 'switch input'program for the 8051
  -Reads (and debounces) switch input on Pin1^0
  -If switch is pressed,change Port 3 output

 -*-------------------------------------------------------*/
 #include<Reg52.h>
 //Connect switch to this pin
 sbit Switch_pin = P1^0;

 //Display switch status on this port
 #define Output_port P3

 //Return values from Switch_Get_Input()
 #define SWITCH_NOT_PRESSED (bit) 0
 #define SWITCH_PRESSED  (bit) 1
 

 //Function prototypes
 void SWITCH_Init(void);
 bit SWITCH_Get_Input(const unsigned char DEBOUNCE_PERIOD);
 void DISPLAY_SWITCH_STATUS_Init(void);
 void DISPLAY_SWITCH_STATUS_Update(const bit);
 void DELAY_LOOP_Wait(const unsigned int DELAY_MS);

 /*------------------------------------------------------------*/
 void main(void){
   bit Sw_state;
   //Init functions
   SWITCH_Init();
   DISPLAY_SWITCH_STATUS_Init();

   while(1){
    Sw_state = SWITCH_Get_Input(30);
	DISPLAY_SWITCH_STATUS_Update(Sw_state);
   }
 }

 /*-------------------------------------------------------------*-
  SWITCH_Init()
  Initialization function for the switch library
  -*----------------------------------------------------------*/
 void SWITCH_Init(void){
  Switch_pin =1;
 }
 /*-------------------------------------------------------------*-
  SWITCH_Get_Input()
  Reads and debounces a mechanical switch as follows:
  1 If switch is not pressed ,return SWITCH_NOT_PRESSED
  2 If switch is pressed,wait for DEBOUNCE_PERIOD (in ms),
    then
	a.If switch is still pressed ,return SWITCH_PRESSED.
	b.If switch is not pressed,return SWITCH_NOT_PRESSED

  See Switch_Wait.h for details of return values

  -*-----------------------------------------------------------*/
  bit SWITCH_Get_Input(const unsigned char DEBOUNCE_PERIOD)
  {
   bit Return_value =  SWITCH_NOT_PRESSED;
   if(Switch_pin == 0){
    //Switch is pressed
	//Debounce - just wait ...
    DELAY_LOOP_Wait(DEBOUNCE_PERIOD);
	//Check switch again
	if(Switch_pin == 0){
	 Return_value = SWITCH_PRESSED;
	 }

   }
    // Now return switch value;
	return Return_value;
   }
  /*----------------------------------------------------------*-
    DISPLAY_SWITCH_STATUS_Init()
	Initialization function for the DISPLAY_SWITCH_STATUS library
	-*----------------------------------------------------------*/
   void DISPLAY_SWITCH_STATUS_Init(void){
    Output_port = 0xF0;
   }
  /*---------------------------------------------------------*-
   DISPLAY_SWITCH_STATUS_Update()
   Simple function to display data (SWITCH_STATUS)
   on LEDS connected to port(Output_Port)

   -*------------------------------------------------------------*/

  void DISPLAY_SWITCH_STATUS_Update(const bit SWITCH_STATUS){
    if(SWITCH_STATUS == SWITCH_PRESSED){
	   Output_port = 0x0F;
	  }else{
	   Output_port = 0xF0;
	  }
  }
  /*------------------------------------------------------------*-
  DELAY_LOOP_Wait()
  Delay duration varies with parameter 
  Parameter is,*ROUGHLY*, the delay ,in milliseconds
  on 12MHz 8051 (12 osc cycles)
  You need to adjust the timing for your application
  -*---------------------------------------------------------------*/
  void DELAY_LOOP_Wait(const unsigned int DELAY_MS){
   unsigned int x ,y ;
   for( x = 0 ; x <= DELAY_MS; x++){
    for ( y= 0 ; y <= 120 ; y++);
   } 
  }

  /*----------------------------------------------------------*-
    -------END OF FILE ---------------------------------------
  --*----------------------------------------------------------*/

⌨️ 快捷键说明

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