找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请教一下如何把这个msp430程序改成倒计时的程序

[复制链接]
跳转到指定楼层
楼主
ID:763128 发表于 2020-6-1 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"msp430x24x.h"
#define CPU_F((double)1000000)
#definedelay_us8M(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#definedelay_ms8M(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define ucharunsigned char
#define uintunsigned int
#define KEYIN(P1IN&BIT0)

//共阳极数码管 "0-9"
ucharSEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int sec = 0, min= 0;
char flag =0xff;//默认开启秒表
chardisplay_flag = 0x00;
voidinit_seg_port(void);//port2 port3
voidinit_exti_port(void);
void display(intsec, int min);

#pragma vector =PORT1_VECTOR
__interrupt voidPORT1_ISR(void){
  if(KEYIN == 0){
    delay_ms8M(20);
    flag = ~flag;
    delay_ms8M(5);
    if(!flag){
      TACCTL0 &= ~CCIE;//中断失能,关闭
    }else{
      TACCTL0 |= CCIE;//开启
    }
  }
  P1IFG = 0;
  delay_ms8M(5);
}

#pragma vector =TIMERA0_VECTOR
__interrupt voidTIMER0_ISR(void){
  sec++;
  display_flag = ~display_flag;
  if(sec == 60){
    sec = 0;
    min++;
  }
}

int main(void)
{
  // Stop watchdog timer to prevent time outreset
  WDTCTL = WDTPW + WDTHOLD;
  init_seg_port();
  init_exti_port();
  TACCTL0 |= CCIE;//
  TACCR0 = 32768;
  TACTL = TASSEL_2 + MC_1;//ACLK  连续计数模式
  _EINT();//开启总中断
  while(1){
    display(sec, min);
  }
  return 0;
}

voidinit_seg_port(void){
  P2DIR = 0XFF;
  P2OUT = SEG[0];
  P3DIR = 0XFF;
  P3OUT = 0X00;
}

void init_exti_port(void){
  P1DIR &= ~BIT0;
  P1IES |= BIT0;
  P1IE |= BIT0;
  P1IFG &= ~BIT0;//清0复位
}

void display(intsec, int min){
  //数码管显示字数缓存
  uchar buf[] = {0, 0, 0, 0};
  buf[0] = sec%10;
  buf[1] = sec/10%10;
  buf[2] = min%10;
  buf[3] = min/10%10;

  P2OUT = SEG[buf[0]];
  P3OUT = 0x08;
  delay_ms8M(1);
  P2OUT = 0xff;// 将P2端恢复成0xoff如果没有这个代码会显示错误  
  P2OUT = SEG[buf[1]];
  P3OUT = 0x04;
  delay_ms8M(1);
  P2OUT = 0xff;

  P2OUT = SEG[buf[2]];
  P3OUT = 0x02;
  delay_ms8M(1);
  P2OUT = 0xff;

  P2OUT = SEG[buf[3]];
  P3OUT = 0x01;
  delay_ms8M(1);
  P2OUT = 0xff;
}

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

使用道具 举报

沙发
ID:282850 发表于 2020-6-1 15:50 | 只看该作者
先对sec min给初值,把
sec++;  min++;改为--
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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