51单片机实现的音乐闹钟程序代码
C51单片机实现电子闹钟

课程名称:单片机原理与接口技术实践设计课题:基于MCS 51单片机实现电子闹钟功能的设计学院:电子与信息工程学院专业:通信工程小组成员:电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。
本文给出了一种基于MCS51单片机实现电子闹钟功能的设计方法,从而给人们带来更为方便的工作与生活。
一.电子闹钟简介我们设计的电子闹钟是以MCS51单片机中的计时器作为时钟,用8位数码管显示当前时间,并且可以设置闹钟时间,并在设置的时间点发出闹铃。
简易闹钟具有以下功能:1.时钟能准确地走时,并可以通过数码管进行显示2.复位后可以进行当前时间的设置3.可以随意设置闹钟时间,闹钟会在设置时间响铃整个系统的任务要求:1)输入数字按键的功能。
保证数字的输入。
2)复位电路的功能。
所有时间回到初始化状态,用于启动设定时间参数(调时或设定闹钟时间);3)显示电路的功能。
当输入数字时显示24小时时间功能。
4)闹铃功能设置闹铃的时间后.能按设置好的时间准时闹铃。
二.系统方案的设计要求根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89C51为内核显示设计方案。
先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统。
整个系统的设计步骤如下:在单片机最小系统的基础上,完成按键电路和复位电路的设计。
完成显示电路、数字按键、单片机时钟电路。
Ⅰ硬件设计系统硬件的设计可以根据系统的各个功能,把整个系统划分成若干个模块,分别对这些模块来进行设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。
本系统涉及到的硬件模块有:按键电路、数码管显示电路、单片机时钟电路、蜂鸣器电路。
各部分实现功能如下:按键电路:提供按键信号。
单片机时钟电路、复位电路:提供内部时钟。
基于51单片机电子时钟程序

// 本程序实现功能:显示小时和分钟,并以最后一位的小数点闪烁一次表示一秒。
按下INT0键后显示日期。
并在所设定的时间蜂铃器响5次以此为闹钟;// 第二:按下INT1键后,可对时间,日期,闹钟进行设置,再次按下INT1推出设置//// 显示说明:前两位显示小时和月份,后两位显示分钟和日期//#include <reg52.h>/*==========================================宏定义uchar和uint===========================================*/#define uchar unsigned char#define uint unsigned intsbit alarm=P1^4;/*==============================================变量的定义==============================================*/int year=2010;/*初始年份为2010年*/uchar alarm_hour=0,alarm_min=0; /*初始闹钟时间为00:00*/uchar qian=0,bai=0,shi=0,ge=0,key_flag=0,Key=0,num=0,Flag=0; /*定义输出函数变量和按键号*/uchar x,dis_flag=0; /*显示变换标志位*/uchar Key_control=0; /*按键被按下的标志位*/uchar mounth=7,day=25; /*初始日期设为7月25号*/uchar hour=0,t=0,min=0,sec=0,ring=0;/*初始时间为00:00:00*//*=============================================子函数的定义=============================================*/void Init(); /*此函数用于初始化所有需要使用的中断*/void delay(uint z); /*用于数码管显示*/uchar Key_num(void); /*此函数为确定按下的按键输出编号*/void Led_display();void display(uchar cc, uchar dd); /*显示时间的函数,中间的点表示:*/void display_nian(uchar cc, uchar dd); /*显示年份的显示函数,即没有中间的点*/void display_date(uchar cc, uchar dd); /*显示日期的函数,即四个小数点全亮*/void display_alarm(uchar cc, uchar dd); /*显示闹钟的函数,第二个和第四个点*/void Leap_Nonleap(int aa); /*判断是闰年还是平年,并将二月的最大天数赋给Mounth_array[1]*/void Judge_Setting(uchar Key_set); /*所得出的按键号进行对应的设置*//*==========================================所使用数组的定义============================================*/uchar Mounth_array[12]={31,29,31,30,31,30,31,31,30,31,30,31}; /*每个月的最大天数数组*/uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,/*数码管显示编码*/};uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*百位及其小数点的段码*//*==============================================主函数部分==============================================*/void main(){Init();while(1){Leap_Nonleap(year); /*进入大循环后首先对年份进行判断*/while(Key_control)/*当P3.3被按下后Key_control=1进入函数进行设置,直到第二次Key_control=0推出循环*/{Flag=Key_num(); /*将按键函数里面是否有按键被按下的标志位赋给Flag*/if(Flag) /*当有按键被按下时,进入设置函数*/{Judge_Setting(num); /*将num值传入函数,并进行设置*/}Led_display(); /*保证在设置的循环时有显示*/}Led_display();/*循环式动态显示*/}}/*===========================================系统初始化函数=============================================*/void Init() /*初始化系统,启动计时器0,1,外部中断0,1*/{TMOD=0x01; /*将计时器0定位工作方式1,将计时器1定为工作方式2*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TR0=1;// ET1=1;// TR1=1;IE0=1;EX0=1; /*使用外部中断0和1,分别作为显示变换,设置的前戏*/IT0=1;/*为下降沿突发*/IE1=1;EX1=1;IT1=1;/*为下降沿突发*/EA=1;}void Display_flag() interrupt 0 /*使用外部中断0,进行显示时间和日期的转换P3.2口切换显示*/{dis_flag++;if(dis_flag==4) /*当dis_flag=0时,输出时间,当dis_flag=1时,输出日期,当dis_flag=2时,输出闹钟*/dis_flag=0; /*当dis_flag=3时,输出年份。
51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)效果图:程序如下://51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*///此表为LED 的字模,共阴数码管0-9 -uchar code dispcode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制/*定义并初始化变量*/uchar seconde=0;//秒uchar minite=0;//分uchar hour=12; //时uchar shi=0;//闹铃功能uchar fen=0;uchar bjcs;//报警次数sbit P1_0=P1^0; //second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //hour调整定义sbit P1_5=P1^5; //整点报时sbit P1_3=P1^3; //闹铃功能,调整时间sbit P1_6=P1^6; //调整时sbit P1_7=P1^7; //调整分sbit P1_4=P1^4; //关闭闹铃/*函数声明*/void delay(uint k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //显示子程序void keyscan( ); //键盘扫描子程序/*xx子程序*/void delay (uint k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/*时间处理子程序*/void time_pro(void){if(seconde==60){seconde=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}/*显示子程序*/void display(void){if(P1_3==1){P2=0XFE; P0=dispcode[seconde%10];//秒个位delay(1);P2=0XFD;P0=dispcode[seconde/10];//秒十位delay(1);P2=0XFB;P0=dispcode[10];//间隔符-delay(1);P2=0XF7;P0=dispcode[minite%10];//分个位delay(1);P2=0XEF;P0=dispcode[minite/10];//分十位delay(1);P2=0XDF;P0=dispcode[10];//间隔符-delay(1);P2=0XBF;P0=dispcode[hour%10];//时个位delay(1);P2=0X7F;P0=dispcode[hour/10];//时十位delay(1);}}/*键盘扫描子程序*/void keyscan(void){if(P1_0==0)//秒位的调整{delay (30);if(P1_0==0){seconde++;if(seconde==60){seconde=0;}}delay(250);}if(P1_1==0)//分位的调整{delay(30);if(P1_1==0){minite++;if(minite==60){minite=0;}}delay(250);}if(P1_2==0)//时位的调整{delay(30);if(P1_2==0){hour++;if(hour==24){hour=0;}}delay(250);}}/*整点报警*/void zhengdian (void){if((seconde==0)&(minite==0))//整点报时{P1_5=0;delay(1000);P1_5=1;}}/*定时闹钟*/void dingshi(void){if(P1_3==0)//按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。
51单片机电子闹钟程序(亲自编写,可用)

