找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1777|回复: 1
打印 上一主题 下一主题
收起左侧

万年历

[复制链接]
跳转到指定楼层
楼主
ID:125595 发表于 2016-6-13 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
**********************************************************/
#include "STC89.h"
#include "LCD.H"
#include "SHT11.H"
#include "DS1302.h"
#include <intrins.h>

#define uint  unsigned int
#define uchar unsigned char

uchar  set=1,K1_dat,K2_dat,VOUT1=12,VOUT2=12,VOUT3=12,VOUT4=12,VOUT5=12,VOUT6=12;          //状态记时变量

uchar SHI,FEN,MAO,YAN,RE,YER,week,t,s;

sbit OUT1=P1^5;
sbit OUT2=P1^4;
sbit OUT3=P1^3;
sbit OUT4=P1^2;
sbit OUT5=P1^1;
sbit OUT6=P1^0;

sbit K1=P3^7;
sbit K2=P3^6;
sbit K3=P3^5;
sbit K4=P3^4;

void GJ()
{
        P0=0xff;
        cs2 = 1;
        cs1 = 1;
        EN  = 1;
        RW  = 1;
        RS  = 1;
        RGB_G=0;
        RGB_R=1;
        set=0;
        t=0;
        s=0;
}

void ZJM()
{
        InitLCD();
        Display0816(0,0,2,SZ0816);                //日期,星期图标
        Display0816(0,1,0,SZ0816);
        Display0816(0,4,11,SZ0816);       
        Display0816(0,7,11,SZ0816);
        Display1616(0,5,3,HZ1616);
        Display1616(0,6,4,HZ1616);

        Display0816(6,2,10,SZ0816);            //温湿度图标
        Display1616(6,2,6,HZ1616);
        Display0816(6,12,10,SZ0816);
        Display1616(6,7,5,HZ1616);
        Display1632(2,5,10,SZ1632);
        Display1632(2,2,10,SZ1632);
}

void DSJM()                                                        //输出控制界面
{
        set=1;

        Display1616(0,2,7,HZ1616);                //输出控制
        Display1616(0,3,8,HZ1616);
        Display1616(0,4,9,HZ1616);
        Display1616(0,5,10,HZ1616);

        Display0816(2,0,12,SZ0816);            //
        Display0816(2,1,13,SZ0816);            //
        Display0816(2,2,14,SZ0816);            //
        Display0816(2,3,1,SZ0816);            //               

        Display0816(2,8,12,SZ0816);            //
        Display0816(2,9,13,SZ0816);            //
        Display0816(2,10,14,SZ0816);            //
        Display0816(2,11,2,SZ0816);            //               

        Display0816(4,0,12,SZ0816);            //
        Display0816(4,1,13,SZ0816);            //
        Display0816(4,2,14,SZ0816);            //
        Display0816(4,3,3,SZ0816);               

        Display0816(4,8,12,SZ0816);            //
        Display0816(4,9,13,SZ0816);            //
        Display0816(4,10,14,SZ0816);            //
        Display0816(4,11,4,SZ0816);            //               

        Display0816(6,0,12,SZ0816);            //
        Display0816(6,1,13,SZ0816);            //
        Display0816(6,2,14,SZ0816);            //
        Display0816(6,3,5,SZ0816);            //       

        Display0816(6,8,12,SZ0816);            //
        Display0816(6,9,13,SZ0816);            //
        Display0816(6,10,14,SZ0816);            //
        Display0816(6,11,6,SZ0816);            //       

        if(K1_dat==1&K2_dat==0)
        {
                F_Display1616(2,2,VOUT1,HZ1616);            //OUT1
        }
        else
        {
                Display1616(2,2,VOUT1,HZ1616);                   
        }
        if(K1_dat==1&K2_dat==1)
        {
                F_Display1616(2,6,VOUT2,HZ1616);            //OUT2
        }
        else
        {
                Display1616(2,6,VOUT2,HZ1616);                   
        }
        if(K1_dat==1&K2_dat==2)
        {
                F_Display1616(4,2,VOUT3,HZ1616);            //OUT3
        }
        else
        {
                Display1616(4,2,VOUT3,HZ1616);                   
        }
        if(K1_dat==1&K2_dat==3)
        {
                F_Display1616(4,6,VOUT4,HZ1616);            //OUT4
        }
        else
        {
                Display1616(4,6,VOUT4,HZ1616);          
        }
        if(K1_dat==1&K2_dat==4)
        {
                F_Display1616(6,2,VOUT5,HZ1616);            //OUT5
        }
        else
        {
                Display1616(6,2,VOUT5,HZ1616);          
        }
        if(K1_dat==1&K2_dat==5)
        {
                F_Display1616(6,6,VOUT6,HZ1616);            //OUT6
        }
        else
        {
                Display1616(6,6,VOUT6,HZ1616);          
        }
}

