新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 點陣萬年歷(帶時間、年月日星期調整及鬧鐘功能)C程序

        點陣萬年歷(帶時間、年月日星期調整及鬧鐘功能)C程序

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

        /******************************************************/
        /**********年調整界面顯示子程序(包括下半屏)************/
        /******************************************************/
        void xiannian(uchar nia)//變量年
        {
        uchar movee;
        char ii;
        for(line=8;line<16;line++)//掃描8次,即完成一個字的移動,line等于8,表示在下半屏顯示
        {
        if(flag1==0)//如果標志位為1,則執行顯示部分
        {
        movee=line-8;
        BUF[0]=table[16+movee];//顯示數字2
        BUF[1]=table[movee];//顯示數字0
        BUF[2]=table[(8*(nia/10))+movee];//顯示年十位
        BUF[3]=table[(8*(nia%10))+movee];
        BUF[4]=table1[16+movee];//顯示橫線
        }
        if(flag1==1)
        yixianhei();//否則顯示黑屏
        for(ii=4;ii>=0;ii--)//循環5次將數發往顯示屏
        song(~BUF[ii]);//送數
        LINE=table2[line];//打開行線,即174HC154行線端
        CLKR=1;//在74HC595處鎖存起來
        CLKR=0;
        CLKR=1;
        delaya(800);
        }
        }
        /******************************************************/
        /*********月/日調整界面顯示子程序(包括下半屏)********/
        /******************************************************/
        void xianriyue(uchar ye,uchar rii)//月與日變量
        {
        uchar movee;
        char ii;
        for(line=8;line<16;line++)//掃描8次,即完成一個字的移動,line等于8,表示在下半屏顯示
        {
        if(flag1==0)//同上如果為0就顯示,為1就黑屏,形成閃爍
        {
        movee=line-8;
        BUF[0]=table[(8*(ye/10))+movee];//顯示月十位
        BUF[1]=table[(8*(ye%10))+movee];//月個位
        BUF[2]=table1[16+movee];//顯示橫線
        BUF[3]=table[(8*(rii/10))+movee];//顯示日十位
        BUF[4]=table[(8*(rii%10))+movee];//顯示橫線
        }
        if(flag1==1)//為1就黑屏顯示
        yixianhei();
        for(ii=4;ii>=0;ii--)//循環5次將數發往顯示屏
        song(~BUF[ii]);//送數
        LINE=table2[line];//打開行線,即174HC154行線端
        CLKR=1;//在74HC595處鎖存起來
        CLKR=0;
        CLKR=1;
        delaya(800);
        }
        }
        /******************************************************/
        /*********星期調整界面顯示子程序(包括下半屏)********/
        /******************************************************/
        void xi(uchar xi)
        {
        uchar movee;
        char ii;
        for(line=8;line<16;line++)//掃描8次,即完成一個字的移動,line等于8,表示在下半屏顯示
        {
        if(flag1==0)//0.5秒顯示
        {
        movee=line-8;
        BUF[0]=table1[16+movee];//顯示橫線"-"
        BUF[1]=table1[16+movee];//顯示橫線"-"
        BUF[2]=table[(8*(xi%10))+movee];//顯示出星期個位
        BUF[3]=table1[16+movee];//顯示橫線"-"
        BUF[4]=table1[16+movee];//顯示橫線"-"
        }
        if(flag1==1)
        yixianhei();
        for(ii=4;ii>=0;ii--)//循環5次將數發往顯示屏
        song(~BUF[ii]);//送數
        LINE=table2[line];//打開行線,即174HC154行線端
        CLKR=1;//在74HC595處鎖存起來
        CLKR=0;
        CLKR=1;
        delaya(800);
        }
        }
        /******************************************************/
        /***************鬧鐘時間調整顯示子程序*****************/
        /******************************************************/
        void xianniao(uchar shi,uchar ge,uchar z)
        {
        char ii;
        for(line=0;line<8;line++)//掃描8次,即完成一個字的移動
        {
        if(flag1==0)//同樣0.5秒顯示時間
        {
        BUF[0]=table[(8*(shi/10))+line];//顯示小時十位
        BUF[1]=table[(8*(shi%10))+line];
        BUF[2]=table1[z*8+line];//顯示橫線
        BUF[3]=table[(8*(ge/10))+line];//顯示分鐘十位
        BUF[4]=table[(8*(ge%10))+line];
        }
        if(flag1==1)//同樣0.5秒顯示黑屏
        yixianhei();
        for(ii=4;ii>=0;ii--)//循環5次將數發往顯示屏
        song(~BUF[ii]);//送數
        LINE=table2[line];//打開行線,即174HC154行線端
        CLKR=1;//在74HC595處鎖存起來
        CLKR=0;
        CLKR=1;
        delaya(800);
        }
        }
        /******************************************************/
        /***************按鍵按下后處理子程序*******************/
        /******************************************************/
        void skey()
        {
        if(shr!=0)//如果標志位shr不為0,則執行以下內容------如果按下了加按鍵則程序復位
        {
        if(key1==0)
        {
        delay(10);
        if(key1==0)//如果加按鍵按下了,則全部復位
        {
        yin=0;//將按鍵計數器清0
        shr=0;//標志位清0
        lk=0;//顯示上半屏,此變量是全屏與半屏控制變量,當它為8時,就執行全屏,否則半屏
        clockbiao=~clockbiao;
        bbtsoud();//蜂鳴器響一聲子程序
        while(!key1);//按鍵釋放
        }
        }
        }
        if(a!=0)//如果標志位不為0,則執行以下內容-------閃爍進入調整模式
        xianshan();//閃爍
        if(b!=0)//如果標志位不為0,則執行以下內容,進行主時間小時調整
        {
        xianshan();//調用主時間顯示子程序
        if(key1==0)
        {
        delay(10);
        if(key1==0)
        {
        xianshan();
        shi++;
        if(shi==24)//小時等于24?
        shi=0;//清0
        write1302(0x8e,0x00);//去掉保護
        write1302(0x84,((shi/10)<<4)|(shi%10));//時數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x85);
        shi=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//將小時轉換出來
        while(!key1);
        }
        }
        if(key2==0)//以下是處理主時間小時減部分
        {
        delay(10);
        if(key2==0)
        {
        shi--;
        if(shi==(0-1))
        shi=23;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x84,((shi/10)<<4)|(shi%10));//時數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x85);
        shi=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);
        while(!key2);
        }
        }
        }
        if(c!=0)//如果標志位不為0,則執行以下內容------以下是處理主時間分鐘調整部分
        {
        xianshan();
        if(key1==0)//加分鐘部分
        {
        delay(10);
        if(key1==0)
        {
        xianshan();//調用主時間顯示子程序
        fen++;
        if(fen==60)
        fen=00;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x82,((fen/10)<<4)|(fen%10));//分數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x83);
        fen=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//將它轉換出來
        while(!key1);
        }
        }
        if(key2==0)//減分鐘部分
        {
        delay(10);
        if(key2==0)
        {
        xianshan();
        fen--;
        if(fen==(0-1))
        fen=59;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x82,((fen/10)<<4)|(fen%10));//分數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x83);
        fen=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);
        while(!key2);
        }

        }
        }
        if(d!=0)//如果標志位不為0,則執行以下內容-----調整年
        {
        xiannian(nian);//調用年顯示子程序
        if(key1==0)//年時間加部分處理
        {
        delay(10);
        if(key1==0)
        {
        xiannian(nian);
        nian++;
        if(nian==99)//年到了99嗎?
        nian=0;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x8c,((nian/10)<<4)|(nian%10));//年數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x8d);
        nian=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//年數據轉換
        while(!key1);
        }
        }
        if(key2==0)//年時間減部分處理
        {
        delay(10);
        if(key2==0)
        {
        xiannian(nian);
        nian--;
        if(nian==(0-1))
        nian=99;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x8c,((nian/10)<<4)|(nian%10));//年數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x8d);
        nian=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//年數據轉換
        while(!key2);
        }

        }
        }
        if(e!=0)//如果標志位不為0,則執行以下內容-----處理月
        {
        xianriyue(yue,ri);
        if(key1==0)//月加部分處理
        {
        delay(10);
        if(key1==0)
        {
        xianriyue(yue,ri);
        yue++;
        if(yue==13)
        yue=1;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x88,((yue/10)<<4)|(yue%10));//月數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x89);
        yue=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);
        while(!key1);
        }
        }
        if(key2==0)//月減部分處理
        {
        delay(10);
        if(key2==0)
        {
        xianriyue(yue,ri);
        yue--;
        if(yue==(1-1))
        yue=12;
        write1302(0x8e,0x00);//去掉保護
        write1302(0x88,((yue/10)<<4)|(yue%10));//月數據寫入
        write1302(0x8e,0x80);//打開保護
        readvalue=read1302(0x89);
        yue=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//月轉換
        while(!key2);
        }

        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 蓬莱市| 达州市| 武强县| 吴川市| 德昌县| 凤庆县| 湖北省| 宽城| 田林县| 瑞安市| 汉寿县| 新龙县| 六枝特区| 桂阳县| 德保县| 高青县| 大冶市| 桦川县| 托克托县| 环江| 正宁县| 万宁市| 江安县| 清流县| 玉树县| 柘荣县| 曲麻莱县| 淮滨县| 禄劝| 来安县| 乐东| 北票市| 佛山市| 孝义市| 婺源县| 平谷区| 交口县| 东海县| 华容县| 察雅县| 珲春市|