|
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sck = P1^7;//
sbit io = P2^3;//
sbit rst = P1^3; //
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit buzzer=P0^6;
uchar time_data[7]={12,3,8,1,20,10,56};
uchar code dm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};// 段码
uchar code wm[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 位码
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写数据 地址
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; //读数据 地址
uchar disp[8];//用于存放 处理函数处理完得到的十进制数 ,,
void delay(unsigned char z)
{
while(z--);
}
void write_byte(unsigned char dat)
{
uchar m;
for(m=0;m<8;m++)
{
sck=0;
io=dat&0x01;
dat=dat>>1;
sck=1;
}
}
void wtite_ds1302(unsigned char add,unsigned char dat)
{
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_byte(add);
write_byte(dat);
rst=0;
_nop_();
io=1;
sck=1;
}
unsigned char read_ds1302(uchar add)
{
unsigned char n,value;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_byte(add);
for(n=0;n<8;n++)
{
sck=0;
value=value>>1;
_nop_();
if(io)
value=value|0x80;
sck=1;
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
return value;
}
void set()
{
unsigned char z,j;
for(z=0;z<7;z++)
{
j=time_data[z]/10;
time_data[z]=time_data[z]%10;
time_data[z]=time_data[z]+j*16;
}
wtite_ds1302(0x8e,0x00);
for(z=0;z<7;z++)
{
wtite_ds1302(write_add[z],time_data[z]);
}
wtite_ds1302(0x8e,0x80);
}
void read_rtc(void)
{ unsigned char s;
for(s=0;s<7;s++)
{
time_data[s]=read_ds1302(read_add[s]);
}
}
/*void time_pros()//处理函数
{
disp[0]=time_data[4]/16;//时 十位
disp[1]=time_data[4]%16;//时个位
disp[2]=3; //显示数字1
disp[3]=time_data[5]/16;//分 十位
disp[4]=time_data[5]%16;//分个位
disp[5]=3; //显示数字1
disp[6]=time_data[6]/16;//秒 十位
disp[7]=time_data[6]%16;//秒 个位
}*/
void display()
{
unsigned char i;
P0=0xff;
disp[0]=time_data[4]/16;//时 十位
disp[1]=time_data[4]%16;//时个位
disp[2]=3; //显示数字1
disp[3]=time_data[5]/16;//分 十位
disp[4]=time_data[5]%16;//分个位
disp[5]=3; //显示数字1
disp[6]=time_data[6]/16;//秒 十位
disp[7]=time_data[6]%16;//秒 个位
for(i=0;i<8;i++)
{
P0=dm[disp[i]]; //段码
P25= 1;
P26= 1;
P27= 1;
P25= 0;
P26= 0;
P27= 0;
P0=wm[i]; //位码
P25=0;
P26=1;
P27=1 ;
P25= 0;
P26= 0;
P27= 0;
delay(1000);
}
}
void main()
{
uchar i;
buzzer = 0; //高有效
P25=1;
P26=0;
P27=1;
P25=0;
P26=0;
P27=0;
set();
while(1)
{
P25= 0;
P26= 0;
P27= 0;
if(i==50)
{
read_rtc();
i=0;
}
i++;
display();
}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|