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

📄 keyfuncx.c

📁 Keil 8051 C example RS232 to I2c
💻 C
字号:
//#include <at89x52.H>              // SFR definition header file
#include <reg54.h>
#include <stdio.h>                 // prototype declarations for I/O functions
#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include "function.h"
#include "SystemEvent.h"
#include "UART.h"
#include "ExtVar.h"
#include "RTOS.h"
#include "string.h"
  
code unsigned char _Str1[]={"Run HDMIDemo0.    "};

code unsigned char _Str2[]={"Finish...          "};

code unsigned char _Str3[]={"Continue.          "};

code unsigned char _Str4[]={"Break.             "};
 
code unsigned char _DemoItemsCount[8]={
1,3,4,2,2,3,3,6/*,3,5,3*/}; 

//unsigned char _StateFlag=_Initiate;

void RunAL720DemoX(unsigned char _DemoType,unsigned char _DemoIndeX);

code unsigned char *_DemoXLabel[]={
"0.Init            ",
"1.H/V sync detect ",
"2.IR     detect   ",
"3.Input select    ",
"4.Read EDID VGA   ",
"5.Read EDID HDMI  ",
"6.I2C read        ",
"7.I2C write       "
/*
"8.Set data length ",
"9.Read I2C        ",
"a.Write I2C       "
*/
};

//"1.H/V sync detect ",
#define _H_freq	 0
#define _V_freq	 1
#define _Video_mode	 2
#define _Quad_4_1_CS	 3

code unsigned char *_Demo0Label[]={
"a.H freq    ",
"b.V freq    ",
"c.Video mode",
"Exit        "
};

//"2.IR     detect   ",
#define _16ChMonitor 	 0
#define _13ChMonitor 	 1
#define _9ChMonitor		 2
#define _6ChMonitor		 3
#define _4ChMonitor	 	 4
#define _1x2ChMonitor 	 5
#define _2x1ChMonitor	 6
#define _1ChMonitor		 7


code unsigned char *_Demo1Label[]={
"a.Capture code  ",
"b.Length of code",
"c.decoding      ",
"d.Reset         ",
"Exit            "
};

//"3.Input select",
#define _Quad	 	 0
#define _Quad4Pip	 1
#define _Full1Pip	 2


code unsigned char *_Demo2Label[]={
"a.VGA            ",
"b.HDMI           ",
"Exit             " 
}; 

//"4.Read EDID VGA   ",
#define _ShowOSD_A 	 0
#define _ShowOSD_B	 1

code unsigned char *_Demo3Label[]={ 
"a.check sum      ",
"b.Browse         ", 
"Exit             " 
};  

//"5.Read EDID HDMI  ",
#define _4Live_MultPlayBack	 	 0
#define _4Live_PopPlayBack	 	 1
#define _4Live_QuadPlayBack		 2

code unsigned char *_Demo4Label[]={
"a.check sum      ",
"b.Browse         ", 
"Exit             " 
};
  
//"6.I2C read      ",
code unsigned char *_Demo5Label[]={
"a.ID?            ",
"b.Sub address    ",
"c.Browse         ",
"Exit             " 
}; 

#define _Full_V1_PIP_V2	 		 0
#define _Full_V2_PIP_V1	 		 1
#define _V2_XMirror_PIP_V1		 2
#define _V2FlipPIP_V1	 		 3
#define _V2_YFlip_PIP_V1	 	 4
#define _V2_PIP_V1				 5

//"6.I2C write      ",
code unsigned char *_Demo6Label[]={
"a.ID?            ",
"b.Sub address    ",
"c.Set data       ",
"Exit             " 
};  


#define _Demo_Init 0x00
#define _Demo_0 1
#define _Demo_1 2
#define _Demo_2 3
#define _Demo_3 4
#define _Demo_4 5
#define _Demo_5 6
#define _Demo_6 7
#define _Demo_7 8
/*
#define _Demo_8 9
#define _Demo_9 0x0a
*/

sbit _Key_In=P1^4;
 
unsigned int ButtomKeyDetect(void){
unsigned char _gx; 
//			
						   _Key_In=0;

					       P1=0xf0;
						   _gx=P1;
						   _gx&=0xf0;
						   			
						   _Key_In=1; 
						   					 						  
                      	   if(_gx!=0xf0) 	 return(_KeyPress); 					           								 	
                           else  return(_KeyRelease);
}

unsigned char DetectButtomKey(void){
unsigned char _ax;
             _Key_In=0; 
		     P1=0xf0;
             _ax=P1;
			 _ax&=0xf0;          
             _Key_In=1;
             return(_ax);
}
 

void ShowAL720DemoX(unsigned char _DemoTypeX,unsigned char _DemoIndexX){

	if(_DemoIndexX==0){
		PrintAString("                    ",20,0x00);
	 	PrintAString(_DemoXLabel[_DemoTypeX],18,0x00);
		}

		PrintAString("                    ",20,0x40);

		switch(_DemoTypeX){
		case _Demo_Init:
		 
		break;
		case _Demo_0:
		 
	PrintAString(_Demo0Label[_DemoIndexX],14,0x40);
		break;
		case _Demo_1:
	 
	PrintAString(_Demo1Label[_DemoIndexX],14,0x40);
		break;
		case _Demo_2:
		 
    PrintAString(_Demo2Label[_DemoIndexX],10,0x40);
		break;
		case _Demo_3:
		 
	PrintAString(_Demo3Label[_DemoIndexX],11,0x40);
		break;
		case _Demo_4:
		 
	PrintAString(_Demo4Label[_DemoIndexX],20,0x40);
		break;
		case _Demo_5:
		 
 	PrintAString(_Demo5Label[_DemoIndexX],12,0x40);
		break;
		case _Demo_6:
		 
    PrintAString(_Demo6Label[_DemoIndexX],19,0x40);
		break;

			 
		}
 
}


void SelectAL720DemoX(unsigned char _DemoTypeX){ 
	PrintTestPage();
	PrintAString("                    ",20,0x40);
 	PrintAString(_DemoXLabel[_DemoTypeX],18,0x40);
}

//idata unsigned char _dx[0x0a];

extern void InitSERIALPort(void);
extern idata unsigned int _vx;
void FunctionDispatch(unsigned char _charx){
unsigned char _dx;
		PrintAString("                ",16,0x40);
		 switch(_charx){  
       /*   
           case 0x00: // up

						switch(_KeyPressLevel){
						case 0:
							if(_DemoType<0x07) _DemoType++;
							else _DemoType=0;
							_DemoIndeX=0;
		 					SelectAL720DemoX(_DemoType);
						break;
						case 1:
		   				if(_DemoIndeX<(_DemoItemsCount[_DemoType])) _DemoIndeX++;
						else _DemoIndeX=0;
						 ShowAL720DemoX(_DemoType,_DemoIndeX);
						break;
						}
 
		   			break;
           case 0x01: // down
						switch(_KeyPressLevel){
						case 0:
							if(_DemoType>0) --_DemoType;
							else _DemoType=0x07;
							_DemoIndeX=0;
		 					SelectAL720DemoX(_DemoType);
						break;
						case 1:
		   			 	if(_DemoIndeX>0) --_DemoIndeX;
						else _DemoIndeX=(_DemoItemsCount[_DemoType]);
						 	 ShowAL720DemoX(_DemoType,_DemoIndeX);	
						break;
						}

					
		   			break;
        
           case 0x02:
 						switch(_KeyPressLevel){
						case 0:
							
								if(_DemoType==0){//	
							//	RunAL720DemoX(_DemoType,_DemoIndeX);
								PrintAString("        Ready!  ",20,0x40);
								_StateFlag=_AfterProcess;
								_KeyPressLevel=0x00;}
								else {
									_KeyPressLevel=0x01;
								_DemoIndeX=0;
								ShowAL720DemoX(_DemoType,_DemoIndeX);	
								}
						break;
						case 1:
							if(_DemoIndeX==(_DemoItemsCount[_DemoType])){	_KeyPressLevel=0x00;
							    PrintAString("                ",20,0x40);
 
								_KeyPressLevel=0;

							 	SelectAL720DemoX(_DemoType);
								_StateFlag=_Idle;//AfterProcess;
							}
							 
						 
							else{
                           
		   			 			PrintAString("    Process...  ",20,0x40);
							  //  RunAL720DemoX(_DemoType,_DemoIndeX);
								PrintAString("        Ready!  ",20,0x40);
								_StateFlag=_AfterProcess;
                                }
 
					 
						break;
						}

		   			break;
*/
			case 0x00:
					 
			case 0x01:
				
			case 0x02:
				PrintAInt(_vx,0x40);
			_vx++;
					break;
   		   case 0x03:
 					//	sprintf(_dx,"PCON=0x%2x",PCON);
			 			PrintAString("PCON=0x",7,0x40);
						_dx=PCON;
						PrintAShortInt(_dx,0x48);
		  		    break;
		   case 0x04:	
				//		sprintf(_dx,"SCON=0x%2x",SCON);
			 	//		PrintAString(_dx,9,0x40);
						PrintAString("SCON=0x",7,0x40);
						_dx=SCON;
						PrintAShortInt(_dx,0x48);
		   			break;	
	  	   case 0x05: 
				//		sprintf(_dx,"TMOD=0x%2x",TMOD);
			 	//		PrintAString(_dx,9,0x40);
						PrintAString("TMOD=0x",7,0x40);
					    _dx=TMOD;
						PrintAShortInt(_dx,0x48);
		   			break;
           case 0x06:  
 				//		sprintf(_dx,"TCON=0x%2x",TCON);
			 	//		PrintAString(_dx,9,0x40);
						PrintAString("TCON=0x",7,0x40);
						_dx=TCON;
						PrintAShortInt(_dx,0x48);
		   			break;
   		   case 0x07: 
		   				PrintAString("Initial UART",12,0x40);
					_FuncX|=_UARTInit;
					os_send_signal(_Init);

		   			break;
           case 0x08:   
						PrintAString("Initial IR",10,0x40);
							_FuncX|=_IRInit;						
				 			os_send_signal(_Init);
		   			break;
  		   case 0x09:
						PrintAString("IR interrupt",12,0x40);
		   			break;
           case 0x0a: 
		   				
		   			break;
		   case 0x0b:	
		   		//	break;	
	  	   case 0x0c: 
		   		//	break;
           case 0x0d:   
		   		//	break;
		   case 0x0e: 
		   		//	break;
  		   case 0x0f:
		   		//	break;
           case 0x10: 
		   		//	break;
		   case 0x11:	
		   		//	break;
		   case 0x12: 
		   		//	break;
           case 0x13:   
		   		//	break;
		   case 0x14: 
		   		//	break;
  		   case 0x15:
		   		//	break;
           case 0x16: 
		   		//	break;
		   case 0x17:	
		   		//	break;
		   case 0x18:
 		   		//	break;
           case 0x19:   
		   		//	break;
		   case 0x1a:
 		   		//	break;
  		   case 0x1b:
		   		//	break;
           case 0x1c: 
		   		//	break;
		   case 0x1d:	
		   		//	break;	
		   case 0x1e: 
		   		//	break;
           case 0x1f:   
		   		//	break;
		   case 0x20: 
		   		//	break;
  		   case 0x21:
		   		//	break;
           case 0x22: 
		   		//	break;
		   case 0x23:	
		   	 
		   			break;
		 }
   }

 

