切换到宽版
爱科技/爱创意/爱折腾;电子/数码爱好者的家!欢迎访问新版数码之家网站
  • 5472阅读
  • 21回复

给帮忙看看mini3216点阵时钟设置按键只在特定时段起作用 [复制链接]

上一主题 下一主题
离线waxkj
 

发帖
161
M币
23
专家
3
粉丝
80
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2014-02-07
哪位大侠给看看怎么回事!!键盘K1只会在显示流动日期后,由固定显示温度向右固显示时间时按住才能进入设置.改了半天也没能达到目的.
不过觉得和定时器有关,不会编程,放这让那位大侠给瞧瞧!!


本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线liu1028tao

发帖
504
M币
5285
专家
1
粉丝
20
只看该作者 1楼 发表于: 2014-02-07
還是貼源碼吧,下載要M幣,沒人會下的
离线waxkj

发帖
161
M币
23
专家
3
粉丝
80
只看该作者 2楼 发表于: 2014-02-08
回 liu1028tao 的帖子
liu1028tao:還是貼源碼吧,下載要M幣,沒人會下的 (2014-02-07 23:04) 回 liu1028tao 的帖子

直接下载不需要M币的!
离线benli

发帖
33704
M币
6633
专家
91
粉丝
487
只看该作者 3楼 发表于: 2014-02-08
一般都是按键扫描程序入口的问题,还是把程序贴出来吧
离线waxkj

发帖
161
M币
23
专家
3
粉丝
80
只看该作者 4楼 发表于: 2014-02-08
回 benli 的帖子
benli:
一般都是按键扫描程序入口的问题,还是把程序贴出来吧 回 benli 的帖子

直接下载不需要M
好吧,那就贴出来.




void init (void){ //上电初始化
    TMOD = 0x11;         // 定时/计数器0,1工作于方式1  
    TH0  = 0x3c;          // 预置产生50ms时基信号  
    TL0  = 0xb0;  
    TH1  = 0x3c;          // 预置产生50ms时基信号  
    TL1  = 0xb0;
    EA   = 1;              // 开总中断  
    ET0  = 1;             // 定时/计数器0允许中断  
    ET1  = 1;
    EX0  = 1;
    IT0  = 0;
    TR0  = 0;    
}

