cocos2dx 获取当前时间

终于有时间再来学习STM32了~ 这几天都在忙着该死的考试.直接进入正题

开发板:奋斗V5

这个按键中断测试的要求是:按键2(K2)按下,LED2(V7)亮, 再一次按下就灭,循环..

好,先看看按键和LED的原理图

好吧~ 虽然图截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6

ok,剩下的就是配置工作了.. 先来理一理思路:

(1)初始化系统时钟

(2)初始化外部时钟(你所用到的东西)

(3)配置LED

(4)配置中断优先级

(5)配置外部中断线

(6)中断处理函数

恩,差不多就是这样了..

然后再来一条一条的看:(1)和(2)都属于RCC配置,可以放在一个功能模块里面:

<pre name="code" class="cpp">void RCC_Config(void)
{
<span style="white-space:pre">	</span>SystemInit(); //系统时钟初始化
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
			| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
			| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF
			| RCC_APB2Periph_GPIOG, ENABLE);
}	

当然, 我们可以不用加SystemInit();这个函数也没事.原因是startup_stm32f10x_hd.s这个文件已经在帮我们干了这些事情了.. 它具体是怎么弄的,还有一些其它东西,目前还没

去研究过,下次再研究看看.

(3)LED配置

void LED_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	/*led config*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD, &GPIO_InitStructure);

}

LED的配置前面应该已经记录了,所以这里就不弄了

(4)配置中断优先级和(5)配置外部中断线,这两个我选择放在一个模块,因为都是和中断有关系的嘛

void EXTI_PC2_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);	

	NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	/* key for exti */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);

	EXTI_InitStructure.EXTI_Line = EXTI_Line2;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);	

}

这也没什么好解释的了,前面的文章已经解释了

(6)中断处理函数

这家伙推荐在stm32f10x_it.c里面写,因为那里有命名的模版,跟着官方走,错不了

void EXTI2_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_Line2) != RESET) //判断按键是否按下
	{
		//LED取反
		GPIO_WriteBit(GPIOD, GPIO_Pin_6,
				(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_6))));

		EXTI_ClearITPendingBit(EXTI_Line2); //清除中断标志位
	}
}

这里要注意的就是前面EXTIx这里的数字问题了,1-4没什么问题,5-9就要稍微注意下.如果是应该是这样,它应该是EXTI9_5_IRQHandler

这儿我有个问题,为什么没看到外部中断6呢,也就是EXTI6或7,8这些单独的呢.. 原因可能是5-9他们都使用了同一个中断向量表,这个话我印象中好像在哪儿看过

好,到这里基本功能就完成了.. 现象是可以出了.但是会有个问题就是有时候按一些按键,LED等会没反应或者亮灭几下.. 这就是按键抖动的问题了;

好,接下来说说怎么削抖:

这里说软件消抖,硬件就不说了.. 传说中的抖动出现的原因就是你的手速不够快,使中断触发了一次以上.. 我想如果你以20年到30年的专业单身手速(右手哦)来按的话

肯定没这个问题..哈哈..好,直接上代码..借鉴人家的:

用下面这个方法,就要调整前面的代码了.

void KEY_DEL(void)
{
	num = 0;
	if (_keyon == 1) //按键是否按下,在中断处理函数中
	{
		if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0)
		{
			Delay(0x3ffff);//延迟,为的是让你的手速能跟上
			if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0) //按键是否抖动
			{
				while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0); //是否松开
				num = 1;

				goto n_exit;
			}
		}
	}
	n_exit:;
	_keyon = 0;
}
void EXTI2_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_Line2) != RESET)
	{
		_keyon = 1;//按键按下标志

		EXTI_ClearITPendingBit(EXTI_Line2);
	}
}
#include "misc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "system_stm32f10x.h"

#define LED_ON 	GPIO_SetBits(GPIOD, GPIO_Pin_6);

void LED_Config(void);
void EXTI_PC2_Config(void);
void RCC_Config(void);
void KEY_DEL(void);
void Delay(u32 times);

unsigned char _keyon = 0, num = 0;

