您的位置:首页 > 其它

key scan

2015-10-20 10:55 309 查看
/*****************************************************************************************************
* Copyright (c) 2011,ÉîÛÚÊÐÖеÛÍþ¿Æ¼¼ÓÐÏÞ¹«Ë¾
* All rights reserved.
*
* ÎļþÃû³Æ£ºmain.c
* Îļþ±êʶ£ºHDC708
* Õª	Òª£ºÕû¸ö¹¤×÷µÄÖ÷Ì岿·Ö
* »·    ¾³: IDE Keilc4.20  ¾§Õñ 27MHZ  MCU RTD2120L
*
* µ±Ç°°æ±¾£º1.1
* ×÷	ÕߣºÐì½­Â×
* Íê³ÉÈÕÆÚ£º2012Äê02ÔÂ4ÈÕ
*
* È¡´ú°æ±¾£º1.0
* Ô­×÷Õß  £ºxjl
* Íê³ÉÈÕÆÚ£º20XXÄêXÔÂXÈÕ
* ¸ü¶àÐÅÏ¢£ºwww.DeviceWell.com
*****************************************************************************************************/
#ifndef _MAIN_H
#define _MAIN_H

#include <REG52.H>
#include "intrins.h"
#include "main.h"
#include "timer.h"
#include "IrCommodProcess.h"

bit g_systTime2Ms=0;     //¶¨Òåʱ¼ä±ê־λ
bit g_time10Ms=0;
int g_num;

void Timer0Init(void);
void KeyInit(void);

/*
*  º¯Êý½éÉÜ£º main
*  ÊäÈë²ÎÊý£º NULL
*
*  ·µ»ØÖµ  £º NULL
*/

void main()
{
unsigned char KeyValue = KEY_NULL;
unsigned char temp = 0 ;

DelayMs(2000);
Init_MCU();

Send_RS232_Byte(0XAA);
Send_RS232_Byte(0X55);

/*
LED_CS11 = 1 ; //Á÷Ë®µÆÊä³öÔÊÐí
LED_SEG = 0 ;
LED_DIG = 0 ;
*/
Timer0Init() ;
KeyInit() ;
EA = 1 ;

while(1){
Send_RS232_Byte(0XB2);
if(g_systTime2Ms)   //ÿ2msɨÃèÏÔʾ
{
g_systTime2Ms=0;
//	    DsipNum();
}
if(g_time10Ms) //ÿ10msɨÃèÒ»´Î°´¼ü
{
g_time10Ms=0;
switch (GetKey())
{
case (KEY_VALUE_1|KEY_DOWN):
Send_RS232_Byte(0X01);
break;
case (KEY_VALUE_1|KEY_LONG):
Send_RS232_Byte(0X02);
break;
case (KEY_VALUE_1|KEY_CONTINUE):
Send_RS232_Byte(0XA2);
break;
case (KEY_VALUE_1|KEY_UP):
Send_RS232_Byte(0XB2);
break;

case (KEY_VALUE_2|KEY_DOWN):
Send_RS232_Byte(0X03);
break;
case (KEY_VALUE_2|KEY_LONG):
Send_RS232_Byte(0X04);
break;
case (KEY_VALUE_2|KEY_CONTINUE):
Send_RS232_Byte(0XA4);
break;
case (KEY_VALUE_2|KEY_UP):
Send_RS232_Byte(0XB4);
break;

case (KEY_VALUE_3|KEY_DOWN):
Send_RS232_Byte(0X05);
break;
case (KEY_VALUE_3|KEY_LONG):
Send_RS232_Byte(0X06);
break;
case (KEY_VALUE_3|KEY_CONTINUE):
Send_RS232_Byte(0XA6);
break;
case (KEY_VALUE_3|KEY_UP):
Send_RS232_Byte(0XB6);
break;

case (KEY_VALUE_4|KEY_DOWN):
Send_RS232_Byte(0X07);
break;
case (KEY_VALUE_4|KEY_LONG):
Send_RS232_Byte(0X08);
break;
case (KEY_VALUE_4|KEY_CONTINUE):
Send_RS232_Byte(0XA8);
break;
case (KEY_VALUE_4|KEY_UP):
Send_RS232_Byte(0XB8);
break;
}
}

}
}

void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ;      //¶¨Ê±Æ÷0¹¤×÷·½Ê½1
TH0  =  0xfc ;      //¶¨Ê±Æ÷³õʼֵ
TL0  =  0x66 ;
TR0  = 1 ;
ET0  = 1 ;
}

/* 																		  s
*  º¯Êý½éÉÜ£º Init_MCU MCU³õʼ»¯
*  ÊäÈë²ÎÊý£º NULL
*
*  ·µ»ØÖµ  £º NULL
*/
void Init_MCU()
{
IE = 0x00;                   // Disable all interrupts

MCU_PIN_SHARE1_FF01 = 0x44;  //P3.0/P3.1 is GPIO
MCU_PORT6_OE_FF04   = 0xf0;  //P6.4,P6.5,P6.6,P6.7 output,others is input
MCU_PORT1_TYPE_FF09 = 0xfd;  //P11 is standard IO,others is  push-pull output
MCU_OPTION_FF38     = 0x81;  //bit0=1 select ClockOut=PLL

T2CON = 0x00;
TH2 = 0;
TL2 = 0;
TR2 = 1;                     // Enable Timer2
RCAP2L = 0x1c;               //0x10000-0xa81c=0x57e4=22500,22500 X 27/12 =10000 ,10MS
RCAP2H = 0xa8;
}

void KeyInit(void)
{
Key1 = 1 ;
Key2 = 1 ;
Key3 = 1 ;
Key4 = 1 ;
}

void Timer0() interrupt 1     //ÖжϺ¯Êý
{
static s_countFor10Ms=0;
TH0=0XF8;
TL0=0XCC;
g_systTime2Ms=1;
if(++s_countFor10Ms>=5)
{
s_countFor10Ms=0;
g_time10Ms=1;
}
}

#endif


/*****************************************************************************************************
* Copyright (c) 2011,ÉîÛÚÊÐÖеÛÍþ¿Æ¼¼ÓÐÏÞ¹«Ë¾
* All rights reserved.
*
* ÎļþÃû³Æ£ºbus.c
* Îļþ±êʶ£ºHDC708
* Õª	Òª£ºÄ£Äâ´®¿Ú·¢ËͲ¿·Ö
* »·    ¾³: IDE Keilc4.20  ¾§Õñ 27MHZ  MCU RTD2120L
*
* µ±Ç°°æ±¾£º1.1
* ×÷	ÕߣºÐì½­Â×
* Íê³ÉÈÕÆÚ£º2012Äê02ÔÂ4ÈÕ
*
* È¡´ú°æ±¾£º1.0
* Ô­×÷Õß  £ºxjl
* Íê³ÉÈÕÆÚ£º20XXÄêXÔÂXÈÕ
* ¸ü¶àÐÅÏ¢£ºwww.DeviceWell.com
*****************************************************************************************************/

#include "reg52.h"
#include "intrins.h"
#include "main.h"

void Send_SONY_Byte_BaudRate(unsigned char wdata)
{
bit b0,b1,b2,b3,b4,b5,b6,b7;

b0=wdata&0x01;
b1=wdata&0x02;
b2=wdata&0x04;
b3=wdata&0x08;
b4=wdata&0x10;
b5=wdata&0x20;
b6=wdata&0x40;
b7=wdata&0x80;

SONY=0;  ///start bit
Delay_52us();
SONY=b0;
Delay_52us();
SONY=b1;
Delay_52us();
SONY=b2;
Delay_52us();
SONY=b3;
Delay_52us();
SONY=b4;
Delay_52us();
SONY=b5;
Delay_52us();
SONY=b6;
Delay_52us();
SONY=b7;
Delay_52us();
SONY=1; //stop bit
Delay_52us();
SONY=1;
Delay_52us();
}
/*
*  º¯Êý½éÉÜ£º Send_RS232_Byte  pc 115200
*  ÊäÈë²ÎÊý£º unsigned char wdata
*
*  ·µ»ØÖµ  £º NULL
*/
void Send_RS232_Byte(unsigned char wdata)
{
bit b0,b1,b2,b3,b4,b5,b6,b7;

b0=wdata&0x01;
b1=wdata&0x02;
b2=wdata&0x04;
b3=wdata&0x08;
b4=wdata&0x10;
b5=wdata&0x20;
b6=wdata&0x40;
b7=wdata&0x80;

Send=0;  ///start bit
Delay_8us();
Send=b0;
Delay_8us();
Send=b1;
Delay_8us();
Send=b2;
Delay_8us();
Send=b3;
Delay_8us();
Send=b4;
Delay_8us();
Send=b5;
Delay_8us();
Send=b6;
Delay_8us();
Send=b7;
Delay_8us();
Send=1; //stop bit
Delay_8us();
Send=1;
Delay_8us();
}

