本帖最后由 zmin21 于 2013-7-26 08:29 编辑
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsingned int
sbit wela=P2^7;
sbit dula=P2^6;
sbit tclk=P2^5; 时钟
sbit
tio=P2^4; io
sbit trst=P2^3; 复位
//sbit acc0=ACC^0;
//sbit acc7=ACC^7;
uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
uchar code wei[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管各位的码表
void delay(uchar z)
{
uchar x;
for(x=z;x>0;x--);
}
void ds1302_write(uchar byte)
{
uchar i,dat;
dat=byte;
tclk=0;
delay(2);
for(i=0;i<8;i++)
{tio=dat&0x01;
tclk=1;
delay(2);
tclk=0;
dat>>=1;
}
}
uchar ds1302_read(void)
{
uchar i,dat;
delay(2);
for(i==0;i<8;i++)
{dat=dat>>1;
if(tio=1) dat=dat|0x80;
tclk=1;
delay(2);
tclk=0;
delay(2);
}
return(dat);
}
void wr1302(uchar add,uchar data1)
{
trst=0;
tclk=0;
trst=1;
delay(2);
ds1302_write(add);
ds1302_write(data1);
tclk=1;
trst=0;
}
uchar rd1302(uchar add)
{
uchar data2;
trst=0;
tclk=0;
trst=1;
ds1302_write(add);
data2=ds1302_read();
tclk=1;
trst=0;
return(data2);
}
void ds1302_init(void)
{
uchar flag;
flag= rd1302(0x81);
if(flag&0x80)
{
wr1302(0x8e,0x00);//关保护寄存器
wr1302(0x90,0xa5);//卷电流充电
wr1302(0x80,((55/10)<<4|(55%10)));//秒
wr1302(0x82,((19/10)<<4|(19%10)));//分
wr1302(0x84,((10/10)<<4|(10%10)));//时
wr1302(0x8e,0x80);//开保护寄存器
}
}
void display_led(uchar date,uchar num)
{
P0=wei[num];
wela=1;
wela=0;
P0=duan[date];
dula=1;
dula=0;
delay(50);
}
void main()
{
uchar sec,sec1,sec2;
uchar min,min1,min2;
uchar hour,hour1,hour2;
ds1302_init();
delay(4);
while(1)
{
sec=rd1302(0x81);
sec1=(sec&0x0f);
sec2=(sec>>4);
min=rd1302(0x83);
min1=min&0x0f;
min2=(min>>4);
hour=rd1302(0x85);
hour1=hour&0x0f;
hour2=(hour>>4);
display_led(sec1,5);
display_led(sec2,4);
display_led(min1,3);
display_led(min2,2);
display_led(hour1,1);
display_led(hour1,0);
}
}
这是所有程序, 愿大神指导指导,小弟刚学不久,本来很有激情的,一下子被1302打击了,求激励!
新人,可惜只有6个E币,全送了
-
-
工程备份.zip
下载积分: 积分 -1 分
25.05 KB, 下载次数: 4, 下载积分: 积分 -1 分
修改的小问题后的定稿,呵呵...上传给新手参考
改了,现在的问题是1,初始化不出来,2,秒钟跳数,并且会显示76,84之类的不可能出现的秒数
一周热门 更多>