学校电子钟,有闹钟功能,按键可调时间,可调打铃时间,打铃时间长短显示,每个模块有功能注释。
其中正常时间显示和闹钟时间显示可用一个开关来调整。
芯片选择STC89C52程序:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//定义显示段码uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};uchar codebbtime[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar clock[]={0,0,0,0};uchar clock1[]={12,30,0};uchar weikong[6];uchar bbduration=4;uchar lingtime=9;//学校打铃时间组uchar shangwu1[]={8,30};uchar shangwu2[]={10,0};uchar shangwu3[]={10,20};uchar shangwu4[]={11,50};uchar xiawu1[]={13,30};uchar xiawu2[]={15,00};uchar xiawu3[]={15,15};uchar xiawu4[]={16,45};//按键定义sbit mode=P1^7;sbit sec_clr=P1^0;sbit min_set_add=P1^3;sbit min_set_sub=P1^4;sbit hour_set_add=P1^1;sbit hour_set_sub=P1^2;sbit bb_set_add=P1^5;sbit bb_set_sub=P1^6;sbit speaker=P2^6;//延时函数void delay(unsigned int t){while(t--);//时钟进位函数void clockjinwei(){clock[0]++;if(clock[0]==20){clock[1]++;clock[0]=0;if(clock[1]==60){clock[2]++;clock[1]=0;if(clock[2]==60){clock[3]++;clock[2]=0;if(clock[3]==24)clock[3]=0;}}}}//定时器0中断服务函数void timer0(void) interrupt 1 using 1 {TMOD=0x01;TH0=0x3c;TL0=0xb0;clockjinwei();}//时钟分位显示函数void fenwei(){weikong[0]=clock[3]/10;weikong[1]=clock[3]%10;weikong[2]=clock[2]/10;weikong[3]=clock[2]%10;weikong[4]=clock[1]/10;weikong[5]=clock[1]%10;}//闹钟分位显示函数void naofen(){weikong[0]=clock1[0]/10;weikong[1]=clock1[0]%10;weikong[2]=clock1[1]/10;weikong[3]=clock1[1]%10;weikong[4]=clock1[2]/10;weikong[5]=clock1[2]%10; }//闹钟定时显示函数void naozhongdisplay(){uchar z,s;uchar x=0x01;naofen();for(z=0;z<6;z++){P2=0;P0=table[weikong[z]];P2=x;x=_crol_(x,1);for(s=0;s<255;s++);}}//时钟显示函数void display(){uchar i,j;uchar x=0x01;fenwei();for(i=0;i<6;i++){P2=0;P0=table[weikong[i]];P2=x;x=_crol_(x,1);for(j=0;j<255;j++);}}//总显示函数void zhongxian(){if(mode==1)delay(100);if(mode==1)display();if(mode==0)delay(100);if(mode==0)naozhongdisplay();}//按键处理程序void key_set(){zhongxian();P1=0xff;if(min_set_add==0){delay(100);if(min_set_add==0){if(mode==1){clock[2]++;if(clock[2]==60){clock[2]=0;}while(min_set_add==0)zhongxian();}}if(mode==0){clock1[1]++;if(clock1[1]==60){clock1[1]=0;}while(min_set_add==0)zhongxian();}}//if(min_set_sub==0){delay(100);if(min_set_sub==0){if(mode==1){clock[2]--;if(clock[2]==0)clock[2]=59;}while(min_set_sub==0)zhongxian();if(mode==0){clock1[1]--;if(clock1[1]==0)clock1[1]=59;}while(min_set_sub==0)zhongxian();}}//if(hour_set_add==0){delay(100);if(hour_set_add==0){if(mode==1){clock[3]++;if(clock[3]==24){clock[3]=0;}while(hour_set_add==0)zhongxian();}if(mode==0){clock1[0]++;if(clock1[0]==24){clock1[0]=0;}while(hour_set_add==0)zhongxian();}}}//if(hour_set_sub==0){delay(100);if(hour_set_sub==0){if(mode==1){clock[3]--;if(clock[3]==0)clock[3]=23;}while(hour_set_sub==0)zhongxian();if(mode==0){clock1[0]--;if(clock1[0]==0)clock1[0]=23;}while(hour_set_sub==0)zhongxian();}}//if(sec_clr==0){delay(100);if(sec_clr==0){clock[1]=0;}while(sec_clr==0)zhongxian();}}//闹钟响铃函数void bb(){if(clock[1]<=bbduration){speaker=1;delay(100);speaker=0;}else speaker=0;}//打铃函数void daling(){if(clock[1]<=lingtime){speaker=1;delay(100);speaker=0;}else speaker=0;}//时间比较函数void bijiao(){if(clock[3]==shangwu1[0]){if(clock[2]==shangwu1[1])daling();}if(clock[3]==shangwu2[0]){if(clock[2]==shangwu2[1])daling();}if(clock[3]==shangwu3[0]){if(clock[2]==shangwu3[1])daling();}if(clock[3]==shangwu4[0]){if(clock[2]==shangwu4[1])daling();}if(clock[3]==xiawu1[0]){if(clock[2]==xiawu1[1])daling();}if(clock[3]==xiawu2[0]){if(clock[2]==xiawu2[1])daling();}if(clock[3]==xiawu3[0]){if(clock[2]==xiawu3[1])daling();}if(clock[3]==xiawu4[0]){if(clock[2]==xiawu4[1])daling();}}//闹钟比较void naobijiao(){if(clock[3]==clock1[0]){if(clock[2]==clock1[1]||clock[2]==clock1[1]+1||clock[2]==clock1[1]+2) bb();}}//响铃时长显示函数void bbtimeshow(){P3=bbtime[bbduration];if(bbduration>15)bbduration=0;}//响铃按键处理函数void bbtime_set(){bbtimeshow();if(bb_set_add==0){delay(100);if(bb_set_add==0)bbduration++;while(bb_set_add==0)bbtimeshow();}if(bb_set_sub==0){delay(100);if(bb_set_sub==0)bbduration--;while(bb_set_sub==0)bbtimeshow();}}//主程序void main(){EA=1;ET0=1;TR0=1;while(1){key_set();bijiao();bbtime_set();naobijiao();}}电路图:分四部分显示:如果在学习这个程序过程中有什么问题,可以发邮件到******************询问。
C51单片机实现电子闹钟

课程名称:单片机原理与接口技术实践设计课题:基于MCS 51单片机实现电子闹钟功能的设计学院:电子与信息工程学院专业:通信工程小组成员:电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。
本文给出了一种基于MCS51单片机实现电子闹钟功能的设计方法,从而给人们带来更为方便的工作与生活。
一.电子闹钟简介我们设计的电子闹钟是以MCS 51单片机中的计时器作为时钟,用8位数码管显示当前时间,并且可以设置闹钟时间,并在设置的时间点发出闹铃。
简易闹钟具有以下功能:1.时钟能准确地走时,并可以通过数码管进行显示2.复位后可以进行当前时间的设置3.可以随意设置闹钟时间,闹钟会在设置时间响铃整个系统的任务要求:1)输入数字按键的功能。
保证数字的输入。
2)复位电路的功能。
所有时间回到初始化状态,用于启动设定时间参数(调时或设定闹钟时间);3)显示电路的功能。
当输入数字时显示24小时时间功能。
4)闹铃功能设置闹铃的时间后.能按设置好的时间准时闹铃。
二.系统方案的设计要求根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89C51为核显示设计方案。
先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统。
整个系统的设计步骤如下:在单片机最小系统的基础上,完成按键电路和复位电路的设计。
完成显示电路、数字按键、单片机时钟电路。
Ⅰ硬件设计系统硬件的设计可以根据系统的各个功能,把整个系统划分成若干个模块,分别对这些模块来进行设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。
本系统涉及到的硬件模块有:按键电路、数码管显示电路、单片机时钟电路、蜂鸣器电路。
各部分实现功能如下:按键电路:提供按键信号。
单片机时钟电路、复位电路:提供部时钟。
51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为yy.mm.dd时间和日期轮流显示。
时间显示5S 日期显示3S。
可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。
三个按键对时间和闹铃进行设置,六个LED进行显示。
计时采用DS1307。
继电时间不丢失,设置过的闹铃也不丢失。
闹铃音乐由单片机的两个定时器去产生频率实现。
部分程序如下://*************************************************//************************************************//***********************************************//程序名:DS1307 时钟程序//功能描述:用六个八段LED 轮流显示时间// 和日期。
有6个闹钟。
上电时从DS1307中读出// 当前时间、日期、闹钟。
//////////#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LED P2#define LEDBit P0#define nop _nop_()#define LightCount 40#define LightMax 80sbit SCL=P3^1;sbit SDA=P3^0;sbit ModeKey=P1^0;sbit UpKey=P1^1;sbit DownKey=P1^2;sbit Speak=P3^6;code ucharLCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//0x25,//uchar Clock[]={0x88,0x88,0x88};codeuint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4,/*童年*/8,4,8,4,4,4,4,4,16,4,4,8,4,4,4,4,4,8,4,4,4,8,4,4,4,4,4,4,16,4,4,8,4,4,4,4,4,8,4,4,4,8,4,4,4,4,4,4,16,4,8,4,8,4,4,4,8,8,4,4,4,4,4,4,4,4,4,4,4,16,4,8,4,8,8,4,8,4,4,4,8,4,8,4,4,4,4,4,16,4,8,4,8,8,4,8,4,4,4,8,4,8,4,4,4,4,4,16,0},Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4,/*小毛驴*/4,4,16,4,4,4,4,4,4 ,4,4,4,4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,16,4,4,4,4,2,2,2,2,4,4,4,4,4,4,16,0},Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637, 425,379,477,719,637,637,719,637,568,568, 506,568,568,568,637,477,477,477,477,568,477,568,637,719,637,637,719,637,568,568,506,568,568,568,637,477,477,477,477,568,568,477,851,318,318,318,318,379,425,477,477,568,477,568,477,425,425,425,425,425,477,379,425,425,379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637,425,379,477,379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637,425,379,477,0}, /*童年*/Music_Sound_Tone2[]={956,956,956,719,637,637,637,637,568,568, /*小毛驴*/568,477,637,716,716,716, 568,719,719,719,719,851,851,851,851,637,637,956,956,956,719,637,637,637,637,568,568,568,477,637,716,716,716,568,719,719,719,719,719,719,851,851,851,719,956,0};uchar DS1307[27]={0};//00 为秒,01为分,02为时//10 为日,11为月,12为年//20 为闹钟控制,21为分,22为时。
51单片机时钟代码(带秒表闹钟功能)

