找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6927|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

誰能在我的時鐘程序中加一個鬧鐘程序,不勝感激!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:19367 發(fā)表于 2009-11-23 22:45 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

我的時鐘程序是:
              /******************************/
               //DS1302+數(shù)碼管+3個獨(dú)立按鍵 //
               //          精確定時          //
               //        Author: matrix      //
               //        TIME:2009/3/13      //
               /******************************/
/****************************************************************/
//           利用ds1302精確定時,同時按鍵可調(diào)時間。              //
//        每操作一次時鐘,都會有蜂鳴器響大約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)//數(shù)碼管動態(tài)顯示
{
    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) //寫入到數(shù)碼管
{
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;//將秒轉(zhuǎn)化成bcd碼,沒這句秒就變化,不知為什么
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)   
                write_1302 (0x80,0x80|temp); //時鐘暫停   
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
            case 2 :didi();
                    break;
            case 3 :didi();
                    break;
            case 4  :didi();
                temp=miao/10*16+miao%10;   
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)
               write_1302 (0x80,0x00|temp);//時鐘開始
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
       
            }
        }
       
}

    if(key1n!=0)    //當(dāng)按下功能鍵后,才執(zhí)行以下加減鍵
       {
       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);  //禁止寫保護(hù)
               write_1302 (0x80,0x80|temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
           
        case 2  :  didi();                              //分
                temp=(fen+1)/10*16+(fen+1)%10;
                if(fen==59)
                    temp=0;   
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)
               write_1302 (0x82,temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
        case 3  :    didi();
                temp=(shi+1)/10*16+(shi+1)%10;    //時
                if(shi==23)
                    temp=0;
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)
               write_1302 (0x84,temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                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);  //禁止寫保護(hù)
               write_1302 (0x80,0x80|temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
           
        case 2  :didi();
                temp=(fen-1)/10*16+(fen-1)%10;        //分
                if(fen==0)
                    temp=89;   
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)
               write_1302 (0x82,temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                break;
        case 3  :didi();
                temp=(shi-1)/10*16+(shi-1)%10;       //時
                if(shi==0)
                    temp=35;
                write_1302 (0x8e,0x00);  //禁止寫保護(hù)
               write_1302 (0x84,temp);
                write_1302 (0x8e,0x80);  //允許寫保護(hù)
                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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表