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
相关文章推荐
- PHP的中文乱码问题
- win10系统左下角搜索栏点击Win+C无反应的解决方法
- 数量积 向量的点积 即3D中任意两个三维向量的点积(数量积)推导及代码实现
- [机器学习01]What's machine learing?
- java 二维码生成
- 制作手机使用的网页图片查看器
- #在蓝懿学习iOS的日子#小游戏吃豆人
- 关于Android Genymotion 运行DDMS报ADB server didn't ACK
- 如何查看Win10版本号的方法 查看Win10版本号的3种法
- Linux之split命令详解
- Java过滤器和监听器
- Leetcode108: Unique Binary Search Trees II
- 启动服务(Service)和调用服务里的方法
- 回调函数透彻理解Java
- hadoop2.7之Mapper/reducer源码分析
- 目标设立与建立的18个问题
- 经典数字信号处理图书的个人评述
- 《Effective C#》:区别和认识四个判等函数
- FLOT曲线图
- iOS定位和位置信息获取