|
原理圖是附件的DDB文件,用99SE,或者用DXP,Altium Designer 打開即可,附件里面有個DDB文件,請用99SE打開。
STC89C52RC+12864+DS1302+18B20+24C02+音樂IC。
1:支持調(diào)節(jié)時間!
2:顯示年月日,時分秒,星期!
3:顯示溫度!
2:支持2個鬧鐘?梢噪S意控制開關(guān)!
5:支持24小時制和12小時制隨意切換!
6:支持兩個鈴聲!
7:所有的設(shè)置掉電后部丟失。包括鬧鈴,掉電后重啟和原來工作一樣,到時間后鬧鈴![table]
視頻:
18302546k08248ggduq6k4.jpg.thumb.jpg (42.47 KB, 下載次數(shù): 109)
下載附件
2016-10-12 11:09 上傳
0.png (316 KB, 下載次數(shù): 136)
下載附件
2016-10-12 11:31 上傳
183010cuum7mxnwxft53i7.jpg.thumb.jpg (36.36 KB, 下載次數(shù): 128)
下載附件
2016-10-12 11:09 上傳
182958s02p3hrjse22xslj.jpg.thumb.jpg (45.27 KB, 下載次數(shù): 137)
下載附件
2016-10-12 11:09 上傳
1829406uoooaebbol6uuwo.jpg.thumb.jpg (43.99 KB, 下載次數(shù): 120)
下載附件
2016-10-12 11:09 上傳
182920x2kx7x1kzkyhnpr9.jpg.thumb.jpg (42.98 KB, 下載次數(shù): 156)
下載附件
2016-10-12 11:09 上傳
源程序:- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit T_IO=P2^1;
- sbit T_RST=P2^0;
- sbit T_CLK=P2^2;
- sbit k1=P2^3;
- sbit k2=P2^4;
- sbit shu=P2^5;
- sbit k3=P2^6;
- sbit D=P2^7;
- sbit rs=P1^0; //數(shù)據(jù)/指令選擇
- sbit rw=P1^1; //讀寫選擇
- sbit e=P1^2; //讀寫使能
- sbit psb=P1^3; //串并口選擇
- sbit kzlb=P3^3;
- sbit scl=P3^4;
- sbit sda=P3^5;
- void delay(uint z)
- {
- uint u,a0;
- for(u=z;u>0;u--)
- for(a0=124;a0>0;a0--);
- }
- uchar code table[]="0123456789";
- uchar code we[]="年月日星期溫度*C:.";
- uchar code uu[]="定時小時制鈴聲";
- uchar miao,fen,shi,yue,ri,nian,xq,count1,count2,time1,time2,temp;
- uchar eshi,efen,emiao,dshi,dfen,dmiao;
- uchar nian1,nian2,yue1,yue2,ri1,ri2,y,pp,mb,sc,ko,c,fp,j,
- shi1,shi2,fen1,fen2,miao1,miao2;
- uchar w1,w2,w3,m1,nb,op,s1,aa,x,m,k,u,w,vv,ss,cb;
- uint a;
- uchar code week_code[]={0,3,3,6,1,4,6,2,5,0,3,5};
- void Write1302(unsigned char ); //向1302寫一個字節(jié)數(shù)據(jù)
- void WriteSet1302(unsigned char ,unsigned char );//根據(jù)命令字,向1302寫一個字節(jié)數(shù)據(jù)
- unsigned char Read1302(void);//從1302讀一個字節(jié)數(shù)據(jù)
- unsigned char ReadSet1302(unsigned char Cmd);//根據(jù)命令字從1302讀取一個字節(jié)數(shù)據(jù)
- void InitDS1302(void);//初始化1302
- void dingshi();
- void xiao();
- void xiaoshi();
- void sh();
- void init_i2c();
- void start();
- void ask();
- void write_byte(uchar da);
- uchar read_byte();
- void write_i2c(uchar add,uchar dat);
- uchar read_i2c(uchar add);
- void Conver_week()
- {
- uchar temp1,temp2,year,month,day;
- year=nian&0x7f;
- month=yue;
- day=ri;
- if(nian>>7==0)
- {
- year+=0x64;
- } //如果為21世紀(jì),年份數(shù)加100
- temp1=year/0x4; //所過閏年數(shù)只算1900年之后的
- temp2=(year+temp1)%0x7; //為節(jié)省資源,先進(jìn)行一次取余,避免數(shù)大于0xff
- temp2=temp2+day+week_code[month-1];
- if(year%0x4==0&&month<3)temp2-=1; //如果是閏年但不到3月則減一天
- xq=temp2%0x7; //將星期數(shù)據(jù)寫到指定星期變量Tim[9]
- }
- void Write1302(uchar dat)//向1302寫指令
- {
- uchar i;
- T_CLK=0; //拉低T_CLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備
- for(i=0;i<8;i++) //連續(xù)寫8個二進(jìn)制位數(shù)據(jù)
- {
- T_IO=dat&0x01; //取出dat的第0位數(shù)據(jù)寫入1302
- T_CLK=1; //上升沿寫入數(shù)據(jù)
- T_CLK=0; //重新拉低T_CLK,形成脈沖
- dat>>=1; //將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個數(shù)據(jù)位
- }
- }
-
- void WriteSet1302(uchar Cmd,uchar dat)
- {
- T_RST=0; //禁止數(shù)據(jù)傳遞
- T_CLK=0; //確保寫數(shù)居前T_CLK被拉低
- T_RST=1; //啟動數(shù)據(jù)傳輸
- Write1302(Cmd); //寫入命令字
- Write1302((dat/10<<4)|(dat%10)); //寫數(shù)據(jù)
- T_CLK=1; //將時鐘電平置于已知狀態(tài)
- T_RST=0; //禁止數(shù)據(jù)傳遞
- }
- uchar Read1302(void)
- {
- uchar i,dat;
- for(i=0;i<8;i++) //連續(xù)讀8個二進(jìn)制位數(shù)據(jù)
- {
- dat>>=1; //將dat的各數(shù)據(jù)位右移1位,因?yàn)橄茸x出的是字節(jié)的最低位
- if(T_IO==1) //如果讀出的數(shù)據(jù)是1
- dat|=0x80; //將1取出,寫在dat的最高位
- T_CLK=1; //將T_CLK置于高電平,為下降沿讀出
- T_CLK=0; //拉低T_CLK,形成脈沖下降沿
- }
- return dat; //將讀出的數(shù)據(jù)返回
- }
-
- uchar ReadSet1302(uchar Cmd)
- {
- uchar temp,dat1,dat2;
- T_RST=0; //拉低T_RST
- T_CLK=0; //確保寫數(shù)居前T_CLK被拉低
- T_RST=1; //啟動數(shù)據(jù)傳輸
- Write1302(Cmd); //寫入命令字
- temp=Read1302(); //讀出數(shù)據(jù)
- T_CLK=1; //將時鐘電平置于已知狀態(tài)
- T_RST=0; //禁止數(shù)據(jù)傳遞
- dat1=temp/16; //16進(jìn)制轉(zhuǎn)成BCD
- dat2=temp%16;
- temp=dat1*10+dat2; //轉(zhuǎn)換成10進(jìn)制數(shù)字
- return (temp); //將讀出的數(shù)據(jù)返回
- }
- void delay50us(uint t)
- {
- uint j;
- for(t;t>0;t--)
- for(j=19;j>0;j--);
- }
- void delay50ms(uint t)
- {
- uint j;
- for(;t>0;t--)
- for(j=6245;j>0;j--);
- }
- void w12864com(uint com)
- {
- rw=0;
- rs=0;
- delay50us(1);
- P0=com;
- e=1;
- delay50us(10);
- e=0;
- delay50us(2);
- }
- void w12864dat(uint dat)
- {
- rw=0;
- rs=1;
- delay50us(1);
- P0=dat;
- e=1;
- delay50us(10);
- e=0;
- delay50us(2);
- }
- void initinal()
- {
- delay50ms(2);
- w12864com(0x30);
- delay50us(4);
- w12864com(0x30);
- delay50us(4);
- w12864com(0x0c);
- delay50us(4);
- w12864com(0x01);
- delay50us(240);
- w12864com(0x06);
- delay50us(10);
- }
- void display()
- {
- uchar i;
- w12864com(0x00);
- delay(2);
- w12864com(0x80);//
- w12864dat(table[2]);
- w12864dat(table[0]);
- w12864com(0x82);//年
- for(i=0;i<2;i++)
- {
- w12864dat(we[i]);
- }
- w12864com(0x84);//月
- for(i=0;i<2;i++)
- {
- w12864dat(we[i+2]);
- }
- w12864com(0x86);//日
- for(i=0;i<2;i++)
- {
- w12864dat(we[i+4]);
- }
- w12864com(0x88);//星期
- for(i=0;i<4;i++)
- {
- w12864dat(we[i+6]);
- }
- w12864com(0x9b);//溫度
- {
- for(i=0;i<4;i++)
- {
- w12864dat(we[i+10]);
- }
- }
- w12864com(0x9f);//*C
- {
- for(i=0;i<2;i++)
- {
- w12864dat(we[i+12]);
- }
- }
- w12864com(0x93);//:::
- for(i=0;i<1;i++)
- {
- w12864dat(we[i+16]);
- }
- w12864com(0x95);//:::
- for(i=0;i<1;i++)
- {
- w12864dat(we[i+16]);
- }
- }
- uchar w1,w2,w3,m1;
- void yan(uchar a)
- {
- while(a--);
- }
- void fuwei()
- {
- shu=1;
- shu=0;
- yan(60);
- shu=1;
- yan(8);
- while(!shu);
- }
- void xie_byte(uchar a)
- {
- uchar i=0;
- for(i=8;i>0;i--)
- {
- shu=1;
- _nop_();_nop_();
- shu = 0;
- _nop_();
- shu = a&0x01;
- yan(9);
- a>>=1;
- }
- }
- uchar du_byte()
- {
- uchar i,m;
- for(i=0;i<8;i++)
- {
- shu=1;
- _nop_();_nop_();
- shu = 0; // 給脈沖信號
- m>>=1;
- _nop_();
- shu=1; // 給脈沖信號
- yan(1);
- if(shu)
- m|=0x80;
- yan(9);
- }
- return m;
- }
- void jingdu()
- {
- fuwei();
- xie_byte(0xfe);
- xie_byte(0xff);
- xie_byte(0xff);
- xie_byte(0x3f);
- }
- uchar du_bit()
- {
- uchar dat=0;
- shu=1;
- _nop_();_nop_();
- shu=0;
- _nop_();_nop_();
- shu=1;
- _nop_();_nop_();
- _nop_();_nop_();
- dat=shu;
- return dat;
- }
- void read18b20()
- {
- fuwei();
- xie_byte(0xcc);
- xie_byte(0x44);
- while(!du_bit());
- fuwei();
- xie_byte(0xcc);
- xie_byte(0xbe);
- w1=du_byte();
- w2=du_byte();
- w3=w1;
- w1>>=4;
- w2<<=4;
- m1=w1+w2;
- w1=m1/10; //十位
- w2=m1%10; //個位
- w3&=0x0f;
- w3*=6.25;
- w3=w3/10;
- }
- void init_i2c()
- {
- sda=1;
- scl=1;
- }
- void start()
- {
- sda=1;
- scl=1;
- sda=0;
- }
- void stop()
- {
- sda=0;
- scl=1;
- sda=1;
- }
- void ask()
- {
- uchar i;
- scl=1;
- while((sda==1)&&(i<250))i++;
- scl=0;
- }
- void write_byte(uchar da)
- {
- uchar i,temp;
- temp=da;
- for(i=0;i<8;i++)
- {
- temp<<=1;
- scl=0;
- sda=CY;
- scl=1;
- }
- scl=0;
- sda=1;
- }
- uchar read_byte()
- {
- uchar i,a;
- scl=0;
- sda=1;
- for(i=0;i<8;i++)
- {
- scl=1;
- a=(a<<1)|sda;
- scl=0;
- }
- return a;
- }
- void write_i2c(uchar add,uchar dat)
- {
- start();
- write_byte(0xa0);//器件地址000
- ask();
- write_byte(add);
- ask();
- write_byte(dat);
- ask();
- stop();
- }
- uchar read_i2c(uchar add)
- {
- uchar nu;
- start();
- write_byte(0xa0);
- ask();
- write_byte(add);
- ask();
- start();
- write_byte(0xa1);
- ask();
- nu=read_byte();
- stop();
- return nu;
- }
- void main()
- {
- init_i2c();
- initinal();
- display();
- Write1302(0);//向1302寫指令
- WriteSet1302(0,0);
- jingdu();
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x80,0x00);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- TMOD=0x11;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- EA=1;
- ET0=1;
- ET1=1;
- sc=read_i2c(0);delay(2);
- j=read_i2c(1);delay(2);
- fp=read_i2c(2);delay(2);
- ko=read_i2c(3);delay(2);
- k=read_i2c(4);delay(2);
- w=read_i2c(5);delay(2);
- ss=read_i2c(6);delay(2);
- vv=read_i2c(7);delay(2);
- dshi=ss*10+vv;
- ss=read_i2c(8);delay(2);
- vv=read_i2c(9);delay(2);
- dfen=ss*10+vv;
- ss=read_i2c(10);delay(2);
- vv=read_i2c(11);delay(2);
- dmiao=ss*10+vv;
-
- ss=read_i2c(12);delay(2);
- vv=read_i2c(13);delay(2);
- eshi=ss*10+vv;
- ss=read_i2c(14);delay(2);
- vv=read_i2c(15);delay(2);
- efen=ss*10+vv;
- ss=read_i2c(16);delay(2);
- vv=read_i2c(17);delay(2);
- emiao=ss*10+vv;
- ss=vv=0;
- cb=read_i2c(18);delay(2);
- while(1)
- {
- if(y==1)
- {
- display();
- y=0;
- }
-
- if(k==1)
- {
- if(ko==0)
- {
- w12864com(0x91);
- w12864dat(0x41);
- }
- if(ko==1)
- {
- w12864com(0x91);
- w12864dat(0x50);
- }
- }
- else
- {
- w12864com(0x91);
- w12864dat(0x02);
- }
- if(aa==1)
- {
- w12864com(0x81);
- for(a=0;a<2;a++)
- {
- w12864dat(0x20);
- }
- delay(80);
- }
- WriteSet1302(0x8e,0x00);
- nian=ReadSet1302(0x8d);
- WriteSet1302(0x8e,0x80);
-
- nian1=nian/10;
- nian2=nian%10;
- w12864com(0x81);
- for(a=0;a<2;a++)
- {
- if(a==0)
- {
- w12864dat(table[nian1]);
- }
- if(a==1)
- {
- w12864dat(table[nian2]);
- }
- }
- if(aa==2)
- {
- w12864com(0x83);
- for(a=0;a<2;a++)
- {
- w12864dat(0x20);
- }
- delay(80);
- }
- WriteSet1302(0x8e,0x00);
- yue=ReadSet1302(0x89);
- WriteSet1302(0x8e,0x80);
- yue1=yue/10;
- yue2=yue%10;
- w12864com(0x83);
- for(a=0;a<2;a++)
- {
- if(a==0)
- {
- w12864dat(table[yue1]);
- }
- if(a==1)
- {
- w12864dat(table[yue2]);
- }
- }
- if(aa==3)
- {
- w12864com(0x85);
- for(a=0;a<2;a++)
- {
- w12864dat(0x20);
- }
- delay(80);
- }
- WriteSet1302(0x8e,0x00);
- ri=ReadSet1302(0x87);
- WriteSet1302(0x8e,0x80);
- ri1=ri/10;
- ri2=ri%10;
- w12864com(0x85);
- for(a=0;a<2;a++)
- {
- if(a==0)
- {
- w12864dat(table[ri1]);
- }
- if(a==1)
- {
- w12864dat(table[ri2]);
- }
- }
- Conver_week();
- w12864com(0x8a);
- if(xq==0)//日
- {
- w12864dat(0xc8);
- w12864dat(0xd5);
- }
- if(xq==1)//一
- {
- w12864dat(0xd2);
- w12864dat(0xbb);
- }
- if(xq==2)//二
- {
- w12864dat(0xb6);
- w12864dat(0xfe);
- }
- if(xq==3)//三
- {
- w12864dat(0xc8);
- w12864dat(0xfd);
- }
- if(xq==4)//四
- {
- w12864dat(0xcb);
- w12864dat(0xc4);
- }
- if(xq==5)//五
- {
- w12864dat(0xce);
- w12864dat(0xe5);
- }
- if(xq==6)//六
- {
- w12864dat(0xc1);
- w12864dat(0xf9);
- }
- if(aa==4)
- {
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- w12864dat(0x20);
- }
- if(a==1)
- {
- w12864dat(0x20);
- delay(40);
- }
- if(a==2)
- {
- w12864dat(0x20);
- }
- if(a==3)
- {
- WriteSet1302(0x8e,0x00);
- fen=ReadSet1302(0x83);
- WriteSet1302(0x8e,0x80);
- fen1=fen/10;
- fen2=fen%10;
- w12864dat(table[fen1]);
- }
- if(a==4)
- {
- w12864dat(table[fen2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- WriteSet1302(0x8e,0x00);
- miao=ReadSet1302(0x81);
- WriteSet1302(0x8e,0x80);
- miao1=miao/10;
- miao2=miao%10;
- w12864dat(table[miao1]);
- }
- if(a==7)
- {
- w12864dat(table[miao2]);
- }
- }
- }
- if(aa==5)
- {
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- WriteSet1302(0x8e,0x00);
- shi=ReadSet1302(0x85);
- WriteSet1302(0x8e,0x80);
- if(k==1)
- {
- if(shi>=12)
- {
- ko=1;
- write_i2c(3,ko);
- delay(2);
- if(shi>12)
- {
- pp=shi;
- pp=pp-12;
- shi1=pp/10;
- shi2=pp%10;
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- ko=0;
- write_i2c(3,ko);
- delay(2);
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- w12864dat(table[shi1]);
- }
- if(a==1)
- {
- w12864dat(table[shi2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- w12864dat(0x20);
- }
- if(a==4)
- {
- w12864dat(0x20);
- delay(40);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- WriteSet1302(0x8e,0x00);
- miao=ReadSet1302(0x81);
- WriteSet1302(0x8e,0x80);
- miao1=miao/10;
- miao2=miao%10;
- w12864dat(table[miao1]);
- }
- if(a==7)
- {
- w12864dat(table[miao2]);
- }
- }
- }
- if(aa==6)
- {
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- WriteSet1302(0x8e,0x00);
- shi=ReadSet1302(0x85);
- WriteSet1302(0x8e,0x80);
- if(k==1)
- {
- if(shi>=12)
- {
- ko=1;
- write_i2c(3,ko);
- delay(2);
- if(shi>12)
- {
- pp=shi;
- pp=pp-12;
- shi1=pp/10;
- shi2=pp%10;
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- ko=0;
- write_i2c(3,ko);
- delay(2);
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- w12864dat(table[shi1]);
- }
- if(a==1)
- {
- w12864dat(table[shi2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- WriteSet1302(0x8e,0x00);
- fen=ReadSet1302(0x83);
- WriteSet1302(0x8e,0x80);
- fen1=fen/10;
- fen2=fen%10;
- w12864dat(table[fen1]);
- }
- if(a==4)
- {
- w12864dat(table[fen2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- w12864dat(0x20);
- }
- if(a==7)
- {
- w12864dat(0x20);
- delay(40);
- }
- }
- }
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- WriteSet1302(0x8e,0x00);
- shi=ReadSet1302(0x85);
- WriteSet1302(0x8e,0x80);
- if(k==1)
- {
- if(shi>=12)
- {
- ko=1;
- write_i2c(3,ko);
- delay(2);
- if(shi>12)
- {
- pp=shi;
- pp=pp-12;
- shi1=pp/10;
- shi2=pp%10;
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- ko=0;
- write_i2c(3,ko);
- delay(2);
- shi1=shi/10;
- shi2=shi%10;
- }
- }
- else
- {
- shi1=shi/10;
- shi2=shi%10;
- }
- w12864dat(table[shi1]);
- }
- if(a==1)
- {
- w12864dat(table[shi2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- WriteSet1302(0x8e,0x00);
- fen=ReadSet1302(0x83);
- WriteSet1302(0x8e,0x80);
- fen1=fen/10;
- fen2=fen%10;
- w12864dat(table[fen1]);
- }
- if(a==4)
- {
- w12864dat(table[fen2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- WriteSet1302(0x8e,0x00);
- miao=ReadSet1302(0x81);
- WriteSet1302(0x8e,0x80);
- miao1=miao/10;
- miao2=miao%10;
- w12864dat(table[miao1]);
- }
- if(a==7)
- {
- w12864dat(table[miao2]);
- }
- }
-
- read18b20();
- w12864com(0x9d);
- for(a=0;a<4;a++)
- {
- if(a==0)
- {
- w12864dat(table[w1]);
- }
- if(a==1)
- {
- w12864dat(table[w2]);
- }
- if(a==2)
- {
- w12864dat(we[17]);
- }
- if(a==3)
- {
- w12864dat(table[w3]);
- }
- }
- if(s1==0)
- {
- x=0;
- }
- if(k1==0)
- {
- delay(2);
- while(!k1==1);
- s1++;
- if(s1==5)
- {
- s1=0;
- }
- }
- if(s1==1)//設(shè)置時間
- {
- if(k2==0)
- {
- delay(2);
- while(!k2==1);
- aa++;
- if(aa==7)
- {
- s1=0;
- aa=0;
- }
- }
- w12864com(0x91);
- w12864dat(0x20);
- delay(50);
- }
- if(s1==2)//定時
- {
- if((aa==1)||(aa==2)||(aa==3)||(aa==4)||(aa==5)||(aa==6))
- {s1--;}
- if(aa==0)
- {
- u=1;
- dingshi();
- }
- }
- if(s1==0)//小時制設(shè)置
- {
- if(k2==0)
- {
- while(!k2==1);
- m=1;
- xiaoshi();
- }
- }
- if(s1==0)
- {
- if(k3==0)
- {
- while(!k3==1);
- w++;
- write_i2c(5,w);
- delay(2);
- }
- }
- vv=shi;
- if(k==1)//12小時
- {
- if(ko==1)//下午
- {
- if(vv<12)
- {
- vv=vv+12;
- }
- }
- }
- if(w==1)//開定時1
- {
- w12864com(0x8c);
- w12864dat(0x41);
- w12864dat(0x03);
- w12864com(0x8e);
- w12864dat(0x20);
- w12864dat(0x20);
- w12864com(0x97);
- w12864dat(0x0e);
- if(dshi==vv)
- {
- if(dfen==fen)
- {
- if(dmiao==miao)
- {
- if(cb==1)
- {
- TR0=1;
-
- }
- if(cb==2)
- {
- TR1=1;
- }
- }
- }
- }
- }
- if(w==2)//開定時2
- {
- w12864com(0x8c);
- w12864dat(0x20);
- w12864dat(0x20);
- w12864com(0x8e);
- w12864dat(0x42);
- w12864dat(0x03);
- w12864com(0x97);
- w12864dat(0x0e);
- if(eshi==vv)
- {
- if(efen==fen)
- {
- if(emiao==miao)
- {
- if(cb==1)
- {
- TR0=1;
- }
- if(cb==2)
- {
- TR1=1;
- }
- }
- }
- }
- }
- if(w==3)//定時雙開
- {
- w12864com(0x8c);
- w12864dat(0x41);
- w12864dat(0x03);
- w12864com(0x8e);
- w12864dat(0x42);
- w12864dat(0x03);
- w12864com(0x97);
- w12864dat(0x0e);
- if(dshi==vv)
- {
- if(dfen==fen)
- {
- if(dmiao==miao)
- {
- if(cb==1)
- {
- TR0=1;
- }
- if(cb==2)
- {
- TR1=1;
- }
- }
- }
- }
-
- if(eshi==vv)
- {
- if(efen==fen)
- {
- if(emiao==miao)
- {
- if(cb==1)
- {
- TR0=1;
- }
- if(cb==2)
- {
- TR1=1;
- }
- }
- }
- }
- }
- if(w==4)//定時關(guān)
- {
- w=0;
- write_i2c(5,w);
- delay(2);
- w12864com(0x8c);
- w12864dat(0x20);
- w12864dat(0x20);
- w12864com(0x8e);
- w12864dat(0x20);
- w12864dat(0x20);
- w12864com(0x97);//定時指示
- w12864dat(0x20);
- }
- if(aa==1)
- {
- if(k3==0)
- {
- while(!k3==1);
- ss=nian;
- ss++;
- if(ss>=100)
- {ss=0;}
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x8c,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
-
- }
- }
- if(aa==2)
- {
- if(k3==0)
- {
- while(!k3==1);
- ss=yue;
- ss++;
- if(ss>=13)
- {
- ss=1;
- }
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x88,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- }
- }
- if(aa==3)
- {
- if(k3==0)
- {
- while(!k3==1);
- ss=ri;
- ss++;
- if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12))
- {
- if(ss>=32)
- ss=1;
- }
- if((yue==4)||(yue==6)||(yue==9)||(yue==11))
- {
- if(ss>=31)
- ss=1;
- }
- if(yue==2)
- {
- vv=nian%4;
- if(vv==0)
- {
- if(ss>=30)
- {
- ss=1;
- }
- }
- else
- {
- if(ss>=29)
- {
- ss=1;
- }
- }
- }
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x86,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- }
- }
- if(aa==4)
- {
- if(k3==0)
- {
- while(!k3==1);
- if(k==1)//12小時
- {
- if(ko==1)//下午
- {
- if(shi<12)
- {
- shi=shi+12;
- }
- else
- {
- ss=shi;
- }
- }
- else
- {
- ss=shi;
- }
- }
- else
- {
- ss=shi;
- }
- ss++;
- if(ss>=24)
- {ss=0;}
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x84,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- }
- }
- if(aa==5)
- {
- if(k3==0)
- {
- while(!k3==1);
- ss=fen;
- ss++;
- if(ss>=60)
- {ss=0;}
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x82,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- }
- }
- if(aa==6)
- {
- if(k3==0)
- {
- while(!k3==1);
- ss=miao;
- ss++;
- if(ss>=60)
- {ss=0;}
- WriteSet1302(0x8e,0x00); //允許寫入
- WriteSet1302(0x80,ss);
- WriteSet1302(0x90,0xa6); //寫充電控制寄存器.
- WriteSet1302(0x8e,0x80); //禁止寫入
- }
- }
-
- }
- }
- void dingshi()
- {
- uchar e1,e2,f1,f2,g1,g2,u1,u2;
- uchar ee,ff,gg,z,ww,ab,mzk,es;
- uchar bb1,bb2,cc1,cc2,dd1,dd2;
- uchar bb3,bb4,cc3,cc4,dd3,dd4;
- c=1;
- mzk=0;
- w12864com(0x00);
- delay(2);
- w12864com(0x98);//定時1
- for(z=0;z<4;z++)
- {
- w12864dat(uu[z]);
- }
- if(c==1)
- {
- w12864com(0x9c);
- w12864dat(0x41);
- w12864dat(0x03);
-
- w12864com(0x9a);
- w12864dat(table[1]);
-
- }
- if(c==1)
- {
- e1=bb3=read_i2c(6);delay(2);
- e2=bb4=read_i2c(7);delay(2);
- f1=cc3=read_i2c(8);delay(2);
- f2=cc4=read_i2c(9);delay(2);
- g1=dd3=read_i2c(10);delay(2);
- g2=dd4=read_i2c(11);delay(2);
- u1=ee=bb3*10+bb4;ff=cc3*10+cc4;gg=dd3*10+dd4;
- if(k==1)
- {
- es=1;
- if(u1>=12)
- {
- es=2;
- if(u1>12)
- {
- ab=u1;
- ab=ab-12;
- e1=bb3=ab/10;
- e2=bb4=ab%10;
- }
- }
- }
- }
- bb1=read_i2c(12);delay(2);
- bb2=read_i2c(13);delay(2);
- cc1=read_i2c(14);delay(2);
- cc2=read_i2c(15);delay(2);
- dd1=read_i2c(16);delay(2);
- dd2=read_i2c(17);delay(2);
- u2=bb1*10+bb2;
- if(k==1)
- {
- if(u2>=12)
- {
- if(u2>12)
- {
- ab=u2;
- ab=ab-12;
- bb1=ab/10;
- bb2=ab%10;
- }
- }
- }
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- w12864dat(table[bb1]);
- }
- if(a==1)
- {
- w12864dat(table[bb2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- w12864dat(table[cc1]);
- }
- if(a==4)
- {
- w12864dat(table[cc2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- w12864dat(table[dd1]);
- }
- if(a==7)
- {
- w12864dat(table[dd2]);
- }
- }
- if(k==1)
- {
- if(u1>=12)
- {
- es=2;
- w12864com(0x80);
- w12864dat(0x50);
- w12864com(0x89);
- w12864dat(0x50);
- }
- else
- {
- es=1;
- w12864com(0x80);
- w12864dat(0x41);
- w12864com(0x89);
- w12864dat(0x41);
- }
- if(u2>=12)
- {
- w12864com(0x90);
- w12864dat(0x50);
- }
- else
- {
- w12864com(0x90);
- w12864dat(0x41);
- }
- }
- while(u)
- {
- w12864com(0x88);
- w12864dat(0x03);
- delay(2);
- if(c==1)
- {
- w12864com(0x9c);
- w12864dat(0x41);
- w12864dat(0x03);
- w12864com(0x9a);
- w12864dat(table[1]);
-
- w12864com(0x91);
- w12864dat(0x20);
- w12864dat(0x20);
- w12864com(0x81);
- w12864dat(0x20);
- w12864dat(0x10);
-
- }
- if(c==2)
- {
- w12864com(0x9c);
- w12864dat(0x42);
- w12864dat(0x03);
- w12864com(0x9a);
- w12864dat(table[2]);
-
- w12864com(0x91);
- w12864dat(0x20);
- w12864dat(0x10);
- w12864com(0x81);
- w12864dat(0x20);
- w12864dat(0x20);
- if(mzk==0)
- {
- mzk=1;
- w12864com(0x8a);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
-
- w12864dat(table[bb1]);
- }
- if(a==1)
- {
- w12864dat(table[bb2]);
- }
-
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
-
- w12864dat(table[cc1]);
- }
- if(a==4)
- {
- w12864dat(table[cc2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
-
- w12864dat(table[dd1]);
- }
- if(a==7)
- {
- w12864dat(table[dd2]);
- }
- }
- e1=bb1;e2=bb2;f1=cc1;f2=cc2;g1=dd1;g2=dd2;
- ee=bb1*10+bb2;ff=cc1*10+cc2;gg=dd1*10+dd2;
- if(k==1)
- {
- es=1;
- if(u2>=12)
- {
- es=2;
- ee=ee+12;
- }
- }
- }
- }
- if(k==1)
- {
- if(es==1)
- {
- w12864com(0x89);
- w12864dat(0x41);
- }
- if(es==2)
- {
- w12864com(0x89);
- w12864dat(0x50);
- }
- }
- if(x==1)
- {
- if(k3==0)
- {
- while(!k3==1);
- ee++;
- if(ee>=24)
- {
- ee=0;
- }
- if(k==1)
- {
- if(ee==12)
- {
- es=2;
- e1=ee/10;
- e2=ee%10;
- }
-
- if(ee<12)
- {
- es=1;
- e1=ee/10;
- e2=ee%10;
- }
- if(ee>12)
- {
- es=2;
- ww=ee;
- ww=ww-12;
- e1=ww/10;
- e2=ww%10;
- }
- }
- else
- {
- e1=ee/10;
- e2=ee%10;
- }
- if(c==1)
- {
- if(k==1)
- {
- if(es==1)
- {
- w12864com(0x80);
- w12864dat(0x41);
- }
- if(es==2)
- {
- w12864com(0x80);
- w12864dat(0x50);
- }
- }
- bb3=e1;
- bb4=e2;
- }
- if(c==2)
- {
- if(k==1)
- {
- if(es==1)
- {
- w12864com(0x90);
- w12864dat(0x41);
- }
- if(es==2)
- {
- w12864com(0x90);
- w12864dat(0x50);
- }
- }
- bb1=e1;
- bb2=e2;
- }
- }
- }
-
- if(x==2)
- {
- if(k3==0)
- {
- while(!k3==1);
- ff++;
- if(ff>=60)
- {
- ff=0;
- }
- f1=ff/10;
- f2=ff%10;
- if(c==1)
- {
- cc3=f1;
- cc4=f2;
- }
- if(c==2)
- {
- cc1=f1;
- cc2=f2;
- }
- }
- }
- if(x==3)
- {
- if(k3==0)
- {
- while(!k3==1);
- gg++;
- if(gg>=60)
- {
- gg=0;
- }
- g1=gg/10;
- g2=gg%10;
- if(c==1)
- {
- dd3=g1;
- dd4=g2;
- }
- if(c==2)
- {
- dd1=g1;
- dd2=g2;
- }
- }
- }
-
- w12864com(0x8a);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- w12864dat(table[e1]);
- }
- if(a==1)
- {
- w12864dat(table[e2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- w12864dat(table[f1]);
- }
- if(a==4)
- {
- w12864dat(table[f2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- w12864dat(table[g1]);
- }
- if(a==7)
- {
- w12864dat(table[g2]);
- }
- }
- delay(80);
- if(x==1)
- {
- w12864com(0x8a);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
-
- w12864dat(0x20);
- }
- if(a==1)
- {
- w12864dat(0x20);
- }
-
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
-
- w12864dat(table[f1]);
- }
- if(a==4)
- {
- w12864dat(table[f2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
-
- w12864dat(table[g1]);
- }
- if(a==7)
- {
- w12864dat(table[g2]);
- }
- }
- }
- if(x==2)
- {
- w12864com(0x8a);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
-
- w12864dat(table[e1]);
- }
- if(a==1)
- {
- w12864dat(table[e2]);
- }
-
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
-
- w12864dat(0x20);
- }
- if(a==4)
- {
- w12864dat(0x20);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
-
- w12864dat(table[g1]);
- }
- if(a==7)
- {
- w12864dat(table[g2]);
- }
- }
- }
- if(x==3)
- {
- w12864com(0x8a);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
-
- w12864dat(table[e1]);
- }
- if(a==1)
- {
- w12864dat(table[e2]);
- }
-
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
-
- w12864dat(table[f1]);
- }
- if(a==4)
- {
- w12864dat(table[f2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
-
- w12864dat(0x20);
- }
- if(a==7)
- {
- w12864dat(0x20);
- }
- }
- }
- delay(50);
- w12864com(0x92);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- w12864dat(table[bb1]);
- }
- if(a==1)
- {
- w12864dat(table[bb2]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- w12864dat(table[cc1]);
- }
- if(a==4)
- {
- w12864dat(table[cc2]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- w12864dat(table[dd1]);
- }
- if(a==7)
- {
- w12864dat(table[dd2]);
- }
- }
- w12864com(0x82);
- for(a=0;a<8;a++)
- {
- if(a==0)
- {
- w12864dat(table[bb3]);
- }
- if(a==1)
- {
- w12864dat(table[bb4]);
- }
- if(a==2)
- {
- w12864dat(we[16]);
- }
- if(a==3)
- {
- w12864dat(table[cc3]);
- }
- if(a==4)
- {
- w12864dat(table[cc4]);
- }
- if(a==5)
- {
- w12864dat(we[16]);
- }
- if(a==6)
- {
- w12864dat(table[dd3]);
- }
- if(a==7)
- {
- w12864dat(table[dd4]);
- }
- }
- if(k2==0)
- {
- while(!k2==1);
- x++;
- if(x==4)
- {
- x=0;
- u=0;
- mzk=0;
- s1=0;
- y=1;
- if(c==1)
- {
- w=1;
- write_i2c(5,w);
- delay(2);
- e1=ee/10;
- e2=ee%10;
- f1=ff/10;
- f2=ff%10;
- g1=gg/10;
- g2=gg%10;
- write_i2c(6,e1);delay(2);
- write_i2c(7,e2);delay(2);
- write_i2c(8,f1);delay(2);
- write_i2c(9,f2);delay(2);
- write_i2c(10,g1);delay(2);
- write_i2c(11,g2);delay(2);
- dshi=ee;
- dfen=ff;
- dmiao=gg;
- delay(5);
- }
- if(c==2)
- {
- w=2;
- write_i2c(5,w);
- delay(2);
- e1=ee/10;
- e2=ee%10;
- f1=ff/10;
- f2=ff%10;
- g1=gg/10;
- g2=gg%10;
- write_i2c(12,e1);delay(2);
- write_i2c(13,e2);delay(2);
- write_i2c(14,f1);delay(2);
- write_i2c(15,f2);delay(2);
- write_i2c(16,g1);delay(2);
- write_i2c(17,g2);delay(2);
- eshi=ee;
- efen=ff;
- emiao=gg;
- delay(5);
- }
- }
- }
- if(k1==0)
- {
- delay(2);
- while(!k1==1);
- s1++;
- if(s1==3)
- {
- c++;
- if(c==3)
- {
- c=1;
- }
- }
- if(s1==4)
- {
- x=0;
- u=0;
- y=1;
- s1=0;
- mzk=0;
- }
- }
- }
- }
- void xiaoshi()
- {
- uchar tt;
- w12864com(0x00);
- delay(2);
- w12864com(0x82);
- w12864dat(table[1]);
- w12864dat(table[2]);
- for(tt=0;tt<6;tt++)
- {
- w12864dat(uu[tt+4]);
- }
-
- w12864com(0x92);
- w12864dat(table[2]);
- w12864dat(table[4]);
- for(tt=0;tt<6;tt++)
- {
- w12864dat(uu[tt+4]);
- }
- w12864com(0x8a);
- for(tt=0;tt<4;tt++)
- {
- w12864dat(uu[tt+10]);
- }
- w12864dat(table[1]);
- delay(1);
- w12864com(0x9a);
- for(tt=0;tt<4;tt++)
- {
- w12864dat(uu[tt+10]);
- }
- w12864dat(table[2]);
- delay(1);
- if(sc==1)
- {
- w12864com(0x80);
- w12864dat(0x12);
- w12864com(0x88);
- w12864dat(0x20);
- }
- if(sc==2)
- {
- w12864com(0x80);
- w12864dat(0x20);
- w12864com(0x99);
- w12864dat(0x12);
- }
- if(j==1)
- {
- w12864com(0x81);
- w12864dat(0x10);
- w12864com(0x91);
- w12864dat(0x20);
- }
- if(j==2)
- {
- w12864com(0x81);
- w12864dat(0x20);
- w12864com(0x91);
- w12864dat(0x10);
- }
- if(fp==1)
- {
- w12864com(0x89);
- w12864dat(0x10);
- w12864com(0x99);
- w12864dat(0x20);
- }
- if(fp==2)
- {
- w12864com(0x89);
- w12864dat(0x20);
- w12864com(0x99);
- w12864dat(0x10);
- }
- while(m)
- {
- if(k2==0)
- {
- while(!k2==1);
- sc++;
- if(sc==3)
- {
- sc=1;
- }
- write_i2c(0,sc);
- }
- if(k3==0)
- {
- while(!k3==1);
- if(sc==1)
- {
- j++;
- if(j==3)
- {
- j=1;
- }
- write_i2c(1,j);delay(2);
- }
- if(sc==2)
- {
- fp++;
- if(fp==3)
- {
- fp=1;
- }
- write_i2c(2,fp);delay(2);
- }
- }
- if(k1==0)
- {
- while(!k1==1);
- y=1;
- m=0;
- s1=0;
- }
- if(sc==1)
- {
- w12864com(0x80);
- w12864dat(0x12);
- w12864com(0x88);
- w12864dat(0x20);
- if(j==1)
- {
- w12864com(0x81);
- w12864dat(0x10);
- w12864com(0x91);
- w12864dat(0x20);
- k=1;
- write_i2c(4,k);
- delay(2);
- }
- if(j==2)
- {
- w12864com(0x81);
- w12864dat(0x20);
- w12864com(0x91);
- w12864dat(0x10);
- k=0;
- write_i2c(4,k);
- delay(2);
- }
- }
- if(sc==2)
- {
- w12864com(0x80);
- w12864dat(0x20);
- w12864com(0x88);
- w12864dat(0x12);
- if(fp==1)
- {
- w12864com(0x89);
- w12864dat(0x10);
- w12864com(0x99);
- w12864dat(0x20);
- cb=1;
- write_i2c(18,cb);delay(2);
- }
- if(fp==2)
- {
- w12864com(0x89);
- w12864dat(0x20);
- w12864com(0x99);
- w12864dat(0x10);
- cb=2;
- write_i2c(18,cb);delay(2);
- }
- }
- }
- }
- void time0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count2++;
- if(count2==20)//驗(yàn)證時間為1s
- {
- count2=0;
- time2++;
- if(time2==20)
- {
- time2=0;
- TR0=0;
- }
- D=~D;
- delay(30);
- }
- }
- void t0() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- count1++;
- if(count1==20)//驗(yàn)證時間為1s
- {
- count1=0;
- time1++;
- if(time1==1)
- {
- kzlb=0;
- }
- if(time1==20)
- {
- time1=0;
- TR1=0;
- mb=0;
- y=1;
- kzlb=1;
- }
- }
- }
復(fù)制代碼
ds1302中文資料:http://www.torrancerestoration.com/bbs/dpj-56632-1.html
12864液晶中文資料:http://www.torrancerestoration.com/bbs/dpj-56633-1.html
版本1:
AT89C51+DS1302+18B20+12864;
支持功能:
1:時鐘顯示,年,月,日,星期,溫度,以及調(diào)時。
2:支持定時鬧鐘,可以設(shè)置兩個定時鬧鐘,支持單開,雙開與關(guān)閉。
3:支持24小時制與12小時制切換。
4:支持兩個鈴聲切換
程序.rar
(80.67 KB, 下載次數(shù): 128)
2016-10-12 11:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
電子歷原理圖.rar
(13.4 KB, 下載次數(shù): 72)
2016-10-12 11:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
版本2:
0.png (49.43 KB, 下載次數(shù): 130)
下載附件
2016-10-12 11:32 上傳
程序.rar
(131.16 KB, 下載次數(shù): 94)
2016-10-12 11:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
原理圖.rar
(39.44 KB, 下載次數(shù): 59)
2016-10-12 11:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|