中国中小企业电子产品方案技术服务资讯平台         中软创芯电子 | 发布信息 | 设为首页 | 加入收藏

     

首页   维修专栏   产品中心   技术频道   资讯快递   应用专题   供求信息   开发案例   联系我们
 电子产品方案设计|单片机程序开发|工业控制板订制
站内搜索:
推荐文章
基于NiosⅡ的直流电机PID调速控..
基于ARM的单相电力计量装置现场..
基于单片机C8051F130的远程在线..
基于VB与单片机技术的温度测控..
基于混沌蚁群的神经网络速度辨..
基于CANOPEN协议的智能消防水炮..
CC2430与DS18B20的粮库温度传感..
声传感器网络节点的硬件系统设..
基于Lonworks现场总线的机房监..
基于Windows CE的超市预收款系..
基于单片机及CPLD技术的B超检测..
施耐德QUANTUM PLC在炼钢转炉..
变频器在中央空调和采暖通风空..
嵌入式以太网数字语音广播系统..
基于μC/OS-Ⅱ的线控转向Fle..

 首页 >> 技术频道 >> 单片机技术
基于单片机设计的时钟程序DS1302 C语言程序
设备技术网   时间:2010-4-14

/****************************************************************************/

/**********************************定时计数器1定时5us溢出中断**********************/
/*****函数名称:void timer1(void) interrupt 3
******功能:  
******参数传递:无
******返回值:  无
******创建时间:2009.6.1
******修改时间:
******/
/***************************************************************************/
void timer1(void) interrupt 3
{
    //静态变量,退出程序后,值保留
    static unsigned char Bit=0;           //标记数码管片选位  
    static unsigned char count1=0;        //防抖程序计数标志
    //再次装入计数初值
    TH1=THCO;
    TL1=TLCO;

    //扫描显示控制部分
    Bit++;
    if(Bit>=4)Bit=0;
    P1|=0x0f;     //先关位码
    P0=Duan[Data_Buffer[Bit]]; //开段码
    switch(Bit)    //送位码
    {
        case 0: P10=0;break;
        case 1: P11=0;break;
        case 2: P12=0;break;
        case 3: P13=0;break;
    }

    //功能调节按键控制部分
    if(Mode==0||UP==0||DN==0)
    {
      count1++;
       if(count1>=30) //消抖处理
       {
         count1=0;
            //读取分与秒的值
            Min = Read1302(READ_MINUTE);
            Sec = Read1302(READ_SECOND);
            //显示时钟标志,清零不显示走时或调节       
            flag_timer = 0;
            //开启走时标志,置1,进入调节状态,且不走时
            timer=1;
             
            if(timer==1)
            {
             
                if(Mode==0) 
          {
                    switch(flag_mode)
                    {
                        case 1: flag_mode = 2;
                                flag = 1;
                                flag_timer = 1;//显示时钟设置
                                Set_flag=0;    //不显示闹钟
                                set_timer=0;   //不显示走时
                                timer=1;       //且不走时
                                led1 = 0;
                                break;
                        case 2: flag_mode = 3;
                                flag = 1;
                                flag_timer = 1;//显示时钟设置
                                Set_flag=0;    //不显示闹钟
                                set_timer=0;   //不显示走时
                                timer=1;       //且不走时
                                led2 = 0;
                                break;
                        case 3: flag_mode = 4;
                                flag = 0;      //不显示时钟设置
                                Set_flag=1;    //显示闹钟
                                timer=1;       //不走时
                                led3 = 0;
                                break;
                        case 4: flag_mode = 5;
                                flag = 0;      //不显示时钟设置
                                Set_flag=1;    //显示闹钟
                                timer=1;       //不走时
                                led4 = 0;
                                break;
                        case 5: flag_mode = 1;
                                Set_flag=0;    //不显示闹钟
                                flag_timer = 1;
                                flag = 1;     
                                set_timer=1;    //显示走时
                                timer=0;        //不再是调节模式
                                Initial();
                                break;
                              
                        default: break;
                    }
          }
          else if(DN==0) //下调
           {
                        flag = 1;
                        flag_timer = 1;
                        Set_flag=0;
                        if(flag_mode==2)
                        {
                            flag = 1;
                            flag_timer = 1;
                           
                            Set_flag=0;
                            if(Min>0)
                                Min--;
                            else Min = 59;
                         R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==3)
                        {
                            flag = 1;
                            flag_timer = 1;
                            Set_flag=0;
                            if(Sec>0)
                                Sec--;
                            else Sec = 59;
                         R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==4)
                        {
                            flag = 0;
                            Set_flag=1;
                            if(Set_Min>0)
                                Set_Min--;
                            else Set_Min = 59;
                         R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==5)
                        {
                             flag = 0;
                             Set_flag=1;
                             if(Set_Sec>0)
                                Set_Sec--;
                            else Set_Sec = 59;
                          R_Initial();
                    //禁止走时
                         }
                          
              }
                else if(UP==0)        //上调
           {
                        flag = 1;
                        flag_timer = 1;
                        Set_flag=0;
                        if(flag_mode==2)
                        {   
                            if(Min<59)
                                Min++;
                            else Min = 0;
                            R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==3)
                        {    
                            flag = 1;
                            flag_timer = 1;
                            Set_flag=0;
                            if(Sec<59)
                                Sec++;
                            else Sec = 0;
                            R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==4)
                        {
                            flag = 0;
                            Set_flag=1;
                            if(Set_Min<59)
                                Set_Min++;
                            else Set_Min = 0;
                            R_Initial();
                    //禁止走时
                        }
                        else if(flag_mode==5)
                        {
                             flag = 0;
                             Set_flag=1;
                             if(Set_Sec<59)
                                Set_Sec++;
                            else Set_Sec = 0;
                            R_Initial();
                    //禁止走时
                        }  
         
                    }
            }
        }
    }
    else flag=1;         
}
/***************************************************************************/

/**************************************end**********************************/

 
第1页 第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页
>>上一篇: 自动化技术助力智能营销走上“舞台”
>>下一篇: 基于C8051F340双串口电梯远程控制的系统设计
打印】 【关闭
【资讯版权声明】
 1. 本站所提供资源均为原文章或程序作者提供和网友推荐收集整理而来,仅供学习和研究使用,不得用于商业用途。
 2. 本站转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
 3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
 4. 部分内容来源于网络,如侵犯您的版权,请通知本站即撤。

关于创芯  维修指引  开发案例  版权声明  友情连接  联系我们 
Copyright©2006-2010 设备技术网 | 中软创芯 版权所有
电话:0755-33122368 传真:0755-83255830 E-mail:szbase@126.com QQ:1092081589
致力于单片机技术应用推广,电子产品方案设计,控制器设计,电路板复制,工控板开发,单片机开发
本站资源仅供学习参考,部分内容来源于网络,如侵犯您的版权,请通知本站即撤
ICP备案序号:粤ICP备10019209号