#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)
//共陽極數(shù)碼管 "0-9" ucharSEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int sec = 0, min= 0; char flag =0xff;//默認(rèn)開啟秒表 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;//中斷失能,關(guān)閉 }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 連續(xù)計數(shù)模式 _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復(fù)位 }
void display(intsec, int min){ //數(shù)碼管顯示字?jǐn)?shù)緩存 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端恢復(fù)成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; }
|