实例介绍
【实例简介】基于瑞萨单片机的触摸按键驱动
【实例截图】基于瑞萨单片机的触摸按键驱动
【实例截图】基于瑞萨单片机的触摸按键驱动
【核心代码】
/***********************************************************************************************************************
* 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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论