void Delay_52us()
{
unsigned char i;
//	for(i=0;i<7;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //24M
//	for(i=0;i<7;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //24.576M
//for(i=0;i<6;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P5/P6/P7
/*9600 104us*/
for(i=0;i<112;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P3

/*19200 52us*/
//for(i=0;i<55;i++)   _nop_(); _nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_(); //27M P3

/*38400 26us*/
//  for(i=0;i<26;i++)  _nop_(); _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P3

//	for(i=0;i<7;i++)   _nop_(); _nop_();_nop_(); //27M P0/P1/P2/P3

}

void Delay_8us()
{
unsigned char i;
//	for(i=0;i<7;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //24M
//	for(i=0;i<7;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //24.576M
//for(i=0;i<6;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P5/P6/P7
/*115200 8us*/
//for(i=0;i<6;i++)   _nop_();  _nop_();_nop_();  _nop_();_nop_(); _nop_();_nop_();	 _nop_();_nop_();//27M  P3

/*38400 26us*/
//for(i=0;i<26;i++)  _nop_(); _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P3

/*9600 104us*/
//for(i=0;i<112;i++)   _nop_();  _nop_();_nop_();_nop_(); _nop_(); //27M P3

for (i = 0; i < 46; i++)
_nop_(); 	//22.1184M P1,2,3 52us 19200

/*19200 52us*/
//for(i=0;i<55;i++)   _nop_(); _nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_(); //27M P3

//for(i=0;i<7;i++)   _nop_(); _nop_();_nop_(); //27M P0/P1/P2/P3

}
////////////////////////Public/////////////////
void DelayMs(int ms)
{
int ii,j;
for(j=0;j<ms;j++)
{
for(ii=0;ii<580;ii++)
_nop_();
}
}
////////////////////////Public/////////////////
/*
void DelayUs(unsigned char us)
{
unsigned char i;
for(i=0;i<us;i++)
_nop_();
} */

/*****************************************************************************************************
* Copyright (c) 2011,ÉîÛÚÊÐÖеÛÍþ¿Æ¼¼ÓÐÏÞ¹«Ë¾
* All rights reserved.
*
* ÎļþÃû³Æ£ºIrCommodProcess.c
* Îļþ±êʶ£ºHDC708
* Õª	Òª£ººìÍâ½âÂëµÄ´¦Àí²¿·Ö
* »·    ¾³: IDE Keilc4.20  ¾§Õñ 27MHZ  MCU RTD2120L
*
* µ±Ç°°æ±¾£º1.1
* ×÷	ÕߣºÐì½­Â×
* Íê³ÉÈÕÆÚ£º2012Äê02ÔÂ6ÈÕ
*
* È¡´ú°æ±¾£º1.0
* Ô­×÷Õß  £ºxjl
* Íê³ÉÈÕÆÚ£º20XXÄêXÔÂXÈÕ
* ¸ü¶àÐÅÏ¢£ºwww.DeviceWell.com
*****************************************************************************************************/
#ifndef _KEY_H
#define _KEY_H

#include <REG52.H>
#include "main.h"
#include "IrCommodProcess.h"

bit bOsdFlag   = 0;                      /*OSD¿ªÆô±êÖ¾¿ªÊ¼Îª0¹Ø±Õ*/
bit bChangFlag = 0;
unsigned char ucReslutionIndex = 0;

/*
*  º¯Êý½éÉÜ£º ½«°´½¡IDת»¯Îª¶ÔÓ¦µÄÏûÏ¢±êÖ¾
*  ÊäÈë²ÎÊý£º NULL
*  Êä³ö²ÎÊý£º NULL
*  ·µ»ØÖµ  £º NULL
*/
void KeyMsgProcess()
{

}

static unsigned char KeyScan(void)
{
if(Key1 == 0) return KEY_VALUE_1 ;
if(Key2 == 0) return KEY_VALUE_2 ;
if(Key3 == 0) return KEY_VALUE_3 ;
if(Key4 == 0) return KEY_VALUE_4 ;

return KEY_NULL ;
}

unsigned char GetKey()
{
unsigned char keyRetu=0,KeyTemp=KEY_NULL;    //·µ»ØµÄ°´¼üÖµ,°´¼üÇé¿ö
static unsigned char s_u8KeyState=KEY_STATE_INIT,s_u8KeyTimeCount=0,s_u8LastKey=KEY_NULL; //°´¼ü״̬,°´¼ü°´ÏµÄʱ¼ä¼ÆÊýÆ÷£¬Éϴΰ´¼üÖµ

KeyTemp=KeyScan();

switch(s_u8KeyState)
{
case KEY_STATE_INIT :
{
if(KEY_NULL != (KeyTemp))
{
s_u8KeyState = KEY_STATE_WOBBLE ;
}
}
break ;

case KEY_STATE_WOBBLE :      //Ïû¶¶
{
s_u8KeyState = KEY_STATE_PRESS ;
}
break ;

case KEY_STATE_PRESS :
{
if(KEY_NULL != (KeyTemp))
{
s_u8LastKey = KeyTemp ; //±£´æ¼üÖµ,ÒÔ±ãÔÚÊÍ·Å°´¼ü״̬·µ»Ø¼üÖµ
KeyTemp |= KEY_DOWN ;  //°´¼ü°´ÏÂ
s_u8KeyState = KEY_STATE_LONG ;
}
else
{
s_u8KeyState = KEY_STATE_INIT ;
}
}
break ;

case KEY_STATE_LONG :
{
if(KEY_NULL != (KeyTemp))
{
if(++s_u8KeyTimeCount > KEY_LONG_PERIOD)
{
s_u8KeyTimeCount = 0 ;
KeyTemp |= KEY_LONG ;  //³¤°´¼üʼþ·¢Éú
s_u8KeyState = KEY_STATE_CONTINUE ;
}
}
else
{
s_u8KeyState = KEY_STATE_RELEASE ;
}
}
break ;

case KEY_STATE_CONTINUE :
{
if(KEY_NULL != (KeyTemp))
{
if(++s_u8KeyTimeCount > KEY_CONTINUE_PERIOD)
{
s_u8KeyTimeCount = 0 ;
KeyTemp |= KEY_CONTINUE ;
}
}
else
{
s_u8KeyState = KEY_STATE_RELEASE ;
}
}
break ;

case KEY_STATE_RELEASE :
{
s_u8LastKey |= KEY_UP ;
KeyTemp = s_u8LastKey ;
s_u8KeyState = KEY_STATE_INIT ;
}
break ;

default : break ;
}

return KeyTemp;
}

#endif
//¶¨Ò峤°´¼üµÄTICKÊý,ÒÔ¼°Á¬_·¢¼ä¸ôµÄTICKÊý
#define KEY_LONG_PERIOD        100
#define KEY_CONTINUE_PERIOD    25

//¶¨Òå°´¼ü·µ»Øֵ״̬(°´ÏÂ,³¤°´,Á¬_·¢,ÊÍ·Å)
#define KEY_DOWN                0x80
#define KEY_LONG                    0x40
#define KEY_CONTINUE            0x20
#define KEY_UP                  0x10

//¶¨Òå°´¼ü״̬
#define KEY_STATE_INIT            0
#define KEY_STATE_WOBBLE            1
#define KEY_STATE_PRESS            2
#define KEY_STATE_LONG            3
#define KEY_STATE_CONTINUE      4
#define KEY_STATE_RELEASE        5

#ifdef _KEY_H

unsigned char KeyIn, KeyOld;
unsigned char Sys_Msg;
unsigned char ucKeyValue;

void KeyMsgProcess(void);
unsigned char Get_KeyValue(void);

//extern unsigned char ucMainMenuFlag;

unsigned char GetKey();
#else

extern bit bChangFlag ;

extern unsigned char KeyIn, KeyOld;

extern unsigned char GradeNumber;
extern unsigned char ucKeyValue;
extern  unsigned char Sys_Msg;
extern void KeyMsgProcess(void);
extern unsigned char Get_KeyValue(void);
extern unsigned char GetKey();

#endif

//sbit SONY=0xb5;
//sbit SONY=0xb0;
sbit SONY=0xb1;

sbit Send=0xb2;

sbit Led = 0x92;

#define KEY_VALUE_1                0x0e
#define KEY_VALUE_2                0x0d
#define KEY_VALUE_3                0x0b
#define KEY_VALUE_4                0x07
#define KEY_NULL                   0x0f

#define    Key1                       P51
#define    Key2                       P52
#define    Key3                       P53
#define    Key4                       P54

//¶¨Ò峤°´¼üµÄTICKÊý,ÒÔ¼°Á¬_·¢¼ä¸ôµÄTICKÊý
#define KEY_LONG_PERIOD        100
#define KEY_CONTINUE_PERIOD    25
//¶¨Òå°´¼ü·µ»Øֵ״̬(°´ÏÂ,³¤°´,Á¬_·¢,ÊÍ·Å)
#define KEY_DOWN                0x80
#define KEY_LONG                0x40
#define KEY_CONTINUE            0x20
#define KEY_UP                  0x10
//¶¨Òå°´¼ü״̬
#define KEY_STATE_INIT          0
#define KEY_STATE_WOBBLE        1
#define KEY_STATE_PRESS         2
#define KEY_STATE_LONG          3
#define KEY_STATE_CONTINUE      4
#define KEY_STATE_RELEASE       5

//#define KEY_LONG_PERIOD        50    //¶¨Ò峤°´¼üµÄTICKÊý,ÒÔ¼°Á¬·¢¼ä¸ôµÄTICKÊý
#define KEY_CONTINUE_PERIOD    25

#ifdef _MAIN_H

#define Send_PC         P55

sbit sbIrPin=0xb2;

unsigned char ucStatKeyValue;

static void PWE_Check();

void Init_MCU(void);
void Send_RS232_Byte(unsigned char wdata);

//	void Send_SONY_Byte(unsigned char wdata);
void Delay_8us(void);
void DelayMs(int ms);
void DelayUs(unsigned char us);

unsigned char xdata P77       _at_ 0xFF61; //p7.6
unsigned char xdata P76       _at_ 0xFF60; //p7.6
unsigned char xdata P50       _at_ 0xFF50; //p5.0
unsigned char xdata P51       _at_ 0xFF51; //p5.1
unsigned char xdata P52       _at_ 0xFF52; //p5.2
unsigned char xdata P53       _at_ 0xFF53; //p5.3
unsigned char xdata P54       _at_ 0xFF54; //p5.4
unsigned char xdata P55       _at_ 0xFF55; //p5.5
unsigned char xdata P56       _at_ 0xFF56; //p5.6
unsigned char xdata P57       _at_ 0xFF57; //p5.7

unsigned char xdata P67       _at_ 0xFF5f; //P6.7 ff58+7
unsigned char xdata P66       _at_ 0xFF5e; //P6.6 ff58+6
unsigned char xdata P65       _at_ 0xFF5d; //P6.5 ff58+5
unsigned char xdata P64       _at_ 0xFF5c; //P6.4 ff58+4
unsigned char xdata P63       _at_ 0xFF5b; //P6.7 ff58+3
unsigned char xdata P62       _at_ 0xFF5a; //P6.6 ff58+2
unsigned char xdata P61       _at_ 0xFF59; //P6.5 ff58+1
unsigned char xdata P60       _at_ 0xFF58; //P6.4 ff58+0

unsigned char xdata MCU_PIN_SHARE0_FF00      _at_ 0xFF00;
unsigned char xdata MCU_PIN_SHARE1_FF01      _at_ 0xFF01;
unsigned char xdata MCU_PIN_SHARE2_FF02      _at_ 0xFF02;
unsigned char xdata MCU_PORT5_OE_FF03        _at_ 0xFF03;
unsigned char xdata MCU_PORT6_OE_FF04        _at_ 0xFF04;
unsigned char xdata MCU_PORT7_OE_FF05        _at_ 0xFF05;
unsigned char xdata MCU_PORT1_TYPE_FF09      _at_ 0xFF09;
unsigned char xdata MCU_PLL_CTRL_FF10        _at_ 0xFF10;
unsigned char xdata MCU_PLL_FILTER_CTRL_FF11 _at_ 0xFF11;
unsigned char xdata MCU_PLL_M_N_DIV_FF12     _at_ 0xFF12;
unsigned char xdata MCU_REGULATOR_CTRL_FF13  _at_ 0xFF13;
unsigned char xdata MCU_OPTION_FF38          _at_ 0xFF38;

unsigned char xdata MCU_FC_PAGE_ERASE_FF39 _at_ 0xFF39;

volatile unsigned char xdata  ucResolutionValue _at_  0x400;

void Delay_52us();

void Init_Var();

void Send_SONY_Byte_BaudRate(unsigned char wdata);
void Erase_Eprom_Page(unsigned char page);
void Send_RS232_PC_Byte(unsigned char wdata);

#else
extern	void Erase_Eprom_Page(unsigned char page);
extern	unsigned char ucStatKeyValue;
extern	volatile unsigned char xdata  ucResolutionValue ;
extern  void Send_SONY_Byte_BaudRate(unsigned char wdata);
extern  void Delay_52us();
extern  void Init_MCU();
extern	void DelayMs(int ms);
extern	void DelayUs(unsigned char us);
extern	void Send_RS232_Byte(unsigned char wdata);
//	extern	void Send_SONY_Byte(unsigned char wdata);
extern	void Delay_8us();

extern	unsigned char xdata P77; //p7.7
extern	unsigned char xdata P76; //p7.6
extern  unsigned char xdata P50; //p5.0
extern  unsigned char xdata P51; //p5.1
extern  unsigned char xdata P52; //p5.2
extern  unsigned char xdata P53; //p5.3
extern  unsigned char xdata P54; //p5.4
extern  unsigned char xdata P55; //p5.5
extern  unsigned char xdata P56; //p5.6
extern  unsigned char xdata P57; //p5.7

extern  unsigned char xdata P67; //P6.7 ff58+7
extern  unsigned char xdata P66; //P6.6 ff58+6
extern  unsigned char xdata P65; //P6.5
extern  unsigned char xdata P64; //P6.4
extern  unsigned char xdata P63; //P6.3
extern  unsigned char xdata P62; //P6.2
extern  unsigned char xdata P61; //P6.1
extern  unsigned char xdata P60; //P6.0

extern  unsigned char xdata MCU_PIN_SHARE0_FF00;
extern  unsigned char xdata MCU_PIN_SHARE1_FF01;
extern  unsigned char xdata MCU_PIN_SHARE2_FF02;
extern  unsigned char xdata MCU_PORT5_OE_FF03;
extern  unsigned char xdata MCU_PORT6_OE_FF04;
extern  unsigned char xdata MCU_PORT7_OE_FF05;
extern  unsigned char xdata MCU_PORT1_TYPE_FF09;

extern  unsigned char xdata PLL10;
extern	unsigned char xdata PLL11;
extern	unsigned char xdata PLL12;
extern	unsigned char xdata MCU_PLL_CTRL_FF10;
extern  unsigned char xdata MCU_PLL_FILTER_CTRL_FF11;
extern	unsigned char xdata MCU_PLL_M_N_DIV_FF12;
extern	unsigned char xdata MCU_REGULATOR_CTRL_FF13;

extern void Send_RS232_PC_Byte(unsigned char wdata);
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: