標(biāo)題:
基于msp430的電子時(shí)鐘
[打印本頁(yè)]
作者:
君之所曦
時(shí)間:
2017-9-27 14:51
標(biāo)題:
基于msp430的電子時(shí)鐘
#include<msp430x14x.h>
#include"LCD1602.h"
#include"settimer.h"
#include"pushkey.h"
extern int second; //1秒計(jì)數(shù)單位
extern int minute; //1分鐘計(jì)數(shù)單位
extern int hour; //1小時(shí)計(jì)數(shù)單位
extern uchar table[11]; //時(shí)間顯示列表
int flag1 = 0; //第一個(gè)按鍵標(biāo)志
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
set_timer();
init_timer();
init_pushkey();
LcdReset();
while(1)
{
LPM3; //低功耗模式3
LcdWriteCommand( 0x80 + 0x00 , 1 ); //設(shè)置字符指針,讓液晶從頭開(kāi)始顯示字符
display_hour();
display_minute();
display_second();
}
}
/*******************************定時(shí)器中斷*****************************************/
#pragma vector=TIMERA0_VECTOR //定時(shí)器中斷函數(shù),1s進(jìn)入一次
__interrupt void TIMER_A( void )
{
if( flag1 == 1 ) //開(kāi)始計(jì)時(shí)
{
second++;
if( second >= 60 )
{
second = 0; //second計(jì)數(shù)到60秒后清零
minute++; //minute加1
if( minute >= 60 )
{
minute = 0; //minute清零
hour++; //hour加1
if( hour >= 24 )
hour = 0; //hour計(jì)數(shù)到24后清零
}
}
}
LPM3_EXIT; //退出低功耗模式3
}
/******************************按鍵檢測(cè)中斷***************************************/
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR( void )
{
uint i;
uchar pushkey;
pushkey = P1IFG & ( BIT0 + BIT1 ); //1、2哪個(gè)鍵按下,則觸發(fā)中斷,P1IFG相應(yīng)位會(huì)置1
P2DIR |= ( BIT0 + BIT1 +BIT6 );
P2OUT |= ( BIT0 + BIT1 +BIT6 ); //讓LED先都熄滅
for( i = 0; i < 1000; i++ ); //類(lèi)似于鍵盤(pán)消抖
if( ( P1IN & pushkey ) == pushkey ) //按鍵曾經(jīng)按下去過(guò),觸發(fā)了中斷,但是按鍵又彈起來(lái)了,P1IN處檢測(cè)是輸入了高電平
{ //按鍵變?yōu)楦唠娖搅,判斷這個(gè)是為毛刺
P1IFG=0;
return;
}
if( pushkey & BIT0 ) //第一個(gè)按鍵按下去了
{
flag1 ^= 1; //可以開(kāi)始計(jì)時(shí)
if( flag1 == 1 )
{
P2OUT &=~ BIT0; //讓第一個(gè)LED亮起
delay_key( 3000 );
P2OUT |= BIT0;
}
if( flag1 == 0 )
{
P2OUT &=~ BIT6; //讓第六個(gè)LED亮起
delay_key( 3000 );
P2OUT |= BIT6;
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1