欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機ds1302時鐘掉電保護源程序
[打印本頁]
作者:
scott1026
時間:
2018-10-24 23:47
標題:
51單片機ds1302時鐘掉電保護源程序
51單片機ds1302時鐘掉電保護
單片機源程序如下:
/*************************************************************
不借助24c02存儲數據,利用DS1302內部RAM寫入數據,如果數據掉電丟失
則初始化,如果數據不丟失,則不初始化。
**************************************************************/
#include<reg51.h>
#include<intrins.h>
#include"lcd1602.h"
#include"ds1302.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char second,minute,hour,day,month,year,week,count=0;
unsigned char ReadValue,num,time;
sbit menu=P3^2; //菜單
sbit add=P3^3; //加一
sbit dec=P3^4; //減一
sbit ok = P3^5; //確認
void delay(unsigned int z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void read_date(void)
{
ReadValue = ReadSet1302(0x81);
second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = ReadSet1302(0x83);
minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = ReadSet1302(0x85);
hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = ReadSet1302(0x87);
day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = ReadSet1302(0x89);
month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = ReadSet1302(0x8d);
year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue=ReadSet1302(0x8b); //讀星期
week=ReadValue&0x07;
DisplaySecond(second);
DisplayMinute(minute);
DisplayHour(hour);
DisplayDay(day);
DisplayMonth(month);
DisplayYear(year);
DisplayWeek(week);
}
void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num)
{
newval=ReadSet1302(newaddr); //讀取當前時間
newval=((newval&0x70)>>4)*10+(newval&0x0f); //將bcd碼轉換成十進制
if(flag) //判斷是加一還是減一
{
newval++;
switch(s1num)
{
case 1: if(newval>99) newval=0;
DisplayYear(newval);
break;
case 2: if(newval>12) newval=1;
DisplayMonth(newval);
break;
case 3: if(newval>31) newval=1;
DisplayDay(newval);
break;
case 4: if(newval>6) newval=0;
DisplayWeek(newval);
break;
case 5: if(newval>23) newval=0;
DisplayHour(newval);
break;
case 6: if(newval>59) newval=0;
DisplayMinute(newval);
break;
case 7: if(newval>59) newval=0;
DisplaySecond(newval);
break;
default:break;
}
}
else
{
newval--;
switch(s1num)
{
case 1: if(newval==0) newval=99;
DisplayYear(newval);
break;
case 2: if(newval==0) newval=12;
DisplayMonth(newval);
break;
case 3: if(newval==0) newval=31;
DisplayDay(newval);
break;
case 4: if(newval<0) newval=6;
DisplayWeek(newval);
break;
case 5: if(newval<0) newval=23;
DisplayHour(newval);
break;
case 6: if(newval<0) newval=59;
DisplayMinute(newval);
break;
case 7: if(newval<0) newval=59;
DisplaySecond(newval);
break;
default:break;
}
}
WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10)); //將新數據寫入寄存器
}
//鍵盤掃描程序
//*******************************************
void key_scan(void)
{ uchar miao,s1num=0;
if(menu==0)
{
delay(5);
if(menu==0)
{
while(!menu);
s1num++;
while(1)
{
if(menu==0)
{
delay(5);
if(menu==0)
{
while(!menu);
s1num++;
}
}
rd=0;
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,miao|0x80);
write_com(0x0f);//光標閃
//年
if(s1num==1)
{
year=ReadSet1302(0x8d);
write_com(0x80+4); //年光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
turn_val(year,1,0x8d,1);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(year,0,0x8d,1);
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//年
//月
if(s1num==2)
{
month=ReadSet1302(0x89);
write_com(0x80+7); //月光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
turn_val(month,1,0x89,2);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(month,0,0x89,2);
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//月
//日
if(s1num==3)
{
day=ReadSet1302(0x87);
write_com(0x80+10);//日光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
turn_val(day,1,0x87,3);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(day,0,0x87,3); //寫入日寄存器
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//日
//星期
if(s1num==4)
{
week=ReadSet1302(0x8b);
write_com(0x80+14); //星期光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
turn_val(week,1,0x8b,4);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(week,0,0x8b,4);
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//星期
//時
if(s1num==5)
{
hour=ReadSet1302(0x85);
write_com(0x80+0x40+3); //時光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
turn_val(hour,1,0x85,5);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(hour,0,0x85,5);
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//時
//分
if(s1num==6)//調時間分
{
minute=ReadSet1302(0x83);
write_com(0x80+0x40+6);
if(add==0)
{
delay(5);
if(add==0)
{
while(!add);
turn_val(minute,1,0x83,6); //寫入分寄存器
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(minute,0,0x83,6); //寫入分寄存器
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//分
//秒
if(s1num==7)//調時間秒
{
second=ReadSet1302(0x81);
write_com(0x80+0x40+9);//秒光標
if(add==0)
{
delay(3);
if(add==0)
{
while(!add);
if(second==0x60)
second=0x00;
turn_val(second,1,0x81,7);
}
}
if(dec==0)
{
delay(3);
if(dec==0)
{
while(!dec);
turn_val(second,0,0x81,7);
}
}
if(ok == 0) //確認鍵
{
delay(3);
if(ok==0)
{
while(!ok);
miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}//秒
if(s1num==8)
{ miao=ReadSet1302(0x81);
second=miao;
WriteSet1302(0x80,second&0x7f);
s1num=0;//s1num清零//
write_com(0x0c);//光標不閃爍//
break;
}
}
}
}
}
void main()
{
init();
Init_DS1302(); //將1302初始化
while(1)
{
read_date();
key_scan();
}
}
復制代碼
0.png
(50 KB, 下載次數: 33)
下載附件
2018-10-25 01:51 上傳
所有資料51hei提供下載:
程序1-無24c02,掉電保護.zip
(61.27 KB, 下載次數: 66)
2018-10-24 23:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
ahshmj
時間:
2018-10-25 08:49
沒有備用電池嗎?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1