int main(void)
{
	unsigned char a = 0;
	RCC_Config();
	LED_Config();
	EXTI_PC2_Config();

	LED_ON;

	while(1)
	{
		KEY_DEL();

		if (num == 1 && a == 0)
		{
			GPIO_ResetBits(GPIOD, GPIO_Pin_6);
			a = 1;
		}
		else if(num == 1 && a == 1)
		{

			GPIO_SetBits(GPIOD, GPIO_Pin_6);
			a = 0;
		}

	}	

}

cocos2dx 获取当前时间

时间: 2024-11-08 22:40:43

cocos2dx 获取当前时间的相关文章

cocos2dx获取网络时间(一)

今天在公司的cocos2dx项目中遇到一个需求,需要获取网络时间和系统时间对比,目的是防止用户更改系统时间进行某些非法操作 . 那么cocos2dx怎么来获取网络时间呢 ?我整理的思路如下: (1)由一个web api可以返回当前的网络时间 (2)cocos2dx通过http请求该api获取数据到本地 (3)cocos2dx解析数据得到当前的网络时间 一:首先就需要一个web接口来提供网络时间的数据,我在这里自己搭建一个WCF服务返回需要的数据. 新建WCF服务应用程序 , 项目命名为NetTi

cocos2dx获取网络时间(二):浅析CCHttpClient

在上一篇文章cocos2dx获取网络时间(一)中,我们使用CCHttpClient进行网络时间的数据请求和使用rapidjson解析Http请求得到的json数据 .在文章的最后 ,我留下了一个问题,怎么封装一个类来实现我们的方法. 新建一个c++类 ,命名为NetTime,继承自CCNode并重写init()方法.然后引入CCHttpClient和rapidjson需要的头文件.我们的需求是可以返回NetTime的年,月,日,小时,分和秒,分别定义它们的private字段和public方法:

MySQL时间函数-获取当前时间-时间差

MySQL中获取当前时间为now(),不同于sqlserver getdate(). SQLServer转MySQL除变化top 1 -> limit 1之后报错: select 1 from record_visitor where visitor_ip='' and datediff(mi,visitor_time,getdate())<=30 limit 1 [Err] 1582 - Incorrect parameter count in the call to native func

iOS 获取当前时间以及计算年龄(时间差)

获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarU

Js获取当前日期时间+日期印证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天

Js获取当前日期时间+日期验证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天 字符串转日期型+Js当前日期时间+日期验证+判断闰年+日期的天数差+日期格式化+日期所在年的第几周 日期时间脚本库方法列表Date.prototype.isLeapYear 判断闰年Date.prototype.Format 日期格式化Date.prototype.DateAdd 日期计算Date.prototype.DateDiff 比较日期差Date.prototype.toString 日期转字符

Javascript获取服务器时间

Javascript是运行在客户端的脚本,我们一般都用new Date()来获取当前时间,但是得到的是客户端的时间,客户端时间是随意更改的,如果要做一个产品发布倒计时的话,客户端时间一改,就要闹笑话了.业务中需要用到服务器时间的场景还有很多,那么仅仅通过js怎么拿到服务器时间呢?事实上,只需要一个ajax请求就搞定,通过读取XMLHttpRequest对象的请求头里面的时间戳得到当前服务器时间! 原理就是这么简单:通过ajax向服务器发送请求,当服务器收到请求后即可读取请求头的时间戳了,不管请求

PHP获取当前时间、时间戳的各种格式写法汇总

今天写下php中,如何通过各种方法 获取当前系统时间.时间戳,并备注各种格式的含义,可灵活变通.1.获取当前时间方法date()很简单,这就是获取时间的方法,格式为:date($format, $timestamp),format为格式.timestamp为时间戳–可填参数.2.获取时间戳方法time().strtotime()这两个方法,都可以获取php中unix时间戳,time()为直接获取得到,strtotime($time, $now)为将时间格式转为时间戳,$time为必填.清楚了这个

javascript获取当前时间

? //时间设置 <script type="text/javascript"> <!-- var myDate = new Date();     myDate.getYear();      //获取当前年份(2位)     myDate.getFullYear(); //获取完整的年份(4位,1970-????)     myDate.getMonth();      //获取当前月份(0-11,0代表1月)     myDate.getDate();     

实例365(6)---------DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数

一:DateTime.ToString格式化日期,截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TmrFormat { public part