之前花了40块钱买了个万年历的套件,用的是TG1508D5V2芯片,结果焊接好后发现按键无反应,被我折腾了好久,不仅按键没弄好,显示也有问题了,问了卖家也说不清楚,卖家又没有技术支持,然后就扔在那儿了,现在我已经学会了单片机,所以重新拿它出来自己改造,把万年历芯片换成了89C52单片机,自己写程序,然后自己还弄了首加沃特舞曲作为闹铃声,看下程序就自己会编了,照着谱子编。
原理图:
这个就是坏了的芯片,应该是坏了吧,换上了我们的89C52
PCB正面,左边那个位置就是放芯片的,我现在把芯片弄下来了,放了排针
反面,基本上电路都没有改动,只有4个led的线路改了下
单片机小板,89C52+1302,以及13个三极管 反面
接上飞线,不算很多飞线吧
4个按键,还是按原来的不变 组装好,用的是5v的开关电源,以前是变压器 不知道怎么倒过来了,哈哈 完成,下面听听我编的加沃特舞曲吧,可能大家不喜欢,天空之城比较好听,这个加沃特舞曲是我以前学小提琴的时候拉过的,所以就拿来编了 - #include
- #include
- #include "nongli.h"
- #define uchar unsigned char
- #define uint unsigned int
- unsigned int c;
- uchar code disdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc7,0xc1,0x86,0xc8,0x8e,0x89};// 无小数点数码管段码表(0~9,L,U,E,N,F,H)
- /****************************************************************************/
- sbit clock_clk = P1 ^ 0; //ds1302_clk(时钟线)//DS1302时钟接口
- sbit clock_dat = P1 ^ 1; //ds1302_dat(数据线)//DS1302时钟接口
- sbit clock_Rst = P1 ^ 2; //ds1302_Rst(复位线)//DS1302时钟接口
- sbit KEY =P1 ^ 3; //按键1,设置
- sbit KEY1 =P1 ^ 4; //按键2,上调
- sbit KEY2 =P1 ^ 5; //按键3,下调
- sbit KEY3 =P1 ^ 6; //按键4, 退出
- sbit voic =P1 ^ 7; //声音输出
- //sbit J1 =P3 ^ 5; //闹钟输出端
- sbit J2 =P3 ^ 6; //整点报时输出端
- sbit J3 =P3 ^ 7; //音乐播放输出端
- //正极端为P2接口和以下P3接口,负极端为P0接口
- sbit HH1 =P3 ^ 0; //设置LED点阵屏连接的I/O口
- sbit HH2 =P3 ^ 1; //设置LED点阵屏连接的I/O口
- sbit HH3 =P3 ^ 2; //设置LED点阵屏连接的I/O口
- sbit HH4 =P3 ^ 3; //设置LED点阵屏连接的I/O口
- sbit HH5 =P3 ^ 4; //设置LED点阵屏连接的I/O口
- //定义累加器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;
- //定义全局变量
- unsigned char yy,mo,dd,xq,hh,mm,ss,NZ_H,NZ_M,G,L;//定义时间映射全局变量(专用寄存器)
- unsigned char MENU;//菜单切换标志位
- unsigned char TIME_YY,TIME_MO,TIME_DD,TIME_HH,TIME_MM,TIME_SS;//设置年、月、日、时、分、秒存放区,用于调时
- //unsigned char AL1_HH,AL1_MM;//设置J时、分*
- //unsigned char AL2_HH,AL2_MM;//设置J时、分*
- unsigned char NZ_HH,NZ_MM;//设置NZ时、分*
- unsigned char GG;//闹钟开启关闭位
- unsigned char LL;//整点报时开启关闭位
- data unsigned char cou = 0; // 软计数器,对10ms时基信号累加到1s
- data unsigned char bn;//扫描映射全局变量
- data unsigned char DY_PWM;//显示亮度
- //以下是C调低音的音频宏定义
- #define L1 262 //将"L1"宏定义为低音"1"的频率262Hz 时间是1/262=3826/2 us 取半周期
- #define L2 286 //将"L2"宏定义为低音"2"的频率286Hz
- #define L3 311 //将"L3"宏定义为低音"3"的频率311Hz
- #define L4 349 //将"L4"宏定义为低音"4"的频率349Hz
- #define L5 392 //将"L5"宏定义为低音"5"的频率392Hz
- #define L6 440 //将"l_a"宏定义为低音"6"的频率440Hz
- #define L7 494 //将"L7"宏定义为低音"7"的频率494Hz
- //以下是C调中音的音频宏定义
- #define Z1 523 //将"Z1"宏定义为中音"1"的频率523Hz
- #define Z2 587 //将"Z2"宏定义为中音"2"的频率587Hz
- #define Z3 659 //将"Z3"宏定义为中音"3"的频率659Hz
- #define Z4 698 //将"Z4"宏定义为中音"4"的频率698Hz
- #define Z5 784 //将"Z5"宏定义为中音"5"的频率784Hz
- #define Z6 880 //将"Z6"宏定义为中音"6"的频率880Hz
- #define Z7 987 //将"Z7"宏定义为中音"7"的频率523H
- //以下是C调高音的音频宏定义
- #define H1 1046 //将"H1"宏定义为高音"1"的频率1046Hz
- #define H2 1174 //将"H2"宏定义为高音"2"的频率1174Hz
- #define H3 1318 //将"H3"宏定义为高音"3"的频率1318Hz
- #define H4 1396 //将"H4"宏定义为高音"4"的频率1396Hz
- #define H5 1567 //将"H5"宏定义为高音"5"的频率1567Hz
- #define H6 1760 //将"H6"宏定义为高音"6"的频率1760Hz
- #define H7 1975 //将"H7"宏定义为高音"7"的频率1975Hz
- #define O 0 //定义休止符
- //以下是《加沃特舞曲》简谱 //每行对应一小节音符
- unsigned int code f1[]={ H2,H3,H2,Z7,H1,H2,H1,Z6, Z5,H4,H5,Z5,O, H1,H2,H1,Z6,Z7,H1,Z7,Z5, Z6,H1,H2,Z2,O,
- H2,H3,H2,Z7,H1,H2,H1,Z6, Z5,H4,H5,Z5,O, Z7,Z5,Z3,Z5,Z3,Z1, Z2,H1,H2,Z2,O,
- Z6,H1,Z7,H2,H1,Z7,Z6,Z5, Z4,Z6,H1,O, Z7,H2,H1,H3,H2,H1,Z7,Z6, Z5,Z7,H2,O,
- H3,H2,H2,H1,H1,Z7,Z7,Z5, Z6,H1,H3,O, H2,Z7,Z4,Z5,H1,Z6,Z3,Z4, Z5,H4,H5,Z5,O,
-
- Z7,Z7,H1,H1, H2,H5,H4,H5,H2,O, Z5,Z5,Z6,Z6, Z7,H2,H1,H2,H3,H2,H1,Z7,Z6,Z2,Z4,Z2,
- Z3,Z5,Z3,H3,Z3, Z2,Z5,Z2,H2,Z2, H1,Z2,Z7,Z2, Z6,Z6,Z7,H1,Z7,Z6,O,
- Z7,Z7,H1,H1, H2,H5,H4,H5,H2,O, Z5,Z5,Z6,Z6, Z7,H2,H1,H2,H3,H2,H1,Z7,Z6,Z2,Z4,Z2,
- Z3,Z5,Z3,H3,Z3, Z2,Z5,Z2,H2,Z2, H1,Z2,Z7,Z2, Z6,Z6,Z7,H1,Z7,Z6,O,
-
- H1,H1,Z7,Z6,Z5,Z4, H4,H5,Z2,Z5,O,
- H1,H1,Z7,Z6,Z5,Z4, H4,H5,Z5,Z7,O,
- Z3,Z5,Z4,Z3,Z2,Z1,H3, Z2,Z2,Z3,Z2,Z1,L7,H2,
- H1,H3,H2,H1,Z7,Z6,H4, H5,Z5,L5,O,
- 0xff}; //以0xff作为音符的结束标志
- //以下是简谱中每个音符的节拍
- //"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
- unsigned char code JP1[ ]={ 4,4,4,4,4,4,4,4, 8,1,8,8,8, 4,4,4,4,4,4,4,4, 8,1,8,8,8, 4,4,4,4,4,4,4,4, 8,1,8,8,8,
- 8,4,4,8,4,4, 8,1,8,8,8, 4,4,4,4,4,4,4,4, 8,8,8,8, 4,4,4,4,4,4,4,4, 8,8,8,8,
- 4,4,4,4,4,4,4,4, 8,8,8,8, 4,4,4,4,4,4,4,4, 8,1,8,8,8,
- 16,16,16,16, 8,8,8,8,16,16, 16,16,16,16, 4,4,4,4,4,4,4,4,8,8,8,8,
- 16,8,8,16,16, 16,8,8,16,16, 16,16,16,16, 16,4,4,4,4,16,16,
- 16,16,16,16, 8,8,8,8,16,16, 16,16,16,16, 4,4,4,4,4,4,4,4,8,8,8,8,
- 16,8,8,16,16, 16,8,8,16,16, 16,16,16,16, 16,4,4,4,4,16,16,
- 16,4,4,4,4,16,16, 16,16,16,16, 16,4,4,4,4,16,16, 16,16,16,16,
- 16,4,4,4,4,16,16, 16,4,4,4,4,16,16, 16,4,4,4,4,16,16, 16,16,16,16,
- };
- /****************************************************************************/
- //延时
- void DelayMS(uint i) { while(i--); }
- /*
- void DelayMS(uint x)
- {
- uchar t;
- while(x--) for(t=0;t<30;t++);
-
- }
- */
- /****************************************************************************/
- void diplay_data (unsigned char l,unsigned char d){
- switch (l){//显示的列位置
- case 1://
- P0 = d;P2 = 0x01;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 2://
- P0 = d;P2 = 0x02;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 3://
- P0 = d;P2 = 0x04;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 4://
- P0 = d;P2 = 0x08;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 5://
- P0 = d;P2 = 0x10;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 6://
- P0 = d;P2 = 0x20;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 7://
- P0 = d;P2 = 0x40;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 8://
- P0 = d;P2 = 0x80;DelayMS(c);P0=0xff;P2 = 0x00;
- break;//
- case 9://
- P0 = d;HH1 = 1;DelayMS(c);P0=0xff;HH1 = 0;
- break;//
- case 10://
- P0 = d;HH2 = 1;DelayMS(c);P0=0xff;HH2 = 0;
- break;//
- case 11://
- P0 = d;HH3 = 1;DelayMS(c);P0=0xff;HH3 = 0;
- break;//
- case 12://
- P0 = d;HH4 = 1;DelayMS(c);P0=0xff;HH4 = 0;
- break;//
- case 13://
- P0 = d;HH5 = 1;DelayMS(c);P0=0xff;HH5 = 0;
- break;//
- }
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函数名:1302驱动程序
- 调 用:
- 参 数:无
- 返回值:无
- 结 果:
- 备 注:适用于DS1302芯片+32.768KHz6pF晶体
- /**********************************************************************************************/
- //1302驱动程序(底层协议)
- void clock_out(unsigned char dd){
- ACC=dd;// 0x80 = 1000 0000
- clock_dat=a0; clock_clk=1; clock_clk=0;
- clock_dat=a1; clock_clk=1; clock_clk=0;
- clock_dat=a2; clock_clk=1; clock_clk=0;
- clock_dat=a3; clock_clk=1; clock_clk=0;
- clock_dat=a4; clock_clk=1; clock_clk=0;
- clock_dat=a5; clock_clk=1; clock_clk=0;
- clock_dat=a6; clock_clk=1; clock_clk=0;
- clock_dat=a7; clock_clk=1; clock_clk=0;
- }
- /*****************************************************************************/
- //DS1302写数据(底层协议)
- void write_clock(unsigned char ord, unsigned char dd){
- clock_clk=0;
- clock_Rst=0;
- clock_Rst=1;
- clock_out(ord);
- clock_out(dd);
- clock_Rst=0;
- clock_clk=1;
- }
- /*****************************************************************************/
- //DS1302写入字节(底层协议)
- unsigned char clock_in(void){
- clock_dat=1;
- a0=clock_dat;
- clock_clk=1; clock_clk=0; a1=clock_dat;
- clock_clk=1; clock_clk=0; a2=clock_dat;
- clock_clk=1; clock_clk=0; a3=clock_dat;
- clock_clk=1; clock_clk=0; a4=clock_dat;
- clock_clk=1; clock_clk=0; a5=clock_dat;
- clock_clk=1; clock_clk=0; a6=clock_dat;
- clock_clk=1; clock_clk=0; a7=clock_dat;
- return(ACC);
- }
- /*****************************************************************************/
- //DS1302读数据(底层协议)
- unsigned char read_clock(unsigned char ord){
- unsigned char dd=0;
- clock_clk=0;
- clock_Rst=0;
- clock_Rst=1;
- clock_out(ord);
- dd=clock_in();
- clock_Rst=0;
- clock_clk=1;
- return(dd);
- }
- /*****************************************************************************/
- //常用时钟数据读取
- void read_clockS(void){
- ss = read_clock(0x81);//读取秒数据
- mm = read_clock(0x83);//读取分钟数据
- hh = read_clock(0x85);//小时
- dd = read_clock(0x87);//日
- mo = read_clock(0x89);//月
- yy = read_clock(0x8d);//年
- // xq = read_clock(0x8b);//星期
- // xq = xq%16; //字节低4位的BCD码放入xq
- // AL1_H = read_clock(0xc1);
- // AL1_M = read_clock(0xc3);
- // AL2_H = read_clock(0xc5);
- // AL2_M = read_clock(0xc9);
- NZ_H = read_clock(0xd1);
- NZ_M = read_clock(0xe1);
- G = read_clock(0xe3);
- L = read_clock(0xe5);
- }
- /*****************************************************************************/
- /*********************************************************************************************
- 函数名:1302初始化程序
- 调 用:
- 参 数:无
- 返回值:无
- 结 果:初始化时钟芯片,自动检测并初始化
- 备 注:适用于DS1302芯片+32.768KHz6pF晶体
- /**********************************************************************************************/
- //设置1302的初始时间(自动初始化)
- void Init_1302(void){//-设置1302的初始时间(2010年1月1日00时00分50秒星期一)
- unsigned char f;
- if(read_clock(0x81) == 0x80){
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0x8c,0x10);//年
- write_clock(0x8a,0x05);//星期
- write_clock(0x88,0x01);//月
- write_clock(0x86,0x01);//日
- write_clock(0x84,0x23);//小时
- write_clock(0x82,0x59);//分钟
- write_clock(0x80,0x50);//秒
- write_clock(0x90,0x05);//充电设置(0x05不充电,0xa5充电)
- write_clock(0xe2,0x00);//充电设置(0x05不充电,0xa5充电)
- write_clock(0xe4,0x00);//
- for(f=0;f<60;f=f+2){//清除闹钟RAM位为0
- write_clock(0xc0+f,0x00);
- }
- write_clock(0xC4,0x09);//背光初始为亮度9
- write_clock(0x8e,0x80);//禁止写操作
- }
- }
- /**********************************************************************************************/
- //主程序
- void main()
- {
- //uchar i,wei=0x80;
- unsigned char s,d,f,h,g,e,nn;
- unsigned int b;
- unsigned int i,j;
- MENU=0;
- voic=0;
- s=0,d=0,f=0,h=0,g=0,e=0,nn=0;
- GG=0x00,LL=0x00;
- HH1=0,HH2=0,HH3=0,HH4=0,HH5=0;
- P2=0x00,P0=0xff;
- // J1=1;
- J2=1;
- J3=1;
- c=60;
- i=0;
- Init_1302();//初始程序
- while(1)
- {
- read_clockS();
- Conversion(0,yy,mo,dd); //公历转农历
- Conver_week(0,yy,mo,dd);//计算星期
- /*
- diplay_data (1,disdata[hh/16]);
- diplay_data (2,disdata[hh%16]);
- diplay_data (3,disdata[mm/16]);
- diplay_data (4,disdata[mm%16]);
- diplay_data (5,disdata[ss/16]);
- diplay_data (6,disdata[ss%16]);
- diplay_data (7,disdata[xq]);
- diplay_data (8,disdata[9]);
- */
- /**************************************************************************/
- if(MENU==0){ //显示正常走时主界面
- voic=0;
- c=60;
- diplay_data (1,disdata[yy/16]);//1
- diplay_data (2,disdata[yy%16]);//2
- //diplay_data (3,disdata[mo/16]);//3,5
- diplay_data (4,disdata[mo%16]);//4
- diplay_data (5,disdata[dd%16]);//6
- diplay_data (6,disdata[hh/16]);//7
- diplay_data (7,disdata[hh%16]);//8
- diplay_data (8,disdata[mm/16]);//9
- diplay_data (9,disdata[mm%16]);//10
- //diplay_data (10,disdata[mm%16]);//11,13
- diplay_data (11,disdata[month_moon%10]);//12
- diplay_data (12,disdata[day_moon%10]);//14
- if(week==0){diplay_data (13,disdata[8]);}
- else{diplay_data (13,disdata[week]);};//15
- if(dd/16==0){
- if(mo/16==1){
- diplay_data (3,0xdf);//3,5
- }
- }else{
- if(mo/16==1){
- diplay_data (3,disdata[dd/16]-0x20);//3,5
- }else{
- diplay_data (3,disdata[dd/16]);//3,5
- }
- }
- if(day_moon/10==0){
- if(month_moon/10==1){
- diplay_data (10,0xdf);//11,13
- }
- }else{
- if(month_moon/10==1){
- diplay_data (10,disdata[day_moon/10]-0x20);//11,13
- }else{
- diplay_data (10,disdata[day_moon/10]);//11,13
- }
- }
- if(ss%16%2){
- diplay_data (1,0x7f);
- diplay_data (2,0x7f);
- }else{
- diplay_data (1,0xff);
- diplay_data (2,0xff);
- }
- if(G==0xff){
- diplay_data (4,0x7f);
- }else{
- diplay_data (4,0xff);
- }
- if(L==0xff){
- diplay_data (3,0x7f);
- }else{
- diplay_data (3,0xff);
- }
-
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- while(KEY==0){
- TIME_YY = yy/16*10+yy%16;
- diplay_data (1,disdata[TIME_YY/10]);
- diplay_data (2,disdata[TIME_YY%10]);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;//打开或关闭整点报时
- if(d>10&&KEY1==1){
- d=0;LL=~LL;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xe4,LL);//
- }
- if(KEY2==0)f++;//打开或关闭闹钟
- if(f>10&&KEY2==1){
- f=0;GG=~GG;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xe2,GG);//
- }
- if(KEY3==0)h++;//打开或关闭音乐
- if(h>10&&KEY3==1){
- h=0;J3=~J3;
- }
-
- }
- /***************************************************************/
- if(MENU==1){//设置年份
- diplay_data (1,disdata[TIME_YY/10]);
- diplay_data (2,disdata[TIME_YY%10]);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);
- write_clock(0x8c,(TIME_YY/10)*16+TIME_YY%10);
- while(KEY==0){
- TIME_MO = mo/16*10+mo%16;
- if(TIME_MO/10==1){diplay_data (3,0xdf);}
- diplay_data (4,disdata[TIME_MO%10]);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_YY++;if(TIME_YY>99)TIME_YY=0;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_YY>0){
- TIME_YY--;
- }
- else{
- TIME_YY=99;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0x8c,(TIME_YY/10)*16+TIME_YY%10);
- }
- }
- /*************************************************************************************/
- if(MENU==2){//设置月份
- if(TIME_MO/10==1){diplay_data (3,0xdf);}
- diplay_data (4,disdata[TIME_MO%10]);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);
- write_clock(0x88,(TIME_MO/10)*16+TIME_MO%10);
- while(KEY==0){
- TIME_DD = dd/16*10+dd%16;
- if(TIME_DD/10!=0){diplay_data (3,disdata[TIME_DD/10]);}
- diplay_data (5,disdata[TIME_DD%10]);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_MO++;if(TIME_MO>12)TIME_MO=1;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_MO>1){
- TIME_MO--;
- }
- else{
- TIME_MO=12;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0x88,(TIME_MO/10)*16+TIME_MO%10);
- }
- }
- /***********************************************************************/
- if(MENU==3){ //调整日期
- if(TIME_DD/10!=0){diplay_data (3,disdata[TIME_DD/10]);}
- diplay_data (5,disdata[TIME_DD%10]);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- //Conver_week(0,TIME_YY,TIME_MO,TIME_DD);//计算星期
- write_clock(0x8e,0x00);
- write_clock(0x86,(TIME_DD/10)*16+TIME_DD%10);
- //write_clock(0x8a,(week/10)*16+week%10);
- while(KEY==0){
- TIME_HH = hh/16*10+hh%16;
- diplay_data (6,disdata[TIME_HH/10]);
- diplay_data (7,disdata[TIME_HH%10]);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(TIME_MO==1||TIME_MO==3||TIME_MO==5||TIME_MO==7||TIME_MO==8||TIME_MO==10||TIME_MO==12){
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_DD++;if(TIME_DD>31)TIME_DD=1;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_DD>1){
- TIME_DD--;
- }
- else{
- TIME_DD=31;
- }
- }
- }
- if(TIME_MO==4||TIME_MO==6||TIME_MO==9||TIME_MO==11){
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_DD++;if(TIME_DD>30)TIME_DD=1;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_DD>1){
- TIME_DD--;
- }
- else{
- TIME_DD=30;
- }
- }
- }
- if(TIME_MO==2){
- if(TIME_YY%4==0){
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_DD++;if(TIME_DD>29)TIME_DD=1;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_DD>1){
- TIME_DD--;
- }
- else{
- TIME_DD=29;
- }
- }
- }else{
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_DD++;if(TIME_DD>28)TIME_DD=1;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_DD>1){
- TIME_DD--;
- }
- else{
- TIME_DD=28;
- }
- }
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- Conver_week(0,TIME_YY,TIME_MO,TIME_DD);//计算星期
- week--;
- write_clock(0x8e,0x00);
- write_clock(0x86,(TIME_DD/10)*16+TIME_DD%10);
- write_clock(0x8a,(week/10)*16+week%10);
- }
- }
- /***************************************************************/
- if(MENU==4){//设置时间:小时
- diplay_data (6,disdata[TIME_HH/10]);
- diplay_data (7,disdata[TIME_HH%10]);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);
- write_clock(0x84,(TIME_HH/10)*16+TIME_HH%10);
- while(KEY==0){
- TIME_MM = mm/16*10+mm%16;
- diplay_data (8,disdata[TIME_MM/10]);
- diplay_data (9,disdata[TIME_MM%10]);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_HH++;if(TIME_HH>23)TIME_HH=0;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_HH>0){
- TIME_HH--;
- }
- else{
- TIME_HH=23;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0x84,(TIME_HH/10)*16+TIME_HH%10);
- }
- }
- /*************************************************************************************/
- if(MENU==5){//设置时间:分钟
- diplay_data (8,disdata[TIME_MM/10]);// diplay_data (3,disdata[TIME_MM/10]+0x80);
- diplay_data (9,disdata[TIME_MM%10]);// diplay_data (4,disdata[TIME_MM%10]+0x80);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);
- write_clock(0x82,(TIME_MM/10)*16+TIME_MM%10);
- write_clock(0x80,0x00);
- while(KEY==0){
- NZ_HH = NZ_H/16*10+NZ_H%16;
- diplay_data (6,disdata[NZ_HH/10]);
- diplay_data (7,disdata[NZ_HH%10]);
- diplay_data (4,0x7f);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;TIME_MM++;if(TIME_MM>59)TIME_MM=0;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(TIME_MM>0){
- TIME_MM--;
- }
- else{
- TIME_MM=59;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0x82,(TIME_MM/10)*16+TIME_MM%10);
- write_clock(0x80,0x00);
- }
- }
- /***************************************************************************************/
- if(MENU==6){//设置NZ:小时
- diplay_data (6,disdata[NZ_HH/10]);
- diplay_data (7,disdata[NZ_HH%10]);
- diplay_data (4,0x7f);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xd0,(NZ_HH/10*16+NZ_HH%10));//年
- while(KEY==0){
- NZ_MM = NZ_M/16*10+NZ_M%16;
- diplay_data (8,disdata[NZ_MM/10]+0X80);
- diplay_data (9,disdata[NZ_MM%10]);
- diplay_data (4,0x7f);
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;NZ_HH++;if(NZ_HH>23)NZ_HH=0;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(NZ_HH>0){
- NZ_HH--;
- }
- else{
- NZ_HH=23;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0xd0,(NZ_HH/10*16+NZ_HH%10));//年
- }
- }
- /***************************************************************************************/
- if(MENU==7){//设置NZ:分钟
- diplay_data (8,disdata[NZ_MM/10]+0X80);
- diplay_data (9,disdata[NZ_MM%10]);
- diplay_data (4,0x7f);
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU++;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xe0,(NZ_MM/10*16+NZ_MM%10));//
- while(KEY==0){
- GG = G;
- diplay_data (6,disdata[15]);
- diplay_data (7,disdata[1]);
- diplay_data (8,disdata[0]);
- if(GG==0xff){
- diplay_data (9,disdata[13]);
- diplay_data (4,0x7f);
- }else{
- diplay_data (9,disdata[14]);
- diplay_data (4,0xff);
- }
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;NZ_MM++;if(NZ_MM>59)NZ_MM=0;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- if(NZ_MM>0){
- NZ_MM--;
- }
- else{
- NZ_MM=59;
- }
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0xe0,(NZ_MM/10*16+NZ_MM%10));//
- }
- }
- /**************************************************************************/
- if(MENU==8){//闹钟开启和关闭
- diplay_data (6,disdata[15]);
- diplay_data (7,disdata[1]);
- diplay_data (8,disdata[0]);
- if(GG==0xff){
- diplay_data (9,disdata[13]);
- diplay_data (4,0x7f);
- }else{
- diplay_data (9,disdata[14]);
- diplay_data (4,0xff);
- }
- if(KEY==0){
- s++;
- if(s>10){
- s=0;MENU=0;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xe2,GG);//
- while(KEY==0){
- diplay_data (1,disdata[yy/16]);//1
- diplay_data (2,disdata[yy%16]);//2
- //diplay_data (3,disdata[mo/16]);//3,5
- diplay_data (4,disdata[mo%16]);//4
- diplay_data (5,disdata[dd%16]);//6
- diplay_data (6,disdata[hh/16]);//7
- diplay_data (7,disdata[hh%16]);//8
- diplay_data (8,disdata[mm/16]);//9
- diplay_data (9,disdata[mm%16]);//10
- //diplay_data (10,disdata[mm%16]);//11,13
- diplay_data (11,disdata[month_moon%10]);//12
- diplay_data (12,disdata[day_moon%10]);//14
- diplay_data (13,disdata[xq]);//15
- if(dd/16==0){
- if(mo/16==1){
- diplay_data (3,0xdf);//3,5
- }
- }else{
- if(mo/16==1){
- diplay_data (3,disdata[dd/16]-0x20);//3,5
- }else{
- diplay_data (3,disdata[dd/16]);//3,5
- }
- }
- if(day_moon/16==0){
- if(month_moon/16==1){
- diplay_data (10,0xdf);//11,13
- }
- }else{
- if(month_moon/16==1){
- diplay_data (10,disdata[day_moon/16]-0x20);//11,13
- }else{
- diplay_data (10,disdata[day_moon/16]);//11,13
- }
- }
- if(ss%16%2){
- diplay_data (1,0x7f);
- diplay_data (2,0x7f);
- }else{
- diplay_data (1,0xff);
- diplay_data (2,0xff);
- }
- if(G==0xff){
- diplay_data (4,0x7f);
- }else{
- diplay_data (4,0xff);
- }
- if(L==0xff){
- diplay_data (3,0x7f);
- }else{
- diplay_data (3,0xff);
- }
- }
- }
- }//长短按键处理//长按转到MENU1
- if(KEY1==0)d++;
- if(d>10&&KEY1==1){
- d=0;GG = ~GG;
- }
- if(KEY2==0)f++;
- if(f>10&&KEY2==1){
- f=0;
- GG = ~GG;
- }
- if(KEY3==0)h++;
- if(h>10&&KEY3==1){
- h=0;MENU=0;
- write_clock(0x8e,0x00);
- write_clock(0xe2,GG);//
- }
- }
- /**************************************************************************/
- if(MENU==9){//显示闹钟界面
- //i=0; //从第1个音符f[0]开始播放
- while(f1[i]!=0xff&&KEY!=0&&NZ_M==mm) //只要没有读到结束标志就继续播放
- {
- if(f1[i]!=0){
- b=(f1[i]*JP1[i])/64;
- c=62500/f1[i]; //
- for(j=0;j<b;j++){ 控制节拍数
-
- diplay_data (6,disdata[10]);
- voic = ~voic;
- diplay_data (7,disdata[0]);
- voic = ~voic;
- diplay_data (8,disdata[11]);
- voic = ~voic;
- diplay_data (9,disdata[12]);
- voic = ~voic;
- }
- }else{
- voic = 0;
- b=125*JP1[i]/32;
- c=125;
- for(j=0;j<b;j++){ 控制节拍数
- diplay_data (6,disdata[10]);
- diplay_data (7,disdata[0]);
- diplay_data (8,disdata[11]);
- diplay_data (9,disdata[12]);
- }
- }
- i++; //播放下一个音符
- }
- voic = 0;
- //diplay_data (6,disdata[10]);
- //diplay_data (7,disdata[0]);
- //diplay_data (8,disdata[11]);
- //diplay_data (9,disdata[12]);
- //J1=0;
- if(KEY==0||NZ_M!=mm){
- s++;
- if(s>10||NZ_M!=mm){
- s=0;MENU=0;c=60;i=0;voic=0;
- write_clock(0x8e,0x00);//允许写操作
- write_clock(0xe2,0x00);//
- while(KEY==0){
- diplay_data (1,disdata[yy/16]);//1
- diplay_data (2,disdata[yy%16]);//2
- //diplay_data (3,disdata[mo/16]);//3,5
- diplay_data (4,disdata[mo%16]);//4
- diplay_data (5,disdata[dd%16]);//6
- diplay_data (6,disdata[hh/16]);//7
- diplay_data (7,disdata[hh%16]);//8
- diplay_data (8,disdata[mm/16]);//9
- diplay_data (9,disdata[mm%16]);//10
- //diplay_data (10,disdata[mm%16]);//11,13
- diplay_data (11,disdata[month_moon%10]);//12
- diplay_data (12,disdata[day_moon%10]);//14
- diplay_data (13,disdata[xq]);//15
- if(dd/16==0){
- if(mo/16==1){
- diplay_data (3,0xdf);//3,5
- }
- }else{
- if(mo/16==1){
- diplay_data (3,disdata[dd/16]-0x20);//3,5
- }else{
- diplay_data (3,disdata[dd/16]);//3,5
- }
- }
- if(day_moon/16==0){
- if(month_moon/16==1){
- diplay_data (10,0xdf);//11,13
- }
- }else{
- if(month_moon/16==1){
- diplay_data (10,disdata[day_moon/16]-0x20);//11,13
- }else{
- diplay_data (10,disdata[day_moon/16]);//11,13
- }
- }
- if(ss%16%2){
- diplay_data (1,0x7f);
- diplay_data (2,0x7f);
- }else{
- diplay_data (1,0xff);
- diplay_data (2,0xff);
- }
- if(G==0xff){
- diplay_data (4,0x7f);
- }else{
- diplay_data (4,0xff);
- }
- if(L==0xff){
- diplay_data (3,0x7f);
- }else{
- diplay_data (3,0xff);
- }
- }
- }
- }
- }
-
- /***************************************************************/
- if(MENU==0&&NZ_H==hh&&NZ_M==mm&&G==0xff){
- MENU=9;
- }
- if(MENU==0&&L==0xff&&mm==0&&ss>=0&&ss<15){
- if(ss%2==0){
- J2=0;
- }
- else{
- J2=1;
- }
- }else{
- J2=1;
- }
- /**********************************************************************************************/
- }
- }
复制代码
|