新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用MSP430的32768Hz晶振寫的時鐘

        用MSP430的32768Hz晶振寫的時鐘

        作者: 時間:2016-12-02 來源:網絡 收藏


        }

        本文引用地址:http://www.104case.com/article/201612/324675.htm

        void Clock(void)
        {
        miao++;
        if(miao==60)
        {
        miao=0;
        fen++;
        if(fen==60)
        {
        fen=0;
        shi++;
        if(shi==24)
        {
        shi=0;
        }
        write_sfm(2,shi);
        }
        write_sfm(5,fen);
        }
        write_sfm(8,miao);

        }

        void keyscan()
        {

        if(keyin!=0x0f)
        {
        delay(5); //延時消抖
        if(keyin != 0x0f) //再次檢測按鍵狀態
        {
        temp=keyin;
        while(keyin != 0x0f); //等待按鍵被放開
        if(temp==0x0e)
        {
        keynum++;
        switch(keynum)
        {
        case 1:
        _DINT();
        // CCTL0 &=~ CCIE; //兩種停止時鐘的方法效果一樣
        write_com(0x80+0x40+9);
        write_com(0x0f);//光標開始閃
        break;
        case 2:
        write_com(0x80+0x40+6);break;
        case 3:
        write_com(0x80+0x40+3);break;
        case 4:
        keynum=0;
        write_com(0x0c);//開顯示,光標不顯示
        _EINT();
        // CCTL0|=CCIE; //使用相應打開時鐘的方法
        break;
        }
        }
        if(temp==0x0d)
        {
        // while(keyin != 0x0d); //等待按鍵被放開
        switch(keynum)
        {
        case 1:
        miao++;
        if(miao==60)miao=0;
        write_sfm(8,miao);
        write_com(0x80+0x40+9);
        break;
        case 2:
        fen++;
        if(fen==60)fen=0;
        write_sfm(5,fen);
        write_com(0x80+0x40+6);
        break;
        case 3:
        shi++;
        if(shi==24)shi=0;
        write_sfm(2,shi);
        write_com(0x80+0x40+3);
        break;
        }
        }

        if(temp==0x0b)
        {
        // while(keyin != 0x0d); //等待按鍵被放開
        switch(keynum)
        {
        case 1:
        miao--;
        if(miao==-1)miao=59;
        write_sfm(8,miao);
        write_com(0x80+0x40+9);
        break;
        case 2:
        fen--;
        if(fen==-1)fen=59;
        write_sfm(5,fen);
        write_com(0x80+0x40+6);
        break;
        case 3:
        shi--;
        if(shi==-1)shi=23;
        write_sfm(2,shi);
        write_com(0x80+0x40+3);
        break;
        }
        }

        }
        }
        }

        int main( void )
        { P6DIR|=BIT3;
        P6OUT|=BIT3;
        //上兩句是打開1602的背光電源

        WDTCTL = WDTPW + WDTHOLD;

        lcd_init();
        delay(500);

        write_com(0x80+0x40+4);
        write_data(:);
        write_com(0x80+0x40+7);
        write_data(:);
        write_sfm(2,shi);
        write_sfm(5,fen);
        write_sfm(8,miao);


        CCR0 = 32768 - 1;//設置定時器A的中斷時間為1S
        TACTL = TASSEL_1 + MC_1; //計數時鐘ACLK, 增計數模式
        CCTL0 |= CCIE; //使能CCR0比較中斷
        _EINT();//打開全局中斷


        P1DIR = 0xf0; //設置P1.0~P.3為輸入狀態
        // P1DIR = BIT7; //設置P1.0~P.3為輸入狀態,P1.7為輸出
        // P1OUT = 0;
        //以上兩句是在沒有獨立按鍵情況下把P1_7拉低成為地線

        while(1)
        {
        keyscan();
        //本程序如果加低功耗模式會使按鍵功能失效
        }
        }

        /*******************************************
        函數名稱:TimerA_ISR
        功 能:定時器A的中斷服務函數
        ********************************************/
        #pragmavector=TIMERA0_VECTOR
        __interrupt void TimerA_ISR(void)
        {
        Clock();
        }
        //到此時鐘加按鍵完成


        上一頁 1 2 下一頁

        關鍵詞: MSP430晶振時

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 辛集市| 满洲里市| 龙江县| 苗栗市| 大邑县| 安阳市| 佛教| 云霄县| 射洪县| 平南县| 通江县| 买车| 子洲县| 噶尔县| 英超| 富顺县| 双峰县| 铁力市| 开鲁县| 永年县| 莎车县| 四川省| 东乡县| 淮南市| 财经| 咸丰县| 大同县| 石棉县| 黄骅市| 安仁县| 沙湾县| 平邑县| 兴义市| 阜康市| 栖霞市| 西林县| 两当县| 曲周县| 丹凤县| 泸州市| 玉林市|