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

📄 key.c

📁 rfproV02发送程序和80C51演示程序
💻 C
字号:

/*----------------------------- Program Overview -------------------------------
                 Device Name:	AT89S52
                         ROM: 	8 K bytes
                         RAM: 	512 bytes
        Chip Basic Functions:	40pin, 32I/O, 16 bit Timer *3, 8 bit UART *1, Eight Interrupt Sources   
                    		4.0V to 5.5V Operating Range, OSC 11.0592 MHz (0.9216 us)
                    Complier:	keil C 750
                   Simulator:	keil C 750
                  Programmer:   
                   File Name:	key.c
              File Functtion:	key function
                   Copyright:	XIAZHAOJUN
 First Version Finished Date:	2007.11.6
                      Others: 	
------------------------------- Modified Note ----------------------------------
                 Old Version:	
                 New Version:
                New CheckSum: 
                    Modifier:
               Modified Date:
          Modified Causation:
               Modified Mean: 
-------------------------------------------------------------------------------*/

//----------------------------- Include ----------------------------------------
#include <reg52.h>
//#include <stdio.h>  
#include<intrins.h>
#include<com.h>
#include<lcm.h>
#include<fbuzz.h>
#include<cmain.h>


//----------------------------- SFR Definition ---------------------------------



//----------------------------- Macro Definition -------------------------------
#define uchar unsigned char
#define uint unsigned int

//----------------------------- Constant Definition ----------------------------



//----------------------------- Variable Definition ----------------------------
	unsigned char data key_io;
	unsigned char data keyflag;
	unsigned char data keyedge_old;
	
//	unsigned char keydat;
	unsigned char data keyasic;
	unsigned char data keytabdat;
//----------------------------- Bit Definition ---------------------------------
	unsigned char bdata keyedge;
//sbit	flag		= keyedge^7;	
sbit	b_off_fg   = keyedge^6;	// off   
sbit	b_on_fg	   = keyedge^5;	// on
sbit	b_stop_fg  = keyedge^4;	// stop
sbit	b_right_fg = keyedge^3;	// right
sbit	b_left_fg  = keyedge^2;	// left
sbit	b_down_fg  = keyedge^1;	// down  
sbit	b_up_fg    = keyedge^0;	// up 


/*----------------------------- Subroutine -------------------------------------
        Name: key_initial
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/	
void key_initial(void){

	keyedge=0x00;
	keyflag=0x00;
	keyedge_old=0x00;
	key_io=0x00;
	
//	keydat=0x00;
	keyasic=0x00;
}

/*----------------------------- Subroutine -------------------------------------
        Name: Key_Det_col
    Function: read io
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
uchar Key_Det_col(uchar keycol){
	uchar keyio_dat;
	P1=(~keycol);
	_nop_();
	_nop_();
	keyio_dat=(~P1);
	return(keyio_dat);
}

/*----------------------------- Subroutine -------------------------------------
        Name: Key_Detect
    Function: 
       Entry: key_io
        Exit: keyflag,keyedge_old,keyedge
     Caution: 
-------------------------------------------------------------------------------*/
void Key_Detect(void){	
	static unsigned char state=2;
	unsigned char keybuf;
	
	state++;
	if(state>2)
		state=0x00;
	if(state<2)	
		keybuf=Key_Det_col(state+1);
	switch (state){
		case 0:
			key_io&=0xf0;	//first cow
			key_io|=(keybuf>>4);
		break;
		
		case 1:  		//second cow
			key_io&=0x0f;
			keybuf&=0x70;
			key_io|=keybuf;
		break;
		
		case 2:
			keybuf=keyflag&key_io;
			
		//方式0 限制新的按建的检测,必须等旧的按建松开,
		//才去检测新的按建,更新为 方式1  ,可以解决这个问题。
		//方式0
		//	if(keybuf==0){
		//		keyflag=key_io;    
		//		keyedge_old=0x00;
		//	}
		//	else {
		//		keyedge|=(keybuf&(~keyedge_old));
		//		keyedge_old=keybuf;
		//	}
		//方式1
			keyflag=key_io;    	
			keyedge|=(keybuf&(~keyedge_old));
			keyedge_old=keybuf;
			
		break;
	}	
}


/*----------------------------- Subroutine -------------------------------------
        Name: key_doout
    Function: get out key ,and set send flag, clear timer
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void key_out_pro(void){
//	unsigned  char i;
	keyedge&=0x7f;
	if(keyedge!=0){
		fbuzz_en();
		comcmd=Write_COM_DATA;  
		b_send_fg=1;
		b_disp=1;
		lcm_md=0x03;		
//keyright
		if(b_right_fg){
			keytabdat=0x04;
			comdata&=0xf0;
			comdata|=0x04;	
		}
//keyleft
		if(b_left_fg){
			keytabdat=0x03;
			comdata&=0xf0;
			comdata|=0x03;
		}
//keydown
		if(b_down_fg){
			keytabdat=0x02;
			comdata&=0xf0;
			comdata|=0x02;
		}
//keyup		
		if(b_up_fg){  
			keytabdat=0x01;
			comdata&=0xf0;
			comdata|=0x01;
		}

//keystop
		if(b_stop_fg){
			keytabdat=0x00;
			comdata&=0xf0;
		}
		
//keyon
		if(b_on_fg){ 
			keytabdat=0x06;
			comdata&=0x0f;
			comdata|=0x10;
		}
	
 //keyoff
		if(b_off_fg){
			keytabdat=0x05;	
			comdata&=0x0f;
		}
				
		keyedge=0x00;
	}
}

⌨️ 快捷键说明

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