/********************装载一线点阵数据********************/
void loadline()    //用于装开始语字模
{
    uchar s;
    for(s=0;s<3;s++)    //s为要显示的字数+1(显示4字+1=5)
    {
        
        BUFF[2*s]=disp[word+32*s+line];
        BUFF[2*s+1]=disp[word+16+32*s+line];
    }

}
void loadline1()
{
    uchar s;
    for(s=0;s<3;s++)    //s为要显示的字数+1(显示4字+1=5)
    {
            BUFF[2*s]=disbuf1[word+32*s+line];
            BUFF[2*s+1]=disbuf1[word+16+32*s+line];
    }

}
/*****************发送一字节*************/
void SendByte(unsigned char dat)
{    
  unsigned char i;
        
   for(i=0;i<8;i++)
        {
         SHCP=0;
         DS=~dat&0x01;
         dat>>=1;
         SHCP=1;
         }
    
}
/*******锁存595数据*********/
void Out595(void)
{
        LATCH=0;  //锁存
        _nop_();
        LATCH=1;
}
/********************发送一线移动数据********************/
void sendline()
{
    char s;
    uchar inc,tempcol;

    if(move<8) inc=0;
    else inc=1;
    for(s=0+inc;s<=3+inc;s++)
    {
        if(move<8) tempcol=move;
        else tempcol=move-8;
        disbuf[s-inc]=(BUFF[s+1]<<8-tempcol)|(BUFF[s]>>(tempcol));    //字模左边字节左移8-tempcol位右边字节右移tempcol位,2者相或    
    }
    SendByte(disbuf[0]);
    SendByte(disbuf[1]);
    SendByte(disbuf[2]);
    SendByte(disbuf[3]);
}
/***********装载开始语到时间过渡******************/
void load_inital()
{
    uchar i;
    for(i=0;i<64;i++)    disbuf1=0x00;
    for(i=64;i<80;i++){disbuf1=shuzi[ss*16+i-64];}        //         小时   十位
    for(i=80;i<96;i++)                                         //        小时     个位
    {
        disbuf1=shuzi[sg*16+i-80];
        if((i-80>2&&i-80<6)||(i-80>9&&i-80<13))    disbuf1|=0x80;    
            if(mg%2==0&&(i==2+80||i==13+80))        disbuf1|=0x80;      
            if(mg%2==1&&(i==6+80||i==9+80))           disbuf1|=0x80;    
    }                                                          
    for(i=96;i<112;i++)                                          //  分十位
    {    
        disbuf1=shuzi[fs*16+i-96]<<2;
        if((i-96>2&&i-96<6)||(i-96>9&&i-96<13))  disbuf1|=0x01;    
        if(mg%2==0&&(i==2+96||i==13+96))        disbuf1|=0x01;        
        if(mg%2==1&&(i==6+96||i==9+96))           disbuf1|=0x01;
    }
    for(i=112;i<128;i++){disbuf1=shuzi[fg*16+i-112]<<2;}              //  分个位
}
/*********装载日期字模***********/    /***-温度空格月日-19.c 10月24日-***/
void load_date1()
{
    uchar i;
    for(i=0;i<16;i++){disbuf1=shuzi[temps*16+i];}//    温度十位
    for(i=16;i<32;i++)                                //  温度个位
    {
        disbuf1=shuzi[tempg*16+i-16];
        if(i-16>12&&i-16<15)    disbuf1|=0x80;     //加温度下标
    }
    for(i=32;i<48;i++)                                  //温度小数位
    {    
        disbuf1=shuzi[tempx*16+i-32]<<2;
        
    }
    for(i=48;i<64;i++){disbuf1=shuzi[10*16+i-48];}       //温度符号。c

    for(i=64;i<96;i++)         disbuf1=0x00;                   //空格
    for(i=96;i<112;i++)     disbuf1=shuzi[ys*16+i-96];       //月十位
    for(i=112;i<128;i++)    disbuf1=shuzi[yg*16+i-112];        //月个位
    for(i=128;i<160;i++)    disbuf1=hanzi[8*32+i-128];       //汉字 月
}
/*********装载日期字模***********/    /***-月日-10月24日-***/
void load_date2()
{
    uchar i;
    for(i=0;i<16;i++)     disbuf1=shuzi[ys*16+i];       //月十位
    for(i=16;i<32;i++)    disbuf1=shuzi[yg*16+i-16];        //月个位
    for(i=32;i<64;i++)    disbuf1=hanzi[8*32+i-32];       //汉字 月
    for(i=64;i<80;i++)     disbuf1=shuzi[ts*16+i-64];       //天十位
    for(i=80;i<96;i++)    disbuf1=shuzi[tg*16+i-80];       //天个位
    for(i=96;i<128;i++)    disbuf1=hanzi[6*32+i-96];      //汉字 日

}
void load_date3()
{
    uchar i;
    for(i=0;i<16;i++)         disbuf1=shuzi[ts*16+i];           //天十位
    for(i=16;i<32;i++)         disbuf1=shuzi[tg*16+i-16];       // 天个位
    for(i=32;i<64;i++)        disbuf1=hanzi[6*32+i-32];       // 汉字 日
    for(i=64;i<96;i++)        disbuf1=hanzi[9*32+i-64];       // 汉字 星
    for(i=96;i<128;i++)     disbuf1=hanzi[10*32+i-96];       // 汉字 期
    for(i=128;i<160;i++)    disbuf1=hanzi[(xg-1)*32+i-128]; //  汉字 大写数字
    for(i=160;i<192;i++)    disbuf1=0x00;                   //  空格
}
void load_date4()
{
    uchar i;
    for(i=0;i<32;i++)         disbuf1=hanzi[(xg-1)*32+i];     //        汉字     大写数字
    for(i=32;i<64;i++)         disbuf1=0x00;                 //        空格
    for(i=64;i<80;i++){disbuf1=shuzi[ss*16+i-64];}        //         小时   十位
    for(i=80;i<96;i++)                                         //        小时     个位
    {
        disbuf1=shuzi[sg*16+i-80];
        if((i-80>2&&i-80<6)||(i-80>9&&i-80<13))    disbuf1|=0x80;    
            if(mg%2==0&&(i==2+80||i==13+80))        disbuf1|=0x80;      
            if(mg%2==1&&(i==6+80||i==9+80))           disbuf1|=0x80;    
    }                                                          
    for(i=96;i<112;i++)                                          //  fen
    {    
        disbuf1=shuzi[fs*16+i-96]<<2;
        if((i-96>2&&i-96<6)||(i-96>9&&i-96<13))  disbuf1|=0x01;    
        if(mg%2==0&&(i==2+96||i==13+96))        disbuf1|=0x01;        
        if(mg%2==1&&(i==6+96||i==9+96))           disbuf1|=0x01;
    }
    for(i=112;i<128;i++){disbuf1=shuzi[fg*16+i-112]<<2;}              //

}
/*********装载时间字模***********/
void load_time()
{
    uchar i;
    for(i=0;i<16;i++){disbuf1=shuzi[ss*16+i];}//
    for(i=16;i<32;i++)
    {
        disbuf1=shuzi[sg*16+i-16];
        if((i-16>2&&i-16<6)||(i-16>9&&i-16<13))    disbuf1|=0x80;
            if(mg%2==0&&(i==2+16||i==13+16))        disbuf1|=0x80;  
            if(mg%2==1&&(i==6+16||i==9+16))           disbuf1|=0x80;
    }
    for(i=32;i<48;i++)
    {    
        disbuf1=shuzi[fs*16+i-32]<<2;
        if((i-32>2&&i-32<6)||(i-32>9&&i-32<13))  disbuf1|=0x01;
        if(mg%2==0&&(i==2+32||i==13+32))        disbuf1|=0x01;  
        if(mg%2==1&&(i==6+32||i==9+32))           disbuf1|=0x01;
    }
    for(i=48;i<64;i++){disbuf1=shuzi[fg*16+i-48]<<2;}      
}
/********装载温度字模***************/
void load_temp(uchar z)
{
    uchar i;
    for(i=0;i<16;i++){disbuf1[i+z]=shuzi[temps*16+i];}//
    for(i=16;i<32;i++)
    {
        disbuf1[i+z]=shuzi[tempg*16+i-16];
        if(i-16>12&&i-16<15)    disbuf1[i+z]|=0x80;    
    }
    for(i=32;i<48;i++)
    {    
        disbuf1[i+z]=shuzi[tempx*16+i-32]<<2;
        
    }
    for(i=48;i<64;i++){disbuf1[i+z]=shuzi[10*16+i-48];}
}
/***********装载调时模式字模1**设置时间:2011年*****/
void load_change1()
{
    uchar i ;
    for(i=0;i<128;i++)       disbuf1=hanzi[11*32+i];
    for(i=128;i<144;i++)
    {    
        disbuf1=shuzi[2*16+i-128]<<2;
        if((i-128>1&&i-128<6)||(i-128>9&&i-128<14))
            disbuf1=disbuf1|0x01;
    }
    for(i=144;i<160;i++)    disbuf1=shuzi[i-144]<<2;
    for(i=160;i<176;i++)    disbuf1=shuzi[ns*16+i-160]<<1;
    for(i=176;i<192;i++)    disbuf1=shuzi[ng*16+i-176]<<1;
    for(i=192;i<224;i++)    disbuf1=hanzi[7*32+i-192];
}
/**********装载调时模式字模2****11年10月********/
void load_change2()
{
    uchar i;
    for(i=0;i<16;i++)    disbuf1=shuzi[ns*16+i]<<1;
    for(i=16;i<32;i++)    disbuf1=shuzi[ng*16+i-16]<<1;
    for(i=32;i<64;i++)    disbuf1=hanzi[7*32+i-32];
    for(i=64;i<80;i++)    
    {
        if(ys==0)        disbuf1=0x00;
        else              disbuf1=shuzi[ys*16+i-64]<<1;
    }
    for(i=80;i<96;i++)    disbuf1=shuzi[yg*16+i-80]<<1;
    for(i=96;i<128;i++)    disbuf1=hanzi[8*32+i-96];
}
/**********装载调时模式字模3****10月24日********/
void load_change3()
{
    uchar i;
    for(i=0;i<16;i++)    
    {
        if(ys==0)        disbuf1=0x00;
        else              disbuf1=shuzi[ys*16+i]<<1;
    }
    for(i=16;i<32;i++)    disbuf1=shuzi[yg*16+i-16]<<1;
    for(i=32;i<64;i++)    disbuf1=hanzi[8*32+i-32];
    for(i=64;i<80;i++)    
    {
        if(ts==0)        disbuf1=0x00;
        else              disbuf1=shuzi[ts*16+i-64]<<1;
    }
    for(i=80;i<96;i++)    disbuf1=shuzi[tg*16+i-80]<<1;
    for(i=96;i<128;i++)    disbuf1=hanzi[6*32+i-96];
}
/**********装载调时模式字模4****24日星期日********/
void load_change4()
{
    uchar i;
    for(i=0;i<16;i++)    
    {
        if(ts==0)        disbuf1=0x00;
        else              disbuf1=shuzi[ts*16+i];
    }
    for(i=16;i<32;i++)    disbuf1=shuzi[tg*16+i-16];
    for(i=32;i<64;i++)    disbuf1=hanzi[6*32+i-32];
    for(i=64;i<96;i++)    disbuf1=hanzi[9*32+i-64];       // 汉字 星
    for(i=96;i<128;i++)    disbuf1=hanzi[10*32+i-96];       // 汉字 期
    for(i=128;i<160;i++)disbuf1=hanzi[(xg-1)*32+i-128]; //  汉字 大写数字
}
/**********装载调时模式字模5****期日17时********/
void load_change5()
{
    uchar i;
    for(i=0;i<32;i++)     disbuf1=hanzi[10*32+i];       // 汉字 期
    for(i=32;i<64;i++)    disbuf1=hanzi[(xg-1)*32+i-32]; //  汉字 大写数字
    for(i=64;i<80;i++)    disbuf1=shuzi[ss*16+i-64]<<1;      
    for(i=80;i<96;i++)     disbuf1=shuzi[sg*16+i-80]<<1;      
    for(i=96;i<128;i++)disbuf1=hanzi[13*32+i-96];

}
/**********装载调时模式字模6****17时58分********/
void load_change6()
{
    uchar i;
    for(i=0;i<16;i++)    disbuf1=shuzi[ss*16+i]<<1;      
    for(i=16;i<32;i++)     disbuf1=shuzi[sg*16+i-16]<<1;      
    for(i=32;i<64;i++)    disbuf1=hanzi[13*32+i-32];      //汉字 时
     for(i=64;i<80;i++)    disbuf1=shuzi[fs*16+i-64]<<1;      
    for(i=80;i<96;i++)     disbuf1=shuzi[fg*16+i-80]<<1;
    for(i=96;i<128;i++)    disbuf1=hanzi[15*32+i-96];      //汉字 分
}
/**********装载调时模式字模7****58分33秒********/
void load_change7()
{
    uchar i;
    for(i=0;i<16;i++)    disbuf1=shuzi[fs*16+i]<<1;      
    for(i=16;i<32;i++)     disbuf1=shuzi[fg*16+i-16]<<1;      
    for(i=32;i<64;i++)    disbuf1=hanzi[15*32+i-32];      //汉字 分
     for(i=64;i<80;i++)    disbuf1=shuzi[ms*16+i-64]<<1;      
    for(i=80;i<96;i++)     disbuf1=shuzi[mg*16+i-80]<<1;
    for(i=96;i<128;i++)    disbuf1=hanzi[16*32+i-96];      //汉字  秒
}
/**********装载调时模式字模10****33秒11年********/
void load_change10()
{
    uchar i;
    for(i=0;i<16;i++)    disbuf1=shuzi[ms*16+i]<<1;      
    for(i=16;i<32;i++)     disbuf1=shuzi[mg*16+i-16]<<1;      
    for(i=32;i<64;i++)    disbuf1=hanzi[16*32+i-32];      //汉字 分
    for(i=64;i<80;i++)    disbuf1=shuzi[ns*16+i-64]<<1;
    for(i=80;i<96;i++)    disbuf1=shuzi[ng*16+i-80]<<1;
    for(i=96;i<128;i++)    disbuf1=hanzi[7*32+i-96];     //汉字 年
}
/**********装载调时模式字模8****完成********/
void load_change8()
{
    uchar i;
    for(i=0;i<32;i++)    disbuf1=hanzi[17*32+i];
    for(i=32;i<64;i++)    disbuf1=hanzi[18*32+i-32];
}
/**********装载调时模式字模9****设置********/
void load_change9()
{
    uchar i;
    for(i=0;i<32;i++)    disbuf1=hanzi[11*32+i];
    for(i=32;i<64;i++)    disbuf1=hanzi[12*32+i-32];
}
/**************装载时间温度切换*****************/
void load_tt()
{
    uchar j;
    time_process();
    load_time();
    for(j=0;j<32;j++)
    {
        disbuf1[j+64]=0x00;
    }
    temp_process();
    load_temp(96);
}
void display(uchar i)
{
      uchar j;
      for(j=0;j<2;j++)
      {
                    for(line=0;line<16;line++)    //行扫描
                    {
                        if(key1!=0&&key4!=0)     beep3();
                        loadline1();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        gate=0;
                        Out595();
                        delay1(50-i);
                        gate=1;
                        delay1(i);
                    }    
       }
}

