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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

基于STC89C56單片機(jī)的DS1302可調(diào)時(shí)鐘(不按照我設(shè)置的時(shí)間顯示)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:970151 發(fā)表于 2023-10-25 21:22 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
450黑幣
為什么我的按鍵可調(diào)時(shí)鐘不按照我的設(shè)置的顯示呢 我可以按鍵改變?cè)O(shè)置的時(shí)間LCD也會(huì)對(duì)應(yīng)顯示我設(shè)置過(guò)的時(shí)間,但是我只要一按鍵推出TimeSet模式,它就又顯示之前的時(shí)間了。我明明聲明了全局?jǐn)?shù)組。但是我在每個(gè)時(shí)間改變之后的語(yǔ)句后面加了DS1302_SetTime(),就解決這個(gè)問(wèn)題了。有大佬知道為什么么? 為什么不可以等所有東西設(shè)置完在退出的最后加一句DS1302_SetTime()實(shí)現(xiàn)呢?

51hei圖片_20231025210350.png (665.36 KB, 下載次數(shù): 76)

51hei圖片_20231025210350.png

51hei圖片_20231025210856.png (666.07 KB, 下載次數(shù): 69)

51hei圖片_20231025210856.png

51hei圖片_20231025210922.png (774.77 KB, 下載次數(shù): 73)

51hei圖片_20231025210922.png

51hei圖片_20231025210956.png (552.41 KB, 下載次數(shù): 78)

51hei圖片_20231025210956.png

51hei圖片_20231025212150.jpg (305.02 KB, 下載次數(shù): 88)

51hei圖片_20231025212150.jpg

10-2DS1302可調(diào)時(shí)鐘.zip

69.15 KB, 下載次數(shù): 28

普中-6開(kāi)發(fā)板原理圖.pdf

205.83 KB, 下載次數(shù): 14

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

使用道具 舉報(bào)

沙發(fā)
ID:970151 發(fā)表于 2023-10-25 21:23 | 只看該作者
全部的源代碼和開(kāi)發(fā)板原理圖已上傳
回復(fù)

使用道具 舉報(bào)

板凳
ID:69038 發(fā)表于 2023-10-26 07:14 | 只看該作者
沒(méi)有細(xì)看你的代碼圖片,能讀寫,說(shuō)明時(shí)序正常,顯示不對(duì)可能是你的數(shù)據(jù)轉(zhuǎn)換沒(méi)做好:
1302讀寫的是十進(jìn)制BCD碼,你該不會(huì)是當(dāng)做16進(jìn)制來(lái)處理了吧?
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2023-10-26 07:32 | 只看該作者
那就改為修改立即生效,不能成功的原因極大可能是讀取,或在調(diào)節(jié)時(shí)停止讀取并在更新后恢復(fù)讀取.
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2023-10-26 10:36 | 只看該作者
Diameter 發(fā)表于 2023-10-25 21:23
全部的源代碼和開(kāi)發(fā)板原理圖已上傳

把這個(gè)示例的端口定義按你的實(shí)際電路重新定義即可運(yùn)行。



萬(wàn)年歷漢字1602 1302 1820 仿真范例程序.rar (141.83 KB, 下載次數(shù): 15)

回復(fù)

使用道具 舉報(bào)

6#
ID:1064915 發(fā)表于 2023-10-26 11:51 | 只看該作者
把單片機(jī)STC89C56換成89C52,單片機(jī)性能不完全一致
回復(fù)

使用道具 舉報(bào)

7#
ID:584814 發(fā)表于 2023-10-26 18:18 | 只看該作者
本帖最后由 man1234567 于 2023-10-27 09:59 編輯

主要看主程序里的注釋自己調(diào)整就好,總體感覺(jué)有些啰嗦有點(diǎn)亂
#include <REGX51.H>
#include "LCD1602.h"
#include "DS1302.h"
#include "Timer0.h"
#include "Key.h"

unsigned char KeyNum,MODE,TimeSetSelect,TimeSetFlashFlag;

void TimeShow(void)//讀時(shí)間并按指定位置顯示
{
                DS1302_ReadTime();//讀時(shí)間               
                LCD_ShowNum(1,1,DS1302_Time[0],2);//按指定位置顯示年
                LCD_ShowNum(1,4,DS1302_Time[1],2);//按指定位置顯示月
                LCD_ShowNum(1,7,DS1302_Time[2],2);//按指定位置顯示日
                LCD_ShowNum(2,1,DS1302_Time[3],2);//按指定位置顯示時(shí)
                LCD_ShowNum(2,4,DS1302_Time[4],2);//按指定位置顯示分
                LCD_ShowNum(2,7,DS1302_Time[5],2);//按指定位置顯示秒
          
}
void TimeSet(void)//修改時(shí)間并實(shí)時(shí)顯示
{
        if(KeyNum==2)//按下2號(hào)鍵
        {
                TimeSetSelect++;//年月日時(shí)分秒循環(huán)跳轉(zhuǎn)
                if(TimeSetSelect>5)//單向跳轉(zhuǎn)的防溢出
                {
                        TimeSetSelect=0;
                }
        }
        if(KeyNum==3)//按下3號(hào)鍵
        {
                DS1302_Time[TimeSetSelect]++;//時(shí)間內(nèi)容循環(huán)跳轉(zhuǎn),上行,+
                if(DS1302_Time[0]>99){DS1302_Time[0]=0;}//年
                if(DS1302_Time[1]>12){DS1302_Time[1]=1;}//月
                if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||DS1302_Time[1]==7||DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12)//適應(yīng)月大小等
                {               
                        if(DS1302_Time[2]>31)//雙月大防溢出
                        {
                        DS1302_Time[2]=1;
                        }
                }
                else if(DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9||DS1302_Time[1]==11)//單月小防溢出
                {
                        if(DS1302_Time[2]>30)
                {
                        DS1302_Time[2]=1;
                }
                }
                else if(DS1302_Time[1]==2)//2月平潤(rùn)防溢出
                {
                        if(DS1302_Time[0]%4==0)
                        {
                                        if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
                        }
                        else
                        {
                                if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
                        }
                       
                }
                if(DS1302_Time[3]>23){DS1302_Time[3]=0;}//時(shí)防溢出
                if(DS1302_Time[4]>59){DS1302_Time[4]=0;}//分防溢出
                if(DS1302_Time[5]>59){DS1302_Time[5]=0;}//秒防溢出
                //                DS1302_SetTime();//不奇怪,原因看看主程序注釋。
        }
        if(KeyNum==4)////時(shí)間內(nèi)容循環(huán)跳轉(zhuǎn),下行,-
        {
                DS1302_Time[TimeSetSelect]--;
                if(DS1302_Time[0]<0){DS1302_Time[0]=99;}//同+相關(guān)原理,有些啰嗦可以合寫
                if(DS1302_Time[1]<1){DS1302_Time[1]=12;}
                if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||DS1302_Time[1]==7||DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12)
                {               
                        if(DS1302_Time[2]<1)
                        {
                        DS1302_Time[2]=31;
                        }
                        if(DS1302_Time[2]>31)
                        {
                        DS1302_Time[2]=1;
                        }
                }
                else if(DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9||DS1302_Time[1]==11)
                {
                if(DS1302_Time[2]<1)
                {
                DS1302_Time[2]=30;
                }
                        if(DS1302_Time[2]>30)
                {
                        DS1302_Time[2]=1;
                }       
                }
                else if(DS1302_Time[1]==2)
                {
                        if(DS1302_Time[0]%4==0)
                        {
                                if(DS1302_Time[2]<1){DS1302_Time[2]=29;}
                                if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
                        }
                        else
                        {
                                if(DS1302_Time[2]<1){DS1302_Time[2]=28;}
                                if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
                        }
                                DS1302_SetTime();
                }
                if(DS1302_Time[3]<0){DS1302_Time[3]=23;}
                if(DS1302_Time[4]<0){DS1302_Time[4]=59;}
                if(DS1302_Time[5]<0){DS1302_Time[5]=59;}
        }
        if(TimeSetSelect==0&&TimeSetFlashFlag==1){LCD_ShowString(1,1,"  ");}//依選擇調(diào)整類別的顯示定位,同樣感覺(jué)啰嗦
        else{        LCD_ShowNum(1,1,DS1302_Time[0],2);}
        if(TimeSetSelect==1&&TimeSetFlashFlag==1){LCD_ShowString(1,4,"  ");}
        else{        LCD_ShowNum(1,4,DS1302_Time[1],2);}
        if(TimeSetSelect==2&&TimeSetFlashFlag==1){LCD_ShowString(1,7,"  ");}
        else{        LCD_ShowNum(1,7,DS1302_Time[2],2);}
        if(TimeSetSelect==3&&TimeSetFlashFlag==1){LCD_ShowString(2,1,"  ");}
        else{        LCD_ShowNum(2,1,DS1302_Time[3],2);}
        if(TimeSetSelect==4&&TimeSetFlashFlag==1){LCD_ShowString(2,4,"  ");}
        else{        LCD_ShowNum(2,4,DS1302_Time[4],2);}
        if(TimeSetSelect==5&&TimeSetFlashFlag==1){LCD_ShowString(2,7,"  ");}
        else{        LCD_ShowNum(2,7,DS1302_Time[5],2);}
