欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2124|回復: 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;
}

回復

使用道具 舉報

ID:282850 發表于 2020-6-1 15:50 | 顯示全部樓層
先對sec min給初值,把
sec++;  min++;改為--
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表