/*****显示停在时间上**********/
void time_yd(void)
{
          if(timeflag==1)      //定时时间到改变move值进入移动显示 timeflag--时间显示定时到标志位,若为1,定时到
        {
            move++;        //移动一步(一位)
        }
         else        
         {
             if(timecount%10==0)        //确定读时间频率 此处为0.5s读一次
             time_process();
            load_time();
         }
}
/*******显示停在温度上************/
void temp_yd()
{

        if(word==96&&move==1)         //判断是否移动到温度了
        {
            
            if(ksi==0)           //ksi用于显示一次温度的两秒内仅第一次进入时执行大括号内语句,用于设置计时器
            {    
                rttemp=1;
                timecount=40;        //开始计时2s*2=40;
                TR0=1;
            }
            if(tempflag==0)              
            {
                 move=0;
                 ksi=1;
             }
             else                     //定时时间到改变move值退出循环 tempflag--温度显示定时到标志位,若为1,定时到
            {
                 move=16;
                 rttemp=0;
            }                
        }
        /**
        if(rttemp==1&&timecount==27)//进入温度显示后,才会更新缓存
        {
                    time_process();                    
                     temp_process();
                    load_temp(96);
        }
        ****/
        
}
void clear_flag()
{
    timeflag=0;
    tempflag=0;
    ksi=0;
}
/***********右移模式***时间显示五秒******温度显示两秒********/
void right_move()
{

    uchar sp=0;
    load_tt();
    move=0;
    word=0;
    timecount=100;    //设置定时初值5s*20=100;
    TR0=1;             //开定时器
        while(word<=96&&inchange==0)//48*32=1536(显示48个字  每个字32个)
        {
            while(move<16&&inchange==0)    //数据移位
            {
                    for(line=0;line<16&&inchange==0;line++)    //行扫描
                    {
                        if(inchange==1)     beep=0;
                        gate=0;
                        loadline1();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        Out595();
                        delay2();
                        gate=1;
                       delay2();
                    }
                time_yd();
                temp_yd();
                if(timeflag==1) time_process();
            }
            move=0;
            word=word+32;    //下一个字
        }
        word=0;
        clear_flag();
        if(inchange==1)     beep=0;
}
/*************左移模式***仅作为链接***/
void left_move()
{
    load_tt();
    move=15;
    word=64;   //(4-2)*32=64(显示48个字  每个字32个)
            
        while(word<65000&&inchange==0)  //该处数字没有实际意义,因为uint word   当word=0时再减一就变成65535了,借此判断退出循环
        {
            while(move<200&&inchange==0)    //同上    move为uchar
            {
                    for(line=0;line<16&&inchange==0;line++)    //行扫描
                    {    
                        if(inchange==1)     beep=0;                        
                        gate=0;
                        loadline1();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        Out595();
                        delay2();
                        gate=1;
                    }
            move--;        //移动一步(一位)
            }
            move=15;
            word=word-32;    //下一个字
            time_process();
        }
}
/**********分段显示日期***************/
void date_move(uchar i,uchar j)
{
    uchar sp;
    move=0;
    word=0;
    
        while(word<i&&inchange==0)//48*32=1536(显示48个字  每个字32个)
        {
            while(move<16&&inchange==0)    //数据移位
            {
                for(sp=0;sp<j&&inchange==0;sp++)    //移动速度
                {    
                    for(line=0;line<16&&inchange==0;line++)    //行扫描
                    {
                        if(inchange==1)     beep=0;
                        gate=0;
                        loadline1();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        Out595();
                        delay2();
                        gate=1;
                        
                    }
                }
                move++;        //移动一步(一位)
                if(move==8)      time_process();
            }
            move=0;
            word=word+32;    //下一个字
        }
        word=0;
        if(inchange==1)     beep=0;
}
void tiaoshi_move(uchar i,uchar j)
{
    uchar sp;
    if(yidong==0)  //若为1则不移动,即该函数相当于display();
    {
        move=0;
        word=0;
     }
        while(word<=i)//48*32=1536(显示48个字  每个字32个)
        {
            while(move<16)    //数据移位
            {
                for(sp=0;sp<j;sp++)    //移动速度
                {    
                    for(line=0;line<16;line++)    //行扫描
                    {
                        if(key1!=0&&key2!=0&&key3!=0&&key4!=0)     beep3();
                        gate=0;
                        loadline1();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        Out595();
                        delay2();
                        gate=1;
                        
                    }
                }
                move++;        //移动一步(一位)
                if(word==i&&move==1)         //判断是否移动到最后两字节了
                 {
                     move=16;                 //移动到最后两字节后,如果没按下key1,则每次进入后仅执行move=0,以此达到不移动的效果
                     yidong=1;                //移动标志位,在此处置1,则下次进入该函数时不重置word和move值,以此达到不移动的效果
                }
            }
            move=0;
            word=word+32;    //下一个字
        }
        word=word-32;  //恢复word值,为下次进入该函数做准备
}
/**********移动显示日期*************/
void display_date()
{
    
    load_date1();
    date_move(96,1);     //由温度快速移动到月份
    load_date2();
    date_move(64,5);    //移动显示月日
    load_date3();
    date_move(128,5);    //移动显示日星期
    load_date4();
    date_move(64,1);    //由星期快速移动到时间
}
void display_tiaoshi(uchar j)
{
    switch(j)
    {
        case 1:
        {
            if(loopflag==0)      tiaoshi_move(160,2);
            else              tiaoshi_move(64,1);
            break;
        }
        case 2:
        {    
            tiaoshi_move(64,2);
            break;
        }
        case 3:
        {
            tiaoshi_move(64,2);
            break;
        }
        case 4:
        {
            tiaoshi_move(96,2);
            break;
        }
        case 5:
        {
            tiaoshi_move(64,2);
            break;
        }
        case 6:
        {
            tiaoshi_move(64,2);
            break;
        }
        case 7:
        {
            tiaoshi_move(64,2);
            break;
        }
        default:   break;
    }
}
void load_tiaoshi(uchar j)
{
    switch(j)
    {
        case 1:
        {
            if(loopflag==0)     load_change1();
            else         load_change10();
            break;
        }
        case 2:
        {
            load_change2();
            break;
        }
        case 3:
        {
            load_change3();
            break;
        }
        case 4:
        {
            load_change4();
            break;
        }
        case 5:
        {
            load_change5();
            break;
        }
        case 6:
        {
            load_change6();
            break;
        }
        case 7:
        {
            load_change7();
            break;
        }
        case 8:
        {
            load_change8();
            break;
        }
        default:   break;
    }    
}
/*********调时退出效果逐渐变暗********/
void tiaoshi_out()
{
    uchar i;
    load_change8();
    for(i=0;i<25;i++)  display(2*i);    
}
/*********进入调时效果逐渐变亮********/
void tiaoshi_in()
{
    uchar i;
    move=0;word=0;
    load_change9();
    for(i=0;i<25;i++)  display(50-2*i);    
}
/*******正常显示全部************/
void display_normal()
{
    uchar i;
    for(i=0;i<3;i++)
    {
        right_move();     //右移
        if(i==2)                 //判断左右移动次数如果为三次 显示日期
        {
             display_date();
             right_move();
        }
         left_move();
    }
}
void display_inital()
{
      load_inital();
      date_move(64,1);
}
void inital()
{
    uchar sp,y=0;
    move=0;
    word=0;
    
        while(word<560)//48*32=1536(显示48个字  每个字32个)
        {
            while(move<16)    //数据移位
            {
                for(sp=0;sp<4;sp++)    //移动速度
                {    
                    for(line=0;line<16;line++)    //行扫描
                    {
                        gate=0;
                        loadline();    //装载一线点阵数据
                        sendline();    //发送一线移动数据
                        P0=line;
                        Out595();
                        delay2();
                        gate=1;
                    }
                }
                move++;        //移动一步(一位)
            }
            move=0;
            word=word+32;    //下一个字
        }
        word=0;
    
}
void intx1(void)  interrupt 0  using 0
{
     inchange=1;
}
void tiem0(void) interrupt 1   using 1
{
    TH0 = 0x3c;                // 重置定时常数  
    TL0 = 0xb0;
    timecount--;
    if(timecount==0)
    {
        TR0=0;
        timeflag=1;
        if(ksi==1)     tempflag=1;    
    }
        
}


