在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 基于瑞萨单片机的触摸按键驱动

基于瑞萨单片机的触摸按键驱动

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.12M
  • 下载次数:11
  • 浏览次数:191
  • 发布时间:2016-03-29
  • 实例类别:C#语言基础
  • 发 布 人:到天竺去
  • 文件格式:.rar
  • 所需积分:3
 相关标签: 触摸按键 驱动

实例介绍

【实例简介】基于瑞萨单片机的触摸按键驱动
【实例截图】基于瑞萨单片机的触摸按键驱动

【核心代码】

/***********************************************************************************************************************
* 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 */

标签: 触摸按键 驱动

实例下载地址

基于瑞萨单片机的触摸按键驱动

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警