void DispatchKeyFunction(unsigned char _charx){
			FunctionDispatch(_charx);
	
 	/*
		switch(_StateFlag){
			case _Initiate:
						_DemoType=0;_DemoIndeX=0;
						SelectAL720DemoX(_DemoType);
						_StateFlag=_Idle;
			break;
			case _Ready:
						if(_DemoType==0){	PrintAString("       ",7,0x48);}
						else{
					    ShowAL720DemoX(_DemoType,_DemoIndeX);
						}
							_StateFlag=_Idle;
			break;
			case _AfterProcess:
						ShowAL720DemoX(_DemoType,_DemoIndeX);//	SelectAL720DemoX(_DemoType);//
							_StateFlag=_Idle;
			break;
			default:	FunctionDispatch(_charx);
			break;
		}
*/

 
	 
}

code unsigned char _KeyBoardMap[]={
0,1,4,7,
0x0a,2,5,8,
0x0b,3,6,9,
0x0f,0x0e,0x0d,0x0c
};

unsigned char KeyPressDecode(void){  
unsigned char _dx;
unsigned char _Mask=0x01;
char _ix,_jx; 
 
			_ix=0;	    
		do{
			P1=~_Mask;
			_dx=(P1&0xf0);
				_Mask=_Mask<<1;
			 _ix++;
		} 
		while((_dx==0xf0)&&(_ix<4)); 
 				--_ix;

		_dx=(~_dx&0xf0);
		 _jx=0;
		while(_dx!=0x10){
			_dx>>=1;
			_jx++;
		}  
		_dx=(3-_jx)*4+_ix; 
           
 			P1=0xf0;  
       return(_KeyBoardMap[_dx]); 			
}	

 

⌨️ 快捷键说明

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