之前花了40塊錢買了個萬年歷的套件,用的是TG1508D5V2芯片,結果焊接好后發(fā)現按鍵無反應,被我折騰了好久,不僅按鍵沒弄好,顯示也有問題了,問了賣家也說不清楚,賣家又沒有技術支持,然后就扔在那兒了,現在我已經學會了單片機,所以重新拿它出來自己改造,把萬年歷芯片換成了89C52單片機,自己寫程序,然后自己還弄了首加沃特舞曲作為鬧鈴聲,看下程序就自己會編了,照著譜子編。
原理圖:
0.png (58.43 KB, 下載次數: 48)
下載附件
2016-6-19 13:36 上傳
1%2895%29.jpg (56.65 KB, 下載次數: 47)
下載附件
2016-6-19 13:39 上傳
這個就是壞了的芯片,應該是壞了吧,換上了我們的89C52
2%2859%29.jpg (69.63 KB, 下載次數: 47)
下載附件
2016-6-19 13:39 上傳
PCB正面,左邊那個位置就是放芯片的,我現在把芯片弄下來了,放了排針
3%2840%29.jpg (75.14 KB, 下載次數: 49)
下載附件
2016-6-19 13:39 上傳
反面,基本上電路都沒有改動,只有4個led的線路改了下
4%2828%29.jpg (55.87 KB, 下載次數: 57)
下載附件
2016-6-19 13:39 上傳
單片機小板,89C52+1302,以及13個三極管
5%2824%29.jpg (72.22 KB, 下載次數: 47)
下載附件
2016-6-19 13:39 上傳
反面
6%2821%29.jpg (78.12 KB, 下載次數: 59)
下載附件
2016-6-19 13:39 上傳
接上飛線,不算很多飛線吧
7%2818%29.jpg (64.55 KB, 下載次數: 47)
下載附件
2016-6-19 13:39 上傳
4個按鍵,還是按原來的不變
8%2813%29.jpg (60.06 KB, 下載次數: 41)
下載附件
2016-6-19 13:39 上傳
9%2811%29.jpg (58.51 KB, 下載次數: 52)
下載附件
2016-6-19 13:39 上傳
組裝好,用的是5v的開關電源,以前是變壓器
10%289%29.jpg (75.44 KB, 下載次數: 47)
下載附件
2016-6-19 13:39 上傳
11%288%29.jpg (75.21 KB, 下載次數: 60)
下載附件
2016-6-19 13:39 上傳
不知道怎么倒過來了,哈哈
12%285%29.jpg (56.98 KB, 下載次數: 31)
下載附件
2016-6-19 13:39 上傳
13%283%29.jpg (57.21 KB, 下載次數: 42)
下載附件
2016-6-19 13:39 上傳
完成,下面聽聽我編的加沃特舞曲吧,可能大家不喜歡,天空之城比較好聽,這個加沃特舞曲是我以前學小提琴的時候拉過的,所以就拿來編了 - #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;//設置年、月、日、時、分、秒存放區(qū),用于調時
- //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 //定義休止符
- //以下是《加沃特舞曲》簡譜 //每行對應一小節(jié)音符
- 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作為音符的結束標志
- //以下是簡譜中每個音符的節(jié)拍
- //"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驅動程序(底層協(xié)議)
- 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寫數據(底層協(xié)議)
- 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寫入字節(jié)(底層協(xié)議)
- 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讀數據(底層協(xié)議)
- 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; //字節(jié)低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) //只要沒有讀到結束標志就繼續(xù)播放
- {
- if(f1[i]!=0){
- b=(f1[i]*JP1[i])/64;
- c=62500/f1[i]; //
- for(j=0;j<b;j++){ 控制節(jié)拍數
-
- 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++){ 控制節(jié)拍數
- 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;
- }
- /**********************************************************************************************/
- }
- }
復制代碼
|