#include #define uchar unsigned char #define uint unsigned int sbit SCK=P3^" />

亚洲网站在线免费观看,欧美性运动视频免费观看网站,国产精品爽爽久久,熟女少妇丰满一区二区

問答

ds1302時鐘保護(hù)程序怎么寫,如果能加調(diào)時,鬧鐘功能就更好了

提問者:baobao4221252013-09-04 00:00

最佳答案

#include #include #define uchar unsigned char #define uint unsigned int sbit SCK=P3^6; sbit SDA=P3^4; sbit RST=P3^5;// DS1302復(fù)位 sbit set=P3^0;//定義按鍵端口 sbit s1=P3^1; sbit s2=P3^2; sbit s3=P3^3; /************液晶口定義*******/ sbit RS=P2^4;//RS為數(shù)據(jù)/指令選擇1/0 sbit RW=P2^5;//讀寫 sbit E=P2^6;//E為使能信號 bit flag;//是否讀取時間的標(biāo)志位 uchar setn=0;//復(fù)位鍵、增加鍵、減少鍵按下次數(shù) uchar code time0[]="DATE: - - "; uchar code time1[]="TIME: : : "; uchar l_tmpdate[7]={0,55,16,22,8,6,9};//秒分時日月周年// 可隨時更改 uchar code write_add[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年 寫的寄存器地址 uchar code read_add[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分時日月周年 讀的寄存器地址 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共陰數(shù)碼管 0-9加'-'熄滅表 void delay(uint z) { while(--z); } void write_com(uchar com)//液晶寫命令函數(shù) { RS=0;//寫命令使能 RW=0;//寫 delay(5000); /****在高脈沖下命令輸入*****/ E=0; P0=com; delay(500); E=1; delay(500); E=0; } void write_data(uchar dat)//液晶寫數(shù)據(jù)函數(shù) { RS=1;//寫數(shù)據(jù)使能 RW=0; delay(5000); /****在高脈沖下數(shù)據(jù)輸入*****/ E=0; P0=dat; delay(500); E=1; delay(500); E=0; } void init()//液晶初始化 { uchar num; E=0; write_com(0x38);//顯示模式設(shè)置 delay(500); write_com(0x38); delay(500); write_com(0x38); write_com(0x08);//顯示關(guān)閉 delay(500); write_com(0x01);//顯示清屏 write_com(0x06);//光標(biāo)移動設(shè)置整屏不移動 write_com(0x0c);//屏幕開、光標(biāo)不閃(0)不顯示(0) delay(500); write_com(0x80); for(num=0;num<16;num++) { write_data(time0[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<13;num++) { write_data(time1[num]); delay(5); } } void Write_Ds1302_Byte(uchar temp) //寫一個字節(jié) { uchar i; for (i=0;i<8;i++) //循環(huán)8次寫入數(shù)據(jù) { SCK=0; SDA=temp&0x01; //每次傳輸?shù)妥止?jié) temp>>=1; //右移一位 SCK=1; } } /****************************************************************************/ void Write_Ds1302(uchar add,uchar dat )//向寄存器寫數(shù)據(jù) { RST=0; _nop_(); SCK=0; _nop_(); RST=1;//啟動 _nop_(); Write_Ds1302_Byte(add); //發(fā)送地址 Write_Ds1302_Byte(dat); //發(fā)送數(shù)據(jù) RST=0; //恢復(fù) } uchar Read_Ds1302_Byte()//讀一個字節(jié) { uchar i,temp=0x00; for (i=0;i<8;i++) //循環(huán)8次 讀取數(shù)據(jù) { if(SDA) temp|=0x80; //每次傳輸?shù)妥止?jié) SCK=0; temp>>=1; //右移一位 SCK=1; } return(temp); } uchar Read_Ds1302(uchar address )//從寄存器讀數(shù)據(jù) { uchar date; RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_Ds1302_Byte(address); date=Read_Ds1302_Byte(); RST=0; _nop_(); //以下為DS1302復(fù)位的穩(wěn)定時間 RST=0; SCK=0; _nop_(); SCK=1; _nop_(); SDA=0; _nop_(); SDA=1; _nop_(); return (date); } /*********************************************************/ void Read_RTC(void) //讀取日歷 { uchar i,*p; p=read_add; //讀的地址傳遞 for(i=0;i<7;i++) //分7次讀取 秒分時日月周年 { l_tmpdate[i]=Read_Ds1302(*p); p++; } } /******************************************************/ void Set_RTC(void) //設(shè)定日歷 { uchar i,*p,tmp; for(i=0;i<7;i++) { //BCD處理,將十六進(jìn)制轉(zhuǎn)換成十進(jìn)制 tmp=l_tmpdate[i]/10; l_tmpdate[i]=l_tmpdate[i]%10; l_tmpdate[i]=l_tmpdate[i]+tmp*16; } Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) p=write_add;//傳要寫的寄存器地址 for(i=0;i<7;i++) //7次寫入秒分時日月周年 { Write_Ds1302(*p,l_tmpdate[i]); p++; } Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } void write_lcd() { static uchar i,temp[2]; switch(i) { case 0: write_com(0x80+0x40+0x0b);break;//秒 case 1: write_com(0x80+0x40+8);break;//分 case 2: write_com(0x80+0x40+5);break;//時 case 3: write_com(0x80+0x0b);break;//日 case 4: write_com(0x80+8);break;//月 case 5: write_com(0x80+0x0e);break;//星期 case 6: write_com(0x80+5);break;//年 } temp[0]=l_tmpdate[i]/16;//數(shù)據(jù)的轉(zhuǎn)換 temp[1]=l_tmpdate[i]&0x0f; write_data(0x30+temp[0]); write_data(0x30+temp[1]); i++; if(i==7) i=0; } uchar change(uchar x)//十進(jìn)制轉(zhuǎn)換成十六進(jìn)制 { uchar tep,y; y=x; tep=y/16; y=y%16; y=y+tep*10; return y; } void keyscan() { uchar tem[2],tp,Flag;//存儲要更改的時間數(shù)據(jù) if(set==0) { flag=1;//時間停止 delay(500);//去鍵盤按下抖動 if(set==0) { delay(500); while(!set); delay(500);//去鍵盤抬起時抖動 while(!set); delay(500); setn++; if(setn==1) { write_com(0x80+0x40+12);//將光標(biāo)移動到秒個位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(setn==2) { write_com(0x80+0x40+9);//將光標(biāo)移動到分個位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(setn==3) { write_com(0x80+0x40+6);//將光標(biāo)移動到時個位 write_com(0x0f);//顯示光標(biāo)并且閃爍 } if(setn==4) { write_com(0x80+15); write_com(0x0f); } if(setn==5) { write_com(0x80+12); write_com(0x0f); } if(setn==6) { write_com(0x80+9); write_com(0x0f); } if(setn==7) { write_com(0x80+6); write_com(0x0f); } if(setn==8) { setn=0; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[0],l_tmpdate[0]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) flag=0;//時鐘正常運(yùn)行 write_com(0x0c);//光標(biāo)停止閃爍 } } } if(setn!=0)//更改時間 { if(s1==0)//增加時間 { delay(5000); if(s1==0) { while(!s1); delay(5000);//去鍵盤抬起時抖動 while(!s1); if(setn==1) { l_tmpdate[0]=change(l_tmpdate[0]); l_tmpdate[0]++; if(l_tmpdate[0]>=60) l_tmpdate[0]=0; { tp=l_tmpdate[0]/10; l_tmpdate[0]=l_tmpdate[0]%10; l_tmpdate[0]=l_tmpdate[0]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[0],l_tmpdate[0]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+11); tem[0]=l_tmpdate[0]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[0]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+12); Flag=1; } if(setn==2) { l_tmpdate[1]=change(l_tmpdate[1]); l_tmpdate[1]++; if(l_tmpdate[1]==60) l_tmpdate[1]=0; { tp=l_tmpdate[1]/10; l_tmpdate[1]=l_tmpdate[1]%10; l_tmpdate[1]=l_tmpdate[1]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[1],l_tmpdate[1]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+8); tem[0]=l_tmpdate[1]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[1]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+9); } if(setn==3) { l_tmpdate[2]=change(l_tmpdate[2]); l_tmpdate[2]++; if(l_tmpdate[2]>=24) l_tmpdate[2]=0; { tp=l_tmpdate[2]/10; l_tmpdate[2]=l_tmpdate[2]%10; l_tmpdate[2]=l_tmpdate[2]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[2],l_tmpdate[2]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+5); tem[0]=l_tmpdate[2]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[2]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+6); } if(setn==4) { l_tmpdate[5]=change(l_tmpdate[5]); l_tmpdate[5]++; if(l_tmpdate[5]==8) l_tmpdate[5]=1; { tp=l_tmpdate[5]/10; l_tmpdate[5]=l_tmpdate[5]%10; l_tmpdate[5]=l_tmpdate[5]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[5],l_tmpdate[5]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+14); tem[0]=l_tmpdate[5]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[5]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+15); } if(setn==5) { l_tmpdate[3]=change(l_tmpdate[3]); l_tmpdate[3]++; if(l_tmpdate[3]==32) l_tmpdate[3]=0; { tp=l_tmpdate[3]/10; l_tmpdate[3]=l_tmpdate[3]%10; l_tmpdate[3]=l_tmpdate[3]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[3],l_tmpdate[3]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+11); tem[0]=l_tmpdate[3]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[3]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+12); } if(setn==6) { l_tmpdate[4]=change(l_tmpdate[4]); l_tmpdate[4]++; if(l_tmpdate[4]==13) l_tmpdate[4]=0; write_com(0x80+8); { tp=l_tmpdate[4]/10; l_tmpdate[4]=l_tmpdate[4]%10; l_tmpdate[4]=l_tmpdate[4]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[4],l_tmpdate[4]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } tem[0]=l_tmpdate[4]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[4]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+9); } if(setn==7) { l_tmpdate[6]=change(l_tmpdate[6]); l_tmpdate[6]++; if(l_tmpdate[6]==100) l_tmpdate[6]=0; write_com(0x80+5); { tp=l_tmpdate[6]/10; l_tmpdate[6]=l_tmpdate[6]%10; l_tmpdate[6]=l_tmpdate[6]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[6],l_tmpdate[6]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } tem[0]=l_tmpdate[6]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[6]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+6); } } } if(s2==0)//減少時間 { delay(5000); if(s2==0) { while(!s2); delay(5000);//去鍵盤抬起時抖動 while(!s2); if(setn==1) { l_tmpdate[0]=change(l_tmpdate[0]); if(l_tmpdate[0]!=0) l_tmpdate[0]--; if(l_tmpdate[0]==0) l_tmpdate[0]=59; { tp=l_tmpdate[0]/10; l_tmpdate[0]=l_tmpdate[0]%10; l_tmpdate[0]=l_tmpdate[0]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[0],l_tmpdate[0]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+11); tem[0]=l_tmpdate[0]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[0]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+12); } if(setn==2) { l_tmpdate[1]=change(l_tmpdate[1]); if(l_tmpdate[1]!=0) l_tmpdate[1]--; if(l_tmpdate[1]==0) l_tmpdate[1]=59; { tp=l_tmpdate[1]/10; l_tmpdate[1]=l_tmpdate[1]%10; l_tmpdate[1]=l_tmpdate[1]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[1],l_tmpdate[1]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+8); tem[0]=l_tmpdate[1]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[1]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+9); } if(setn==3) { l_tmpdate[2]=change(l_tmpdate[2]); if(l_tmpdate[2]!=0) l_tmpdate[2]--; if(l_tmpdate[2]==0) l_tmpdate[2]=23; { tp=l_tmpdate[2]/10; l_tmpdate[2]=l_tmpdate[2]%10; l_tmpdate[2]=l_tmpdate[2]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[2],l_tmpdate[2]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+0x40+5); tem[0]=l_tmpdate[2]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[2]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+0x40+6); } if(setn==4) { l_tmpdate[5]=change(l_tmpdate[5]); if(l_tmpdate[5]!=0) l_tmpdate[5]--; if(l_tmpdate[5]==0) l_tmpdate[5]=7; { tp=l_tmpdate[5]/10; l_tmpdate[5]=l_tmpdate[5]%10; l_tmpdate[5]=l_tmpdate[5]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[5],l_tmpdate[5]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+14); tem[0]=l_tmpdate[5]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[5]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+15); } if(setn==5) { l_tmpdate[3]=change(l_tmpdate[3]); if(l_tmpdate[3]!=0) l_tmpdate[3]--; if(l_tmpdate[3]==0) l_tmpdate[3]=31; { tp=l_tmpdate[3]/10; l_tmpdate[3]=l_tmpdate[3]%10; l_tmpdate[3]=l_tmpdate[3]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[3],l_tmpdate[3]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } write_com(0x80+11); tem[0]=l_tmpdate[3]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[3]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+12); } if(setn==6) { l_tmpdate[4]=change(l_tmpdate[4]); if(l_tmpdate[4]!=0) l_tmpdate[4]--; if(l_tmpdate[4]==0) l_tmpdate[4]=12; write_com(0x80+8); { tp=l_tmpdate[4]/10; l_tmpdate[4]=l_tmpdate[4]%10; l_tmpdate[4]=l_tmpdate[4]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[4],l_tmpdate[4]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } tem[0]=l_tmpdate[4]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[4]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+9); } if(setn==7) { l_tmpdate[6]=change(l_tmpdate[6]); if(l_tmpdate[6]!=0) l_tmpdate[6]--; if(l_tmpdate[6]==0) l_tmpdate[6]=99; write_com(0x80+5); { tp=l_tmpdate[6]/10; l_tmpdate[6]=l_tmpdate[6]%10; l_tmpdate[6]=l_tmpdate[6]+tp*16; Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù) Write_Ds1302(write_add[6],l_tmpdate[6]); Write_Ds1302(0x8E,0x80);//打開寫保護(hù) } tem[0]=l_tmpdate[6]/16;//數(shù)據(jù)的轉(zhuǎn)換 tem[1]=l_tmpdate[6]&0x0f; write_data(0x30+tem[0]); write_data(0x30+tem[1]); write_com(0x80+6); } } } } } /*******************************************************/ void main(void) { //Set_RTC();//在第一次使用時給ds1302賦初值 init(); while(1) { if(flag==0) { Read_RTC(); write_lcd(); } keyscan(); } }

回答者:laowusifu2016-09-04 00:00

DS 5相關(guān)問題

相關(guān)閱讀

按字母分類: