找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1630|回复: 0
打印 上一主题 下一主题
收起左侧

基于msp430的电子时钟

[复制链接]
跳转到指定楼层
楼主
ID:236026 发表于 2017-9-27 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<msp430x14x.h>
#include"LCD1602.h"
#include"settimer.h"
#include"pushkey.h"
        

extern int second;   //1秒计数单位
extern int minute;   //1分钟计数单位
extern int hour;     //1小时计数单位
extern uchar table[11];  //时间显示列表
int flag1 = 0;   //第一个按键标志


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 );  //设置字符指针,让液晶从头开始显示字符
        display_hour();
        display_minute();
        display_second();
    }
}

/*******************************定时器中断*****************************************/
#pragma vector=TIMERA0_VECTOR   //定时器中断函数,1s进入一次
__interrupt void TIMER_A( void )
{
    if( flag1 == 1 )  //开始计时
    {
        second++;
        if( second >= 60 )
        {
            second = 0;  //second计数到60秒后清零
            minute++; //minute加1
            if( minute >= 60 )
            {
                minute = 0;   //minute清零
                hour++;       //hour加1
                if( hour >= 24 )
                    hour = 0;   //hour计数到24后清零
            }
        }
    }
    LPM3_EXIT;   //退出低功耗模式3
}


/******************************按键检测中断***************************************/
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR( void )
{
    uint i;
    uchar pushkey;
    pushkey = P1IFG & ( BIT0 + BIT1 );   //1、2哪个键按下,则触发中断,P1IFG相应位会置1
    P2DIR |= ( BIT0 + BIT1 +BIT6 );
    P2OUT |= ( BIT0 + BIT1 +BIT6 );   //让LED先都熄灭
   
    for( i = 0; i < 1000; i++ );     //类似于键盘消抖
    if( ( P1IN & pushkey ) == pushkey )     //按键曾经按下去过,触发了中断,但是按键又弹起来了,P1IN处检测是输入了高电平
    {    //按键变为高电平了,判断这个是为毛刺
        P1IFG=0;
        return;
    }
   
    if( pushkey & BIT0 )   //第一个按键按下去了
    {
        flag1 ^= 1;  //可以开始计时
        if( flag1 == 1 )
        {
            P2OUT &=~ BIT0;  //让第一个LED亮起
            delay_key( 3000 );
            P2OUT |= BIT0;
        }
        
        if( flag1 == 0 )
        {
            P2OUT &=~ BIT6;  //让第六个LED亮起
            delay_key( 3000 );
            P2OUT |= BIT6;
        }
    }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表