void desplay_WNL()
{
        v_W1302(0x8f, 0);
        MAO = bcdtodec(uc_R1302(0x81));           //读出DS1302中的秒
        v_W1302(0x8f, 0);
        FEN = bcdtodec(uc_R1302(0x83));           //读出DS1302中的分
        v_W1302(0x8f, 0);
        SHI = bcdtodec(uc_R1302(0x85));    //读出DS1302中的小时
        v_W1302(0x8f, 0);
        week = bcdtodec(uc_R1302(0x8b));   //读出DS1302中的小时
        v_W1302(0x8f, 0);
        RE = bcdtodec(uc_R1302(0x87));           //读出DS1302中的日
        v_W1302(0x8f, 0);
        YER = bcdtodec(uc_R1302(0x89));    //读出DS1302中的月
        v_W1302(0x8f, 0);
        YAN = bcdtodec(uc_R1302(0x8d));    //读出DS1302中的年

        Display0816(0,2,YAN/10%10,SZ0816);              //年
        Display0816(0,3,YAN%10,SZ0816);
        Display0816(0,5,YER/10%10,SZ0816);        //月                               
        Display0816(0,6,YER%10,SZ0816);
        Display0816(0,8,RE/10%10,SZ0816);         //日
        Display0816(0,9,RE%10,SZ0816);

        Display1616(0,7,week%10,XQ1616);              //星期几

        Display0816(6,0,temp%1000/100,SZ0816);    //温度                               
        Display0816(6,1,temp%100/10,SZ0816);
        Display0816(6,3,temp%10,SZ0816);
        Display0816(6,10,humi%1000/100,SZ0816);   //湿度                               
        Display0816(6,11,humi%100/10,SZ0816);
        Display0816(6,13,humi%10,SZ0816);
        Display1632(2,0,SHI/10%10,SZ1632);              //时间
        Display1632(2,1,SHI%10,SZ1632);
        Display1632(2,3,FEN/10%10,SZ1632);
        Display1632(2,4,FEN%10,SZ1632);
        Display1632(2,6,MAO/10%10,SZ1632);
        Display1632(2,7,MAO%10,SZ1632);

        F_Display1616(6,3,s,SJ);
        F_Display1616(6,4,s+1,SJ);
           t++;
        if(t==3)
        {
                t=0;
                s++;
            if(s==9)
                        s=0;
        }
}

