内容介绍
内容介绍
任务要求:
通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)。
本期Funpack板卡:Microchip DM164137 PIC Curiosity LPC开发板。
设计思路:
初始化一个1ms定时器中断,主程序的while(1)中进行空循环,
在定时器中断中,读取按键的电平,按键按下后进入按键事件的判断。设立一个全局变量对按键长度进行计时。
外设配置
设置时钟为高速内部晶振,分频系数为1,这样系统主时钟就为32MHz
启用低压编程功能
设置内部定时器0,MCC的功能很强大,选择好分频系数,自动计算定时范围,设置好定时器时长如下
串口模块,设置波特率为115200,重定向至printf函数
代码部分
void main(void)
{
// initialize the device
SYSTEM_Initialize();
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();
TMR0_SetInterruptHandler(TMR0ISR);
while (1)
{
}
}
void TMR0ISR()
{
if(S1_GetValue() == 0)
{
Button0Touch = 1;
}
else
{
Button0Touch = 0;
}
button_check(0);
}
#define SHORT_PUSH_CNT 1000
#define LONG_PUSH_CNT 4000
#define WAIT_DOUBLE_CNT 200
BTN_STATE Button0_state[MTOUCH_BUTTONS];
uint16_t Button0_cnt;
BTN_STATE button_check(enum mtouch_button_names button)
{
switch(Button0_state[button])
{
case BTN_RELEASE:
{
if(Button0Touch)
{
Button0_state[button] = BTN_TOUCH;
}
break;
}
case BTN_TOUCH:
{
if(Button0Touch)
{
if(Button0_cnt>SHORT_PUSH_CNT)
{
Button0_state[button] = SHORT_PUSH;
Button0_cnt = 0;
}
Button0_cnt++;
}
else
{
Button0_state[button] = CLICK;
Button0_cnt = 0;
}
break;
}
case CLICK:
{
if(!Button0Touch)
{
LED_D5_Toggle();
//Get the top 4 MSBs and display it on the LEDs
Button0_state[button] = WAIT_DOUBLE;
Button0_cnt = 0;
}
break;
}
case DOUBLE_CLICK:
{
if(!Button0Touch)
{
Button0_state[button] = BTN_RELEASE;
Button0_cnt = 0;
}
break;
}
case SHORT_PUSH:
{
if(Button0Touch)
{
if(Button0_cnt>LONG_PUSH_CNT)
{
Button0_state[button] = LONG_PUSH;
LED_D7_Toggle();
}
Button0_cnt++;
}
if(!Button0Touch)
{
LED_D4_Toggle();
Button0_state[button] = BTN_RELEASE;
Button0_cnt = 0;
}
break;
}
case LONG_PUSH:
{
if(!Button0Touch)
{
Button0_state[button] = BTN_RELEASE;
Button0_cnt = 0;
}
break;
}
case WAIT_DOUBLE:
{
if(Button0Touch)
{
LED_D6_Toggle();
Button0_state[button] = DOUBLE_CLICK;
}
else
{
if(Button0_cnt>WAIT_DOUBLE_CNT)
{
Button0_state[button] = BTN_RELEASE;
Button0_cnt = 0;
}
Button0_cnt++;
}
break;
}
default:break;
}
}
心得体会:
参加这个活动,能学到有趣的开发板,解决不了的问题,可以在群里交流分享讨论。
团队介绍
团队成员
大熊Bear
评论
0 / 100
查看更多
猜你喜欢
Curiosity好奇心开发板八位单片机分享基于Curiosity开发板和PIC18446八位单片机做的简单小Demo,使用了定时器、串口、模数转换和按键等功能!
砳此不疲
1047
Funpack第七期:PIC Curiosity LPC开发板实现单击,双击,长按检测通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)
void
963
JuicyBoard——基于LPC1769的多功能外接开发板JuicyBoard 是模块化开源平台的基础,可轻松构建定制 3D 打印机、CNC 路由器或任何其他由步进电机驱动的设备。
heidi
723