标题: 请教一下如何把这个msp430程序改成倒计时的程序 [打印本页]

作者: SuperJcl    时间: 2020-6-1 10:02
标题: 请教一下如何把这个msp430程序改成倒计时的程序
#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;
}


作者: f556    时间: 2020-6-1 15:50
先对sec min给初值,把
sec++;  min++;改为--





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1