//        DS1302_SetTime();//寫時(shí)間,可以退出調(diào)整后寫,否則過(guò)于頻繁
}
void main()
{
        LCD_Init();//1602初始化,圖片中正常顯示就沒(méi)看了
        DS1302_Init();//1302初始化,圖片中正常顯示就沒(méi)看了
        Timer0_Init();//定時(shí)器初始化,建議在調(diào)整時(shí)間開(kāi)始時(shí)執(zhí)行,停留在調(diào)時(shí)狀態(tài)過(guò)長(zhǎng)時(shí)自動(dòng)返回顯示
        LCD_ShowString(1,1,"  -  -  ");//美化上行
        LCD_ShowString(2,1,"  :  :  ");//美化下行

        while(1)//主循環(huán),先讀按鍵,有1按下時(shí)反轉(zhuǎn)狀態(tài)關(guān)并執(zhí)行相關(guān)語(yǔ)句,然后有無(wú)按1鍵都選擇狀態(tài)執(zhí)行顯示/寫時(shí)。
        {

                KeyNum=Key();//讀按鍵,1為調(diào)時(shí)/顯時(shí)切換,2為調(diào)時(shí)時(shí)選擇調(diào)整類別,3、4分別是調(diào)整的+和-。
                if(KeyNum==1)//按下1號(hào)鍵后切換調(diào)時(shí)/顯示
                {
                        if(MODE==0)//如果正常顯示時(shí)
                        {
                          MODE=1;//立即先切換到調(diào)時(shí)模式
                                TimeSetSelect=0;//然后選擇從年開(kāi)始調(diào)整,然后并不立即調(diào)時(shí),而是隨后寫入時(shí)間
                        }
                        else if(MODE==1)//如果調(diào)時(shí)模式時(shí)
                  {
                                MODE=0;//立即先切換到正常顯示模式,然后執(zhí)行調(diào)時(shí)
                                DS1302_SetTime();//開(kāi)始調(diào)時(shí),隨后不執(zhí)行寫時(shí)(TimeSet();),往下執(zhí)行就是顯示新讀取1302的時(shí)間
                  }
                }
               
                switch(MODE)//選擇顯時(shí)(模式0)和調(diào)時(shí)(模式1),順序執(zhí)行不受按鍵影響:
                {
                        case 0:TimeShow();break;//顯時(shí)(因?yàn)樵诎聪骆I后已反轉(zhuǎn)模式,因此顯示的以是重新讀1302的時(shí)間而不是調(diào)整后的時(shí)間,此時(shí)顯示的時(shí)間不是以前的而是以前的時(shí)間加上你在調(diào)時(shí)中停留的時(shí)間,理論有一定概率顯示是和以前一樣的)
                        case 1:TimeSet();break;//寫時(shí)間(因?yàn)樵诎聪骆I后已反轉(zhuǎn)模式所以不在調(diào)時(shí)后執(zhí)行,此時(shí)并寫入時(shí)間上次讀出的時(shí)間,不按鍵就一直這樣寫且理論上極小概率可能回退一秒,再按1鍵就進(jìn)入調(diào)時(shí)再反轉(zhuǎn)進(jìn)入顯示模式)
                }
        }
}

void Timer0_Routine() interrupt 1//每隔一秒執(zhí)行一次中斷
{
        static unsigned int T0Count;
        TH0=64535/256;
        TL0=64535%256;
        T0Count++;
        if(T0Count>=500)
        {
                T0Count=0;
                TimeSetFlashFlag=!TimeSetFlashFlag;
        }
}
回復(fù)

使用道具 舉報(bào)

8#
ID:970151 發(fā)表于 2023-10-27 11:55 | 只看該作者
man1234567 發(fā)表于 2023-10-26 18:18
主要看主程序里的注釋自己調(diào)整就好,總體感覺(jué)有些啰嗦有點(diǎn)亂
#include
#include "LCD1602.h"

  “switch(MODE)//選擇顯時(shí)(模式0)和調(diào)時(shí)(模式1),順序執(zhí)行不受按鍵影響:
                {
                        case 0:TimeShow();break;//顯時(shí)(因?yàn)樵诎聪骆I后已反轉(zhuǎn)模式,因此顯示的以是重新讀1302的時(shí)間而不是調(diào)整后的時(shí)間,此時(shí)顯示的時(shí)間不是以前的而是以前的時(shí)間加上你在調(diào)時(shí)中停留的時(shí)間,理論有一定概率顯示是和以前一樣的)” 為啥我的DS1302_SetTime只要調(diào)用過(guò)不就會(huì)把我全局?jǐn)?shù)組里改變的時(shí)間寫到DS1302里面 我DS1302不應(yīng)該存在以前的時(shí)間的啊
回復(fù)

使用道具 舉報(bào)

9#
ID:584814 發(fā)表于 2023-10-27 14:59 | 只看該作者
Diameter 發(fā)表于 2023-10-27 11:55
“switch(MODE)//選擇顯時(shí)(模式0)和調(diào)時(shí)(模式1),順序執(zhí)行不受按鍵影響:
                {
    ...

細(xì)讀我的注釋就知道了。
改的方式很多,比如模式的切換可以在相應(yīng)模式工作完成后進(jìn)行。
你的程序現(xiàn)在是顯示模式時(shí)寫時(shí)間到1302而修改后不保存只是重讀1302再顯示。
回復(fù)

使用道具 舉報(bào)

10#
ID:970151 發(fā)表于 2023-10-27 16:56 | 只看該作者
man1234567 發(fā)表于 2023-10-27 14:59
細(xì)讀我的注釋就知道了。
改的方式很多,比如模式的切換可以在相應(yīng)模式工作完成后進(jìn)行。
你的程序現(xiàn)在是 ...

逆天我跟著視頻教程做的 DS1302寫完還要加保存程序么 不是寫入 就自動(dòng)覆蓋DS1302芯片原來(lái)的數(shù)據(jù)啊
回復(fù)

使用道具 舉報(bào)

11#
ID:965189 發(fā)表于 2023-10-28 08:56 來(lái)自手機(jī) | 只看該作者
我之前試過(guò)修改不成功,后來(lái)每次修改之后重新初始化DS1302就可以了。
回復(fù)

使用道具 舉報(bào)

12#
ID:584814 發(fā)表于 2023-10-28 17:15 | 只看該作者
Diameter 發(fā)表于 2023-10-27 16:56
逆天我跟著視頻教程做的 DS1302寫完還要加保存程序么 不是寫入 就自動(dòng)覆蓋DS1302芯片原來(lái)的數(shù)據(jù)啊

你畫個(gè)框圖就知道邏輯錯(cuò)在哪里了
回復(fù)

使用道具 舉報(bào)

13#
ID:476415 發(fā)表于 2024-1-7 10:27 | 只看該作者
是時(shí)序上出問(wèn)題了,寫入操作沒(méi)有完成時(shí)序?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人三级在线观看 | 成人av片在线观看 | 黄视频网址 | 综合色播 | 日韩精品一区二区三区老鸭窝 | 免费午夜视频在线观看 | 亚洲免费久久久 | 中文天堂网| 欧美综合久久 | av大片在线观看 | caoporn免费在线视频 | 亚洲视频区 | 成人免费在线视频 | 综合亚洲视频 | 成人精品一区二区三区 | 午夜影院视频在线观看 | 成人精品福利 | 伊人影院在线观看 | 中文字幕在线一区 | 美国av毛片 | 国产精品久久久久久婷婷天堂 | 在线播放91 | 国产成人啪免费观看软件 | 午夜久久| 国产激情精品一区二区三区 | 亚洲综合精品 | 久久久一区二区 | 日韩国产一区二区三区 | 欧美一区二区三区在线播放 | 男人亚洲天堂 | 亚洲欧美日韩电影 | 久久1区 | 日韩欧美在线视频 | 天天爽夜夜爽精品视频婷婷 | 中文字幕在线一 | 免费国产一区二区视频 | 午夜精品一区二区三区在线观看 | 成人午夜电影网 | 成人精品影院 | 午夜一区二区三区视频 | www.成人在线视频 |