⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 多功能数字钟,内含I2C驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "CONFIG.H"
sbit Bell_Out  = P1 ^ 5;//闹钟管脚输出
sbit Mcs    = P3 ^ 5;  //
sbit Scs    = P3 ^ 4;  //
sbit Add_Key   = P1 ^ 0;//加1键
sbit Dec_Key   = P1 ^ 1;//减1键
sbit OK_Key    = P1 ^ 2;//确定键
sbit RST=P1^3;

bit flag, Bell_Swh,Hourb,Minb,Secb,Kgb;//闪烁标志位
bit sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0; //闪烁标志位
unsigned char id,id2,d,e,S_8563,H_8563,H_2402,S_2402; //

void Disp(void);
void id_case1_key(void);
void id_case2_key(void);
void Set_time(unsigned char sel,bit sel_1);
void Timer0_Init(void);
void Set_Bell(unsigned char sel, bit sel_1);

void Disp(void)//显示和闪烁函数
{
    
    unsigned int i=0;
    unsigned char a=0,b=0,c=0,f=0;
    
    i=ReadTemperature();//读温度并送显  如果加了这一温度程序,那么时间相差走得很慢,那位高手给小弟指导一下
    a=i/100;         
    Mcs=1;
    Scs=0;
    Disp_Digit(6,40,zero+a*16);
    b=i/10-a*10;
    Mcs=1;Scs=0;
    Disp_Digit(6,48,zero+b*16);
    c=i-a*100-b*10;
    Mcs=0;Scs=1;
    Disp1_Digit(6,0,zero+c*16);	
    
    
    if((((read_clock(0x08))&0x80)>>7)==0)
    {
        d=2;e=0;
    }
    else
    {
        d=1;e=9;
    }
    Disp_Digit(0,0,zero+d*16);
    Disp_Digit(0,8,zero+e*16); 
    
    
    Conversion(((read_clock(0x08))&0x80)>>7,read_clock(0x08),read_clock(0x07)&0x1F,read_clock(0x05)&0x3F); 
    Disp_Chinese(4,0,nong);
    Disp_Chinese(4,16,li);
    d=year_moon;//读年
    e=d;
    d=d>>4;
    e=e&0x0f;
    Disp_Digit(4,32,zero+d*16);
    Disp_Digit(4,40,zero+e*16);
    Disp_Chinese(4,48,nian);
    d=month_moon;//读月
    e=d;
    d=d>>4;
    e=e&0x0f;
    Disp1_Digit(4,0,zero+d*16);
    Disp1_Digit(4,8,zero+e*16);
    Disp1_Chinese(4,16,yue);
    d=day_moon;//读日
    e=d;
    d=d>>4;
    e=e&0x0f;
    Disp1_Digit(4,32,zero+d*16);
    Disp1_Digit(4,40,zero+e*16);
    Disp1_Chinese(4,48,ri);
    
    
    
    
    if(sec==1)  //秒闪烁标志位
    {
        if(flag==1)
        {    
            d=read_clock(0x02);//读秒
            d=d&0x7f;
            d=((d&0x70)>>4)*10+(d&0x0f);
            e=d;
            d=d/10;
            e=e%10;
            Mcs=0;Scs=1;
            Disp1_Digit(2,40,zero+d*16);//送显示
            Disp1_Digit(2,48,zero+e*16);   
        }
        else
        {
            Mcs=0;Scs=1;
            Disp1_Digit(2,40,space); //显示空格
            Disp1_Digit(2,48,space);    
        }
    } 
    else
    {
        d=read_clock(0x02);//读秒
        d=d&0x7f;
        d=((d&0x70)>>4)*10+(d&0x0f);
        e=d;
        d=d/10;
        e=e%10;
        Mcs=0;Scs=1;
        Disp1_Digit(2,40,zero+d*16);
        Disp1_Digit(2,48,zero+e*16);          
    }    
    
    if(min==1)  //分钟闪烁标志位
    {
        if(flag==1)
        {    
            d=read_clock(0x03);//读分钟
            d=d&0x7f;
            e=d;
            d=d>>4;
            e=e&0x0f;
            Mcs=0;Scs=1;
            Disp1_Digit(2,16,zero+d*16);
            Disp1_Digit(2,24,zero+e*16);     
        }
        else
        {	
            Mcs=0;Scs=1;
            Disp1_Digit(2,16,space); //显示空格
            Disp1_Digit(2,24,space);    
        }
    } 
    else
    {
        d=read_clock(0x03);//读分钟
        d=d&0x7f;
        e=d;
        d=d>>4;
        e=e&0x0f;
        Mcs=0;Scs=1;
        Disp1_Digit(2,16,zero+d*16);
        Disp1_Digit(2,24,zero+e*16);         
    } 
    
    if(hour==1)  //小时闪烁标志位
    {
        if(flag==1)
        {    
            d=read_clock(0x04);//读小时
            d=d&0x3f;
            if(d>0x12)
            {
                Disp1_Digit(0,48,p);
                d=d-0x12;
                
            }
            else
            {
                Disp1_Digit(0,48,A);
            }
            e=d;
            d=d>>4;
            e=e&0x0f;
            Mcs=1;Scs=0;
            Disp_Digit(2,56,zero+d*16);
            Mcs=0;Scs=1;
            Disp1_Digit(2,0,zero+e*16);
        }
        else
        {
            Mcs=1;Scs=0;
            Disp_Digit(2,56,space); //显示空格
            Mcs=0;Scs=1;
            Disp1_Digit(2,0,space);    
        }
    } 
    else
    { 
        d=read_clock(0x04);//读小时			
        d=d&0x3f;
        if(d>0x12)
        {
            Disp1_Digit(0,48,p);
            d=d-0x12;
            
        }
        else
        {
            Disp1_Digit(0,48,A);
        }
        
        e=d;
        d=d>>4;
        e=e&0x0f;
        Mcs=1;Scs=0;
        Disp_Digit(2,56,zero+d*16);
        Mcs=0;Scs=1;
        Disp1_Digit(2,0,zero+e*16);
    }
    
    if(year==1)  //年闪烁标志位
    {
        if(flag==1)
        {    
            d=read_clock(0x08);//读年
            e=d;
            d=d>>4;
            e=e&0x0f;
            Mcs=1;Scs=0;
            Disp_Digit(0,16,zero+d*16);
            Disp_Digit(0,24,zero+e*16);
        }
        else
        {
            Mcs=1;Scs=0;
            Disp_Digit(0,16,space); //显示空格
            Disp_Digit(0,24,space);    
        }
    } 
    else
    { 
        d=read_clock(0x08);//读年
        e=d;
        d=d>>4;
        e=e&0x0f;
        Mcs=1;Scs=0;
        Disp_Digit(0,16,zero+d*16);
        Disp_Digit(0,24,zero+e*16);
    }
    
    if(mon==1)  //月闪烁标志位
    {
        if(flag==1)
        {    
            d=read_clock(0x07);
            d=d&0x1f;//读月
            e=d;
            d=d>>4;
            e=e&0x0f;
            Mcs=1;Scs=0;
            Disp_Digit(0,48,zero+d*16);
            Mcs=0;Scs=1;
            Disp_Digit(0,56,zero+e*16);
            Disp1_Chinese(0,0,yue);
        }
        else
        {
            Mcs=1;Scs=0;
            Disp_Digit(0,48,space); //显示空格
            Mcs=0;Scs=1;
            Disp_Digit(0,56,space);    
        }
    } 
    else
    { 
        d=read_clock(0x07);//读月
        d=d&0x1f;
        e=d;
        d=d>>4;
        e=e&0x0f;
        Mcs=1;Scs=0;
        Disp_Digit(0,48,zero+d*16);
        Mcs=0;Scs=1;
        Disp_Digit(0,56,zero+e*16);
        Disp1_Chinese(0,0,yue);
    }   
    
    if(day==1)  //日闪烁标志位
    {
        if(flag==1)
        {  
            d=read_clock(0x05);//读日
            d=d&0x3f;
            e=d;
            d=d>>4;
            e=e&0x0f;
            Mcs=0;Scs=1;
            Disp1_Digit(0,16,zero+d*16);
            Disp1_Digit(0,24,zero+e*16);
            Disp1_Chinese(0,32,ri);
        }
        else
        {
            Mcs=0;Scs=1;
            Disp1_Digit(0,16,space); //显示空格
            Disp1_Digit(0,24,space);    
        }
    } 
    else
    { 
        d=read_clock(0x05);//读日
        d=d&0x3f;
        e=d;
        d=d>>4;
        e=e&0x0f;
        Mcs=0;Scs=1;
        Disp1_Digit(0,16,zero+d*16);
        Disp1_Digit(0,24,zero+e*16);
        Disp1_Chinese(0,32,ri);
    }
    
    Conver_week(((read_clock(0x08))&0x80)>>7,read_clock(0x08),read_clock(0x07)&0x1F,read_clock(0x05)&0x3F);
    
    
    
    if(weekk==1)  //星期闪烁标志位
    {
        if(flag==1)
        {
            d=week; 
            // d=read_clock(0x06);//读星期
            Mcs=1;Scs=0;
            Disp_Chinese(2,40,cone+(d-1)*32);//写入星期的汉字
        }
        else
        {
            Mcs=1;Scs=0;
            Disp_Chinese(2,40,spaces); //显示空格        
        }
    } 
    else
    { 
        d=week; 
        // d=read_clock(0x06);//读星期
        Mcs=1;Scs=0;
        Disp_Chinese(2,40,cone+(d-1)*32);//写入星期的汉字
    }     
}

