?? 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 + -