unsigned  char  change;
extern uint word;
bit changeflag;    //时间改动标志,若未改动,则不重置时间
bit loopflag;      //调时循环标志,用来区分是第一轮调时,还是下几轮
extern bit timeflag;

void deal_change()
{    
    if(key1==0||inchange==1)
    {    
             beep1();
          if(change==0)    
          {
                  inchange=0;
                EX0  = 0;
                  tiaoshi_in();
          }
           change++;    
          change=change%8;
          if(change==0)
          {
            change=1;
            loopflag=1;
          }
          yidong=0;    
          load_tiaoshi(change);
          
            while(!key1)
            {    
                 display_tiaoshi(change);
             }
    }
}

/*********年**********/
void deal_change1()
{
    if(change==1)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
                beep1();
               frist[0]++;
             changeflag=1;
             if(frist[0]==100)
                {
                          frist[0]=0;
             }
             ns=frist[0]/10;  //年
             ng=frist[0]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }                
        }
       if(key3==0)
       {
               beep1();
            if(frist[0]==0)
               {
                 frist[0]=100;
             }
            frist[0]--;
            changeflag=1;
             ns=frist[0]/10;  //年
             ng=frist[0]%10;
             load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
            beep3();
       }

    }
}
/*********月**********/
void deal_change2()
{
    if(change==2)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
               beep1();
             frist[2]++;
             changeflag=1;
                if(frist[2]==13)
                {
                          frist[2]=0;
             }
             ys=frist[2]/10;  //年
             yg=frist[2]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
        }
       if(key3==0)
       {
            beep1();
            if(frist[2]==0)
               {
                 frist[2]=13;
             }
            frist[2]--;
            changeflag=1;
             ys=frist[2]/10;  //年
             yg=frist[2]%10;
             load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }
}
/*********日**********/
void deal_change3()
{
    if(change==3)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
             beep1();
               frist[3]++;
             changeflag=1;
                if(frist[3]==32)
                {
                          frist[3]=1;
             }
             ts=frist[3]/10;  //年
             tg=frist[3]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
        }
       if(key3==0)
       {
            beep1();
            if(frist[3]==1)
               {
                 frist[3]=32;
             }
            frist[3]--;
            changeflag=1;
             ts=frist[3]/10;  //年
             tg=frist[3]%10;
             load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }
}

/*********星期**********/
void deal_change4()
{
    if(change==4)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
             beep1();
               frist[1]++;
             changeflag=1;
                if(frist[1]==8)
                {
                          frist[1]=1;
             }
             xg=frist[1]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
        }
       if(key3==0)
       {
            beep1();
            if(frist[1]==1)
               {
                 frist[1]=8;
             }
            frist[1]--;
            changeflag=1;
            xg=frist[1]%10;
            load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }
}
/*********时**********/
void deal_change5()
{
    if(change==5)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
               beep1();
             frist[4]++;
              changeflag=1;
                if(frist[4]==24)
                {
                          frist[4]=0;
             }
             ss=frist[4]/10;
             sg=frist[4]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
                display_tiaoshi(change);
        }
       if(key3==0)
       {
            beep1();
            if(frist[4]==0)
               {
                 frist[4]=24;
             }
            frist[4]--;
            changeflag=1;
            ss=frist[4]/10;
            sg=frist[4]%10;
            load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }
}
/*********分**********/
void deal_change6()
{
    if(change==6)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
               beep1();
             frist[5]++;
             changeflag=1;
                if(frist[5]==60)
                {
                          frist[5]=0;
             }
             fs=frist[5]/10;
             fg=frist[5]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
                display_tiaoshi(change);
        }
       if(key3==0)
       {
            beep1();
            if(frist[5]==0)
               {
                 frist[5]=60;
             }
            frist[5]--;
            changeflag=1;
            fs=frist[5]/10;
            fg=frist[5]%10;
            load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }
}