void desplay_TS()
{
        set=1;
        if(K1_dat==2&K2_dat==0)
        {
                F_Display0816(0,2,YAN/10%10,SZ0816);           //年
                F_Display0816(0,3,YAN%10,SZ0816);
        }
        else
        {
                Display0816(0,2,YAN/10%10,SZ0816);               //年
                Display0816(0,3,YAN%10,SZ0816);
        }
        if(K1_dat==2&K2_dat==1)
        {
                F_Display0816(0,5,YER/10%10,SZ0816);      //月                               
                F_Display0816(0,6,YER%10,SZ0816);
        }
        else
        {
                Display0816(0,5,YER/10%10,SZ0816);        //月                               
                Display0816(0,6,YER%10,SZ0816);
        }
        if(K1_dat==2&K2_dat==2)
        {
                F_Display0816(0,8,RE/10%10,SZ0816);       //日
                F_Display0816(0,9,RE%10,SZ0816);
        }
        else
        {
                Display0816(0,8,RE/10%10,SZ0816);         //日
                Display0816(0,9,RE%10,SZ0816);
        }
        if(K1_dat==2&K2_dat==3)
        {
                F_Display1616(0,7,week%10,XQ1616);               //星期几
        }
        else
        {
                Display1616(0,7,week%10,XQ1616);               //星期几
        }
        if(K1_dat==2&K2_dat==4)
        {       
                F_Display1632(2,0,SHI/10%10,SZ1632);           //时间
                F_Display1632(2,1,SHI%10,SZ1632);
        }
        else
        {
                Display1632(2,0,SHI/10%10,SZ1632);               //时间
                Display1632(2,1,SHI%10,SZ1632);
        }
        if(K1_dat==2&K2_dat==5)
        {
                F_Display1632(2,3,FEN/10%10,SZ1632);
                F_Display1632(2,4,FEN%10,SZ1632);
        }
        else
        {
                Display1632(2,3,FEN/10%10,SZ1632);
                Display1632(2,4,FEN%10,SZ1632);
        }

        Display1632(2,6,0,SZ1632);
        Display1632(2,7,0,SZ1632);

        Display0816(6,0,temp%1000/100,SZ0816);    //温度                               
        Display0816(6,1,temp%100/10,SZ0816);
        Display0816(6,3,temp%10,SZ0816);

        Display0816(6,10,humi%1000/100,SZ0816);   //湿度                               
        Display0816(6,11,humi%100/10,SZ0816);
        Display0816(6,13,humi%10,SZ0816);       

        F_Display1616(6,3,s,SJ);
        F_Display1616(6,4,s+1,SJ);
           t++;
        if(t==30)
        {
                t=0;
                s++;
            if(s==9)
                        s=0;
        }
}

void Write_DS1302()
{
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x80,0x80);        //暂停
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x8c,dectobcd(YAN)); //写入年
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x88,dectobcd(YER));        //写入月
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x86,dectobcd(RE));        //写入日
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x8a,dectobcd(week));//写入星期
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x84,dectobcd(SHI));        //写入小时
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x82,dectobcd(FEN));        //写入分
        v_W1302(0x8e,0x00);        //写保护关闭
        v_W1302(0x80,0x00);        //写入秒
        v_W1302(0x8e,0x80);                                //写保护开启
}

void Write_DS1302Init(void)
{
        v_W1302(0x8e,0);
        v_W1302(0x90,0xA9);        //涓流充电开
        v_W1302(0x8e,0x80);        //写保护       
}

void wenshidu()
{
        error=0;                                            //初始化error=0,即没有错误
        error+=s_measure((uchar*)&temp_val.i,&checksum,TEMP); //温度测量
        error+=s_measure((uchar*)&humi_val.i,&checksum,HUMI); //湿度测量
        if(error!=0) s_connectionreset();                 ////如果发生错误,系统复位
        else
        {
                humi_val.f=(float)humi_val.i;                   //转换为浮点数
                temp_val.f=(float)temp_val.i;                   //转换为浮点数
                calc_sth10(&humi_val.f,&temp_val.f);            //修正相对湿度及温度
                temp=temp_val.f*10;
                humi=humi_val.f*10;
        }  
}