/******************************************************************************/
void Disp2(void)//显示和闪烁函数
{
    if(Kgb==1)  //开关闪烁标志位
    {
        if(flag==1)
        {
            if(Bell_Swh == 0)//0为关
            {
                Mcs=0;Scs=1;
                Disp1_Chinese(2,32,guan);//显示关
            }
            else
            {
                Mcs=0;Scs=1;
                Disp1_Chinese(2,32,kai);//显示开
            }
        }
        else
        {
            Mcs=0;Scs=1;
            Disp1_Chinese(2,32,spaces); //显示空格
        }
    } 
    else
    {
        if(Bell_Swh == 0)//关
        {
            Mcs=0;Scs=1;
            Disp1_Chinese(2,32,guan);
        }
        else
        {
            Mcs=0;Scs=1;
            Disp1_Chinese(2,32,kai);
        }
    }    
    
    if(Hourb==1)  
    {
        if(flag==1)	  //时闪烁标志位
        {    
            d = Read_One_Byte(0x01);//读取2408的小时的数值
            Mcs=1;Scs=0;
            Disp_Digit(4,48,zero+(d/10)*16);
            Disp_Digit(4,56,zero+(d%10)*16);   
        }
        else
        {
            Mcs=1;Scs=0;
            Disp_Digit(4,48,space); //显示空格
            Disp_Digit(4,56,space);    
        }
    } 
    else
    {
        d = Read_One_Byte(0x01);//读取24的小时的数值
        Mcs=1;Scs=0;
        Disp_Digit(4,48,zero+(d/10)*16);
        Disp_Digit(4,56,zero+(d%10)*16);        
    } 
    
    if(Minb==1)  //分钟闪烁标志位
    {
        if(flag==1)
        {    
            d = Read_One_Byte(0x02);//读取24的分的数值
            Mcs=0;Scs=1;
            Disp1_Digit(4,8,zero+(d/10)*16);
            Disp1_Digit(4,16,zero+(d%10)*16);
        }
        else
        {
            Mcs=0;Scs=1;
            Disp1_Digit(4,8,space); //显示空格
            Disp1_Digit(4,16,space);    
        }
    } 
    else
    { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -