找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6195|回复: 0
收起左侧

谁能在我的时钟程序中加一个闹钟程序,不胜感激!

[复制链接]
ID:19367 发表于 2009-11-23 22:45 | 显示全部楼层 |阅读模式

我的时钟程序是:
              /******************************/
               //DS1302+数码管+3个独立按键 //
               //          精确定时          //
               //        Author: matrix      //
               //        TIME:2009/3/13      //
               /******************************/
/****************************************************************/
//           利用ds1302精确定时,同时按键可调时间。              //
//        每操作一次时钟,都会有蜂鸣器响大约200ms,以提示操作。  //
/***************************************************************/       
#include<reg52.h>
#include"ds1302.h"
uchar code tab[]={                      0x3F,/*0*/
                    0x06,/*1*/
                    0x5B,/*2*/
                    0x4F,/*3*/
                    0x66,/*4*/
                    0x6D,/*5*/
                    0x7D,/*6*/
                    0x07,/*7*/
                    0x7F,/*8*/
                    0x6F,/*9*/
} ;//共阴码
void delay(uint xms)
{
    uint x,y;
    for(x=xms;x>0;x--)
        for(y=110;y>0;y--);

}

void init()//初始化
{
  //RST=0;
  //SCLK=0;
  //write_1302(0x80,0x00);//写控制字,允许写
  //write_1302(0x90,0x00);//禁止涡流充电
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}


void display(uchar miaog,uchar miaos,uchar feng,uchar fens,uchar shig,uchar shis)//数码管动态显示
{
    P2=0x7f;
    P0=tab[miaog];
    delay(5);
    P2=0xbf;
    P0=tab[miaos];
    delay(5);
    P2=0xdf;
    P0=0xc0;
    delay(5);
    P2=0xef;
    P0=tab[feng];
    delay(5);
    P2=0xf7;
    P0=tab[fens];
    delay(5);
    P2=0xfb;
    P0=0xc0;
    delay(5);
    P2=0xfd;
    P0=tab[shig];
    delay(5);
    P2=0xfe;
    P0=tab[shis];
    delay(5);
   

 

}
write_sfm(uchar miao,uchar fen,uchar shi) //写入到数码管
{
uchar miaog,miaos,feng,fens,shig,shis;
miaog=miao%10;
miaos=miao/10;
feng=fen%10;
fens=fen/10;
shig=shi%10;
shis=shi/10;
display(miaog,miaos,feng,fens,shig,shis);
}
void didi()
{
   

         buzzer=0;
         delay(50);
         buzzer=1;


}
void keyscan()
{
    uchar temp;
    if(key1==0)  //功能键
        {
        if(key1==0)
        {
            while(!key1);
            key1n=key1n++;
            if(key1n==5)
                key1n=1;
            switch(key1n)
            {
            case 1:didi();
                temp=(miao)/10*16+(miao)%10;//将秒转化成bcd码,没这句秒就变化,不知为什么
                write_1302 (0x8e,0x00);  //禁止写保护   
                write_1302 (0x80,0x80|temp); //时钟暂停   
                write_1302 (0x8e,0x80);  //允许写保护
                break;
            case 2 :didi();
                    break;
            case 3 :didi();
                    break;
            case 4  :didi();
                temp=miao/10*16+miao%10;   
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x80,0x00|temp);//时钟开始
                write_1302 (0x8e,0x80);  //允许写保护
                break;
       
            }
        }
       
}

    if(key1n!=0)    //当按下功能键后,才执行以下加减键
       {
       if(key2==0)    //加键
           {
          delay(3);
         if(key2==0) 
            {
            while(!key2);
            switch(key1n)
            {
        case 1  :  didi();                                //秒
               
                temp=(miao+1)/10*16+(miao+1)%10;
                if(miao==59)
                    temp=0;
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x80,0x80|temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
           
        case 2  :  didi();                              //分
                temp=(fen+1)/10*16+(fen+1)%10;
                if(fen==59)
                    temp=0;   
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x82,temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
        case 3  :    didi();
                temp=(shi+1)/10*16+(shi+1)%10;    //时
                if(shi==23)
                    temp=0;
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x84,temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
   
       
            }
            }
        }
            if(key3==0)    //减键
                {
            delay(3);
        if(key3==0) 
            {
            while(!key3);
            switch(key1n)
            {
        case 1  :didi();
               
                temp=(miao-1)/10*16+(miao-1)%10;    //秒
                if(miao==0)
                    temp=89;
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x80,0x80|temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
           
        case 2  :didi();
                temp=(fen-1)/10*16+(fen-1)%10;        //分
                if(fen==0)
                    temp=89;   
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x82,temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
        case 3  :didi();
                temp=(shi-1)/10*16+(shi-1)%10;       //时
                if(shi==0)
                    temp=35;
                write_1302 (0x8e,0x00);  //禁止写保护
               write_1302 (0x84,temp);
                write_1302 (0x8e,0x80);  //允许写保护
                break;
   
       
            }
            }
        }   
    }
          //write_1302(0x80,miao|0x80);
         //miao++;
           
    /*    if(key2==0)
        {
            if(key2==0)
            {
            while(!key2);
            write_1302(0x80,miao|0x00);//打开1302振荡器
            }

        }
    */       
}
void main()
{
    init();
    //buzzer=0;
    //miao=20;
    //fen=10;
    //shi=23;
    while(1)
    {
   
    miao = BCD_Decimal(read_1302(0x81));
    fen = BCD_Decimal(read_1302(0x83));
    shi  = BCD_Decimal(read_1302(0x85));
    keyscan();
    }
}
void tiemr0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    write_sfm(miao,fen,shi);
}

麻烦各位大侠,帮忙加入一个闹钟程序!
可以的话,加我Q:770617514
请赐教!
本文来自: 电子工程师之家http://www.eehome.cn

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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