关于LPC1768设计秒表的一些问题

「已注销」 2017-10-12 04:45:47
新手求教QaQ..

最近在做一个课程设计,就是用LPC1768来设置一个秒表(精度是0.01s)

我的思路是用Systick节拍器来计时

但遇到了一点问题,所以来请教一下各位大神

问题1:时间单位转换问题,我刚开始的时候是用If语句判断,然后发现不行,然后就在systick中断处理函数里处理,然后发现还是不行(现实中过几秒,显示屏上才加1秒),请问下如何解决这个问题?

问题2:关于中断问题,我是设置了两个按键中断,然后有一个按键按下去没反应,另一个按键是按多次才反应一次或者一按下去反应两次,请问下该如何解决?

主要代码如下:


int main(void)
{
char string[50],number[30];
uint16_t m,se,ms;

SystemInit();

EINT1_init(); // set P2.11 as EINT1 -- KEY1
EINT2_init(); // set P2.12 as EINT1 -- KEY2

lcd_Initializtion(); // init lcd

m = 0;
se = 0;
ms = 0;

while(1)
{
sprintf(number,"My id:1400210313");
LCD_write_english_string(20,50,number,Cyan,Blue);

sprintf(string,"current time:%dm-%ds-%d",m,se,ms);
LCD_write_english_string(20,100,string,Cyan,Blue);

if((Eint1_Count % 2) == 1) //开始、清零
{
LCD_write_english_string(20,150," ",White,Blue);
LCD_write_english_string(20,150,"start",Cyan,Blue);

SysTick_Config(Fcclk/100); // SysTick使用CCLK时钟计数,每10ms产生一次中断

ms = TimeTick * 10;
}
else
{
SysTick->CTRL &= 0x00;
m = 0;
se = 0;
ms = 0;
}

if((Eint2_Count % 2)== 1) //暂停、继续
{
SysTick->CTRL &= 0x00;

LCD_write_english_string(20,150," ",White,Blue);
LCD_write_english_string(20,150,"stop",Cyan,Blue);
}
else
{
SysTick->CTRL |= 0x01;

}

if(ms == 1000)
{
// ms = 0;
se++;
}
if(se == 60)
{
se = 0;
m++;
}

sprintf(string,"current time:%dm-%ds-%dms",m,se,ms);
LCD_write_english_string(20,100,string,Cyan,Blue);

//__WFE();
__WFI(); // 等待中断

}
}

...全文
628 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acuity. 2017-10-13
  • 打赏
  • 举报
回复
逻辑编程就是这样的弊端,一个大循环顺序执行。考虑用状态机或者上RTOS。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