📄 ds1302.c
字号:
/************************************************************************************************
实时时钟模块 时钟芯片型号:DS1302
使用8位动态共阴极数码管动态显示当前时间,没有设定初始时间的功能,
显示有闪烁,延时函数有可能有问题,其他显示正常
//9.20修改,使用汇编函数精确延时,显示稳定
*************************************************************************************************/
#include <at89x51.h>
#include<intrins.h>
#include <DS1302.h>
#define uchar unsigned char
#define uint unsigned int
/*********************************************************************/
uchar ucCurtime[7];
uchar buf[]={0,0,0,0,0,0,0,0};
SYSTEMTIME time1;
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^6;
sbit d8=P1^7;
//0--9 位码,0X00:清显示。
unsigned char code dispcode[13]={
0X3F,/*0*/
0X06,/*1*/
0X5B,/*2*/
0X4F,/*3*/
0X66,/*4*/
0X6D,/*5*/
0X7D,/*6*/
0X07,/*7*/
0X7F,/*8*/
0X6F,/*9*/
0X40,/*-*/
0XBF,/*0.*/
0X00,/*NULL*/ };
void delay1ms()
{
/* unsigned int i,j;
for(i=0;i<c;i++)
for(j=0;j<100;j++);
unsigned int c */
#pragma asm
MOV R4,#5
MOV R6,#100
MOV R7, #250
DJNZ R7,$
DJNZ R6, $
DJNZ R4, $
#pragma endasm
}
void main()
{
while(1)
{ DS1302_GetTime(&time1);
buf[7]=(time1.Second)%10;
buf[6]=(time1.Second)/10;
buf[4]=(time1.Minute)%10;
buf[3]=(time1.Minute)/10;
buf[1]=(time1.Hour)%10;
buf[0]=(time1.Hour)/10;
d1=0;
P2= dispcode[buf[0]]; //显示时的十位数
delay1ms();
d1=1;
d2=0;
P2= dispcode[buf[1]]; //显示时的个位数
delay1ms();
d2=1;
d3=0;
P2= dispcode[10]; //显示“-”
delay1ms();
d3=1;
d4=0;
P2= dispcode[buf[3]];
delay1ms();
d4=1; //分的十位数
d5=0;
P2= dispcode[buf[4]]; //显示分的个位数
delay1ms();
d5=1;
d6=0;
P2= dispcode[10]; //显示“-”
delay1ms();
d6=1;
d7=0;
P2= dispcode[buf[6]]; //显示时的个位数
delay1ms();
d7=1;
d8=0;
P2= dispcode[buf[7]]; //显示时的个位数
delay1ms();
d8=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -