蓝桥杯ds1302时分秒显示
Posted 一心向月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯ds1302时分秒显示相关的知识,希望对你有一定的参考价值。
这次我只让它显示时分秒,如果有需要显示年月日的,自行修改。
main.c文件
#include "stc15f2k60s2.h"
#include "ds1302.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code duan[12]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0xff,0xbf;
extern unsigned char time[3];
void delay(u16 i)
while(i--);
void Chan_hc573(chose)
switch(chose)
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;
P2 = ( P2 & 0x1f ) | 0x00;
void Smg_display(u8 com,u8 dat)
P0=0xff;
Chan_hc573(7);
P0=0x01<<com;
Chan_hc573(6);
P0=dat;
Chan_hc573(7);
void Close_smg()
P0=0x00;
Chan_hc573(6);
P0=0xff;
Chan_hc573(7);
void Display_temp()
Smg_display(0,duan[time[0]/16]); delay(500);
Smg_display(1,duan[time[0]%16]); delay(500);
Smg_display(2,duan[11]); delay(500);
Smg_display(3,duan[time[1]/16]); delay(500);
Smg_display(4,duan[time[1]%16]); delay(500);
Smg_display(5,duan[11]); delay(500);
Smg_display(6,duan[time[2]/16]); delay(500);
Smg_display(7,duan[time[2]%16]); delay(500);
Close_smg();
void Init_system()
P0=0x00;
Chan_hc573(5);
P0=0xff;
Chan_hc573(4);
void main()
Init_system();
wire_ds1302();
while(1)
read_ds1302();
Display_temp();
ds1302.c文件
#include <reg52.h>
#include <intrins.h>
#include "ds1302.h"
sbit SCK=P1^7;
sbit SDA=P2^3;
sbit RST = P1^3;
unsigned char time[3]=0x13,0x14,0x20;
unsigned char wire_addr[3]=0x84,0x82,0x80;
unsigned char read_addr[3]=0x85,0x83,0x81;
void Write_Ds1302(unsigned char temp)
unsigned char i;
for (i=0;i<8;i++)
SCK=0;
SDA=temp&0x01;
temp>>=1;
SCK=1;
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
RST=0; _nop_();
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
Write_Ds1302(dat);
RST=0;
unsigned char Read_Ds1302_Byte ( unsigned char address )
unsigned char i,temp=0x00;
RST=0; _nop_();
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
for (i=0;i<8;i++)
SCK=0;
temp>>=1;
if(SDA)
temp|=0x80;
SCK=1;
RST=0; _nop_();
SCK=0; _nop_();
SCK=1; _nop_();
SDA=0; _nop_();
SDA=1; _nop_();
return (temp);
void wire_ds1302()
unsigned char i;
for(i=0;i<3;i++)
Write_Ds1302_Byte(wire_addr[i],time[i]);
void read_ds1302()
unsigned char i;
for(i=0;i<3;i++)
time[i]=Read_Ds1302_Byte(read_addr[i]);
ds1302.h文件
#ifndef __DS1302_H
#define __DS1302_H
void wire_ds1302();
void read_ds1302();
#endif
以上是关于蓝桥杯ds1302时分秒显示的主要内容,如果未能解决你的问题,请参考以下文章