51单片机时钟代码(带秒表闹钟功能)#include#include#defineucharunignedchar#defineuintunignedintbitbeep=P1^5;//蜂鸣器bitLED1=P1"6;//LED灯bitep=P2"7;//1602使能端bitr=P2八6;//1602bitrw=P2八5;//1602bit0二P3八4;//停止闹铃和小灯bit1二P3八5;//功能键bit2二P3飞;//增大键bit3二P3X;//减小键bit4二P3「;//bit5=P3^2;bit6二P3八3;bit7=P3^0;uchar1num,4num,count,count1,judge=0;charec,min,hour,miao,fen,hi,ec1,min1,diwei;voiddelay(uintz){ uint某,y;for(某二z;某〉0;某--)for(y=100;y〉0;y—);}voiddi(){beep=0;delay(50);beep=1;}bitlcd_bz()//测试LCD忙碌状态{bitreult;r=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();reult=(bit)(P0&0某80);ep=0;returnreult;}_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidwrite_data(uchardat)//写入字符显示数据到LCD{while(lcd_bz());//等待LCD空闲r=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_( );_nop_();_nop_();_nop_();ep=0;}ucharhi,ge;hi=dat/10;ge=dat;write_data(0某30+hi);write_data(0某30+ge);}voidwrite_alarm(ucharadd,uchardat){ucharhi1,ge1;hi1=dat/10;ge1=dat;count=0;//clearwrite_data('A');delay(5);hi=17;voidkeycan()//按键扫描{if(l==0){delay(5);if(1==0){1num++;while(!1);di(); if(1num==1){TR0=0;if(1num==2){if(1num==3){if(1num==4){1num=0;if(1num!=0){if(2==0){delay(5);if(2==0){while(!2);di();if(1num==1){ec++;if(ec==60)ec=0;min++;if(min==60)min=0;if(1num==3){hour++;if(hour==24)hour=0;delay(5);if(3==0){while(!3);di();if(1num==1){ec--;if(ec<0)ec=59;if(1num==2){min--;if(min<0)min=59;hour--;if(hour<0)hour=23;}voidkeycan1(){if(4==0){delay(5);if(4==0){4num++;while(!4);di();if(4num==1){TR0=0;if(4num==3){if(4num==4){if(4num!=0){if(5==0){delay(5);if(5==0){while(!5);di();if(4num==1){miao++;if(miao==60)miao=0; write_alarm(10,miao);if(4num==2){fen++;if(fen==60)fen=0;if(4num==3){hi++;if(hi==24)hi=0;write_alarm(4,hi);if(6==0){delay(5);if(6==0){while(!6);di();if(4num==1){miao--;if(miao<0)miao=59;if(4num==2){fen--;if(fen<0)fen=59;write_alarm(7,fen);if(4num==3){hi--;if(hi<0)hi=23;}}if(7==0){delay(5);if(7==0){while(!7)di();judge++;}}if(judge==2){TL0=0某b0;TH0=0某3c; {ec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}}if(judge==3){judge=0;ec1=0;min1=0;diwei=0;write_alarm(10,miao);write_alarm(7,fen);write_alarm(4,hi);wr ite_alarm(10,miao);write_alarm(7,fen);write_alarm(4,hi);} if(count==20){count=0;ec++;if(ec==60){ec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}}。
基于单片机智能音乐闹钟源代码(完全免费)