void KEY()
{
        if(K1==0)                                           //设置
        {
                delay(10);
                if(K1==0&&set>0)
                {       
                        K1_dat++;                                  //界面标示变量
                           ClearScreen(0);//清屏
                        if(K1_dat>1)
                        {
                                t=0;
                                s=0;
                                K1_dat=0;
                                K2_dat=0;
                                Write_DS1302();
                                ZJM();
                        }
                }
                while(!K1&&set>0);
        }
        if(K2==0)                                          //切换
        {
                delay(10);
                if(K2==0&&(K1_dat==2||K1_dat==1))                                   //调时切换
                {
                        K2_dat++;
                        if(K2_dat==6)
                        {
                                K2_dat=0;
                        }
                }
                while(!K2&&set==1);
        }
        if(K3==0)                                            //减
        {
                delay(10);
            if(K1_dat==1&&K2_dat==0&&set==1)
                {
                        VOUT1=12;
                        OUT1=0;       
                }
                if(K1_dat==1&&K2_dat==1&&set==1)
                {
                        VOUT2=12;
                        OUT2=0;       
                }
                if(K1_dat==1&&K2_dat==2&&set==1)
                {
                        VOUT3=12;
                        OUT3=0;       
                }
                if(K1_dat==1&&K2_dat==3&&set==1)
                {
                        VOUT4=12;
                        OUT4=0;       
                }
                if(K1_dat==1&&K2_dat==4&&set==1)
                {
                        VOUT5=12;
                        OUT5=0;       
                }
                if(K1_dat==1&&K2_dat==5&&set==1)
                {
                        VOUT6=12;
                        OUT6=0;       
                }

                if(K1_dat==2&&K2_dat==0&&set==1)
                {
                        YAN--;
                        if(YAN==255)
                                YAN=0;
                }
                if(K1_dat==2&&K2_dat==1)
                        YER--;
                        if(YER==255)
                                YER=0;
                if(K1_dat==2&&K2_dat==2)
                        RE--;
                        if(RE==255)
                                RE=0;
                if(K1_dat==2&&K2_dat==3)
                        week--;
                        if(week==0)
                                week=1;
                if(K1_dat==2&&K2_dat==4)
                        SHI--;
                        if(SHI==255)
                                SHI=0;
                if(K1_dat==2&&K2_dat==5)
                        FEN--;
                        if(FEN==255)
                                FEN=0;

                while(!K3&&set==1);
        }
        if(K4==0)                                                //加
        {
                delay(10);
                if(K4==0&&set==0)
                {
                        set=1;
                           ClearScreen(0);//清屏
                        ZJM();                               
                }

            if(K1_dat==1&&K2_dat==0&&set==1)
                {
                        VOUT1=11;
                        OUT1=1;       
                }
                if(K1_dat==1&&K2_dat==1&&set==1)
                {
                        VOUT2=11;
                        OUT2=1;       
                }
                if(K1_dat==1&&K2_dat==2&&set==1)
                {
                        VOUT3=11;
                        OUT3=1;       
                }
                if(K1_dat==1&&K2_dat==3&&set==1)
                {
                        VOUT4=11;
                        OUT4=1;       
                }
                if(K1_dat==1&&K2_dat==4&&set==1)
                {
                        VOUT5=11;       
                        OUT5=1;
                }
                if(K1_dat==1&&K2_dat==5&&set==1)
                {
                        VOUT6=11;
                        OUT6=1;       
                }


                if(K1_dat==2&&K2_dat==0&&set==1)
                YAN++;
                if(YAN==100)
                        YAN=99;
                if(K1_dat==2&&K2_dat==1)
                YER++;
                if(YER==13)
                        YER=12;
                if(K1_dat==2&&K2_dat==2)
                RE++;
                if(RE==32)
                        RE=31;
                if(K1_dat==2&&K2_dat==3)
                week++;
                if(week==8)
                        week=7;
                if(K1_dat==2&&K2_dat==4)
                SHI++;
                if(SHI==24)
                        SHI=23;
                if(K1_dat==2&&K2_dat==5)
                FEN++;
                if(FEN==60)
                        FEN=59;


                if(K4==0&&set>1)
                {
                        K1_dat=2;
                        while(!K4);
                }


                while(!K4&&set==1);
        }

}


void main()
{  
        P1=0x00;
        RGB_B=0;
        Write_DS1302Init();
        s_connectionreset();                        //启动连接复位
        InitLCD();
        desplay_bmp(FC_DZ);
        delay(5000);
        wenshidu();
        ZJM();
        while(1)
        {   
                if(set>0&&K1_dat==0)                   //时间显示界面
                {
                        desplay_WNL();
                        wenshidu();
                        set++;
                        if(set==190)
                        {
                                set=0;
                                GJ();
                        }
                }

                if(set>0&&K1_dat==1)                   //定时设置主界面
                {
                        DSJM();
                }

                if(set>0&&K1_dat==2)                   //时间设置界面
                {
                        desplay_TS();
                }

                if(set==0)
                {
                        RGB_B=~RGB_B;
                        delay(300);       
                }
                else
                        RGB_B=~RGB_B;

                KEY();
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:211632 发表于 2017-6-15 18:00 | 只看该作者
试过了 但是有错误 还没有纠正完
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表