STC89C516RD+DS12C887+DS18B20+TEA5767+TDA2822M+LCD12864多功能电子闹钟!
首先声明一下,这是根据某个坛友曾经上传的多功能电子闹钟的帖子,来仿制的。本人并没有那么强大,目前也只能仿制别人的。在此,感谢那位坛友和那位写出这么强大的程序的那个高人。(那位坛友也记不清了,呵呵)。我把里面的端口改了一下,其余的都没有改动。我把源程序,原理图等都一并上传出来,让有兴趣的朋友也可以仿制一下,体会其中的无穷乐趣。实际制作时,提供的那个原理图可以适当的修改下,有些是没有用的,有些是没有必要的。根据实际情况适当修改。该多功能闹钟具有:FM收音机(可选择自动搜台并保存功能,可存储20个电台频率。也可选择手动搜索并保存功能)红外遥控,红外测码,温度,多闹钟设置,时间调整,农历,节日提醒等功能。功能界面很多,图片就不一一上传了。
1
2
3
4
5
6
7
8
9
10
11
源程序,电路图等 不错啊,谢谢分享 下载了,多谢!
留个足迹; 好像没法下载,前两天还想着买个有这些功能的闹钟那! 这个可以有,不知道老陈vdf能不能调光,做个闹钟也不错 谢谢楼主,下来学习一下。 收藏一下先,怎么你们都能下载,我怎么下不了?? 很好的 多多学习!!!!!!!!!!!!! 谢谢楼主 不过我下了半天也没下来。。{:cry:} 喇叭加个盒子音会有很大不同。扣在盒子上都管用。 下载一个吧,自己做个万年历用下 下不动啊,半天不出下载页 你右击,使用迅雷下载试试看。
不错啊,谢谢分享 下载不下来啊 {:loveliness:}不錯不錯 非常感谢,收藏! 下载不下来啊 {:biggrin:}{:biggrin:} 我也仿制了一个!但汉字的一到十显示乱码!楼主有没呀? 很好的东西 挺好的1顶一个! 你好,20楼的。“我也仿制了一个!但汉字的一到十显示乱码!楼主有没呀?”
这说明你的keil有问题。很有可能是没有“汉字补丁”所致。 DS12c887时钟芯片非常准,比DS1302好多了。 不错不错
做的很漂亮···{:biggrin:} 做的挺好的,标记下! 收集一下 mark一下!! 感觉升级到新论坛后
好多附件都不能下载了
不知道是怎么回事啊
但是下载AMO的附件还是很正常的
就是,很慢,是服务器的原因还是带宽不够? 谢谢楼主,,,本人正{:3_42:}需要 太感谢了,我正在玩这个,下来学习。 谢谢了兄弟 觉得对于开始了解51的人可以起到入门的好处 程序是汇编语言吗? 好东西,支持一下
感觉升级到新论坛后
好多附件都不能下载了
不知道是怎么回事啊
{:smile:}Mark 太强大了,向楼主学习 楼主,有个问题,TEA5767的自动搜台功能能用,为什么我单独调TEA5767只能手动搜台,而不能自动搜台,还有就是加入EEPROM功能,在下次上电时直接读当前状态 支持 强力支持 不错哈!!!!!!!!!!!! 谢谢楼主,下载了! 太强大了,收音机既然还能有信号强度显示,牛。 先顶上!!! 好资料,学习一下。 不错,下载看看 好东西,顶一下 太好,太强大了,留着备用,慢慢学! 好啊{:lol:}{:lol:}{:lol:} {:lol:} 程序排版我看着很纠结。。决定学下其中的思想。。精品啊。 mark{:smile:} 谢谢分享! 很强大呀。 收集一下资料,接下来我也做一个。{:biggrin:} mark一下!! 精华帖!!mark!! 顶一下! 谢谢分享{:lol:} 学习下,模仿下 记号 留着有用 谢谢楼主
多谢楼主,很棒的设计啊 行吧,我实话实说,我服了 确实漂亮。。 好资料啊,手上刚好有零件,有空也搞个玩下,谢谢分享呀! DIY,顶一个 mark
我来顶一个 偶也想仿个,LZ的宝贝收下了 论坛还是能人多啊
但是我可以下载啊,10秒钟都不到。 有时间也做个试试 thank you share{:smile:}{:smile:} 好 不错,谢谢分享 mark,放假准备学单片机,嘿嘿。 这里真是高手云集!!学习了 能不能和这个接着一起
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#ifndef __SOUNDPLAY_H_REVISION_FIRST__ //音乐相关
#define __SOUNDPLAY_H_REVISION_FIRST__ //音乐相关
#define uintunsigned 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 = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表
unsigned char code SignTab = { 0,2,4,5,7,9,11 }; //1~7在频率表中的位置
unsigned char code LengthTab= { 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; //新的频率表
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 = FreTab*2;
}
else
NewFreTab = FreTab;
if(Octachord == 1)
NewFreTab>>=2;
else if(Octachord == 3)
NewFreTab<<=2;
}
SoundLength = 0;
while(Sound != 0x00) //计算歌曲长度
{
SoundLength+=2;
}
Point = 0;
Tone = Sound;
Length = Sound; // 读出第一个音符和它时时值
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+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; //算出是几分音符
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;
Length=Sound;
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);
write_data(img);
}
}
// 图片公鸡
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); //分钟与小时之间显示":"
}
//往液晶屏填写 秒 数据
voidlcm_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();
}
voidring(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={
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={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
code uint date_code2={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&0x08;
if (temp==0)return(0);else return(1);}
case 2:{temp=year_code&0x04;
if (temp==0)return(0);else return(1);}
case 3:{temp=year_code&0x02;
if (temp==0)return(0);else return(1);}
case 4:{temp=year_code&0x01;
if (temp==0)return(0);else return(1);}
case 5:{temp=year_code&0x80;
if (temp==0) return(0);else return(1);}
case 6:{temp=year_code&0x40;
if (temp==0)return(0);else return(1);}
case 7:{temp=year_code&0x20;
if (temp==0)return(0);else return(1);}
case 8:{temp=year_code&0x10;
if (temp==0)return(0);else return(1);}
case 9:{temp=year_code&0x08;
if (temp==0)return(0);else return(1);}
case 10:{temp=year_code&0x04;
if (temp==0)return(0);else return(1);}
case 11:{temp=year_code&0x02;
if (temp==0)return(0);else return(1);}
case 12:{temp=year_code&0x01;
if (temp==0)return(0);else return(1);}
case 13:{temp=year_code&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&0x60;
temp1=_cror_(temp1,5);
temp2=year_code&0x1f;
if(temp1==0x1){
temp3=temp2-1;
}
else{
temp3=temp2+0x1f-1;
}
if (month<10){
temp4=date_code1+date-1;
}
else{
temp4=date_code2+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&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&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:56 编辑
如果可以请和我联系
QQ402067010 好资料啊,手上刚好有零件,有空也搞个玩下,谢谢分享呀! 嗯不错改天有空我也仿制一个 不错啊,看看能不能下载哟 做的挺好的,学习了
{:smile:} 不错,mark 大哥呀,我多的就不说了!!!!!!!!!! 下了呀,好资料,先顶一下!!!!!!! 好东西,支持一下
楼主问问呀,我看你程序中用了1s的中断,然后你在1s中断中只是读了相应时间寄存器的值,并没有读C寄存器的值,清除标志位,你是怎么清除标志位的,是不是我理解错了,知道的朋友麻烦说说,不是只有复位和读C寄存器才能请标志位吗 http://www.amobbs.com/forum.php?mod=viewthread&tid=5161656&highlight=887是这位 这个挺猛哪,哥们搞这个用子久时间呢 fwluck 发表于 2012-4-5 13:06 static/image/common/back.gif
喇叭加个盒子音会有很大不同。扣在盒子上都管用。
其实加一个LPF效果一样 标记。谢谢分享 整的不错啊,只是我已经很久没焊东西了,现在又有点手痒了 不错,{:victory:}多谢了,朋友! 好,自己DIY一个 好很好 不过我希望把它修改下在主界面上显示指针时钟 不知道情况怎么样 收藏了 再说 good,mark~ 不错、、 呵呵,,,加上去的东西好多啊
页:
[1]
2