基于单片机智能音乐闹钟源代码#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code font[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0 xbf}; //uchar code tab[]={0xc40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06, 0x0e};uint code note_value[][14]={{0,63628,63835,64021,64103,64260,64400,64524,63731,63928,0,64185,64331,64463}, //低音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值{0,64580,64684,64777,64820,64898,64968,65030,64633,64732,0,64860,64934,64994}, //中音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值{0,65058,65110,65157,65178,65217,65252,65283,65085,65134,0,65198,65235,65268}//高音1,2,3,4,5,6,7,#1,#2,0(#3在此程序中无需设),#4,#5,#6 相对应的定时器初值};uint code song[][67]={/* 0 嘀~(按键时的嘀嗒声)*/ {0x2701,0x0},/* 1 茉莉花*/ {0x1304,0x1302,0x1502,0x1602,0x2102,0x2102,0x1602,0x1504,0x1502,0x1602,0x1507,0x1001, /*0x1304,0x1302,0x1502,0x1602,0x2102,0x2102,0x1602,0x1504,0x1502,0x1602,0x1507,0x1001,* / 0x1504,0x1504,0x1504,0x1302,0x1502,0x1604,0x1604,0x1507,0x1001, 0x1304,0x1202,0x1302,0x1504,0x1302,0x1202,0x1104,0x1102,0x1202,0x1107,0x1001,0x1302,0x1202,0x1102,0x1302,0x1204,0x1002,0x1302,0x1504,0x1602,0x2102,0x1507,0x1001, 0x1202,0x1302,0x1502,0x1202,0x1302,0x1102,0x0602,0x0507,0x1001,0x0604,0x0602,0x1102,0 x1206,0x1302,0x1102,0x1202,0x1102,0x0602,0x050d,0x0},/* 2 莫斯科郊外的晚上*/{0x0602,0x1102,0x1302,0x1102,0x1204,0x1102,0x0702,0x1304,0x1204,0x0607,0x1001,0x1102,0x1302,0x1502,0x1502,0x1604,0x1502,0x1402,0x1307,0x1001,0x1414,0x1514,0x1702,0x1602,0x1304, 0x1002,0x0704,0x0602,0x1302,0x1202,0x1404, 0x1004,0x1502,0x1402,0x1304,0x1202,0x1102,0x1304,0x1204,0x060c, 0x0},/* 3 祝你生日快乐*/ {0x0502,0x0502,0x0604,0x0504,0x1104,0x0708,0x0502,0x0502,0x0604,0x0504,0x1204,0x 1108,0x0502,0x0502,0x1504,0x1304,0x1104,0x0704,0x0604,0x1402,0x1402,0x1304,0x1104,0x1 204,0x1108,0x0},/* 4 铃儿响叮当*/ {0x1302,0x1302,0x1303,0x1001, 0x1302,0x1303,0x1001, 0x1302,0x1502,0x1102,0x1202,0x1307,0x1001,0x1402,0x1402,0x1402,0x1402,0x1402,0x1302,0x1302,0x1302,0x1302,0x1202,0x1202,0x1302,0 x1204,0x1503,0x1001, 0x1302,0x1302,0x1303,0x1001, 0x1302,0x1303,0x1001, 0x1302,0x1502,0x1102,0x1202,0x1307,0x1001,0x1402,0x1402,0x1402,0x1402,0x1402,0x1302,0x1302,0x1302,0x1502,0x1502,0x1402,0x1202,0 x1108,0x0},/* 5 喀秋莎*/ {0x0606,0x0702,0x1106,0x0602,0x1102,0x1102,0x0702,0x0602,0x0704,0x1002,0x0706,0x1102,0x1206,0x0702,0x1202,0x1202,0x1102,0x0702,0x0607,0x1001,0x1304,0x1604,0x1504,0x1602,0x1502,0x1402,0x1402,0x1302,0x1202,0x1304,0x0604,0x1002,0x1404,0x1202,0x1306,0x1102,0x0702,0x0302,0x1102,0x0702,0x0608,0x0},/* 6 欢乐颂*/ {0x1304,0x1304,0x1404,0x1504,0x1504,0x1404,0x1304,0x1204,0x1104,0x1104,0x1204,0x 1304,0x1306,0x1202,0x1207,0x1001,0x1304,0x1304,0x1404,0x1504,0x1504,0x1404,0x1304,0x1204,0x1104,0x1104,0x1204,0x1304,0 x1206,0x1102,0x1107,0x1001, 0x0},/* 7 四季歌*/ {0x1304,0x1302,0x1202,0x1104,0x1102,0x0702,0x0604,0x0604,0x0607,0x1001,0x1404,0x1402,0x1302,0x1202,0x1102,0x1202,0x1402,0x130f,0x1001,0x1404,0x1402,0x1302,0x1204,0x1202,0x1402,0x1304,0x1302,0x1102,0x0604,0x0604,0x0704,0 x1304,0x1302,0x1102,0x0702,0x1102,0x060f,0x0},/* 8 月亮代表我的心*/ {0x150a,0x1302,0x1202,0x1102,0x130f,0x160a,0x1402,0x1202,0x1102,0x070c,0x1002,0x0502, 0x1106,0x1302,0x1506,0x1102,0x0706,0x1302,0x1504,0x1002,0x1502,0x1606,0x1702,0x2106,0 x1604,0x150a,0x1302,0x1202,0x1106,0x1102,0x1104,0x1302,0x1202,0x1106,0x1102,0x1104,0x 1202,0x1302,0x1206,0x1102,0x0606,0x1201,0x1301,0x120c,0x1002,0x0502,0x1106,0x1302,0x1 506,0x1102,0x0706,0x1302,0x1504,0x1002,0x1502,0x1606,0x1702,0x2106,0x1604,0x150a,0x13 02,0x1202,0x1106,0x1102,0x1104,0x1302,0x0},//0x1202,0x1106,0x1102,0x1104,0x1202,0x1302 ,0x1206,0x0602,0x0704,0x1102,011202,0x110c,0x1302,0x1502,0x1306,0x1202,0x1104,0x1504,0 x070c,0x0602,0x0702,0x0606,0x0702,0x0604,0x0504,0x130c,0x1504,0x1306,0x1202,0x1104,0x 1504,0x070c,0x0602,0x0702,0x1106,0x1102,0x1104,0x1202,0x1302,0x120c,0x1002,0x0502,0x1 106,0x1302,0x1506,0x1102,0x0706,0x1302,0x1504,0x1002,0x1502,0x1606,0x1702,0x2106,0x16 04,0x150a,0x1302,0x1202,0x1106,0x1102,0x1104,0x1302,0x1202,0x1106,0x1102,0x1104,0x120 2,0x1302,0x1206,0x0602,0x0704,0x1102,0x1202,0x1104,0x1502,0x1402,0x1304,0x1202,0x1102 ,0x1104,0x0702,0x0602,0x0518,0x050f,0x0},/* 9 献给爱丽丝*/ {0x2302,0x2212,0x2302,0x2212,0x2302,0x1702,0x2202,0x2102,0x1604,0x1002,0x1102,0x1302,0x1602,0x1704, 0x1002,0x1302,0x1512,0x1702,0x2104, 0x1002,0x1302,0x2302,0x2212,0x2302,0x2212,0x2302,0x1702,0x2202,0x2102,0x1604,0x1002,0x1102,0x1302,0x1602,0x1704, 0x1002,0x1202,0x2102,0x1702,0x1604, 0x1002,0x1702,0x2102,0x2202,0x2305,0x1001, 0x1502,0x2402,0x2302,0x2205,0x1001, 0x1402,0x2302,0x2202,0x2105,0x1001, 0x1302,0x2202,0x2102,0x1704, 0x1002,0x1302,0x2302,0x1002, 0x0},// 0x2212,0x2302, 0x1002,0x1002,0x2212,0x2302,0x2212,0x2302,0x2212,0x2302,0x1702,0x2202,0x2102,0x1604, 0x1002,0x1102,0x1302,0x1602,0x1704, 0x1002,0x1302,0x1512,0x1702,0x2104,0x1002,0x1302,0x2302,0x2212,0x2302,0x2212,0x2302,0x1702,0x2202,0x2102,0x1604,0x1002,0x1102,0x1302,0x1602,0x1704,0x1002,0x1202,0x2102,0x1702,0x1604,0x1004,0x0},/* 10 小星星,亮晶晶*/{0x1104,0x1104,0x1504,0x1504,0x1604,0x1604,0x1507,0x1001,0x1404,0x1404,0x1304,0x1304,0x1204,0x1204,0x1107,0x1001,0x1504,0x1504,0x1404,0x1404,0x1304,0x1304,0x1207,0x1001,0x1504,0x1504,0x1404,0x1404,0x1304,0x1304,0x1207,0x1001,0x1104,0x1104,0x1504,0x1504,0x1604,0x1604,0x1507,0x1001,0x1404,0x1404,0x1304,0x1304,0x1204,0x1204,0x1107,0x1001, 0x0},/* 11 Nokia经典铃声*/ {0x2502,0x2402,0x1604,0x1704,0x2302,0x2202,0x1404,0x1504,0x2202,0x2102,0x1304,0x1504, 0x210c,0x2502,0x2402,0x1604,0x1704,0x2302,0x2202,0x1404,0x1504,0x2202,0x2102,0x1304,0x1504,0 x210c,0x0}/* 12 两只老虎*/ {0x1104,0x1204,0x1304,0x1104,0x1104,0x1204,0x1304,0x1104,0x1304,0x1404,0x1508,0x 1304,0x1404,0x1508,0x1502,0x1602,0x1502,0x1402,0x1304,0x1104,0x1502,0x1602,0x1502,0x1 402,0x1304,0x1104,0x1304,0x0504,0x1108,0x1304,0x0504,0x1108,0x0}};sbit key_select=P1^0; //功能键sbit key_inc=P1^1; // 增大建sbit key_dec=P1^2; // 减小键&强行关闹钟和歌曲键sbit key_alarm_or_song=P1^3; //调闹钟键&点歌键sbit buzzer=P0^0;bit music_break=0;uchar week=1,hour=12,minute=0,second=0, alarm_num,display[]={1,2,0,0,0,0},n=0,bit_code=0xfb,alarm_break=1,flag_display=0,flag_a larm=0; //定义数组display[6]作为显示缓冲区,n为数组下标,flag_display用于设置时间或闹钟时的闪烁显示标志,flag_alarm用于闹钟键按下的标志uchardisplay_music[6]={0x10,0x10,0,0,0x10,0x10},display_alarm[6]={0,0,0,0,0,0},alarm[][3]={{12}, {12,1},{12,3},{12,5},{1},{2},{3},{4},{5},{6}},alarm_num=0,song_num=0;uint initial_value,count_display=0,count=0; //count_display用于设置时间或闹钟时的闪烁显示记时变量void delay_ms(uint t) //延时1ms{uint i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}void di() //按键发声函数{buzzer=0;delay_ms(100);buzzer=1;}void music(uchar song_number){uchar i,section,basic_note,changed_note,pitch,duration,note_num=0; //分别定义i,音区,基本音级,变化音级,音高,时值,所选歌曲的音符的编号uint note; //定义音符变量ET1=1;music_break=1;note=song[song_number][note_num];while(note!=0&&music_break){section=note/0x1000;basic_note=note/0x100%0x10;changed_note=note/0x10%0x10;duration=note%0x10;if(changed_note==1)pitch=basic_note+7;pitch=basic_note;initial_value=note_value[section][pitch];if(initial_value!=0){TH1=initial_value/256;TL1=initial_value%256;TR1=1;}elseTR1=0;if(key_alarm_or_song==0){delay_ms(10);if(key_alarm_or_song==0)break;}for(i=duration;i>0;i--) //音符延时函数delay_ms(125);note_num++;note=song[song_number][note_num];if(key_dec==0) //强行关闭闹钟{delay_ms(10);if(key_dec==0){while(!key_dec);break;}}}music_break=0;TR1=0;}void alarm_(){for(alarm_num=1;alarm_num<10;alarm_num++) //添加闹钟时需要修改的地方!!!!!!!!!!if(hour==alarm[alarm_num][0]&&minute==alarm[alarm_num][1]&&second==alarm[alarm_ num][2]){display_alarm[0]=alarm[alarm_num][0]/10;display_alarm[1]=alarm[alarm_num][0]%10;display_alarm[2]=alarm[alarm_num][1]/10;display_alarm[3]=alarm[alarm_num][1]%10;display_alarm[4]=0x10;display_alarm[5]=alarm_num;music(alarm_num);}}/*void alarm_ () //闹钟发声函数{if(hour==alarm[0]&&minute==alarm[1]&&second==alarm[2]){uint k;for(k=10;k>0;k--){buzzer=0;delay_ms(100);buzzer=1;}}}*/void scan_key() //按键扫描函数{bit flag_break=0; //flag_break作为跳出按键扫描循环程序的标志位if(key_select==0){delay_ms(10);if(key_select==0) // 确认功能键被按下{while(!key_select); //释放确认di();while(1) //时按键处理{flag_display=1;if(flag_break==1){alarm_num=0;break;}if(key_alarm_or_song==0){delay_ms(10);if(key_alarm_or_song==0){flag_alarm=1;if(flag_break==1){alarm_num=0;break;}alarm_num++;if(alarm_num==10) //添加闹钟时需要修改的地方!!!!!!!!!!alarm_num=1;display_alarm[0]=alarm[alarm_num][0]/10;display_alarm[1]=alarm[alarm_num][0]%10;display_alarm[2]=alarm[alarm_num][1]/10;display_alarm[3]=alarm[alarm_num][1]%10;display_alarm[4]=0x10;display_alarm[5]=alarm_num%10;while(!key_alarm_or_song);di();}}if(key_select==0){delay_ms(10);if(key_select==0) //确认功能键改时被按下{while(!key_select); //释放确认di();while(1) //分按键处理{flag_display=2;if(flag_break==1)break;if(key_select==0){delay_ms(10);if(key_select==0) //确认功能键改分被按下{while(!key_select); //释放确认di();while(1) //秒按键处理{flag_display=3;if(key_select==0){delay_ms(10);if(key_select==0)//确认功能键改秒被按下{while(!key_select);//此处等待按键释放非常重要!!!di();flag_alarm=0;flag_break=1;break;}}if(key_inc==0&&flag_alarm==0){delay_ms(10);if(key_inc==0){if(flag_alarm==0){second++;if(second==60)second=0;display[4]=second/10;display[5]=second%10;while(!key_inc);}else{alarm[alarm_num][2]++;if(alarm[alarm_num][2]==60)alarm[alarm_num][2]=0;display_alarm[4]=0x10;display_alarm[5]=alarm_num;while(!key_inc);}di();}}if(key_dec==0){delay_ms(10);if(key_dec==0){if(flag_alarm==0){second--;if(second==255)second=59;display[4]=second/10;display[5]=second%10;while(!key_dec);}else{alarm[alarm_num][2]--;if(alarm[alarm_num][2]==255)alarm[alarm_num][2]=59;display_alarm[4]=0x10;display_alarm[5]=alarm_num;while(!key_dec);}di();}}}}}if(key_inc==0){delay_ms(10);if(key_inc==0){if(flag_alarm==0){minute++;if(minute==60)minute=0;display[2]=minute/10;display[3]=minute%10;while(!key_inc);}else{alarm[alarm_num][1]++;if(alarm[alarm_num][1]==60)alarm[alarm_num][1]=0; display_alarm[2]=alarm[alarm_num][1]/10;display_alarm[3]=alarm[alarm_num][1]%10;while(!key_inc);}di();}}if(key_dec==0){delay_ms(10);if(key_dec==0){if(flag_alarm==0){minute--;if(minute==255)minute=59;display[2]=minute/10;display[3]=minute%10;while(!key_dec);}else{alarm[alarm_num][1]--;if(alarm[alarm_num][1]==255)alarm[alarm_num][1]=59; display_alarm[2]=alarm[alarm_num][1]/10;display_alarm[3]=alarm[alarm_num][1]%10;while(!key_dec);}di();}}}}}if(key_inc==0){delay_ms(10);if(key_inc==0){if(flag_alarm==0){hour++;if(hour==24)hour=0;display[0]=hour/10;display[1]=hour%10;while(!key_inc);}else{alarm[alarm_num][0]++;if(alarm[alarm_num][0]==24)alarm[alarm_num][0]=0;display_alarm[0]=alarm[alarm_num][0]/10;display_alarm[1]=alarm[alarm_num][0]%10;while(!key_inc);}di();}}if(key_dec==0){delay_ms(10);if(key_dec==0){if(flag_alarm==0){hour--;if(hour==255)hour=23;display[0]=hour/10;display[1]=hour%10;while(!key_dec);}else{alarm[alarm_num][0]--;if(alarm[alarm_num][0]==255)alarm[alarm_num][0]=23;display_alarm[0]=alarm[alarm_num][0]/10;display_alarm[1]=alarm[alarm_num][0]%10;while(!key_dec);}di();}}}}}flag_display=0;if(key_alarm_or_song==0){delay_ms(10);if(key_alarm_or_song==0){while(!key_alarm_or_song);song_num++;if(song_num==12)song_num=1; //添加歌曲时需要修改的地方!!!!!!!!!!display_music[2]=song_num/10;display_music[3]=song_num%10;music(song_num);}}}void main(){TMOD=0x11;EA=1;ET0=1;ET1=1;TH0=0xf6; //定时50ms 初值TL0=0x3c;TR0=1;PT1=1;PT0=0;while(1){ buzzer=1;alarm_num=0;scan_key();alarm_();}}void timer_0() interrupt 1{TH0=0xf6;TL0=0x3c;count++;if(count==400){count=0;second++;display[4]=second/10;display[5]=second%10;if(second==60){second=0;display[4]=second/10;display[5]=second%10;minute++;display[2]=minute/10;display[3]=minute%10;if(minute==60){minute=0;display[2]=minute/10;display[3]=minute%10;hour++;if(hour==24)hour=0;display[0]=hour/10;display[1]=hour%10;}}}if(flag_alarm==0){if(music_break==1&&alarm_num==0)P3=font[display_music[n]];else{if(music_break==1&&alarm_num!=0){if(n==1)P3=font[display_alarm[n]]&0x7f;elseP3=font[display_alarm[n]];}else{if(n==1||n==3)P3=font[display[n]]&0x7f;elseP3=font[display[n]];}}}elseif(n==1)P3=font[display_alarm[n]]&0x7f;elseP3=font[display_alarm[n]];n++;if(n==6)n=0;switch(flag_display) //调时、调闹钟闪烁部分{case 0: {P2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;} break;case 1: {count_display++;if(count_display<=200){P2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}if(count_display>200&&count_display<=400){if(count_display==400)count_display=0;if(bit_code==0xfb||bit_code==0xf7)P2=0xff;elseP2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}} break;case 2: {count_display++;if(count_display<=200){P2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}if(count_display>200&&count_display<=400){if(count_display==400)count_display=0;if(bit_code==0xef||bit_code==0xdf)P2=0xff;elseP2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}} break;case 3: {if(flag_alarm==0){count_display++;if(count_display<=200){P2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}if(count_display>200&&count_display<=400){if(count_display==400)count_display=0;if(bit_code==0xbf||bit_code==0x7f)P2=0xff;elseP2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}}else{P2=bit_code;bit_code=_crol_(bit_code,1);if(bit_code==0xfe)bit_code=0xfb;}} break;default : break;}}void timer_1() interrupt 3{TH1=initial_value/256;TL1=initial_value%256;buzzer=~buzzer;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd时间和日期轮流显示。
时间显示5S 日期显示3S。
可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。
三个按键对时间和闹铃进行设置,六个LED进行显示。
计时采用DS1307。
继电时间不丢失,设置过的闹铃也不丢失。
闹铃音乐由单片机的两个定时器去产生频率实现。
部分程序如下://*************************************************//************************************************//***********************************************//程序名:DS1307 时钟程序//功能描述:用六个八段LED 轮流显示时间// 和日期。
有6个闹钟。
上电时从DS1307中读出// 当前时间、日期、闹钟。
//////////#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LED P2#define LEDBit P0#define nop _nop_(>#define LightCount 40#define LightMax 80sbit SCL=P3^1。
sbit SDA=P3^0。
sbit ModeKey=P1^0。
sbit UpKey=P1^1。
sbit DownKey=P1^2。
sbit Speak=P3^6。
code ucharLCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。
//0x25,//uchar Clock[]={0x88,0x88,0x88}。
codeuint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4,/*童年*/8,4,8,4,4,4,4,4,16,4,4,8,4,4,4,4,4,8,4,4,4,8,4,4,4,4,4,4,16,4,4,8,4,4,4,4,4,8,4,4,4,8,4,4,4,4,4,4,16,4,8,4,8,4,4,4,8,8,4,4,4,4,4,4,4,4,4,4,4,16,4,8,4,8,8,4,8,4,4,4,8,4,8,4,4,4,4,4,16,4,8,4,8,8,4,8,4,4,4,8,4,8,4,4,4,4,4,16,0},Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4,/*小毛驴*/4,4,16,4,4,4,4,4,4 ,4,4,4,4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,16,4,4,4,4,2,2,2,2,4,4,4,4,4,4,16,0},Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568,637,477,477,477,477,568,477,568,637,719,637,637,719,637,568,568,506,568,568,568,637,477,477,477,477,568,568,477,851,318,318,318,318,379,425,477,477,568,477,568,477,425,425,425,425,425,477,379,425,425,379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637,425,379,477,379,379,379,379,425,477,477,477,425,477,568,637,637,637,568,637,425,379,477,0}, /*童年*/Music_Sound_Tone2[]={956,956,956,719,637,637,637,637,568,568, /*小毛驴*/568,477,637,716,716,716, 568,719,719,719,719,851,851,851,851,637,637,956,956,956,719,637,637,637,637,568,568,568,477,637,716,716,716,568,719,719,719,719,719,719,851,851,851,719,956,0}。
uchar DS1307[27]={0}。
//00 为秒,01为分,02为时//10 为日,11为月,12为年//20 为闹钟控制,21为分,22为时。
//30 为闹钟控制,31为分,32为时。
//40 为闹钟控制,41为分,42为时。
// 同上// 同上//闹钟控制十位为闹钟数//闹钟控制个位为选择闹钟声音程序//个位为零关闭闹钟uchar DisplayArr[8][3]={0}。
//*********************************void Beep(void>。
void DiplayClock(uchar *>。
//void UsuaDisPlay(uchar *>。
void Delay(uint Count>。
void DiplayDelay(void>。
void Start(void>。
void Stop(void>。
void ack(bit>。
bit cack(void>。
void Send8bit(unsigned char>。
// 高字节位先传字节最低位1为读,0为写unsigned char Read8bit(void>。
void SendWord(unsigned char,unsigned char>。
unsigned char ReadWord(unsigned char>。
void ReadDS1307(uchar>。
//**************************void ModeButten(void>。
void UpButten(void>。
void DownButten(void>。
//********************//函数名:INC//功能:加1函数void INC(void>。
unsigned char Inc(uchar>。
unsigned char Dec(uchar>。
void Ring(void>。
//*********************************uchar Mode=0。
//Mode=0 轻按UP、Down为查看时间、日期、闹钟//Mode=1uchar Read=0。
//Read==1为读DS1307uchar Juge=0。
//闪烁位数uchar DisplyMode。
uchar Light。
uchar Black。
uchar DisplayLoop。
uchar RingFlag。
uchar Sound_Long_Count。
uint Period。
/********************* 音乐频率中断 ******************************************/void Music_Tone(>interrupt 3 using 2{Speak=!Speak。
TL1=(65536-Period>&0xff。
TH1=(65536-Period>>>8。
TF1=0。
}/********************** 10ms中断变量 ***************************************/void Music_Long(>interrupt 1 using 3{if(Sound_Long_Count!=0>Sound_Long_Count--。
TL0=(65536-10000>&0xff。
TH0=(65536-10000>>>8。
TF0=0。
/* TL2=(65536-10000>&0xff。
TH2=(65536-10000>>>8。
TF2=0。
*/}//***********************************main(>{uchar i,j,Loop。
uchar RingMinBuffer。
uchar RingHouBuffer。
uchar RingMinBufferOld=0xff。
uchar RingTimeLong。
TMOD=0x11。
/*开定时器0,工作在方式3模式下*/// TH0=TL0=0x6。
/*置定时器初值*/TL0=(65536-10000>&0xff。
TH0=(65536-10000>>>8。
IE=0xca。
/*允许定时器中断*/// ET2=1。
//**************************************************88//**************************************************/*for(i=0。
i<6。
i++>{Stop(>。
Start(>。
Send8bit(0xD0>。
if(cack(>==1>continue。
Send8bit(0x08+i*0x03>。
if(cack(>==1>continue。
Send8bit(i*0x10+0x10>。
if(cack(>==1>continue。
Stop(>。
}*/ReadDS1307(26>。
for(DisplyMode=0。
DisplyMode<8。
DisplyMode++>{INC(>。
}DisplyMode=0。
ReadDS1307(26>。
for(i=0,Loop=0。
i<8。
i++>for(j=0。
j<3。
j++,Loop++>{if(Loop==3>Loop++。