基于MSP430G2553的闹钟
硬件部分
四位数码管(F3461AH)*2
38译码器(74LS138)*1
MSP430G2553单片机
微动按键*1
软件实现
-
使用TimerA0进行时间计数,每1000ms进入一次CCR0中断,执行时间逻辑:
-
秒钟变量加到60则清零并将分钟变量加一
-
分钟变量加到60则清零并将小时变量加一
-
,小时变量加到24则清零并将日期变量和星期变量都加一
-
星期变量加到8则变为1
-
日期变量:先判断是否是闰年并且是否是2月,若思,则对平年的二月天数加一判断;若不是二月,则正常查表判断月份.大于该月天数,则清零并将月份加一
-
月份加到13时清零并将年份变量加一
-
-
每计数到ACLK产生65个脉冲,则进入CCR2,显示一位数码管
-
CCR1初值为327,但不使能中断,只有当按下按键后,才使能CCR1的中断并且关闭按键按键所在外部中断.使能中断后,在十次中断中判断按键是否是抖动,若是抖动,将各标识变量清零并关闭CCR1中断,且使能按键所在外部中断;若十次中断后按键仍然未松开,则表明按键按下,做出对应动作,并且清零各标识变量,关闭CCR1中断,使能按键所在外部中断.
优点
低功耗,使用低功耗模式LPM3
,即关闭除低速时钟ACLK外的所有时钟,MCU仅在中断时唤醒
不足
-
因时间紧张,仅实现检测按键,未实现按键逻辑部分
-
因管脚较少,导致按键稍少,解决方法:
- 是将数码管位选管脚改为使用P1部分IO和P2部分IO,以释放出P1IO,使用P1IO的ADC实现按键,理论上可实现无限个按键
- 添加芯片74hc595串改并芯片,释放出5个P1IO脚