久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5465|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

求助:1302不能保存時間

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99130 發(fā)表于 2017-2-26 19:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
5黑幣
1302上電顯示14.49,然后調(diào)至任意時間,比如22.33,然后斷電,再上電,顯示的時間依舊是14.49,而不是22.33。這個問題怎么解決?我懷疑是程序的問題。都說是初始化的問題,刪掉或者屏蔽掉就行,但是沒用的,我試過了。
下面是完整程序,希望各位大神幫我解決一下問題。
/**********************************
*  DS1302簡單時間顯示    *
*   數(shù)碼管顯示     *
***********************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define W P2           //位選
#define D P0         //段選
sbit IO=P1^0;           //數(shù)據(jù)口
sbit SCLK=P1^1;          //控制數(shù)據(jù)時鐘
sbit RST=P1^2;           //使能端、復(fù)位端
/************按鍵引腳定義***********/
sbit s1=P1^5;         //按鍵 加
sbit s2=P1^6;         //按鍵 減
sbit s3=P1^7;         //按鍵 選擇
char knum=0,snum,fnum;
/***********寫時分秒地址************/
#define write_shi  0x84
#define write_fen  0x82
#define write_miao 0x80
/***********讀時分秒地址************/
#define read_shi  0x85
#define read_fen  0x83
#define read_miao 0x81
bit miao_flag;
char miao_num;
char Dmiao;
char shi,fen,miao;         //讀出數(shù)據(jù)存儲變量
uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};  //不帶小數(shù)點
uchar dd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  //帶小數(shù)點
void delay(uint z)         //延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);大約延時200ms.
{            //delay(500);大約延時500ms.
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void t0_init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
uchar read_1302(uchar add)      //讀函數(shù)
{
uchar i,date;
RST=0;           //禁止讀寫數(shù)據(jù)
for(i=0;i<8;i++)
{
  RST=1;
  SCLK=0;
  IO=add&0x01;
  add>>=1;
  SCLK=1;
}
for(i=0;i<8;i++)
{
  if(IO)
   date=date|0x80;
  else
   date=date|0x00;
  SCLK=1;
  date>>=1;
  SCLK=0;
}
RST=0;
date=date/16*10+date%16;    //進(jìn)制轉(zhuǎn)換 16轉(zhuǎn)10進(jìn)制
IO=0;         //數(shù)據(jù)讀完后,IO口必須為0,不然小時一直顯示85
return date;
}
void write_1302(uchar add,uchar dat)  //寫函數(shù)
{
uchar i;
RST=0;         //禁止讀寫數(shù)據(jù)
SCLK=0;   
for(i=0;i<8;i++)       //寫地址
{
  RST=1;         //允許讀寫數(shù)據(jù)
  SCLK=0;
  IO=add&0x01;  
  add>>=1;
  SCLK=1;
}
for(i=0;i<8;i++)       //寫數(shù)據(jù)
{
  RST=1;        //允許讀寫數(shù)據(jù)
  SCLK=0;
  IO=dat&0x01;
  dat>>=1;
  SCLK=1;
}
RST=0;
}
void init_1302()       //初始化函數(shù) 設(shè)置時間
{
write_1302(0x8e,0x00);     //保護(hù)取消,可以進(jìn)行讀寫操作
write_1302(write_miao,0x56);
write_1302(write_fen,0x49);
write_1302(write_shi,0x14);
write_1302(0x8e,0x80);     //保護(hù)啟動,不能進(jìn)行讀寫操作
}
void display(uchar shi,uchar fen)     //顯示函數(shù)
{
if(knum==0)
{
  snum=30;
  fnum=30;
}
if(knum==1)
{
  fnum++;
  snum=30;
}
if(knum==2)
{
  snum++;
  fnum=30;
}

if(snum>=30)
{
  W=0xFE;         //位選
  D=d[shi/10];       //段選
  delay(5);
  D=0Xff;         //消隱
  if(miao_flag)       //小數(shù)點閃爍
  {
   W=0xFD;
   D=dd[shi%10];
   delay(5);
   D=0Xff;         //消隱
  }
  else
  {
   W=0xFD;
   D=d[shi%10];
   delay(5);
   D=0Xff;         //消?
  }
     if(snum==60)
   snum=0;
}  
if(fnum>=30)
{
  W=0xFB;
  D=d[fen/10];
  delay(5);
  D=0Xff;         //消隱
  W=0xF7;
  D=d[fen%10];
  delay(5);
  D=0Xff;         //消隱
  if(fnum==60)
   fnum=0;
}
}
void read_sf()
{
miao=read_1302(read_miao);
if(miao!=Dmiao)
{
  Dmiao=miao;
  TR0=1;
  miao_flag=1;
}
fen=read_1302(read_fen);
shi=read_1302(read_shi);
display(shi,fen);
}
void keyscan()           //按鍵掃描函數(shù)
{            
if(s3==0)           //選擇按鍵按下
{
  delay(10);
  if(s3==0)
  {
   while(!s3)
    display(shi,fen); //加上這句,按鍵按下就不會閃
   knum++;
   if(knum==1)        //分閃爍
   {
     write_1302(0x8e,0x00);  //保護(hù)取消
     write_1302(write_miao,0x80);
   }
   if(knum==3)         //時鐘啟動
   {
    knum=0;
    write_1302(write_miao,0x00);
    write_1302(0x8e,0x80);  //保護(hù)啟動
   }
  }
}
if(knum==1)        //分鐘調(diào)節(jié)
{
  if(s1==0)       //加
  {
   delay(10);
   if(s1==0)
   {
    while(!s1)
     display(shi,fen); //加上這句,按鍵按下就不會閃
    fen++;
    if(fen==60)
     fen=0;
    write_1302(write_fen,fen/10*16+fen%10); //寫入1302
//    read_sf();     //讀出時間,然后顯示
   }
  }
  if(s2==0)
  {
   delay(10);
   if(s2==0)
   {
    while(!s2)
     display(shi,fen); //加上這句,按鍵按下就不會閃
    fen--;
    if(fen==-1)
     fen=59;
    write_1302(write_fen,fen/10*16+fen%10);
    read_sf();
   }
  }
}
if(knum==2)
{
  if(s1==0)
  {
   delay(10);
   if(s1==0)
   {
    while(!s1)
     display(shi,fen); //加上這句,按鍵按下就不會閃
    shi++;
   
    if(shi==24)
     shi=0;
    write_1302(write_shi,shi/10*16+shi%10);
    read_sf();
   }
  }
  if(s2==0)
  {
   delay(10);
   if(s2==0)
   {
    while(!s2)
       display(shi,fen); //加上這句,按鍵按下就不會閃
    shi--;
   
    if(shi==-1)
     shi=23;
    write_1302(write_shi,shi/10*16+shi%10);
    read_sf();
   }
  }
}
}
void main()
{
init_1302();
t0_init();
while(1)
{
  read_sf();
  keyscan();
}
}
void t0_timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
miao_num++;
if(miao_num==10)
{
  TR0=0;
  miao_num=0;
  miao_flag=0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:165046 發(fā)表于 2017-2-26 23:02 | 只看該作者
加電池供電了嗎!?然后通過程序檢查1302是否掉電(在初始化程序中)
回復(fù)

使用道具 舉報

板凳
ID:27916 發(fā)表于 2017-2-27 08:43 | 只看該作者
大概看了一下,你每次的初始化都是一樣的;
不知道你電路是怎么樣的,個人認(rèn)為可以從以下幾點看一下
1、硬件,1302是否有備用電源
2、我記得1302有一些地址是可以做標(biāo)記的,可以每次上電讀取這個標(biāo)記,看是否有初始化,沒有初始化就初始化一下1302并且初始化這個標(biāo)記;如果初始化過這個標(biāo)記就直接跳到1302的初始化
回復(fù)

使用道具 舉報

地板
ID:123289 發(fā)表于 2017-2-27 12:53 | 只看該作者
當(dāng)是修改后,未保存至“關(guān)鍵”的地方。
回復(fù)

使用道具 舉報

5#
ID:96682 發(fā)表于 2017-2-27 14:44 | 只看該作者
LZ,光粘貼源程序沒啥用,還要有原理圖。
興許是你修改時間后,忘記按確定鍵都有可能
回復(fù)

使用道具 舉報

6#
ID:99130 發(fā)表于 2017-2-27 15:15 | 只看該作者
zhaok2013 發(fā)表于 2017-2-26 23:02
加電池供電了嗎!?然后通過程序檢查1302是否掉電(在初始化程序中)

加了 問題已解決
回復(fù)

使用道具 舉報

7#
ID:99130 發(fā)表于 2017-2-27 15:16 | 只看該作者
wc86110 發(fā)表于 2017-2-27 14:44
LZ,光粘貼源程序沒啥用,還要有原理圖。
興許是你修改時間后,忘記按確定鍵都有可能

已解決,
回復(fù)

使用道具 舉報

8#
ID:99130 發(fā)表于 2017-2-27 15:16 | 只看該作者
yzwzfyz 發(fā)表于 2017-2-27 12:53
當(dāng)是修改后,未保存至“關(guān)鍵”的地方。

已解決。。。。。。。。。
回復(fù)

使用道具 舉報

9#
ID:140489 發(fā)表于 2017-3-10 13:28 | 只看該作者
能分享下你的解決方法嗎?
回復(fù)

使用道具 舉報

10#
ID:155507 發(fā)表于 2017-3-10 17:57 | 只看該作者
是加電池供電嗎?
回復(fù)

使用道具 舉報

11#
ID:169747 發(fā)表于 2017-3-10 21:38 | 只看該作者
加了rtc電池是把???
回復(fù)

使用道具 舉報

12#
ID:99130 發(fā)表于 2017-3-11 12:46 | 只看該作者
wt410089163 發(fā)表于 2017-3-10 21:38
加了rtc電池是把???

額 沒懂你的意思 我是程序出了問題 初始化里面定義了每次上電顯示的時間 把他屏蔽掉就好了 如果不是這個原因那還是初始化的問題 重復(fù)初始化了 每次上電都在初始化當(dāng)然不能繼續(xù)走時 把多余的刪掉就行了
回復(fù)

使用道具 舉報

13#
ID:99130 發(fā)表于 2017-3-11 12:47 | 只看該作者
lids 發(fā)表于 2017-3-10 13:28
能分享下你的解決方法嗎?

write_1302(write_miao,0x56);
write_1302(write_fen,0x49);
write_1302(write_shi,0x14);
這三句定義了上電的顯示時間,多余的 刪掉就行
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费午夜电影 | 国产盗摄视频 | 蜜桃毛片| 亚洲精品美女视频 | 婷婷丁香激情 | 日本久久精 | 国产精品美女久久久久 | 日日摸夜夜添夜夜添特色大片 | 日韩中文字幕网 | 中文在线一区二区 | 国产一区二区自拍 | 久久久www成人免费精品张筱雨 | 毛片在线免费 | 日日日日操 | 婷婷久 | 成人久久| 日韩一区二区福利视频 | 日韩欧美国产不卡 | 天天操天天舔 | 日韩中文欧美 | 国产高清在线视频 | 日韩一区二区三区在线 | 国产高清视频在线 | 久在线视频播放免费视频 | 亚洲午夜在线 | 91麻豆精品国产91久久久久久久久 | 综合久久综合久久 | 99久久精品国产毛片 | 国产精品久久久久久久久久久久 | 亚洲视频中文字幕 | 五月婷婷在线播放 | 精品久久久久久久久久 | 久久精品久久精品久久精品 | 99久久婷婷国产综合精品电影 | 天天插天天操 | 波多野结衣一区二区 | 狠狠躁躁夜夜躁波多野结依 | 中文字幕高清av | 日韩一区二区在线播放 | 日韩视频三区 | 特黄特黄a级毛片免费专区 av网站免费在线观看 |