实例介绍
【实例简介】基于瑞萨单片机的触摸按键驱动
【实例截图】基于瑞萨单片机的触摸按键驱动
【实例截图】基于瑞萨单片机的触摸按键驱动
【核心代码】
/*********************************************************************************************************************** * DISCLAIMER * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. * No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all * applicable laws, including copyright laws. * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED * OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY * LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT, * INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR * ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability * of this software. By using this software, you agree to the additional terms and conditions found by accessing the * following link: * http://www.renesas.com/disclaimer * * Copyright (C) 2011, 2015 Renesas Electronics Corporation. All rights reserved. ***********************************************************************************************************************/ /*********************************************************************************************************************** * File Name : r_main.c * Version : CodeGenerator for RL78/G13 V2.03.01.03 [30 Jan 2015] * Device(s) : R5F101FC * Tool-Chain : CCRL * Description : This file implements main function. * Creation Date: 2016/2/18 ***********************************************************************************************************************/ /*********************************************************************************************************************** Includes ***********************************************************************************************************************/ #include "r_cg_macrodriver.h" #include "r_cg_cgc.h" #include "r_cg_port.h" #include "r_cg_timer.h" #include "r_cg_wdt.h" /* Start user code for include. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */ #include "r_cg_userdefine.h" /*********************************************************************************************************************** Pragma directive ***********************************************************************************************************************/ /* Start user code for pragma. Do not edit comment generated here */ u8 KEY_VALUE = 0; u8 keyvalue_test = 0; extern u8 guc_KeyCheckTimer; void R_MAIN_UserInit(void); /* End user code. Do not edit comment generated here */ /*********************************************************************************************************************** Global variables and functions ***********************************************************************************************************************/ /* Start user code for global. Do not edit comment generated here */ #define AIR_R_PORT P7_bit.no0 #define AIR_G_PORT P7_bit.no1 #define AIR_B_PORT P7_bit.no2 /*********************************************************************************************************************** * Function Name: void KeyLed(u8 keytype,u8 time) * Description : * Arguments : None * Return Value : None ***********************************************************************************************************************/ void delay2(u16 i) { u16 j = 0; for(;i>0;i--) { NOP(); NOP(); NOP(); } } void delay(u16 i) { for(;i>0;i--) { NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); } } u8 keyvalue = 0xff; /*********************************************************************************************************************** * Function Name: void Key_Init() * Description : * Arguments : * Return Value : None ***********************************************************************************************************************/ u8 GetKeyData(void) { // u8 i = 0; PM6_bit.no3 = 1; delay2(500); //KEY_CLK_PORT = 1; //KEY_SDA_PORT = 1;//MCU引脚为输入 KEY_CLK_PORT = 0;//CLK引脚始终为输出 delay2(100); //KEY_CLK_PORT = 1;//CLK引脚始终为输出 if(KEY_SDA_PORT == 1) { KEY_CLK_PORT = 1; return 0xff; } KEY_CLK_PORT = 1; delay2(500); do { keyvalue >>= 1; KEY_CLK_PORT = 0; delay2(500); if(KEY_SDA_PORT == 1) { keyvalue |= 0x80; } // if(KEY_SDA_PORT == 0) { keyvalue &= 0x7f; } KEY_CLK_PORT = 1; delay2(500); i ; } while(i<8); KEY_CLK_PORT = 0; delay2(500); KEY_CLK_PORT = 1; delay2(500); if(keyvalue == 0xff) { return 0; } return(keyvalue); } /*********************************************************************************************************************** * Function Name: void Key_Init() * Description : * Arguments : * Return Value : None ***********************************************************************************************************************/ void SetSubtleSP(u8 subtle) { u8 i = 0; //PM6_bit.no3 = 0; //PM6_bit.no2=0;//?? KEY_SDA_PORT = 0; KEY_CLK_PORT = 0; delay2(500); KEY_CLK_PORT = 1; delay2(500); do { if((subtle & 0x01) == 0) { KEY_SDA_PORT = 0; } else { KEY_SDA_PORT = 1; } KEY_CLK_PORT = 0; delay2(500); KEY_CLK_PORT = 1; delay2(500); subtle >>= 1; i ; } while(i<8); //KEY_SDA_PORT = 1; //KEY_CLK_PORT = 0; PM6_bit.no3 = 1; delay2(500); KEY_CLK_PORT = 0; //delay2(1); //PM6_bit.no3 = 1; //while(KEY_SDA_PORT==0); } u16 keytime = 0; u8 keyvalue_old = 0; u8 invalidkeyflag = 0; /*********************************************************************************************************************** * Function Name: void Key_Handle(u8 keyduration,u8 keytype) * Description : ????,???????????? * Arguments : u8 keyduration????,u8 keytype???? * Return Value : None ***********************************************************************************************************************/ u8 TurntoSingleKeyCheck(u8 keyvalue) { static u8 validshortkey = 0;/*??????*/ // static u16 keytime = 0; // static u8 keyvalue_old = 0; u8 keyduration = 0; static num = 0; // static u8 invalidkeyflag = 0;//????,??????,?1???????????? static u8 validkeyflag = 0;//??????,????LED /*==============================================================*/ /*???????,????3???*/ if(invalidkeyflag == 0) { if(keyvalue == 0) { if(num >= 5) { invalidkeyflag = 1; num = 0; return 0; } num ; } else { num = 0; return 0; } } /*======================================*/ /*???10ms????????,??????*/ if((keytime == 0)&&(keyvalue != 0)) { keyvalue_old = keyvalue; keytime ; } /*????10ms*/ else if(keytime != 0) { /*??????????????*/ if(keyvalue_old == keyvalue) { if((keytime >= 3)&&(validkeyflag == 0)) { validkeyflag = 1; //KeyLedCheck(keyvalue_old); } if(keytime >= 300) { keyduration = 2; validshortkey = 0; } keytime ; } /*?????????????????????*/ else if(keyvalue_old != keyvalue) { if(keytime < 3) { keyduration = 0; keyvalue_old = 0; keytime = 0; validshortkey = 0; validkeyflag = 0; invalidkeyflag = 0; return 0; } else if(keytime < 300) { keyduration = 1; validshortkey = 1; } else if(keytime < 600) { validshortkey = 0; keyduration = 2; } } } /*======================================*/ /*????????????*/ if(keyduration)//???? { keyvalue_old = 0; keytime = 0; validkeyflag = 0; invalidkeyflag = 0; return validshortkey; } } u8 KeyCheck(void) { u8 keyflag = 0; u8 keyvalue = 0; /*?15ms???????*/ if(guc_KeyCheckTimer >= 10) { guc_KeyCheckTimer = 0; keyvalue = GetKeyData(); if(keyvalue == 0x01) { AIR_R_PORT = 0; AIR_G_PORT = ~AIR_G_PORT; AIR_B_PORT = 0; } /*zhi pan duan shi fou you dan jian an xia,you ze biao zhi wei zhi 1, yong lai zhong duan zheng zai zhi xing de while*/ if(keyvalue == 0x03) { ;//TurntoGroupKeyCheck(keyvalue); } else { keyflag = TurntoSingleKeyCheck(keyvalue); } } /*zai you while deng dai de han shu zhong diao yong gai han shu , fan hui zhi yong yu pan duan shi fou xu yao ti qian zhong duan while, ru HumiCheck() he BuzzerTone()*/ return keyflag; } /* End user code. Do not edit comment generated here */ void R_MAIN_UserInit(void); /*********************************************************************************************************************** * Function Name: main * Description : This function implements main function. * Arguments : None * Return Value : None ***********************************************************************************************************************/ void main(void) { R_MAIN_UserInit(); /* Start user code. Do not edit comment generated here */ R_TAU0_Channel0_Start(); guc_KeyCheckTimer = 0; while(guc_KeyCheckTimer <= 100) { NOP(); } SetSubtleSP(28); guc_KeyCheckTimer = 0; while(guc_KeyCheckTimer <= 50) { NOP(); } while (1) { R_WDT_Restart() ; (void)KeyCheck(); /* if(guc_KeyCheckTimer >= 15) { guc_KeyCheckTimer = 0; KEY_VALUE = GetKeyData(); if(KEY_VALUE == 0x80) { AIR_R_PORT = 0; AIR_G_PORT = 0; AIR_B_PORT = 1; } if(KEY_VALUE == 0x81) { AIR_R_PORT = 1; AIR_G_PORT = 0; AIR_B_PORT = 0; } R_WDT_Restart() ; } */ } /* End user code. Do not edit comment generated here */ } /*********************************************************************************************************************** * Function Name: R_MAIN_UserInit * Description : This function adds user code before implementing main function. * Arguments : None * Return Value : None ***********************************************************************************************************************/ void R_MAIN_UserInit(void) { /* Start user code. Do not edit comment generated here */ EI(); /* End user code. Do not edit comment generated here */ } /* Start user code for adding. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论