/*********秒**********/
void deal_change7()
{
    if(change==7)
    {    
       display_tiaoshi(change);        
       if(key2==0)
       {    
               beep1();
             frist[6]++;
             changeflag=1;
                if(frist[6]==60)
                {
                          frist[6]=0;
             }
             ms=frist[6]/10;
             mg=frist[6]%10;
             load_tiaoshi(change);
                while(!key2)
             {
                    display_tiaoshi(change);
             }            
                display_tiaoshi(change);
        }
       if(key3==0)
       {
            beep1();
            if(frist[6]==0)
               {
                 frist[6]=60;
             }
            frist[6]--;
            changeflag=1;
            ms=frist[6]/10;
            mg=frist[6]%10;
            load_tiaoshi(change);
            while(!key3)
               {    
                   display_tiaoshi(change);    
            }  
       }

    }            
}
void   deal_key4()
{
    if(change!=0)
    {
        if(!key4)
        {
            beep1();
            if(changeflag==1) //如果进入调时改动了时间,即加减键被按下过,则设置时间,反之,不设置
            {
                 set_time();
                 changeflag=0;
            }
            tiaoshi_out();               //显示后两字节如“11秒”由亮变暗,此处纯属偶然,本来预想的应该是“完成”由亮变暗,后来一琢磨原来是word值没复位
            word=0;
            change=0;
            EX0  = 1;
            inchange=0;
            loopflag=0;
            timeflag=0;
            tiaoshi_out();                //显示完成由亮变暗
            while(!key4)
            {
                gate=1;
            }
            delay_ms(1000);
            display_inital();
       }
   }
}
void time_change(void)
{    
    deal_change();
    deal_change1();    
    deal_change2();
    deal_change3();    
    deal_change4();
    deal_change5();
    deal_change6();
    deal_change7();
    deal_key4();
}

void main()
{
    gate=0;                     //关显示
    delay_ms(1000);
    ds18b20_readtemp();
    if(key4==0) set_init();     //    按住进入退出键再上电可复位时间
    if(key3==0)    inital();     //按住进入调试键再上电可避免显示开始语
    gate=1;
    delay_ms(1000);
    init ();      //初始化定时器
    time_process();
    display_inital();    //开始语过渡到时间显示
    
    while(1)
    {    
         if(change==0)    display_normal();    
        time_change();    
    }
}
离线benli

发帖
33704
M币
6633
专家
91
粉丝
487
只看该作者 5楼 发表于: 2014-02-08
程序复杂了,弄不懂。可能是按键按下后却没有进去相应的设置模式显示,安正常的调整方法,先按设置建,再按加减键,看看数据会不会改变。
离线waxkj

发帖
161
M币
23
专家
3
粉丝
80
只看该作者 6楼 发表于: 2014-02-08
回 benli 的帖子
benli:程序复杂了,弄不懂。可能是按键按下后却没有进去相应的设置模式显示,安正常的调整方法,先按设置建,再按加减键,看看数据会不会改变。 (2014-02-08 16:53) 回 benli 的帖子

按理说MAIN  的while(1)
    {    
         if(change==0)    display_normal();    
        time_change();       <--------当执行到这里的时候会去执行这条语句,也就是change.c里面的time_change();     void time_change(void)
{    
    deal_change();
    deal_change1();    
    deal_change2();
    deal_change3();    
    deal_change4();
    deal_change5();
    deal_change6();
    deal_change7();
    deal_key4().但是明显感觉没有判断deal_change();里面的KEY1==0.
感觉不应该啊!!,
    }
离线benli

发帖
33704
M币
6633
专家
91
粉丝
487
只看该作者 7楼 发表于: 2014-02-08
回 waxkj 的帖子
这种写法main函数太简单了,调用堆栈层数太多不便于理解程序
离线waxkj

发帖
161
M币
23
专家
3
粉丝
80
只看该作者 8楼 发表于: 2014-02-09
回 benli 的帖子
benli:这种写法main函数太简单了,调用堆栈层数太多不便于理解程序 (2014-02-08 21:28) 回 benli 的帖子

试过了,及使把time_change();  里面全部相关程序都移植到while(1)里面,效果也是一样额,
离线benli

发帖
33704
M币
6633
专家
91
粉丝
487
只看该作者 9楼 发表于: 2014-02-09
回 waxkj 的帖子
waxkj:试过了,及使把time_change();  里面全部相关程序都移植到while(1)里面,效果也是一样额, (2014-02-09 10:08) 回 waxkj 的帖子

怎么写效果是一样的,应当是那个地方没有处理好,用按键调整下看看有没有变变化
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个