找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1487|回复: 2
打印 上一主题 下一主题
收起左侧

基于52单片机,可调时钟不能再oled上显示

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 50%)
跳转到指定楼层
楼主
ID:671688 发表于 2023-3-31 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可调时钟不能在四针脚oled上显示问题 10-1 DS1302时钟.zip (107.83 KB, 下载次数: 7)
大佬能帮我看看,基于stc89c52单片机,可调时钟不能在四针脚oled上显示,程序哪出了问题
#include <REGX52.H>
#include "OLED.h"
#include "DS1302.h"
#include "Key.h"
#include "Timer0.h"
#include "Delay.H"

#define uchar unsigned char   
#define uint unsigned int

unsigned char KeyNum,SHOW_MODE,TimeSetFlashFlag;
char TimeSetSelect;

void TimeShow(void)
{
        DS1302_ReadTime();
        OLED_ShowNum(0,3,DS1302_Time[0]/10,1,8);        
        OLED_ShowNum(7,3,DS1302_Time[0]%10,1,8);        
        OLED_ShowString(15,3,"-",8);               
        OLED_ShowNum(22,3,DS1302_Time[1]/10,1,8);        
        OLED_ShowNum(29,3,DS1302_Time[1]%10,1,8);
        OLED_ShowString(35,3,"-",8);
        OLED_ShowNum(42,3,DS1302_Time[2]/10,1,8);
        OLED_ShowNum(49,3,DS1302_Time[2]%10,1,8);
        OLED_ShowNum(0,4,DS1302_Time[3]/10,1,8);
        OLED_ShowNum(7,4,DS1302_Time[3]%10,1,8);
        OLED_ShowString(15,4,":",8);
        OLED_ShowNum(22,4,DS1302_Time[4]/10,1,8);
        OLED_ShowNum(29,4,DS1302_Time[4]%10,1,8);
        OLED_ShowString(35,4,":",8);
        OLED_ShowNum(42,4,DS1302_Time[5]/10,1,8);
        OLED_ShowNum(49,4,DS1302_Time[5]%10,1,8);
}

void TimeSet(void)
{
        if(KeyNum==2){TimeSetSelect++;if(TimeSetSelect>5){TimeSetSelect=0;}}
        if(KeyNum==3){TimeSetSelect--;if(TimeSetSelect<0){TimeSetSelect=5;}}        
        
        if(KeyNum==4)
        {
                DS1302_Time[TimeSetSelect]++;
                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)
                {
                        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)
                {
                        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;}
                if(DS1302_Time[4]>59){DS1302_Time[4]=0;}
                if(DS1302_Time[5]>59){DS1302_Time[5]=0;}
        }
        if(KeyNum==5)
        {
                DS1302_Time[TimeSetSelect]--;
                if(DS1302_Time[0]<0){DS1302_Time[0]=99;}
                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;}
                        }
                }
                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){OLED_ShowString(0,3,"  ",8);}
        else {OLED_ShowNum(0,3,DS1302_Time[0]/10,1,8);OLED_ShowNum(7,3,DS1302_Time[0]%10,1,8);}
        if(TimeSetSelect==1 && TimeSetFlashFlag==1){OLED_ShowString(22,3,"  ",8);}
        else {OLED_ShowNum(22,3,DS1302_Time[1]/10,1,8);OLED_ShowNum(29,3,DS1302_Time[1]%10,1,8);}
        if(TimeSetSelect==2 && TimeSetFlashFlag==1){OLED_ShowString(42,3,"  ",8);}
        else {OLED_ShowNum(42,3,DS1302_Time[2]/10,1,8);OLED_ShowNum(49,3,DS1302_Time[2]%10,1,8);}
        if(TimeSetSelect==3 && TimeSetFlashFlag==1){OLED_ShowString(0,4,"  ",8);}
        else {OLED_ShowNum(0,4,DS1302_Time[3]/10,1,8);OLED_ShowNum(7,4,DS1302_Time[3]%10,1,8);}
        if(TimeSetSelect==4 && TimeSetFlashFlag==1){OLED_ShowString(22,4,"  ",8);}
        else {OLED_ShowNum(22,4,DS1302_Time[4]/10,1,8);OLED_ShowNum(29,4,DS1302_Time[4]%10,1,8);}
        if(TimeSetSelect==5 && TimeSetFlashFlag==1){OLED_ShowString(42,4,"  ",8);}
        else {OLED_ShowNum(42,4,DS1302_Time[5]/10,1,8);OLED_ShowNum(49,4,DS1302_Time[5]%10,1,8);}
}


void main()
{
        OLED_Init();
        OLED_Clear();
        DS1302_Init();
    Timer0_Init();
        
        DS1302_SetTime();//设置时间
        
        while(1)
        {
                KeyNum=Key_shi();
                if(KeyNum==1)
                {
                        if(SHOW_MODE==0){SHOW_MODE=1;TimeSetSelect=0;}
                        else if(SHOW_MODE==1){SHOW_MODE=0;DS1302_SetTime();}
                }
                switch(SHOW_MODE)
                {
                        case 0:TimeShow();break;
                        case 1:TimeSet();break;
                }                                

        }
}


void Timer0_Routine() interrupt 1
{
        static unsigned int T0Count;
        TL0 = 0x66;               
        TH0 = 0xFC;               
        T0Count++;
        if(T0Count>=500)
        {
                T0Count=0;
                TimeSetFlashFlag=!TimeSetFlashFlag;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:384109 发表于 2023-4-2 08:11 | 只看该作者
主程序里就没有要显示时间啊
回复

使用道具 举报

板凳
ID:671688 发表于 2023-4-12 10:32 | 只看该作者
人中狼 发表于 2023-4-2 08:11
主程序里就没有要显示时间啊

有呀,show_mode里面模式0就是显示时间啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表