amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 17241|回复: 170

STC89C516RD+DS12C887+DS18B20+TEA5767+TDA2822M+LCD12864多功能电子闹钟!

  [复制链接]
发表于 2012-4-4 21:11:55 | 显示全部楼层 |阅读模式
      首先声明一下,这是根据某个坛友曾经上传的多功能电子闹钟的帖子,来仿制的。本人并没有那么强大,目前也只能仿制别人的。在此,感谢那位坛友和那位写出这么强大的程序的那个高人。(那位坛友也记不清了,呵呵)。我把里面的端口改了一下,其余的都没有改动。我把源程序,原理图等都一并上传出来,让有兴趣的朋友也可以仿制一下,体会其中的无穷乐趣。实际制作时,提供的那个原理图可以适当的修改下,有些是没有用的,有些是没有必要的。根据实际情况适当修改。
      该多功能闹钟具有:FM收音机(可选择自动搜台并保存功能,可存储20个电台频率。也可选择手动搜索并保存功能)红外遥控,红外测码,温度,多闹钟设置,时间调整,农历,节日提醒等功能。功能界面很多,图片就不一一上传了。
1
DSC00069.JPG
2
DSC00061.JPG
3
DSC00057.JPG
4
DSC00068.JPG
5
DSC00073.JPG
6
DSC00075.JPG
7
DSC00076.JPG
8
DSC00080.JPG
9
DSC00079.JPG
10
DSC00081.JPG
11
DSC00083.JPG
源程序,电路图等 多功能闹钟.zip (296.23 KB, 下载次数: 6840)
头像被屏蔽
发表于 2012-4-4 21:24:14 | 显示全部楼层
不错啊,谢谢分享
发表于 2012-4-4 21:31:31 | 显示全部楼层
下载了,多谢!
留个足迹;
发表于 2012-4-4 21:45:04 | 显示全部楼层
好像没法下载,前两天还想着买个有这些功能的闹钟那!
发表于 2012-4-4 22:29:56 来自手机 | 显示全部楼层
这个可以有,不知道老陈vdf能不能调光,做个闹钟也不错
发表于 2012-4-5 08:01:33 | 显示全部楼层
谢谢楼主,下来学习一下。
发表于 2012-4-5 08:26:48 | 显示全部楼层
收藏一下先,怎么你们都能下载,我怎么下不了??
发表于 2012-4-5 10:57:27 | 显示全部楼层
很好的   多多学习!!!!!!!!!!!!!
发表于 2012-4-5 11:18:26 | 显示全部楼层
谢谢楼主 不过我下了半天也没下来。。
发表于 2012-4-5 13:06:52 | 显示全部楼层
喇叭加个盒子音会有很大不同。扣在盒子上都管用。
发表于 2012-4-5 22:00:30 | 显示全部楼层
下载一个吧,自己做个万年历用下
发表于 2012-4-5 22:08:28 | 显示全部楼层
下不动啊,半天不出下载页
 楼主| 发表于 2012-4-5 22:10:58 | 显示全部楼层
你右击,使用迅雷下载试试看。
发表于 2012-4-5 22:15:59 | 显示全部楼层

不错啊,谢谢分享
发表于 2012-4-6 11:24:10 | 显示全部楼层
下载不下来啊
发表于 2012-4-6 13:16:58 | 显示全部楼层
不錯不錯
发表于 2012-4-6 13:33:58 | 显示全部楼层
非常感谢,收藏!
发表于 2012-4-8 09:38:29 | 显示全部楼层
下载不下来啊
发表于 2012-4-8 09:59:29 | 显示全部楼层
发表于 2012-4-8 10:14:18 | 显示全部楼层
我也仿制了一个!但汉字的一到十显示乱码!楼主有没呀?
发表于 2012-4-8 11:31:11 | 显示全部楼层
很好的东西
发表于 2012-4-8 11:46:24 | 显示全部楼层
挺好的1顶一个!
 楼主| 发表于 2012-4-8 17:49:19 | 显示全部楼层
你好,20楼的。“我也仿制了一个!但汉字的一到十显示乱码!楼主有没呀?”  
这说明你的keil有问题。很有可能是没有“汉字补丁”所致。
发表于 2012-4-8 18:49:21 | 显示全部楼层
DS12c887时钟芯片非常准,比DS1302好多了。
发表于 2012-4-8 19:03:57 | 显示全部楼层
不错不错

发表于 2012-4-8 19:42:36 | 显示全部楼层
做的很漂亮···
发表于 2012-4-8 21:46:01 | 显示全部楼层
做的挺好的,标记下!
发表于 2012-4-9 16:01:39 | 显示全部楼层
收集一下
发表于 2012-4-10 08:57:35 | 显示全部楼层
mark一下!!
发表于 2012-4-10 09:52:07 | 显示全部楼层
感觉升级到新论坛后
好多附件都不能下载了
不知道是怎么回事啊
但是下载AMO的附件还是很正常的
发表于 2012-4-10 10:07:58 | 显示全部楼层
就是,很慢,是服务器的原因还是带宽不够?
发表于 2012-4-13 08:59:59 | 显示全部楼层
谢谢楼主,,,本人正需要
发表于 2012-4-15 14:57:06 | 显示全部楼层
太感谢了,我正在玩这个,下来学习。
发表于 2012-5-7 00:57:42 | 显示全部楼层
谢谢了  兄弟
发表于 2012-5-7 01:30:04 来自手机 | 显示全部楼层
觉得对于开始了解51的人可以起到入门的好处
发表于 2012-5-13 09:15:18 | 显示全部楼层
程序是汇编语言吗?
发表于 2012-5-13 16:41:00 | 显示全部楼层
好东西,支持一下
头像被屏蔽
发表于 2012-5-13 16:42:46 来自手机
支持

发表于 2012-5-13 17:15:14 | 显示全部楼层
感觉升级到新论坛后
好多附件都不能下载了
不知道是怎么回事啊
发表于 2012-5-13 23:43:41 | 显示全部楼层
Mark
发表于 2012-5-14 08:35:43 | 显示全部楼层
太强大了,向楼主学习
发表于 2012-5-14 10:20:38 | 显示全部楼层
楼主,有个问题,TEA5767的自动搜台功能能用,为什么我单独调TEA5767只能手动搜台,而不能自动搜台,还有就是加入EEPROM功能,在下次上电时直接读当前状态
发表于 2012-5-14 10:22:09 | 显示全部楼层
支持 强力支持
发表于 2012-5-14 11:15:25 | 显示全部楼层
不错哈!!!!!!!!!!!!
发表于 2012-5-15 19:15:53 | 显示全部楼层
谢谢楼主,下载了!
发表于 2012-5-15 20:08:06 | 显示全部楼层
太强大了,收音机既然还能有信号强度显示,牛。
发表于 2012-5-15 20:40:19 | 显示全部楼层
先顶上!!!
发表于 2012-5-16 08:26:04 | 显示全部楼层
好资料,学习一下。
发表于 2012-5-16 09:26:26 | 显示全部楼层
不错,下载看看
发表于 2012-5-16 11:12:52 | 显示全部楼层
好东西,顶一下
发表于 2012-5-16 12:24:14 | 显示全部楼层
太好,太强大了,留着备用,慢慢学!
发表于 2012-5-16 17:02:32 | 显示全部楼层
好啊
发表于 2012-5-16 22:57:13 | 显示全部楼层
程序排版我看着很纠结。。决定学下其中的思想。。精品啊。
发表于 2012-5-17 17:37:17 | 显示全部楼层
mark
发表于 2012-5-17 18:08:43 | 显示全部楼层
谢谢分享!
发表于 2012-5-17 18:55:38 | 显示全部楼层
很强大呀。
发表于 2012-5-18 00:37:40 | 显示全部楼层
收集一下资料,接下来我也做一个。
发表于 2012-5-18 12:51:24 | 显示全部楼层
mark一下!!
发表于 2012-5-23 10:42:26 | 显示全部楼层
精华帖!!mark!!
发表于 2012-5-23 22:56:21 | 显示全部楼层
顶一下!
发表于 2012-5-29 16:21:03 | 显示全部楼层
谢谢分享
发表于 2012-5-29 17:46:01 | 显示全部楼层
学习下,模仿下
发表于 2012-5-29 19:23:01 | 显示全部楼层
记号 留着有用 谢谢楼主
发表于 2012-5-29 23:49:08 | 显示全部楼层
多谢楼主,很棒的设计啊
发表于 2012-5-30 09:13:53 | 显示全部楼层
行吧,我实话实说,我服了
发表于 2012-5-30 10:38:40 | 显示全部楼层
确实漂亮。。
发表于 2012-5-30 20:46:39 | 显示全部楼层
好资料啊,手上刚好有零件,有空也搞个玩下,谢谢分享呀!
发表于 2012-5-30 22:00:44 | 显示全部楼层
DIY,顶一个
发表于 2012-5-30 22:34:36 | 显示全部楼层
mark
   
发表于 2012-5-31 15:25:36 | 显示全部楼层
我来顶一个
发表于 2012-5-31 15:49:25 | 显示全部楼层
偶也想仿个,LZ的宝贝收下了
发表于 2012-6-15 19:32:58 | 显示全部楼层
论坛还是能人多啊
发表于 2012-6-16 09:53:23 | 显示全部楼层
但是我可以下载啊,10秒钟都不到。
发表于 2012-6-16 10:18:48 | 显示全部楼层
有时间也做个试试
发表于 2012-6-17 18:51:57 | 显示全部楼层
thank you share
发表于 2012-6-17 22:28:53 | 显示全部楼层
好 不错,谢谢分享
发表于 2012-6-18 00:33:54 来自手机 | 显示全部楼层
mark,放假准备学单片机,嘿嘿。
发表于 2012-6-18 11:00:57 | 显示全部楼层
这里真是高手云集!!学习了
发表于 2012-6-18 13:53:10 | 显示全部楼层
能不能和这个接着一起
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#ifndef __SOUNDPLAY_H_REVISION_FIRST__    //音乐相关
#define __SOUNDPLAY_H_REVISION_FIRST__    //音乐相关
#define uint  unsigned int
#define uchar unsigned char
void nl();                                //农历

/*定义全局变量---------------------------------------------------------------*/
uchar sec,min,hour, day, date, month,year,cen,r1_h,r1_m,r1_of,r2_h,r2_m,r2_of;
data uchar year_moon,month_moon,date_moon,cen_m,week;
uint bt,rt,rr,rtt,rrt;

bit c_moon;                             //农历 世纪
bit c;                                  //公历 世纪
bit w = 0;                             //调时标志位
bit r = 0;                              //调整闹铃

/*定义12864液晶屏数据线------------------------------------------------------*/
sbit LCM_RS  = P1^6;   //模式位,为0输入指令,为1输入数据
sbit LCM_RW  = P1^7;   //读写位,为0读,为1写
sbit LCM_EN  = P3^3;   //使能位
sbit LCM_BLA  = P1^5;   
#define Lcd_Bus P0     //LCM12864数据总线
                                                                                                 
/*定义DS12CR887数据线--------------------------------------------------------*/
sbit DS_CS = P3^5;
sbit DS_AS = P3^4;
sbit DS_RW = P3^6;
sbit DS_DS = P3^7;
#define Ds_Bus P2  //DS12CR887数据总线

/*定义按键-------------------------------------------------------------------*/
sbit K1 = P1^3; //K1-设置
sbit K2 = P1^0; //K2-确认
sbit K3 = P1^2; //K3-加
sbit K4 = P1^1; //K4-减          

/*定义DS18B20数据线----------------------------------------------------------*/
sbit DQ = P3^0;
/*定义蜂鸣器-----------------------------------------------------------------*/
sbit beep = P3^1;

/*定义累加器A中的各位--------------------------------------------------------*/
sbit a0   = ACC ^ 0;
sbit a1   = ACC ^ 1;
sbit a2   = ACC ^ 2;
sbit a3   = ACC ^ 3;
sbit a4   = ACC ^ 4;
sbit a5   = ACC ^ 5;
sbit a6   = ACC ^ 6;
sbit a7   = ACC ^ 7;
/*         */
#define SYSTEM_OSC         12000000    //定义晶振频率12000000HZ
#define SOUND_SPACE     4/5         //定义普通音符演奏的长度分率,//每4分音符间隔
unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表
unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 };                                  //1~7在频率表中的位置
unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };                        
unsigned char Sound_Temp_TH0,Sound_Temp_TL0;    //音符定时器初值暂存
unsigned char Sound_Temp_TH1,Sound_Temp_TL1;    //音长定时器初值暂存

/*延时程序-------------------------------------------------------------------*/
//延时函数 1MS/次
void DelayM(uint a)              
{
        uchar i;
        while( --a != 0)
    {               
                for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
        }                                      //i 从0加到125,CPU大概就耗时1毫秒
}

//延时函数
void Delay(int num)
{
        while(num--);
}

void InitialSound(void)                           //音乐相关
{
    beep = 0;
    Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;    // 计算TL1应装入的初值     (10ms的初装值)

    Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;    // 计算TH1应装入的初值

    TH1 = Sound_Temp_TH1;
    TL1 = Sound_Temp_TL1;
    TMOD |= 0x11;
    ET0 = 1;
    ET1     = 0;
    TR0     = 0;
    TR1 = 0;
    EA = 1;
}

void BeepTimer0(void) interrupt 1    //音符发生中断

{
    beep = !beep;
    TH0 = Sound_Temp_TH0;
     TL0 = Sound_Temp_TL0;
}
//**************************************************************************

void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)
{
    unsigned int NewFreTab[12];        //新的频率表

    unsigned char i,j;
    unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;
    //Point 指针索引值

    //LDiv     音音符演奏的长度(多少个10ms)

    //LDiv0 1分音符的长度(几个10ms)即一个节拍   

    //LDiv4 4分音符的长度

    //CurrentFre 查出对应音符的频率

    //SoundLength歌曲长度

    //Temp_T计算计数器初值

    unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;
    //Tone音调

    //Length音长

    //SL音符

    //SM高低音

    //SH是否升半

    //XG音符类型(0普通1连音2顿音)

    for(i=0;i<12;i++)                 // 根据调号及升降八度来生成新的频率表

    {
        j = i + Signature;
        if(j > 11)
        {
            j = j-12;
            NewFreTab[i] = FreTab[j]*2;
        }
        else
            NewFreTab[i] = FreTab[j];

        if(Octachord == 1)
            NewFreTab[i]>>=2;
        else if(Octachord == 3)
            NewFreTab[i]<<=2;
    }                                    
   
    SoundLength = 0;
    while(Sound[SoundLength] != 0x00)    //计算歌曲长度

    {
        SoundLength+=2;
    }

    Point = 0;
    Tone = Sound[Point];   
    Length = Sound[Point+1];             // 读出第一个音符和它时时值

   
    LDiv0 = 12000/Speed;                // 算出1分音符的长度(几个10ms)     

    LDiv4 = LDiv0/4;                     // 算出4分音符的长度

    LDiv4 = LDiv4-LDiv4*SOUND_SPACE;     // 普通音最长间隔标准

    TR0     = 0;
    TR1 = 1;
    while(Point < SoundLength)
    {
        SL=Tone%10;                                 //计算出音符

        SM=Tone/10%10;                                 //计算出高低音

        SH=Tone/100;                                 //计算出是否升半

        CurrentFre = NewFreTab[SignTab[SL-1]+SH];     //查出对应音符的频率     

        if(SL!=0)
        {
            if (SM==1) CurrentFre >>= 2;         //低音

            if (SM==3) CurrentFre <<= 2;         //高音

            Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值

            Sound_Temp_TH0 = Temp_T/256;
            Sound_Temp_TL0 = Temp_T%256;
            TH0 = Sound_Temp_TH0;
            TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

        }
        SLen=LengthTab[Length%10];     //算出是几分音符

        XG=Length/10%10;             //算出音符类型(0普通1连音2顿音)

        FD=Length/100;
        LDiv=LDiv0/SLen;             //算出连音音符演奏的长度(多少个10ms)

        if (FD==1)
            LDiv=LDiv+LDiv/2;
        if(XG!=1)   
            if(XG==0)                 //算出普通音符的演奏长度

                if (SLen<=4)   
                    LDiv1=LDiv-LDiv4;
                else
                    LDiv1=LDiv*SOUND_SPACE;
            else
                LDiv1=LDiv/2;         //算出顿音的演奏长度

        else
            LDiv1=LDiv;
        if(SL==0) LDiv1=0;
            LDiv2=LDiv-LDiv1;         //算出不发音的长度

         if (SL!=0)
        {
            TR0=1;
            for(i=LDiv1;i>0;i--)     //发规定长度的音

            {
                while(TF1==0);
                TH1 = Sound_Temp_TH1;
                TL1 = Sound_Temp_TL1;
                TF1=0;
            }


        }               
        if(LDiv2!=0)
        {
            TR0=0; beep=0;
            for(i=LDiv2;i>0;i--)     //音符间的间隔

            {
                while(TF1==0);
                TH1 = Sound_Temp_TH1;
                TL1 = Sound_Temp_TL1;
                TF1=0;
            }
        }
        Point+=2;
        Tone=Sound[Point];
        Length=Sound[Point+1];

                if(K1==0 || K2==0 || K3==0 || K4==0)                //常案按键两秒跳出歌曲
                {
                        DelayM(20);
                        if(K1==0 || K2==0 || K3==0 || K4==0)
                        {
                                Point=SoundLength;
                                if(rt==1)
                                {
                                rt=0;
                                rr=1;
                                }
                        }
                }
    }
    beep = 0;
}

#endif

//**************************************************************************
unsigned char code Music_happy[] =
{//生日歌
    0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02, 0x1F,0x02,
    0x1B,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02,
    0x20,0x02, 0x1F,0x01, 0x19,0x03, 0x19,0x03, 0x23,0x02,
    0x21,0x02, 0x1F,0x02, 0x1B,0x0C, 0x1A,0x15, 0x22,0x03,
    0x22,0x03, 0x21,0x02, 0x1F,0x02, 0x20,0x02, 0x1F,0x15,
    0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02, 0x1F,0x02,
    0x1B,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02,
    0x20,0x02, 0x1F,0x01, 0x19,0x03, 0x19,0x03, 0x23,0x02,
    0x21,0x02, 0x1F,0x02, 0x1B,0x0C, 0x1A,0x15, 0x22,0x03,
    0x22,0x03, 0x21,0x02, 0x1F,0x02, 0x20,0x02, 0x1F,0x15,
    0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02, 0x1F,0x02,
    0x1B,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x02, 0x19,0x02,
    0x20,0x02, 0x1F,0x01, 0x19,0x03, 0x19,0x03, 0x23,0x02,
    0x21,0x02, 0x1F,0x02, 0x1B,0x0C, 0x1A,0x15, 0x22,0x03,
    0x22,0x03, 0x21,0x02, 0x1F,0x02, 0x20,0x02, 0x1F,0x15,
    0x00,0x00
};
//挥着翅膀的女孩---容祖儿
unsigned char code Music_Girl[]={
    0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,
    0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,
    0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,
    0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,
    0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,
    0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,
    0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,
    0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,
    0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,
    0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,
    0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
    0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
    0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
    0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,
    0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,
    0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
    0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
    0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
    0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
    0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,
    0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,
    0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,
    0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,
    0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,
    0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,
    0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,
    0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,
    0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
    0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,
    0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
    0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,
    0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,
    0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
    0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,
    0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,
    0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00
};

//昨日重现
unsigned char code Music_yesterday[]=
{
    0x15,0x03, 0x15,0x03, 0x16,0x03, 0x17,0x02, 0x19,0x02,
    0x19,0x03, 0x17,0x03, 0x19,0x03, 0x17,0x03, 0x1A,0x02,
    0x19,0x66, 0x17,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x02,
    0x16,0x02, 0x17,0x03, 0x19,0x66, 0x1A,0x15, 0x17,0x03,
    0x19,0x03, 0x1A,0x02, 0x21,0x02, 0x20,0x03, 0x1F,0x02,
    0x1B,0x0D, 0x1B,0x66, 0x19,0x03, 0x17,0x03, 0x19,0x02,
    0x17,0x0C, 0x16,0x14, 0x15,0x03, 0x15,0x03, 0x16,0x03,
    0x17,0x03, 0x19,0x02, 0x19,0x0D, 0x19,0x03, 0x17,0x03,
    0x19,0x03, 0x17,0x03, 0x1A,0x03, 0x19,0x02, 0x17,0x0D,
    0x17,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1B,0x02,
    0x17,0x03, 0x19,0x02, 0x1A,0x0D, 0x1A,0x01, 0x1B,0x02,
    0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66, 0x1B,0x03,
    0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x02, 0x1A,0x66,
    0x1A,0x03, 0x1B,0x03, 0x1F,0x02, 0x1F,0x02, 0x1A,0x03,
    0x1F,0x02, 0x20,0x0D, 0x20,0x16, 0x1F,0x02, 0x20,0x02,
    0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02, 0x20,0x03,
    0x1F,0x03, 0x1B,0x0D, 0x1F,0x03, 0x1B,0x0D, 0x1A,0x66,
    0x17,0x03, 0x19,0x0D, 0x19,0x14, 0x1F,0x03, 0x20,0x03,
    0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02,
    0x20,0x03, 0x1F,0x03, 0x1B,0x0D, 0x1F,0x03, 0x1B,0x03,
    0x1A,0x66, 0x17,0x03, 0x19,0x0D, 0x19,0x14, 0x1A,0x03,
    0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x20,0x66,
    0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03,
    0x20,0x66, 0x1F,0x03, 0x20,0x03, 0x21,0x02, 0x21,0x02,
    0x20,0x03, 0x1F,0x02, 0x1A,0x0D, 0x1A,0x02, 0x17,0x02,
    0x17,0x0D, 0x1A,0x03, 0x17,0x03, 0x19,0x0D, 0x19,0x14,
    0x17,0x03, 0x17,0x03, 0x16,0x04, 0x15,0x0E, 0x15,0x03,
    0x16,0x03, 0x17,0x0B, 0x17,0x0D, 0x18,0x0C, 0x16,0x0D,
    0x16,0x14, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x02,
    0x16,0x03, 0x16,0x16, 0x15,0x03, 0x17,0x03, 0x17,0x02,
    0x19,0x02, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x17,0x03,
    0x1A,0x02, 0x19,0x66, 0x17,0x02, 0x17,0x03, 0x19,0x03,
    0x1A,0x02, 0x16,0x02, 0x17,0x03, 0x19,0x66, 0x1A,0x15,
    0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x21,0x02, 0x20,0x03,
    0x1F,0x02, 0x1B,0x0D, 0x1B,0x66, 0x19,0x03, 0x17,0x03,
    0x19,0x02, 0x17,0x0C, 0x16,0x14, 0x15,0x03, 0x15,0x03,
    0x16,0x03, 0x17,0x03, 0x19,0x02, 0x19,0x0D, 0x19,0x03,
    0x17,0x03, 0x19,0x03, 0x17,0x03, 0x1A,0x03, 0x19,0x02,
    0x17,0x0D, 0x17,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x02,
    0x1B,0x02, 0x17,0x03, 0x19,0x02, 0x1A,0x0D, 0x1A,0x01,
    0x1B,0x02, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66,
    0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x02,
    0x1A,0x66, 0x1A,0x03, 0x1B,0x03, 0x1F,0x02, 0x1F,0x02,
    0x1A,0x03, 0x1F,0x02, 0x20,0x0D, 0x20,0x16, 0x1F,0x02,
    0x20,0x02, 0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02,
    0x20,0x03, 0x1F,0x03, 0x1B,0x0D, 0x1F,0x03, 0x1B,0x0D,
    0x1A,0x66, 0x17,0x03, 0x19,0x0D, 0x19,0x14, 0x1F,0x03,
    0x20,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x03,
    0x21,0x02, 0x20,0x03, 0x1F,0x03, 0x1B,0x0D, 0x1F,0x03,
    0x1B,0x03, 0x1A,0x66, 0x17,0x03, 0x19,0x0D, 0x19,0x14,
    0x1A,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03,
    0x20,0x66, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03,
    0x1F,0x03, 0x20,0x66, 0x1F,0x03, 0x20,0x03, 0x21,0x02,
    0x21,0x02, 0x20,0x03, 0x1F,0x02, 0x1A,0x0D, 0x1A,0x02,
    0x17,0x02, 0x17,0x0D, 0x1A,0x03, 0x17,0x03, 0x19,0x0D,
    0x19,0x14, 0x17,0x03, 0x17,0x03, 0x16,0x04, 0x15,0x0E,
    0x15,0x03, 0x16,0x03, 0x17,0x0B, 0x17,0x0D, 0x18,0x0C,
    0x16,0x0D, 0x16,0x01, 0x1F,0x02, 0x20,0x02, 0x21,0x03,
    0x21,0x03, 0x21,0x03, 0x21,0x02, 0x20,0x03, 0x1F,0x03,
    0x1B,0x0D, 0x1F,0x03, 0x1B,0x0D, 0x1A,0x02, 0x17,0x03,
    0x19,0x0D, 0x19,0x14, 0x1F,0x03, 0x20,0x03, 0x21,0x03,
    0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02, 0x20,0x03,
    0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1A,0x0D,
    0x1A,0x02, 0x17,0x03, 0x19,0x0D, 0x19,0x14, 0x1F,0x02,
    0x20,0x02, 0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x66,
    0x20,0x03, 0x1F,0x03, 0x1B,0x0D, 0x1F,0x03, 0x1B,0x0D,
    0x1A,0x66, 0x17,0x03, 0x19,0x0D, 0x19,0x00, 0x00,0x00
};


void rr_Delay()                        //延时闹铃
{
        if(rr>=1) {rr++;}
        if(rr >= rrt*1421) {rr=0;rt=1;}
}

void BLA_delay()                       //背光自动熄灭
{
        if(bt>=1) {bt++;}
        if(K1==0 || K2==0 || K3==0 || K4==0)
        {
                LCM_BLA=1;
                bt=1;
        }
        if(bt>2000)
        {
                LCM_BLA=0;
                bt=0;
        }
}

void R_Delay()                          //闹铃发出嘟嘟声
{
        if(rt>=1) {rt++;}
        if((rt/10%2)==0) {beep=1;}
        if((rt/10%2)==1) {beep=0;}
        if(rt >= rtt*300)
        {
                beep=1;
                rt=0;
        }
}

void ds_write(uchar add,uchar date)         //写DS12CR887的数据
{
        DS_CS=0;
        DS_DS=1;
        DS_RW=1;
        DS_AS=1;
        Ds_Bus=add;
        DS_AS=0;
        DS_RW=0;
        Ds_Bus=date;
        DS_RW=1;
        DS_AS=1;
        DS_CS=1;
}

//读取DS12CR887的数据
uchar ds_read(uchar add)
{
        uchar z;
        DS_CS=0;
        DS_RW=1;
        DS_DS=1;
        DS_AS=1;
        Ds_Bus=add;
        DS_AS=0;
        DS_DS=0;
    Ds_Bus=0xff;
        z=Ds_Bus;
        DS_DS=1;
        DS_AS=1;
        DS_CS=1;
        return z;
}

//DS12CR887初始化
void ds_int()
{
        DS_AS=0;
        DS_DS=0;
        DS_RW=0;
        ds_write(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器
}

/*12864液晶显示屏并口驱动程序------------------------------------------------*/
//检查忙位(底层)
void chk_busy()
{
   LCM_RS=0;
   LCM_RW=1;
   LCM_EN=1;
   Lcd_Bus=0xff;
//   while((Lcd_Bus&0x80)==0x80);
   LCM_EN=0;
}

//写指令到LCD(底层)
void write_com(uchar cmdcode)
{
        chk_busy();
        LCM_RS=0;
        LCM_RW=0;
        LCM_EN=1;
        Lcd_Bus=cmdcode;
        Delay(5);
        LCM_EN=0;
        Delay(5);
}

//写数据到LCD(底层)
void write_data(uchar Dispdata)
{         
        chk_busy();
        LCM_RS=1;
        LCM_RW=0;
        LCM_EN=1;
        Lcd_Bus=Dispdata;
        Delay(5);
        LCM_EN=0;
        Delay(5);
}

//初始化LCD屏(被调用层)
void lcm_init()
{  
   write_com(0x30);  //选择8bit数据流
   Delay(5);
   write_com(0x0c);  //开显示(无游标、不反白)
   Delay(5);
   write_com(0x01);  //清除显示,并且设定地址指针为00H
   Delay(5);
}

void Disp_Img(unsigned char code *img)         //显示图片
{
        unsigned int j=0;
        unsigned char x,y,i;
       for(i=0;i<9;i+=8)
       for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/
         for(x=0;x<8;x++)
         {
                         write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
            write_com(y+0x80);        //行地址
            write_com(x+0x80+i);     //列地址
            write_com(0x30);
            write_data(img[j++]);
            write_data(img[j++]);
         }              
}
//   图片公鸡
uchar code GM[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//  图片  小孩睡觉
uchar code GN[]=
{
0xFF,0xFF,0xFF,0xF3,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF9,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFC,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,
0xFE,0x3F,0xFF,0xFC,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0xFF,
0xF8,0x1F,0xFF,0xFE,0x1F,0xFF,0xE0,0x01,0xFF,0xFF,0xFF,0xC0,0x7F,0xFF,0xFF,0xFF,
0xF1,0xCF,0xFF,0xFE,0x1F,0xFF,0x01,0xE0,0x7F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,0xFF,
0xFD,0x5F,0xFF,0xFC,0x0F,0xFC,0x1E,0x7C,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,
0xE0,0x17,0xFF,0xFC,0xCF,0xF8,0x60,0x0F,0x07,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,
0xE7,0x47,0xD7,0xF9,0xE7,0xF1,0x80,0x07,0xC3,0xFF,0xFC,0x01,0xFF,0xFF,0xFF,0xFF,
0xE7,0x07,0xAB,0xF7,0xFB,0xE2,0x00,0x0D,0x31,0xFF,0xF8,0x01,0xFF,0xFF,0xFF,0xFF,
0xF8,0x0F,0x41,0xEF,0xFD,0x84,0x00,0x18,0x08,0xFF,0xF8,0x01,0xFF,0xFD,0xFF,0xFF,
0xF9,0x9F,0x37,0xFF,0xFF,0x88,0x00,0x38,0x04,0x7F,0xF8,0x03,0xFF,0xF8,0xFF,0xFF,
0xFE,0x3F,0x29,0xFF,0xFF,0x10,0x00,0x34,0x02,0x3F,0xF8,0x03,0xFF,0xF8,0x7F,0xFF,
0xFF,0xFF,0xA3,0xF9,0xFF,0x20,0x00,0x62,0x01,0x1F,0xF8,0x03,0xFF,0xF0,0x3F,0xFF,
0xFF,0xFF,0xC3,0xE5,0xFC,0x40,0x00,0x92,0x00,0x9F,0xF8,0x03,0xFF,0xF1,0x3F,0xFF,
0xFF,0xFF,0xC7,0xEA,0xFC,0x40,0x00,0x8A,0x00,0x8F,0xFC,0x01,0xFF,0xF3,0x9F,0xFF,
0xFF,0xFF,0xFF,0xEA,0xF8,0x80,0x00,0x88,0x00,0x4F,0xFC,0x01,0xFF,0xE3,0xDF,0xFF,
0xFF,0xFF,0xFF,0xE8,0xF1,0x80,0x00,0x00,0x00,0x43,0xFE,0x00,0xFF,0xE1,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF1,0xC2,0x00,0x00,0x00,0x00,0x21,0xFF,0x00,0xFF,0xCC,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x85,0x07,0xC0,0x00,0x00,0x30,0xFF,0x80,0xFF,0xCC,0xFF,0xFF,
0xFF,0x3F,0xFF,0xFF,0x09,0x03,0xC0,0x00,0x00,0x2C,0x7F,0xC0,0x7F,0xC0,0xFF,0xFF,
0xFE,0x1F,0xFF,0xFF,0x1D,0x00,0x00,0x38,0x00,0x2A,0x3F,0xF0,0x3F,0xE1,0xFF,0xFF,
0xFE,0x0F,0xFF,0xFE,0x21,0x00,0x00,0x1E,0x00,0x21,0x1F,0xFC,0x1F,0xFF,0xFF,0xFF,
0xFE,0x47,0xFF,0xFE,0x29,0x00,0x00,0x06,0x00,0x2A,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFC,0x67,0xFF,0xFE,0x21,0x00,0x00,0x00,0x01,0xA0,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF0,0x7F,0xFF,0xFC,0x49,0x07,0x80,0x00,0x00,0x6A,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF3,0x3F,0xFF,0xFC,0x82,0x0C,0xC0,0xA0,0x00,0x40,0x4F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF3,0x3F,0xFF,0xF8,0xAA,0x00,0x41,0xF0,0x00,0x6A,0xC7,0x0F,0x0F,0xFF,0xFF,0xFF,
0xF8,0x7F,0xFF,0xF9,0x02,0x00,0x01,0x18,0x00,0x80,0x8E,0x06,0x07,0xFF,0xFF,0x3F,
0xF8,0xFF,0xFF,0xF9,0xAA,0x00,0x00,0x08,0x00,0xAA,0xCE,0x06,0x07,0xFF,0xFF,0x1F,
0xFF,0xFF,0xFF,0xF2,0x02,0x00,0x00,0x00,0x01,0x80,0x4E,0x06,0x07,0xFF,0xFE,0x1F,
0xFF,0xFF,0xFF,0xF1,0xAA,0x00,0x00,0x00,0x07,0xAA,0x8E,0x0E,0x0F,0xFF,0xFE,0x0F,
0xFF,0xFF,0xFF,0xF2,0x01,0x00,0x80,0x00,0x01,0x00,0x9F,0x3E,0x7F,0xFF,0xFE,0x47,
0xFF,0xFF,0xF0,0x01,0xA8,0xC1,0x00,0x00,0x02,0xAA,0x8F,0x3E,0x7F,0xFF,0xFC,0x67,
0xFF,0xFE,0x00,0x02,0x03,0x21,0x00,0x00,0x04,0x01,0x1F,0x3E,0x7F,0xFF,0xF0,0x37,
0xFF,0xE0,0x0F,0xFF,0xF4,0x10,0x84,0x00,0x0A,0xAB,0x1F,0x3E,0x7F,0xFF,0xF3,0x3F,
0xFF,0x03,0xF8,0x01,0x08,0x08,0x78,0x00,0x30,0x01,0x3F,0x28,0x7F,0xFF,0xF3,0x3F,
0xFE,0x1E,0x04,0x88,0x48,0x07,0x80,0x00,0x4A,0xAA,0x3F,0x00,0x7F,0xFF,0xF0,0x3F,
0xFF,0xF0,0x00,0x00,0x04,0x08,0x7F,0x0F,0x80,0x04,0x7F,0x80,0xFF,0xFF,0xF8,0x7F,
0xFE,0x01,0x60,0xF0,0x04,0x30,0x21,0x94,0xEA,0xAC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x07,0xFF,0xC8,0x03,0xC0,0x44,0x20,0x20,0x08,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,
0xFE,0x7C,0xFC,0x3F,0xA0,0x01,0x00,0x50,0x3A,0xB0,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,
0xFF,0xE0,0x78,0x2F,0xDC,0x00,0x00,0x10,0x18,0x21,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,
0xFF,0xE0,0xF8,0x1F,0x03,0xF0,0x00,0x08,0x1C,0x23,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
0xFF,0xE0,0xB8,0x1F,0x0A,0x0A,0x00,0x04,0x27,0x47,0xFF,0xFF,0x27,0xFF,0xFF,0xFF,
0xFF,0xF5,0xFC,0x3F,0x87,0x47,0xC0,0x03,0xE1,0xC1,0xFF,0xFE,0x33,0xFF,0xFF,0xFF,
0xFF,0x3F,0x86,0x78,0x8C,0x11,0x3E,0xF0,0x00,0x70,0xFF,0xF8,0x33,0xFF,0xFF,0xFF,
0xFE,0x1F,0x03,0xF0,0x9C,0x0C,0x97,0x7C,0x00,0x08,0x3F,0xF9,0x9B,0xFF,0xFF,0xFF,
0xFE,0x1E,0x03,0xE0,0xF8,0x07,0xE6,0xEF,0x81,0x07,0x1F,0xF9,0x9F,0xFF,0xFF,0xFF,
0xFE,0x1E,0x01,0xF0,0x3C,0x07,0xC0,0xEE,0x7F,0x80,0x8F,0xFC,0x3F,0xFF,0xFF,0xFF,
0xFF,0x3B,0xC3,0xF8,0x3C,0x07,0xC0,0xFF,0xE1,0xE0,0x47,0xFC,0x7F,0xFF,0xFF,0xFF,
0xFF,0xE0,0x63,0x0C,0x77,0x07,0xC0,0xF0,0x26,0x30,0xA3,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF0,0x3E,0x03,0xC1,0x0D,0xC0,0xF0,0x28,0x1C,0x11,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xE0,0x1C,0x03,0xC0,0x9C,0x21,0xF8,0x1E,0x06,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF0,0x1E,0x01,0x80,0x78,0x3F,0x88,0x3F,0x07,0x84,0x7F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF8,0x7E,0x03,0xC0,0xE0,0x1F,0x04,0xF1,0x8F,0xD2,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFF,0x0C,0xCF,0x07,0xC0,0xF0,0x0E,0x07,0xC0,0xFF,0xE1,0x1F,0xFF,0xFF,0xFF,0xFF,
0xFE,0x07,0xC3,0xFE,0x70,0xF8,0x1F,0x03,0xC0,0x3C,0x30,0x8F,0xFF,0xFF,0xFF,0xFF,
0xFF,0x07,0x81,0xF8,0x39,0xEC,0x1F,0x03,0x80,0x78,0xB8,0x4F,0xFF,0xFF,0xFF,0xFF,
0xFE,0x07,0xC1,0xF8,0x1F,0x07,0xF1,0xC7,0xC0,0x64,0x3E,0x4F,0xFF,0xFF,0xFF,0xFF,
0xFE,0x0F,0x81,0xF0,0x3F,0x03,0xE0,0x7C,0x20,0xD0,0x08,0x4F,0xFF,0xFF,0xFF,0xFF,
0xFB,0x5F,0xC3,0xF0,0x1E,0x01,0xE0,0x3C,0x1F,0xC4,0x12,0x07,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xF8,0x3F,0x03,0xC0,0x7C,0x0F,0x01,0x52,0x27,0xFF,0xFF,0xFF,0xFF
};


//向LCM发送一个字符串,长度64字符之内。(被调用层)
//应用:lcm_w_word("您好!");
void lcm_w_word(uchar *s)
{
        while(*s>0)
        {                                       
            write_data(*s);
            s++;
    }
}

//写指令或数据(被调用层)
void lcm_w_test(bit i,uchar word)
{
        if(i == 0)
        {
                write_com(word);//写指令或数据(0,指令)
        }
        else
        {
                write_data(word);//写指令或数据(1,数据)
        }
}

//清屏函数
void lcm_clr(void)
{
        lcm_w_test(0,0x01);       
}

/*DS18B20驱动程序------------------------------------------------------------*/
//初始化ds1820函数
void Init_DS18B20(void)
{
        uchar x=0;
        DQ = 1;    //DQ复位
        Delay(8);  //稍做延时
        DQ = 0;    //单片机将DQ拉低
        Delay(80); //精确延时 大于 480us
        DQ = 1;    //拉高总线
        Delay(14);
        x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
        Delay(20);
}

//读一个字节函数
uchar ReadOneChar(void)
{
        uchar i=0;
        uchar dat = 0;
        for (i=8;i>0;i--)
        {
                DQ = 0; // 给脉冲信号
                dat>>=1;
                DQ = 1; // 给脉冲信号
                if(DQ)
                dat|=0x80;
                Delay(4);
        }
        return(dat);
}

//写一个字节函数
void WriteOneChar(uchar dat)
{
        uchar i=0;
        for (i=8; i>0; i--)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay(5);
                DQ = 1;
                dat>>=1;
        }
}

//读取温度函数
uint ReadTemperature(void)
{
        uchar a=0;
        uchar b=0;
        uint t=0;
        float tt=0;
        Init_DS18B20();
        WriteOneChar(0xCC); // 跳过读序号列号的操作
        WriteOneChar(0x44); // 启动温度转换
        Init_DS18B20();
        WriteOneChar(0xCC); //跳过读序号列号的操作
        WriteOneChar(0xBE); //读取温度寄存器
        a=ReadOneChar();  //读低8位
        b=ReadOneChar(); //读高8位
        t=b;
        t<<=8;
        t=t|a;
        tt=t*0.0625;
        t= tt*10+0.5; //放大10倍输出并四舍五入
        return(t);
}
// 节假日 提示
void days(void)
{
        lcm_w_test(0,0x98);
        if ( cen == 0x20 && year ==  0x9 && month == 0x0 && date == 0x0 ){ lcm_w_word("Happy birthday!!");   if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
       
        else
        {
                if ( month_moon == 0x0 && date_moon == 0x0 )   { lcm_w_word("制作者颜靖峰生日"); if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
                else
                {
                if (month_moon== 0x1 && date_moon == 0x1 ){ lcm_w_word("    今日春节    ");  }                                                  
                if (month_moon== 0x1 && date_moon == 0x15 ){ lcm_w_word("  元宵节快乐    "); }
                if (month_moon== 0x2 && date_moon == 0x2 ){ lcm_w_word("    青龙节      "); }
                if (month_moon== 0x5 && date_moon == 0x5 ){ lcm_w_word("    端午节      "); }         
                if (month_moon== 0x7 && date_moon == 0x7 ){ lcm_w_word("七七中国情人节  "); }  
                if (month_moon== 0x7 && date_moon == 0x15 ){ lcm_w_word("    中元节      "); }                 
                if (month_moon== 0x8 && date_moon == 0x15 ){ lcm_w_word("  中秋节快乐    "); }  
                if (month_moon== 0x9 && date_moon == 0x9 ){ lcm_w_word("  今日重阳节    "); }  
                if (month_moon== 0x12 && date_moon == 0x8 ){ lcm_w_word("  今日腊八节    "); }  
                if (month_moon== 0x12 && date_moon == 0x15 ){ lcm_w_word("  过小年        "); }  
                if (month_moon== 0x12 && date_moon == 0x29 ){ lcm_w_word("  腊月二十九    "); }  
                if (month_moon== 0x12 && date_moon == 0x30 ){ lcm_w_word("  大年三十(^o^) "); }

                if ( month == 0x1 && date ==  0x1 ){ lcm_w_word("    元旦快乐    "); }//1月
                if ( month == 0x1 && date == 0x28 ){ lcm_w_word("  世界麻风日    "); }
                  
                if ( month == 0x2 && date ==  0x2 ){ lcm_w_word("  世界湿地日    "); }//2月
                if ( month == 0x2 && date == 0x13 ){ lcm_w_word("  明天情人节了  "); }               
                if ( month == 0x2 && date == 0x14 ){ lcm_w_word("  今天是情人节  "); }
                                       
                if ( month == 0x3 && date ==  0x1 ){ lcm_w_word("  国际海豹日    "); }//3月               
                if ( month == 0x3 && date ==  0x3 ){ lcm_w_word("  全国爱耳日    "); }               
                if ( month == 0x3 && date ==  0x8 ){ lcm_w_word("国际劳动妇女节  "); }               
                if ( month == 0x3 && date == 0x12 ){ lcm_w_word("    植树节      "); }               
                if ( month == 0x3 && date == 0x14 ){ lcm_w_word("  国际警察日    "); }               
                if ( month == 0x3 && date == 0x15 ){ lcm_w_word("  消费者权益日  "); }               
                if ( month == 0x3 && date == 0x17 ){ lcm_w_word("  国际航海日    "); }               
                if ( month == 0x3 && date == 0x21 ){ lcm_w_word("  世界森林日    "); }               
                if ( month == 0x3 && date == 0x22 ){ lcm_w_word("    世界水日    "); }               
                if ( month == 0x3 && date == 0x23 ){ lcm_w_word("  世界气象日    "); }               
                if ( month == 0x3 && date == 0x24 ){ lcm_w_word("世界防治结核病日"); }
                               
                if ( month == 0x4 && date ==  0x1 ){ lcm_w_word("愚人节  小心上当"); }//4               
                if ( month == 0x4 && date ==  0x7 ){ lcm_w_word("  世界卫生日    "); }               
                if ( month == 0x4 && date ==  0x8 ){ lcm_w_word("    复活节      "); }               
                if ( month == 0x4 && date == 0x13 ){ lcm_w_word("  黑色星期五    "); }
                                 
                if ( month == 0x5 && date ==  0x1 ){ lcm_w_word("五一国际劳动节  "); }//5               
                if ( month == 0x5 && date ==  0x4 ){ lcm_w_word("    青年节      "); }               
                if ( month == 0x5 && date ==  0x8 ){ lcm_w_word("  世界红十字日  "); }               
                if ( month == 0x5 && date == 0x12 ){ lcm_w_word("  国际护士节    "); }               
                if ( month == 0x5 && date ==  0x5 ){ lcm_w_word("近日请注意母亲节"); }               
                if ( month == 0x5 && date == 0x15 ){ lcm_w_word("  国际家庭日    "); }
                if ( month == 0x5 && date == 0x31 ){ lcm_w_word("  世界无烟日    "); }               
                               
                if ( month == 0x6 && date ==  0x1 ){ lcm_w_word("  国际儿童节    "); }//6
                if ( month == 0x6 && date ==  0x5 ){ lcm_w_word("  世界环境日    "); }               
                if ( month == 0x6 && date == 0x26 ){ lcm_w_word("  国际禁毒日    "); }               
                if ( month == 0x6 && date ==  0x6 ){ lcm_w_word("  全国爱眼日    "); }               
                if ( month == 0x6 && date == 0x13 ){ lcm_w_word("近日请注意父亲节"); }
                if ( month == 0x6 && date == 0x15 ){ lcm_w_word("近日请注意父亲节"); }
                                
                if ( month == 0x7 && date ==  0x1 ){ lcm_w_word("  七一党生日    "); }//7
                if ( month == 0x7 && date ==  0x7 ){ lcm_w_word("抗日战争纪念日  "); }
                if ( month == 0x7 && date == 0x11 ){ lcm_w_word("  世界人口日    "); }
          
                if ( month == 0x8 && date ==  0x1 ){ lcm_w_word("  八一建军节    "); }//8
                if ( month == 0x8 && date ==  0x8 ){ lcm_w_word("  中国男子节    "); }
                if ( month == 0x8 && date == 0x15 ){ lcm_w_word("抗战胜利纪念日  "); }
          
                if ( month == 0x9 && date == 0x10 ){ lcm_w_word("  中国教师节    "); }//9
                if ( month == 0x9 && date == 0x18 ){ lcm_w_word("九一八事变纪念日"); }
                if ( month == 0x9 && date == 0x20 ){ lcm_w_word("  国际爱牙日    "); }
                if ( month == 0x9 && date == 0x27 ){ lcm_w_word("  世界旅游日    "); }
       
                if ( month == 0x10 && date ==  0x1 ){ lcm_w_word("  中国国庆节    "); }//10
                if ( month == 0x10 && date ==  0x4 ){ lcm_w_word("  世界动物日    "); }
                if ( month == 0x10 && date == 0x24 ){ lcm_w_word("    联合国日    "); }
                if ( month == 0x10 && date == 0x12 ){ lcm_w_word("明天是国际教师节"); }
                if ( month == 0x10 && date == 0x13 ){ lcm_w_word("  国际教师节    "); }
       
                if ( month == 0x11 && date == 0x10 ){ lcm_w_word("  世界青年节    "); }//11
                if ( month == 0x11 && date == 0x17 ){ lcm_w_word("  世界学生节    "); }
       
                if ( month == 0x12 && date ==  0x1 ){ lcm_w_word("  世界艾滋病日  "); }//12
                if ( month == 0x12 && date == 0x23 ){ lcm_w_word("  明晚平安夜    "); }
                if ( month == 0x12 && date == 0x24 ){ lcm_w_word("  今晚平安夜    "); }
                if ( month == 0x12 && date == 0x25 ){ lcm_w_word("    圣诞快乐    "); }
                if ( month == 0x12 && date == 0x31 ){ lcm_w_word("    明日新年    "); }
                }
        }
}

/*电子时钟在液晶屏上显示驱动程序---------------------------------------------*/
//往液晶屏填写 年 数据
void lcm_w_year(void)
{
        cen=ds_read(32);
        lcm_w_test(0,0x80);//在液晶屏上显示的位置
        lcm_w_test(1,(cen/16)+0x30);       
        lcm_w_test(1,cen%16+0x30);
        year=ds_read(9);
        lcm_w_test(0,0x81);//在LCM上的写入位置
        lcm_w_test(1,(year/16)+0x30);       
        lcm_w_test(1,year%16+0x30);
        lcm_w_test(0,0x82);
        lcm_w_word("农");
        lcm_w_test(0,0x84);
        lcm_w_word("年");
        nl();
}       

//往液晶屏填写 月 数据
void lcm_w_month(void)
{
        month=ds_read(8);
        lcm_w_test(0,0x94);        //月份在液晶屏上显示的位置
        if(month/16 != 0){lcm_w_test(1,(month/16)+0x30);}        //十位消隐
                else{lcm_w_test(1,0x20);}//十位消隐               
        lcm_w_test(1,month%16+0x30);
        lcm_w_test(0,0x95);//在LCM上的写入位置
        lcm_w_word("月");
        nl();
}

//将星期处理并送入液晶屏的指定区域显示
void lcm_w_day(void)
{
        uchar sel;
        day = ds_read(6);
        sel = ds_read(6);
        lcm_w_test(0,0x90);          
        lcm_w_word("星期");
        lcm_w_test(0,0x92);
        if(sel==7)  {lcm_w_word("日");}   
          if(sel==6)  {lcm_w_word("六");}   
          if(sel==5)  {lcm_w_word("五");}   
          if(sel==4)  {lcm_w_word("四");}   
        if(sel==3)  {lcm_w_word("三");}
          if(sel==2)  {lcm_w_word("二");}   
          if(sel==1)  {lcm_w_word("一");}
}

//往液晶屏填写 日 数据
void lcm_w_date(void)
{
        date=ds_read(7);
        lcm_w_test(0,0x96);        //日期在液晶屏上显示的位置
        if(date/16 != 0){lcm_w_test(1,(date/16)+0x30);}        //十位消隐
                else{lcm_w_test(1,0x20);}//十位消隐
        lcm_w_test(1,date%16+0x30);
        lcm_w_test(0,0x97);        //在LCM上的写入位置
        lcm_w_word("日");
        nl();                                       
}

//往液晶屏填写 小时 数据
void lcm_w_hour(void)
{
        hour=ds_read(4);//读取DS12CR887的小时
        lcm_w_test(0,0x88);        //小时在液晶屏上显示的位置
        lcm_w_test(1,(hour/16)+0x30);
        lcm_w_test(1,hour%16+0x30);                       
}

//往液晶屏填写 分钟 数据
void lcm_w_min(void)
{
        min=ds_read(2);//读取DS12CR887的分                               
        lcm_w_test(0,0x89);          //分钟在液晶屏上显示的位置
        lcm_w_test(1,0x3a);          //小时与分钟之间显示":"
        lcm_w_test(1,(min/16)+0x30);
        lcm_w_test(1,min%16+0x30);       
        lcm_w_test(1,0x3a);         //分钟与小时之间显示":"       
}

//往液晶屏填写 秒 数据
void  lcm_w_sec(void)
{
        uint i=0;
        uchar a=0,b=0,c=0;
        sec=ds_read(0);//读取DS12CR887的秒
        lcm_w_test(0,0x8b);                //秒钟在液晶屏上显示的位置
        lcm_w_test(1,(sec/16)+0x30);        //写十位//对10求余分解出十位               
        lcm_w_test(1,sec%16+0x30);        //写个位
        write_com(0x8c);
        if(r1_of==1 || r2_of==1){lcm_w_test(1,0x0e);}//闹铃开启状态

        lcm_w_test(0,0x8d);                //温度在液晶屏上显示的位置               
        i=ReadTemperature();//读温度并送显
        a=i/100;
        lcm_w_test(1,a+0x30);        //显示温度十位
        b=i/10-a*10;
        lcm_w_test(1,b+0x30);        //个位
        lcm_w_test(1,0x2e);         //"."
        c=i-a*100-b*10;
        lcm_w_test(1,c+0x30); //小数点位1位               
        lcm_w_word("℃");        //度C       
}

/*调整时间、日期程序---------------------------------------------------------*/
void Set_time(uchar sel)  
{
        signed char address,item;
        signed char max,mini;
        lcm_w_test(0,0x98);
        lcm_w_word("调整");
        if(sel==6)  {lcm_w_word("分钟");address=2; max=59;mini=0;}
        if(sel==5)  {lcm_w_word("小时");address=4; max=23;mini=0;}
        if(sel==4)  {lcm_w_word("星期");address=6; max=7;mini=1;}
        if(sel==3)  {lcm_w_word("日期");address=7; max=31; mini=1;}  
        if(sel==2)  {lcm_w_word("月份");address=8; max=12;mini=1;}
        if(sel==1)  {lcm_w_word("年份");address=9; max=99;mini=0;}
        if(sel==0)  {lcm_w_word("世纪");address=32; max=20; mini=19;}
       
        //读取DS12CR887某地址上的数值赋给item        
        item=ds_read(address);
        item=(item/16)*10+item%16;
        if(K3 == 0)//K3-加
        {
                item++;//数加 1  
        }
        if(K4 == 0)//K4-减
        {
                item--;//数减 1
        }
        if(item>max)
                item=mini;//查看数值有效范围   
        if(item<mini)
                item=max;
        item=(item/10)*16+item%10;
       
        //将调整好的item值写入DS12CR887           
        ds_write(address,item);//+
        lcm_w_year();   //年
        lcm_w_month();        //月
        lcm_w_date();        //日
        lcm_w_day();        //星期
        lcm_w_hour();        //时
        lcm_w_min();        //
}

void lcm_ring()              //显示闹铃设置
{
        lcm_w_test(0,0x90);
        r1_h=ds_read(33);
        lcm_w_test(1,(r1_h/16)+0x30);
        lcm_w_test(1,r1_h%16+0x30);        //十位消隐
        lcm_w_test(0,0x91);               
        lcm_w_test(1,0x3a);
        r1_m=ds_read(34);
        lcm_w_test(1,(r1_m/16)+0x30);
        lcm_w_test(1,r1_m%16+0x30);
        lcm_w_test(0,0x94);        //月份在液晶屏上显示的位置
        r1_of=ds_read(35);
        if(r1_of==0) {lcm_w_word("关");}
        else {lcm_w_word("开");}

        lcm_w_test(0,0x88);
        r2_h=ds_read(36);
        lcm_w_test(1,(r2_h/16)+0x30);        //月份在液晶屏上显示的位置
        lcm_w_test(1,r2_h%16+0x30);        //十位消隐
        lcm_w_test(0,0x89);               
        lcm_w_test(1,0x3a);
        r2_m=ds_read(37);
        lcm_w_test(1,(r2_m/16)+0x30);
        lcm_w_test(1,r2_m%16+0x30);
        lcm_w_test(0,0x8c);        //月份在液晶屏上显示的位置
        r2_of=ds_read(38);
        if(r2_of==0) {lcm_w_word("关");}
        else {lcm_w_word("开");}

        lcm_w_test(0,0x98);
        rtt=ds_read(39);
        lcm_w_word("闹铃");
        lcm_w_test(1,(rtt/16)+0x30);
        lcm_w_test(1,(rtt%16)+0x30);        //十位消隐
       
        lcm_w_test(0,0x9c);               
        rrt=ds_read(40);
        lcm_w_word("延时");
        lcm_w_test(1,(rrt/16)+0x30);
        lcm_w_test(1,(rrt%16)+0x30);        //十位消隐       
}

void Set_ring(uchar sel)                //设置闹铃
{
        signed char address,item;
        signed char max,mini;
        lcm_w_test(0,0x80);
        lcm_w_word("设置闹铃");
        if(sel==7)  {lcm_w_word("  延时");address=40; max=5;mini=0;}  //分钟2
        if(sel==6)  {lcm_w_word("  时间");address=39; max=3;mini=0;}  //小时4
        if(sel==5)  {lcm_w_word("二开关");address=38; max=1;mini=0;}  //分钟2
        if(sel==4)  {lcm_w_word("二分钟");address=37; max=59;mini=0;}  //小时4  
        if(sel==3)  {lcm_w_word("二小时");address=36; max=23; mini=0;}   //星期6   
        if(sel==2)  {lcm_w_word("一开关");address=35; max=1;mini=0;}  //日期7  
        if(sel==1)  {lcm_w_word("一分钟");address=34; max=59;mini=0;}  //月份8  
        if(sel==0)  {lcm_w_word("一小时");address=33; max=23; mini=0;} //年份9
        item=ds_read(address);
        item=(item/16)*10+item%16;
        lcm_ring();

        if(K3 == 0)//K3-加
        {
                item++;//数加 1  
        }
        if(K4 == 0)//K4-减
        {
                item--;//数减 1
        }
        if(item>max)
                item=mini;//查看数值有效范围   
        if(item<mini)
                item=max;

        item=(item/10)*16+item%10;         
        ds_write(address,item);
        lcm_ring();
}

void  ring(void)                         //闹铃
{
        r1_h=ds_read(33);
        r1_h=(r1_h/16)*10+r1_h%16;
        r1_m=ds_read(34);
        r1_m=(r1_m/16)*10+r1_m%16;
        r1_of=ds_read(35);
        r1_of=(r1_of/16)*10+r1_of%16;
        r2_h=ds_read(36);
        r2_h=(r2_h/16)*10+r2_h%16;
        r2_m=ds_read(37);
        r2_m=(r2_m/16)*10+r2_m%16;
        r2_of=ds_read(38);
        r2_of=(r2_of/16)*10+r2_of%16;
        rtt=ds_read(39);
        rtt=(rtt/16)*10+rtt%16;
        rrt=ds_read(40);
        rrt=(rrt/16)*10+rrt%16;
        if(r1_of==1 && r1_h==hour && r1_m==min && sec==00)
                {
                        bt=1;
                        LCM_BLA=1;
                        rt=1;
                        Play(Music_Girl,0,3,330);
                }
        if(r2_of==1 && r2_h==hour && r2_m==min && sec==00)
                {
                        bt=1;
                        LCM_BLA=1;
                        rt=1;
                        Play(Music_Girl,0,3,330);
                }
        rr_Delay();                        //         
        R_Delay();                        //
}

/*显示欢迎信息---------------------------------------------------------------*/
void welcome(void)
{                                                                  
        write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
        lcm_w_word("This production ");

        write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
        lcm_w_word("for my favourite");
       
        write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
        lcm_w_word("girl,which make");
       
        write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)         
        lcm_w_word("it with my heart");       
}
void welcome2(void)
{                                                                  
        write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
        lcm_w_word("with my heart.");

        write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
        lcm_w_word("to __ by ONE421");
       
        write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
        lcm_w_word("2009.6");

        write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)         
        lcm_w_word("Happy birthday!!");       
}

/********阳历转换阴历********************************************************************/

code uchar year_code[597]={
                    0x04,0xAe,0x53,    //1901 0
                    0x0A,0x57,0x48,    //1902 3
                    0x55,0x26,0xBd,    //1903 6
                    0x0d,0x26,0x50,    //1904 9
                    0x0d,0x95,0x44,    //1905 12
                    0x46,0xAA,0xB9,    //1906 15
                    0x05,0x6A,0x4d,    //1907 18
                    0x09,0xAd,0x42,    //1908 21
                    0x24,0xAe,0xB6,    //1909
                    0x04,0xAe,0x4A,    //1910
                    0x6A,0x4d,0xBe,    //1911
                    0x0A,0x4d,0x52,    //1912
                    0x0d,0x25,0x46,    //1913
                    0x5d,0x52,0xBA,    //1914
                    0x0B,0x54,0x4e,    //1915
                    0x0d,0x6A,0x43,    //1916
                    0x29,0x6d,0x37,    //1917
                    0x09,0x5B,0x4B,    //1918
                    0x74,0x9B,0xC1,    //1919
                    0x04,0x97,0x54,    //1920
                    0x0A,0x4B,0x48,    //1921
                    0x5B,0x25,0xBC,    //1922
                    0x06,0xA5,0x50,    //1923
                    0x06,0xd4,0x45,    //1924
                    0x4A,0xdA,0xB8,    //1925
                    0x02,0xB6,0x4d,    //1926
                    0x09,0x57,0x42,    //1927
                    0x24,0x97,0xB7,    //1928
                    0x04,0x97,0x4A,    //1929
                    0x66,0x4B,0x3e,    //1930
                    0x0d,0x4A,0x51,    //1931
                    0x0e,0xA5,0x46,    //1932
                    0x56,0xd4,0xBA,    //1933
                    0x05,0xAd,0x4e,    //1934
                    0x02,0xB6,0x44,    //1935
                    0x39,0x37,0x38,    //1936
                    0x09,0x2e,0x4B,    //1937
                    0x7C,0x96,0xBf,    //1938
                    0x0C,0x95,0x53,    //1939
                    0x0d,0x4A,0x48,    //1940
                    0x6d,0xA5,0x3B,    //1941
                    0x0B,0x55,0x4f,    //1942
                    0x05,0x6A,0x45,    //1943
                    0x4A,0xAd,0xB9,    //1944
                    0x02,0x5d,0x4d,    //1945
                    0x09,0x2d,0x42,    //1946
                    0x2C,0x95,0xB6,    //1947
                    0x0A,0x95,0x4A,    //1948
                    0x7B,0x4A,0xBd,    //1949
                    0x06,0xCA,0x51,    //1950
                    0x0B,0x55,0x46,    //1951
                    0x55,0x5A,0xBB,    //1952
                    0x04,0xdA,0x4e,    //1953
                    0x0A,0x5B,0x43,    //1954
                    0x35,0x2B,0xB8,    //1955
                    0x05,0x2B,0x4C,    //1956
                    0x8A,0x95,0x3f,    //1957
                    0x0e,0x95,0x52,    //1958
                    0x06,0xAA,0x48,    //1959
                    0x7A,0xd5,0x3C,    //1960
                    0x0A,0xB5,0x4f,    //1961
                    0x04,0xB6,0x45,    //1962
                    0x4A,0x57,0x39,    //1963
                    0x0A,0x57,0x4d,    //1964
                    0x05,0x26,0x42,    //1965
                    0x3e,0x93,0x35,    //1966
                    0x0d,0x95,0x49,    //1967
                    0x75,0xAA,0xBe,    //1968
                    0x05,0x6A,0x51,    //1969
                    0x09,0x6d,0x46,    //1970
                    0x54,0xAe,0xBB,    //1971
                    0x04,0xAd,0x4f,    //1972
                    0x0A,0x4d,0x43,    //1973
                    0x4d,0x26,0xB7,    //1974
                    0x0d,0x25,0x4B,    //1975
                    0x8d,0x52,0xBf,    //1976
                    0x0B,0x54,0x52,    //1977
                    0x0B,0x6A,0x47,    //1978
                    0x69,0x6d,0x3C,    //1979
                    0x09,0x5B,0x50,    //1980
                    0x04,0x9B,0x45,    //1981
                    0x4A,0x4B,0xB9,    //1982
                    0x0A,0x4B,0x4d,    //1983
                    0xAB,0x25,0xC2,    //1984
                    0x06,0xA5,0x54,    //1985
                    0x06,0xd4,0x49,    //1986
                    0x6A,0xdA,0x3d,    //1987
                    0x0A,0xB6,0x51,    //1988
                    0x09,0x37,0x46,    //1989
                    0x54,0x97,0xBB,    //1990
                    0x04,0x97,0x4f,    //1991
                    0x06,0x4B,0x44,    //1992
                    0x36,0xA5,0x37,    //1993
                    0x0e,0xA5,0x4A,    //1994
                    0x86,0xB2,0xBf,    //1995
                    0x05,0xAC,0x53,    //1996
                    0x0A,0xB6,0x47,    //1997
                    0x59,0x36,0xBC,    //1998
                    0x09,0x2e,0x50,    //1999 294
                    0x0C,0x96,0x45,    //2000 297
                    0x4d,0x4A,0xB8,    //2001
                    0x0d,0x4A,0x4C,    //2002
                    0x0d,0xA5,0x41,    //2003
                    0x25,0xAA,0xB6,    //2004
                    0x05,0x6A,0x49,    //2005
                    0x7A,0xAd,0xBd,    //2006
                    0x02,0x5d,0x52,    //2007
                    0x09,0x2d,0x47,    //2008
                    0x5C,0x95,0xBA,    //2009
                    0x0A,0x95,0x4e,    //2010
                    0x0B,0x4A,0x43,    //2011
                    0x4B,0x55,0x37,    //2012
                    0x0A,0xd5,0x4A,    //2013
                    0x95,0x5A,0xBf,    //2014
                    0x04,0xBA,0x53,    //2015
                    0x0A,0x5B,0x48,    //2016
                    0x65,0x2B,0xBC,    //2017
                    0x05,0x2B,0x50,    //2018
                    0x0A,0x93,0x45,    //2019
                    0x47,0x4A,0xB9,    //2020
                    0x06,0xAA,0x4C,    //2021
                    0x0A,0xd5,0x41,    //2022
                    0x24,0xdA,0xB6,    //2023
                    0x04,0xB6,0x4A,    //2024
                    0x69,0x57,0x3d,    //2025
                    0x0A,0x4e,0x51,    //2026
                    0x0d,0x26,0x46,    //2027
                    0x5e,0x93,0x3A,    //2028
                    0x0d,0x53,0x4d,    //2029
                    0x05,0xAA,0x43,    //2030
                    0x36,0xB5,0x37,    //2031
                    0x09,0x6d,0x4B,    //2032
                    0xB4,0xAe,0xBf,    //2033
                    0x04,0xAd,0x53,    //2034
                    0x0A,0x4d,0x48,    //2035
                    0x6d,0x25,0xBC,    //2036
                    0x0d,0x25,0x4f,    //2037
                    0x0d,0x52,0x44,    //2038
                    0x5d,0xAA,0x38,    //2039
                    0x0B,0x5A,0x4C,    //2040
                    0x05,0x6d,0x41,    //2041
                    0x24,0xAd,0xB6,    //2042
                    0x04,0x9B,0x4A,    //2043
                    0x7A,0x4B,0xBe,    //2044
                    0x0A,0x4B,0x51,    //2045
                    0x0A,0xA5,0x46,    //2046
                    0x5B,0x52,0xBA,    //2047
                    0x06,0xd2,0x4e,    //2048
                    0x0A,0xdA,0x42,    //2049
                    0x35,0x5B,0x37,    //2050
                    0x09,0x37,0x4B,    //2051
                    0x84,0x97,0xC1,    //2052
                    0x04,0x97,0x53,    //2053
                    0x06,0x4B,0x48,    //2054
                    0x66,0xA5,0x3C,    //2055
                    0x0e,0xA5,0x4f,    //2056
                    0x06,0xB2,0x44,    //2057
                    0x4A,0xB6,0x38,    //2058
                    0x0A,0xAe,0x4C,    //2059
                    0x09,0x2e,0x42,    //2060
                    0x3C,0x97,0x35,    //2061
                    0x0C,0x96,0x49,    //2062
                    0x7d,0x4A,0xBd,    //2063
                    0x0d,0x4A,0x51,    //2064
                    0x0d,0xA5,0x45,    //2065
                    0x55,0xAA,0xBA,    //2066
                    0x05,0x6A,0x4e,    //2067
                    0x0A,0x6d,0x43,    //2068
                    0x45,0x2e,0xB7,    //2069
                    0x05,0x2d,0x4B,    //2070
                    0x8A,0x95,0xBf,    //2071
                    0x0A,0x95,0x53,    //2072
                    0x0B,0x4A,0x47,    //2073
                    0x6B,0x55,0x3B,    //2074
                    0x0A,0xd5,0x4f,    //2075
                    0x05,0x5A,0x45,    //2076
                    0x4A,0x5d,0x38,    //2077
                    0x0A,0x5B,0x4C,    //2078
                    0x05,0x2B,0x42,    //2079
                    0x3A,0x93,0xB6,    //2080
                    0x06,0x93,0x49,    //2081
                    0x77,0x29,0xBd,    //2082
                    0x06,0xAA,0x51,    //2083
                    0x0A,0xd5,0x46,    //2084
                    0x54,0xdA,0xBA,    //2085
                    0x04,0xB6,0x4e,    //2086
                    0x0A,0x57,0x43,    //2087
                    0x45,0x27,0x38,    //2088
                    0x0d,0x26,0x4A,    //2089
                    0x8e,0x93,0x3e,    //2090
                    0x0d,0x52,0x52,    //2091
                    0x0d,0xAA,0x47,    //2092
                    0x66,0xB5,0x3B,    //2093
                    0x05,0x6d,0x4f,    //2094
                    0x04,0xAe,0x45,    //2095
                    0x4A,0x4e,0xB9,    //2096
                    0x0A,0x4d,0x4C,    //2097
                    0x0d,0x15,0x41,    //2098
                    0x2d,0x92,0xB5,    //2099
};
///月份数据表
code uchar date_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
code uint date_code2[3]={0x111,0x130,0x14e};

bit c_moon;
data uchar year_moon,month_moon,date_moon,week;

bit get_moon_date(uchar month_p,uint table_addr)
{
uchar temp;
    switch (month_p){
        case 1:{temp=year_code[table_addr]&0x08;
             if (temp==0)return(0);else return(1);}
        case 2:{temp=year_code[table_addr]&0x04;
             if (temp==0)return(0);else return(1);}
        case 3:{temp=year_code[table_addr]&0x02;
             if (temp==0)return(0);else return(1);}
        case 4:{temp=year_code[table_addr]&0x01;
             if (temp==0)return(0);else return(1);}
        case 5:{temp=year_code[table_addr+1]&0x80;
             if (temp==0) return(0);else return(1);}
        case 6:{temp=year_code[table_addr+1]&0x40;
             if (temp==0)return(0);else return(1);}
        case 7:{temp=year_code[table_addr+1]&0x20;
             if (temp==0)return(0);else return(1);}
        case 8:{temp=year_code[table_addr+1]&0x10;
             if (temp==0)return(0);else return(1);}
        case 9:{temp=year_code[table_addr+1]&0x08;
             if (temp==0)return(0);else return(1);}
        case 10:{temp=year_code[table_addr+1]&0x04;
             if (temp==0)return(0);else return(1);}
        case 11:{temp=year_code[table_addr+1]&0x02;
             if (temp==0)return(0);else return(1);}
        case 12:{temp=year_code[table_addr+1]&0x01;
             if (temp==0)return(0);else return(1);}
        case 13:{temp=year_code[table_addr+2]&0x80;
             if (temp==0)return(0);else return(1);}
    }
}

void Conversion(bit c,uchar year,uchar month,uchar date)           //
{
    uchar temp1,temp2,temp3,month_p;
    uint temp4,table_addr;
    bit flag2,flag_y;
    temp1=year/16;   //BCD->hex 先把数据转换为十六进制
    temp2=year%16;
    year=temp1*10+temp2;
    temp1=month/16;
    temp2=month%16;
    month=temp1*10+temp2;
    temp1=date/16;
    temp2=date%16;
    date=temp1*10+temp2;
    //定位数据表地址
    if(c==0){                  
        table_addr=(year+0x64-1)*0x3;
    }
    else {
        table_addr=(year-1)*0x3;
    }

    temp1=year_code[table_addr+2]&0x60;
    temp1=_cror_(temp1,5);

    temp2=year_code[table_addr+2]&0x1f;

    if(temp1==0x1){  
        temp3=temp2-1;  
    }  
    else{
        temp3=temp2+0x1f-1;        
    }

    if (month<10){
        temp4=date_code1[month-1]+date-1;
    }
    else{
        temp4=date_code2[month-10]+date-1;
    }
    if ((month>0x2)&&(year%0x4==0)){  //如果公历月大于2月并且该年的2月为闰月,天数加1
        temp4+=1;
    }

    if (temp4>=temp3){ //公历日在春节后或就是春节当日使用下面代码进行运算
        temp4-=temp3;
        month=0x1;
        month_p=0x1;  //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
        flag2=get_moon_date(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
        flag_y=0;
        if(flag2==0)temp1=0x1d; //小月29天
        else temp1=0x1e; //大小30天
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);  //从数据表中取该年的闰月月份,如为0则该年无闰月
        while(temp4>=temp1){
            temp4-=temp1;
            month_p+=1;
            if(month==temp2){
            flag_y=~flag_y;
            if(flag_y==0)month+=1;
            }
            else month+=1;
            flag2=get_moon_date(month_p,table_addr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
        }
        date=temp4+1;
    }
    else{  //公历日在春节前使用下面代码进行运算
        temp3-=temp4;
        if (year==0x0){year=0x63;c=1;}
        else year-=1;
        table_addr-=0x3;
        month=0xc;
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);
        if (temp2==0)month_p=0xc;
        else month_p=0xd; //

        flag_y=0;
        flag2=get_moon_date(month_p,table_addr);
        if(flag2==0)temp1=0x1d;
        else temp1=0x1e;
        while(temp3>temp1){
            temp3-=temp1;
            month_p-=1;
            if(flag_y==0)month-=1;
            if(month==temp2)flag_y=~flag_y;
            flag2=get_moon_date(month_p,table_addr);
            if(flag2==0)temp1=0x1d;
            else temp1=0x1e;
         }
        date=temp1-temp3+1;
    }
    c_moon=c;                 //HEX->BCD ,运算结束后,把数据转换为BCD数据
    temp1=year/10;
    temp1=_crol_(temp1,4);
    temp2=year%10;
    year_moon=temp1|temp2;
    temp1=month/10;
    temp1=_crol_(temp1,4);
    temp2=month%10;
    month_moon=temp1|temp2;
    temp1=date/10;
    temp1=_crol_(temp1,4);
    temp2=date%10;
    date_moon=temp1|temp2;
}

void nl()                                               //
{
        unsigned char   yy1,yy2;
        if(cen==0x19)  {cen_m=1;}
        if(cen==0x20)  {cen_m=0;}
        Conversion(cen_m,year,month,date);
        lcm_w_test(0,0x85);
        lcm_w_test(1,month_moon/16+'0');
        lcm_w_test(1,month_moon%16+'0');
        lcm_w_test(1,'-');
        lcm_w_test(1,date_moon/16+'0');
        lcm_w_test(1,date_moon%16+'0');
        yy1=(year_moon/16)*10+year_moon%16;
        yy2=yy1%12;
        switch(yy2)
        {
          case 0: lcm_w_test(0,0x83);lcm_w_word("龙");
                  break;
          case 1: lcm_w_test(0,0x83);lcm_w_word("蛇");
                  break;
          case 2: lcm_w_test(0,0x83);lcm_w_word("马");
                  break;
          case 3: lcm_w_test(0,0x83);lcm_w_word("羊");
                  break;
          case 4: lcm_w_test(0,0x83);lcm_w_word("猴");
                  break;
          case 5: lcm_w_test(0,0x83);lcm_w_word("鸡");
                  break;
          case 6: lcm_w_test(0,0x83);lcm_w_word("狗");
                  break;
          case 7: lcm_w_test(0,0x83);lcm_w_word("猪");
                  break;
          case 8: lcm_w_test(0,0x83);lcm_w_word("鼠");
                  break;
          case 9: lcm_w_test(0,0x83);lcm_w_word("牛");
                  break;
          case 10: lcm_w_test(0,0x83);lcm_w_word("虎");
                  break;
          case 11: lcm_w_test(0,0x83);lcm_w_word("兔");
                  break;
        }
}

/*主程序---------------------------------------------------------------------*/
main()
{
        uchar e=0,r=0,t=0;
        K1=1;K2=1;K3=1;K4=1;                //
        rt=0;
        rr=0;
        InitialSound();                      //初始音乐
        beep=1;
        LCM_BLA=1;                          //背光灯开
        bt=1;
        ds_int();                         //初始化DS12CR887
        lcm_init();                       //初始化液晶显示器
        lcm_clr();                       //清屏
        welcome();                       //显示欢迎信息
        DelayM(3000);                     //显示停留3秒
        lcm_clr();
        welcome2();
//        Play(Music_happy,0,3,300);           //
        beep=1;                          //
        DelayM(421);
        lcm_clr();                        //
        Disp_Img(GN);               //调入一幅图画
        DelayM(4210);
        lcm_clr();                    //清屏
        while(1)                         //
        {
                if (w == 0 && r ==0 )        //正常走时
                {   
                        lcm_w_year();   //显示年
                        lcm_w_month();        //显示月
                        lcm_w_date();        //显示日
                        lcm_w_day();        //显示星期
                        lcm_w_hour();        //显示时
                        lcm_w_min();        //显示分
                        lcm_w_sec();        //显示秒
                        days();          //
                        BLA_delay();     //
                        ring();         //
                        if(hour==0x6 && min==0x30 && sec==0x0) {lcm_clr();Disp_Img(GM);DelayM(4210);lcm_clr();}  //
                        if(hour==0x0 && min==0x0 && sec==0x0)  {lcm_clr();Disp_Img(GN);DelayM(4210);lcm_clr();}  //
                }
                else {;}//否则启动调时或调铃
       
                if (K1 == 0) // 设置时间
            {
                    DelayM(20);           //按键消抖
                        if(K1 == 0 && w == 1 && r ==0)  //当是调时状态 本键用于调整下一项
                        {
                                e++;
                                if (e >= 7 )
                                {
                                        e = 0;  
                                }
                                Set_time(e);//调整                               
                        }                       
                        if(K1 == 0 && w == 0 && r ==0)  //当是正常状态时就进入调时状态
                        {
                                lcm_clr();//清屏
                                w=1;          //进入调时                               
                                Set_time(e);//调整
                        }
                        if(K1 == 0 && w == 0 && r ==1)  //当是正常状态时就进入调时状态
                        {
                                w = 0;//清屏
                                e = 0;                               
                                r = 0;
                                t = 0;
                                lcm_clr();
                        }
                       while(K1 == 0);//等待键松开
                }
       
                if (K2 == 0) // 当在调时状态时就退出调时
            {
                        DelayM(20);//按键消抖
                        if(K2 == 0 && w == 0 && r ==1)
                        {                               
                                t++;
                                if (t >= 8 )
                                {
                                        t = 0;  
                                }
                Set_ring(t);
                        }
                        if(K2 == 0 && w == 0 && r ==0)
                        {                               
                                lcm_clr();//清屏
                                r=1;          //进入调时                               
                                Set_ring(t);//调整                                                                       
                        }
                        if(K2 == 0 && w == 1 && r ==0)
                        {                               
                                w = 0;          //退出调时
                                e = 0;                //"下一项"计数器清0
                                r = 0;
                                t = 0;
                                lcm_clr();
                                lcm_w_year();   //显示年
                                lcm_w_month();        //显示月
                                lcm_w_date();        //显示日
                                lcm_w_day();        //显示星期
                                lcm_w_hour();        //显示时
                                lcm_w_min();        //显示分
                                lcm_w_sec();        //显示秒
                                BLA_delay();
                        }
                        while(K2 == 0);//等待键松开  
                }
       
                if (K3 == 0)//加调整
                {
                           DelayM(20);//按键消抖
                           if(K3 == 0 && w == 1 && r ==0)
                        {                               
                                Set_time(e);//调整
                        }
                           if(K3 == 0 && w == 0 && r ==1)
                        {                               
                                Set_ring(t);//调整
                        }
                           while(K3 == 0);//等待键松开
                }
       
                if (K4 == 0) //减调整
                {              
                           DelayM(20);//按键消抖
                           if(K4 == 0 && w == 1 && r ==0)
                        {                               
                                Set_time(e);//调整
                        }
                           if(K4 == 0 && w == 0 && r ==1)
                        {                               
                                Set_ring(t);//调整
                        }
                           while(K4 == 0);//等待键松开
                }
        }       
}
//调试
//走时,设时,温度,背光,光灯自动熄灭,闹铃设置,闹铃,生日提醒
//还差农历,生日歌
//全部完成
发表于 2012-6-18 13:53:30 | 显示全部楼层
本帖最后由 颜靖峰 于 2012-6-18 13:56 编辑

如果可以请和我联系
QQ402067010
发表于 2012-6-20 19:45:39 | 显示全部楼层
好资料啊,手上刚好有零件,有空也搞个玩下,谢谢分享呀!
发表于 2012-6-21 14:45:27 | 显示全部楼层
嗯  不错  改天有空我也仿制一个
发表于 2012-6-21 21:03:30 | 显示全部楼层
不错啊,看看能不能下载哟
发表于 2012-6-28 23:52:23 | 显示全部楼层
做的挺好的,学习了
发表于 2012-6-30 13:25:25 | 显示全部楼层
不错,mark
发表于 2012-7-5 20:07:08 | 显示全部楼层
大哥呀,我多的就不说了!!!!!!!!!!
发表于 2012-7-5 20:07:39 | 显示全部楼层
下了呀,好资料,先顶一下!!!!!!!
发表于 2012-7-5 21:26:19 | 显示全部楼层
好东西,支持一下
发表于 2012-7-9 22:44:40 | 显示全部楼层
楼主问问呀,我看你程序中用了1s的中断,然后你在1s中断中只是读了相应时间寄存器的值,并没有读C寄存器的值,清除标志位,你是怎么清除标志位的,是不是我理解错了,知道的朋友麻烦说说,不是只有复位和读C寄存器才能请标志位吗
发表于 2012-7-18 19:37:11 | 显示全部楼层
发表于 2012-7-18 19:53:47 | 显示全部楼层
这个挺猛哪,哥们搞这个用子久时间呢
发表于 2012-7-19 08:45:15 | 显示全部楼层
fwluck 发表于 2012-4-5 13:06
喇叭加个盒子音会有很大不同。扣在盒子上都管用。

其实加一个LPF效果一样
发表于 2012-7-19 11:32:43 | 显示全部楼层
标记。谢谢分享
发表于 2012-7-19 19:33:36 | 显示全部楼层
整的不错啊,只是我已经很久没焊东西了,现在又有点手痒了
发表于 2012-7-20 20:38:23 | 显示全部楼层
不错,多谢了,朋友!
发表于 2012-7-21 10:01:27 | 显示全部楼层
好,自己DIY一个
发表于 2012-7-24 09:25:37 | 显示全部楼层
好很好   不过我希望把它修改下  在主界面上显示指针时钟
发表于 2012-7-24 11:13:16 | 显示全部楼层
不知道情况怎么样 收藏了 再说
发表于 2012-7-24 16:46:07 | 显示全部楼层
good,mark~
发表于 2012-7-26 19:41:19 | 显示全部楼层
不错、、
发表于 2012-7-26 19:48:20 | 显示全部楼层
呵呵,,,加上去的东西好多啊
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-10-21 01:57

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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