新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)2408點(diǎn)陣時(shí)鐘電子制作

        單片機(jī)2408點(diǎn)陣時(shí)鐘電子制作

        作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

        void main()
        {
        init(); //調(diào)用初始化函數(shù)
        P0=0xff; P1=0x00; P3=0x00; P2=0x00;
        for(c=0;c<10;c++) delay(255);
        P1=0xff; P3=0xff; P2=0xff; //測(cè)試點(diǎn)陣屏全亮3秒.
        P0=0x00; P1=0x00; P3=0x00; P2=0x00;
        for(c=0;c<10;c++) delay(255);
        P1=0xff; P3=0xff; P2=0xff; //測(cè)試點(diǎn)陣屏全滅3秒.
        P0=0xff; P1=0x00; P3=0x00; P2=0x00;
        for(c=0;c<10;c++) delay(255);
        P1=0xff; P3=0xff; P2=0xff; //測(cè)試點(diǎn)陣屏全亮3秒.
        P0=0x00; P1=0x00; P3=0x00; P2=0x00;
        for(c=0;c<10;c++) delay(255);
        P1=0xff; P3=0xff; P2=0xff; //測(cè)試點(diǎn)陣屏全滅3秒.
        c=0;
        while(1) //主程序循環(huán)
        {
        switch(keymode) //鍵盤處理程序
        {
        case 0x00:
        if(KEY==0) { keymode=1; keycount=2;}
        break;
        case 0x01:
        if(keycount==0)
        { if(KEY==0)
        { keymode=2; keydate=1;D7=0;} else {keymode=0; break;}
        }
        else
        {
        keycount--;
        break;}
        case 0x02:
        if(KEY==1)
        { keymode=0; D7=1; break;}
        else
        {keymode=3; keycount=50; break; }
        case 0x03:
        if(KEY==1)
        { keymode=0; D7=1; break;}
        else
        if(keycount==0)
        { keymode=4; D6=1; break; }
        else
        { keycount--; break;}
        case 0x04:
        if(KEY==1)
        {keymode=0; D7=1; break;}
        else
        break;

        default: break;
        }
        //以下的鍵值調(diào)時(shí)間處理
        if(D7==1)
        {
        if(D6==0) {
        if(c==1) hour++;
        if(hour==24) hour=0;
        if(c==2) minute++;
        if(minute==60) minute=0;
        D7=0; }
        else
        {c++; if(c>2) c=0; D6=0; D7=0;}
        }


        disbuf[0]=(second);
        disbuf[1]=(second/10);
        disbuf[2]=(minute);
        disbuf[3]=(minute/10);
        disbuf[4]=(hour);
        disbuf[5]=(hour/10);
        display(); //調(diào)用顯示函數(shù)

        }
        }

        void init()
        {
        TMOD=1;TH0=0X3C;TL0=0XB0; //定時(shí)器0模式1,50毫秒
        ET0=1;TR0=1;EA=1; //開定時(shí)器0中斷、啟動(dòng)定時(shí)器0、開總中斷
        }

        void display( )
        {
        unsigned char i,j=0; //j為列位置變量


        for(i=0;i<5;i++) //時(shí)十位
        {
        if(disbuf[5]==0) P0=0x00; //時(shí)十分為0時(shí)不顯示
        else P0=ASCII86[disbuf[5]];
        P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
        delay(1);
        P1=0xff; P3=0xff; P2=0xff;
        j++;
        }
        j++; //隔一列

        for(i=0;i<5;i++) //時(shí)個(gè)位
        {
        if(c==1&&SHAN)P0=0x00;
        else P0=ASCII86[disbuf[4]]; //調(diào)時(shí)狀態(tài)時(shí)個(gè)位閃爍
        P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
        delay(1);
        P1=0xff; P3=0xff; P2=0xff;
        j++;
        }
        if(!SHAN) {P0=0x81;} else P0=0x00; //秒閃

        P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
        delay(1);
        P1=0xff; P3=0xff; P2=0xff;
        j++;
        for(i=0;i<5;i++) //分十位
        {
        P0=ASCII86[disbuf[3]];
        P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
        delay(1);
        P1=0xff; P3=0xff; P2=0xff;
        j++;
        }
        j++;
        for(i=0;i<5;i++) //分個(gè)位
        {
        if(c==2&&SHAN)P0=0x00;
        else P0=ASCII86[disbuf[2]]; //調(diào)分狀態(tài)時(shí)分閃爍
        P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
        delay(1);
        P1=0xff; P3=0xff; P2=0xff;
        j++;
        }

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

        }

        void delay(uchar t)
        {
        uchar i; //定義變量
        for(;t>0;t--) //如果t大于0,t減1(外層循環(huán))
        for(i=124;i>0;i--); //i等于124,如果i大于0,i減1
        }


        void timer0() interrupt 1 //定時(shí)器0(中斷1)
        {
        uchar tim1,tim2; //定義臨時(shí)變量
        TL0=TL0+0XB0;TH0=0X3C; //重裝定時(shí)器初值
        tim1++; //每中斷一次tim1加1
        if(tim1==10) //中斷10(0.5秒)
        {
        SHAN=!SHAN; //閃爍標(biāo)志取反
        tim1=0;tim2++; //tim1清零,tim2加1
        if(tim2==2) //到了1秒
        {
        tim2=0;second++; //tim2清零,秒加1
        if(second>=60) //如果秒到60
        {
        second=0;minute++; //秒變0,分加1
        if(minute>=60) //如果分到60
        {
        minute=0;hour++; //分變0,時(shí)加1
        if(hour>=24) hour=0; //如果時(shí)到24,時(shí)變0
        }
        }
        }
        }
        }


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 翁源县| 玛纳斯县| 广水市| 唐山市| 固始县| 四会市| 南郑县| 英德市| 武清区| 景洪市| 北安市| 登封市| 晴隆县| 安西县| 扎赉特旗| 内丘县| 霍州市| 高青县| 泰宁县| 濮阳市| 都匀市| 乐至县| 施秉县| 嘉禾县| 炎陵县| 漳州市| 芮城县| 永胜县| 呈贡县| 常山县| 定远县| 漾濞| 东兴市| 永泰县| 夏河县| 瓦房店市| 开阳县| 西乌珠穆沁旗| 兴业县| 乳源| 内丘县|