自制51單片機超大數(shù)碼管時鐘
delay()
{
int j;
for (j=0;j100;j++);
}
void display(unsigned char *lp)//顯示
{
uint k;
for (k=0;k4;k++)
{
pos=w[k];
segs=d[lp[k]];
delay();
segs=d[17];
}
pos=w[4];
segs=d[flash]; //秒閃爍燈
delay();
segs=d[17];
}
void Write_Ds1302_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i8;i++) //循環(huán)8次 寫入數(shù)據
{
SCL2=0;
SDA2=temp0x01; //每次傳輸?shù)妥止?jié)
temp>>=1; //右移一位
SCL2=1;
}
}
/***********************************************************
*****************/
void Write_Ds1302( unsigned char address,unsigned char dat )
{
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_(); //啟動
Write_Ds1302_Byte(address); //發(fā)送地址
Write_Ds1302_Byte(dat); //發(fā)送數(shù)據
RST=0; //恢復
}
/*********************************************************
*******************/
unsigned char Read_Ds1302 ( unsigned char address )
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
SCL2=0;
_nop_();
RST=1;
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i8;i++) //循環(huán)8次 讀取數(shù)據
{
if(SDA2)
temp|=0x80; //每次傳輸?shù)妥止?jié)
SCL2=0;
temp>>=1; //右移一位
SCL2=1;
}
RST=0;
_nop_(); //以下為DS1302復位的穩(wěn)定時間
RST=0;
SCL2=0;
_nop_();
SCL2=1;
_nop_();
SDA2=0;
_nop_();
SDA2=1;
_nop_();
return (temp); //返回
}
/**************************************************************
**************/
void Read_RTC(void) //讀取 日歷
{
unsigned char i,*p;
p=read_rtc_address; //地址傳遞
for(i=0;i7;i++) //分7次讀取 年月日時分秒星期
{
now[i]=Read_Ds1302(*p);
p++;
}
}
/***********************************************************
************/
void Set_RTC(void) //設定 日歷
{
unsigned char i,*p,tmp;
for(i=0;i7;i++){
tmp=now[i]/10;
now[i]=now[i]%10;
now[i]=now[i]+tmp*16;
}
Write_Ds1302(0x8E,0X00);
p=write_rtc_address; //傳地址
for(i=0;i7;i++) //7次寫入 年月日時分秒星期
{
Write_Ds1302(*p,now[i]);
p++;
}
Write_Ds1302(0x8E,0x80);
}
void keydelay(unsigned char t)
{
unsigned char i,j;
for(i=0;it;i++)
for(j=0;j120;j++);
}
51單片機相關文章:51單片機教程
評論