新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機C語言電子時鐘加日歷顯示編程

        單片機C語言電子時鐘加日歷顯示編程

        作者: 時間:2016-11-26 來源:網絡 收藏

        else
        {
        if(month==2)
        {
        if(day==28)
        {
        day =1;
        month++;
        }
        else day++;
        }
        else
        {
        if(month==4||month==6||month==9||month==11)
        {
        if(day==30)
        {
        day =1;
        month++;
        }
        else day++;
        }
        else
        {
        if(day==31)
        {
        day =1;
        month++;
        if(month==13)
        {
        month =1;
        year1++;
        if(year1==100)
        {
        year2++;
        }
        }
        }
        else day++;

        }
        }
        }
        hour=0;
        week++;
        }
        if(sw1==0&&week>=7)
        week=0;
        }

        void delay(ms)
        {
        uchar i, k;
        while(ms--)
        for(k=0;k<123;k++);
        for(i=0;i<123;i++);
        }

        void scan_key(void)
        {
        if(cnt==7&&P3_4==0)
        {
        delay(3);
        if(cnt==7&&P3_4==0)
        {
        key4 =0;
        key1 =1; //檢查是第一個鍵按下
        }
        }
        if(sw5==0&&key1==1&&cnt==7&&P3_4==1) //按鍵松手時表示真的按下,sw5判斷此時是什么顯示狀態,時間還是年月日
        {
        sw1 =1; //閃爍分針
        }
        if(sw5==1&&key1==1&&cnt==7&&P3_4==1) //若為年月日則閃爍第一二位
        {
        sw1 =9;
        }
        if(sw1==1&&P3_4==0&&cnt==7) //在時間狀態第一個鍵又一次按下
        {
        delay(3);
        if(sw1==1&&P3_4==0&&cnt==7)
        {
        key1 =2; //在時間狀態第一個鍵的第二種狀態
        }
        }
        if(sw1==9&&P3_4==0&&cnt==7) //在年月日狀態第一個鍵第二次按下
        {
        delay(3);
        if(sw1==9&&P3_4==0&&cnt==7)
        {
        key1 =9; //在年月日狀態第一個鍵的第二種狀態
        }
        }
        if(key1==2&&cnt==7&&P3_4==1) //在時間確認第一個鍵第二次按下
        {
        sw1 =2; // 并閃爍時針
        }
        if(key1==9&&cnt==7&&P3_4==1) //年月日狀態確認第一個鍵第二次按下
        {
        sw1 =8; // 并閃爍月分
        }
        if(sw1==8&&P3_4==0&&cnt==7) //在年月日狀態第一個鍵第三次按下
        {
        delay(3);
        if(sw1==8&&P3_4==0&&cnt==7)
        {
        key1 =8; //在年月日狀態第一個鍵的第三種狀態
        }
        }
        if(key1==8&&cnt==7&&P3_4==1) //年月日狀態確認第一個鍵第三次按下
        {
        sw1 =7; // 并閃爍年的后兩位 ///////////////////
        }
        if(sw1==2&&P3_4==0&&cnt==7)
        {
        delay(3);
        if(sw1==2&&P3_4==0&&cnt==7)
        {
        key1 =3;
        }
        }
        if(sw1==7&&P3_4==0&&cnt==7) //在年月日狀態第一個鍵第四次按下
        {
        delay(3);
        if(sw1==7&&P3_4==0&&cnt==7)
        {
        key1 =7; //在年月日狀態第一個鍵的第四種狀態
        }
        }
        if(key1==7&&cnt==7&&P3_4==1) //年月日狀態確認第一個鍵第四次按下
        {
        sw1 =6; // 并閃爍年的前兩位 ///////////////////
        }
        if(sw1==2&&P3_4==0&&cnt==7)
        {
        delay(3);
        if(sw1==2&&P3_4==0&&cnt==7)
        {
        key1 =3;
        }
        }
        if(key1==3&&cnt==7&&P3_4==1)
        {
        sw1 =3; // 并閃爍星期
        }
        if(sw5==0&&P3_4==0&&cnt==6) //檢查第二個鍵是否按下
        {
        delay(3);
        if(sw5==0&&P3_4==0&&cnt==6)
        {
        key2 =1;
        }
        }
        if(key2==1&&cnt==6&&P3_4==1)
        {
        key2 =0;
        sw2 =1; //在時間狀態確認第二個鍵按下
        if(sw2==1&&sw1==1) //和sw1的值對比,加分
        {
        min++;
        if(min>=60)
        min =0;
        }
        if(sw2==1&&sw1==2) //和sw1的值對比,加時
        {
        hour++;
        if(hour>=24)
        hour =0;
        }
        if(sw2==1&&sw1==3)
        {
        week++;
        if(week>6)
        week =0;
        }
        }
        if(sw5==1&&P3_4==0&&cnt==6) //在年月日檢查第二個鍵是否按下
        {
        delay(3);
        if(sw5==1&&P3_4==0&&cnt==6)
        {
        key2 =7;
        }
        }
        if(key2==7&&cnt==6&&P3_4==1)
        {
        key2 =0;
        sw2 =1; //確認第二個鍵按下
        if(sw2==1&&sw1==9) //和sw1的值對比,加day
        {
        day++;
        if(day>31)
        day =0;
        }
        if(sw2==1&&sw1==8) //和sw1的值對比,加month
        {
        month++;
        if(month>12)
        month =0;
        }
        if(sw2==1&&sw1==7)
        {
        year1++;
        if(year1>100)
        year1 =0;
        }
        if(sw2==1&&sw1==6)
        {
        year2++;
        if(year2>100)
        year2 =20;
        }
        } //檢查時間狀態第三個鍵是否按下
        if(sw5==0&&P3_4==0&&cnt==5) //檢查第三個鍵是否按下
        {
        delay(3);
        if(sw5==0&&P3_4==0&&cnt==5)
        {
        key3 =1;
        }
        }
        if(key3==1&&cnt==5&&P3_4==1)
        {
        key3 =0;
        sw3 =1;
        if(sw3==1&&sw1==1)
        {
        if(min<=0)
        min =60;
        min--; //分針減
        }
        if(sw3==1&&sw1==2)
        {
        if(hour<=0)
        hour =24;
        hour--; //時針減
        }
        if(sw3==1&&sw1==3)
        {
        if(week<=0)
        week =7;
        week--;
        }
        }
        if(sw5==1&&P3_4==0&&cnt==5) //在年月日檢查第三個鍵是否按下
        {
        delay(3);
        if(sw5==1&&P3_4==0&&cnt==5)
        {
        key3 =7;
        }
        }
        if(key3==7&&cnt==5&&P3_4==1)
        {
        key3 =0;
        sw3 =7;
        if(sw3==7&&sw1==9)
        {
        if(day<=0)
        day =32;
        day--; //day減
        }
        if(sw3==7&&sw1==8)
        {
        if(month<=0)
        month =13;
        month--; //month減
        }
        if(sw3==7&&sw1==7)
        {
        if(year1<=0)
        year1 =100; //year減
        year1--;
        }
        if(sw3==7&&sw1==6)
        {
        if(year2<=20)
        year2 =100; //year減
        year2--;
        }
        }
        if(P3_4==0&&cnt==4&&sw1!=0&&sw5==0)
        {
        delay(3);
        if(P3_4==0&&cnt==4&&sw1!=0&&sw5==0)
        {
        sw1=0;sec=0;key4=1;key1=0;
        }
        }
        if(P3_4==0&&cnt==4&&sw1!=0&&sw5==1)
        {
        delay(3);
        if(P3_4==0&&cnt==4&&sw1!=0&&sw5==1)
        {
        sw1=0;key4=1;key1=0;
        }
        }
        if(P3_4==0&&cnt==3)
        {
        delay(3);
        if(P3_4==0&&cnt==3)
        {
        key5 =1;
        }
        }
        if(key5==1&&P3_4==1&&cnt==3)
        {
        sw5 =1;
        }
        if(P3_4==0&&sw5==1&&cnt==3)
        {
        delay(3);
        if(P3_4==0&&sw5==1&&cnt==3)
        {
        key5 =0;
        }
        }
        if(P3_4==1&&key5==0&&cnt==3)
        {
        sw5 =0;
        }
        }

        void main(void)
        {
        PCA0MD =0 ;
        XBR1 =0x40 ;
        P0MDOUT =0xFF ;
        P1MDOUT =0xFF ;
        init();
        while(1)
        {
        conv();
        year=year1+year2*100;
        }
        }

        五、調試及性能分析
        5.1 硬件調試:主要檢查電路的焊接,有無虛焊,漏焊,然后檢查電路與單片機的聯線,為了方便自己做了一根數據線,然后用萬用表測試,全部導通后進行通電檢測,上電后排查電路板的各點電平是否正常,測試完畢后進行軟件調試。
        5.2 軟件調試:主要以以編程序為主,并進行單片機輸出口線高低電平的檢驗。本程序采用C語言編寫,用Keil C51編譯器編程調試,本程序的難點之一在于讓它閃爍,也就是再其它燈不變的情況下閃爍需要調整的部分。
        經過測試,任務以及要求全部達到,初始化時,時間是1-00:00:00,切換后是20096.08.15,由于時間關系沒能經過長時間的驗證性測試,短期測試發現每一個小時快一秒鐘,只進行了粗調。

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

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宜兴市| 赫章县| 阿拉善右旗| 泰州市| 民权县| 徐水县| 白城市| 当阳市| 泾阳县| 沙田区| 安西县| 驻马店市| 龙山县| 比如县| 香格里拉县| 泰州市| 开鲁县| 沙河市| 偏关县| 墨玉县| 巴林右旗| 吴江市| 子洲县| 庆云县| 辉南县| 广安市| 三明市| 礼泉县| 龙口市| 镇坪县| 陵川县| 克东县| 建水县| 普陀区| 黄梅县| 蓬安县| 屏东县| 龙江县| 浦城县| 无为县| 友谊县|