ds1302数码管显示应用
buff=ReadByte(Read_Min); //分
scanbuff[2]=buff/16;//十位
scanbuff[3]=buff%16;//个位
buff=ReadByte(Read_Sec); //秒
scanbuff[4]=buff/16;//十位
scanbuff[5]=buff%16;//个位
void WriteDS1302(void);//向DS1302写入时间。
void ReadDS1302(void);//读取DS1302中的年,月,日,星期几,小时,分钟和秒.
void SendCmd(unsigned char cmd);//传送地址
void delayus(unsigned char tt);
}
//读取地址RCmd的时间/数据
unsigned char ReadByte(unsigned char RCmd)
{
unsigned char valu=0x00,temp;
CE=0;//初使化
SCLK=0;//初使化,并为rise edge做准备
CE=1;//初使化,传输开始。The SCLK must be low when CE is driven to high level.
#defineRead_Mon0x89
#defineRead_Day0x8b
#defineRead_Yea0x8d
#define CLK_BurstW0xbf//时钟突发模式写
#define CLK_BurstR0xbf//时钟突发模式读
#define Write_RAM_Begin0xc0//RAM第一个字节写指令
sbit _74hc154_D = P1^3;
sbit CE =P1^6;
sbit SCLK=P1^5;
sbit IO=P1^4;
uchar code scan[][4]={{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},
{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
delay(10);
}
}
}
void WriteDS1302(void)
{
WriteByte(Write_Yea,BCDTUAN(13));//写13年
}
//读取DS1302中的年,月,日,星期几,小时,分钟和秒.
void ReadDS1302(void)
{
unsigned char buff;//将读取的数据送入缓存数e(Read_Yea); //年
scanbuff[10]=buff/16;//十位
scanbuff[11]=buff%16;//个位
buff=ReadByte(Read_Mon); //月
scanbuff[6]=buff/16;//十位
scanbuff[7]=buff%16;//个位
{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},
{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}
};
uchar scanbuff[]={0,0,0,0,0,0,0,0,0,0,0,0};
uchar code dispdate[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void _74hc154(uchar k)//位扫描设定
{
_74hc154_A=scan[k][0];
_74hc154_B=scan[k][1];
_74hc154_C=scan[k][2];
#define BCDTUAN(str) (str/10*16+str%10) //定义宏,将要写入DS1302的时间转化为BCD码
#define Write_Sec0x80
#defineWrite_Min0x82
#defineWrite_Hou0x84
#defineWrite_Dat0x86
#defineWrite_Mon0x88
buff=ReadByte(Read_Dat); //日
scanbuff[8]=buff/16;//十位
scanbuff[9]=buff%16;//个位
buff=ReadByte(Read_Hou); //时
scanbuff[0]=buff/16;//十位
scanbuff[1]=buff%16;//个位
SendCmd(RCmd);//传送地址
DS1302应用
刚学单片机,好多好奇,所以想做个简单的时钟。下面是PROTEUS仿真电路和电路图,简单易懂。
文笔不好,说了多余。下面是程序。
#include<reg52.h>
#include<intrins.h>
#include<ds1302.h>
#define uint unsigned int
#define uchar unsigned char
#define Read_RAM_Begin0xc1//RAM第一个字节读指令
#define RAM_BurstW0xfe//突发模式写RAM
#define RAM_BurstR0xff//突发模式读RAM
sbit _74hc154_A = P1^0;
sbit _74hc154_B = P1^1;
sbit _74hc154_C = P1^2;
_74hc154_D=scan[k][3];
}
void main()
{
uchar i;
while(1)
{
WriteDS1302();
ReadDS1302() ;
for(i=0;i<12;i++)
{
_74hc154(i); //位扫描
P0=~dispdate[scanbuff[i]];//数据送P0口
#defineWrite_day0x8a
#defineWrite_Yea0x8c
#defineWrite_WP0x8e//写保护位
#define Write_TCR0x90
#define Read_Sec0x81
#defineRead_Min0x83
#defineRead_Hou0x85
#defineRead_Dat0x87