m0_63234165 2022-01-21 15:28 采纳率: 100%
浏览 262
已结题

蓝桥杯单片机ds1302在数码管上显示时钟一直不变是怎么回事呀


#include <STC15F2K60S2.H>
#include "ds1302.h"


unsigned char SMG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code READ_CK[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; 
unsigned char code WRITE_CK[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char TIME[7]={0x30,0x59,0x23,0x17,0x10,0x06,0x21};

/*============ÈÕÀúʱÖÓ²ÎÊýÅäÖú¯Êý======================*/
void DS1302_Config()
{
    unsigned char i;
    Write_Ds1302(0x8e,0x00);    //¹Ø±Õд±£»¤
    for(i=0;i<7;i++)
    {
        Write_Ds1302(WRITE_CK[i],TIME[i]);
    }
  Write_Ds1302(0x8e,0x80);    //´ò¿ªÐ´±£»¤
}
/*==========ÈÕÀúʱÖÓÊý¾Ý¶ÁÈ¡º¯Êý===========*/
void DS1302_ReadTime()
{
    unsigned char i;
    for(i=0;i<7;i++)
    {
        TIME[i]=Read_Ds1302 (READ_CK[i]);
    }
}

void Delay(unsigned char t)
{
    while(t--);
}

void SelectHC573(unsigned char channel)
{
    switch(channel)
    {
        case 4: P2=(P2&0x1f) | 0x80; break;
        case 5: P2=(P2&0x1f) | 0xa0; break;
        case 6: P2=(P2&0x1f) | 0xc0; break;
        case 7: P2=(P2&0x1f) | 0xe0; break;
    }
}

void Display(unsigned char pos,unsigned char value)     //ÊýÂë¹ÜÏÔʾ
{
    SelectHC573(6);
    P0=0x01<<pos;
    SelectHC573(7);
    P0=value;
}

void Display_All()
{
    SelectHC573(6);
    P0=0xff;
    SelectHC573(7);
    P0=0xff;
}

void DisplayTime()            //ÊýÂë¹ÜÏÔʾʱÖÓ
{
    Display(0,SMG[TIME[2]/16]);
    Delay(100);
    Display(1,SMG[TIME[2]%16]);
    Delay(100);
    
    Display(2,0xbf);
    Delay(100);
    
    Display(3,SMG[TIME[1]/16]);
    Delay(100);
    Display(4,SMG[TIME[1]%16]);
    Delay(100);
    
    Display(5,0xbf);
    Delay(100);
    
    Display(6,SMG[TIME[0]/16]);
    Delay(100);
    Display(7,SMG[TIME[0]%16]);
    Delay(100);
    
    Display_All();
}

void main()
{
    DS1302_Config();
    {
        DS1302_ReadTime();
        DisplayTime();
    }
}

img

  • 写回答

1条回答 默认 最新

  • suqingxiao 2022-01-21 15:34
    关注

    main里面加个while试试

    void main()
    {
    whilie(1)
    {
        DS1302_Config();
        {
            DS1302_ReadTime();
            DisplayTime();
        }
    }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月29日
  • 已采纳回答 1月21日
  • 创建了问题 1月21日

悬赏问题

  • ¥50 有偿求qftp工具。能连接,下载文件,发送代码,windows环境,最好qt6 要qt creator写的
  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!