单片机课程设计-基于at89c52单片机的led点阵显示电子钟设计_毕业论文 下载本文

内容发布更新时间 : 2024/12/23 20:49:39星期一 下面是文章的全部内容请认真阅读。

uchar i; for(i=8;i>0;i--) {

ACC=ACC>>1;

ACC7=ds1302_IO;//由于ds1302读数据的时候,第一个数据读取在发一个Byte命令后,在第八位的下降沿 ds1302_SCLK=1;

ds1302_SCLK=0;//产生下降沿输出一位数据 }

return(ACC); }

void write_Byte(uchar tdata)//向1302中写入一字节数据 {

uchar i; ACC=tdata; for(i=8;i>0;i--) {

ds1302_IO=ACC0; ds1302_SCLK=1;

ds1302_SCLK=0;//产生上升沿输入数据 ACC=ACC>>1; }

}

void write_data_ds1302(uchar taddr,uchar tdata)//向1302中写入 地址为taddr的空间 写入数据tdata {

ds1302_RST=0; ds1302_SCLK=0; ds1302_RST=1; write_Byte(taddr); write_Byte(tdata); ds1302_RST=0; ds1302_SCLK=1; }

uchar read_data_ds1302(uchar taddr)//从1302中读出地址为taddr的空间数据 {

uchar tdata; ds1302_RST=0; ds1302_SCLK=0; ds1302_RST=1; write_Byte(taddr); tdata=read_Byte(); ds1302_RST=0; ds1302_SCLK=1; return(tdata);

}

void set_ds1302(uchar *P1302)// {

uchar i;

uchar taddr = 0x80;

write_data_ds1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ for(i =7; i>0; i--) {

write_data_ds1302(taddr,*P1302); /* 秒 分 时 日 月 星期 年 */ P1302++; taddr+=2; }

write_data_ds1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/ }

void get_ds1302() {

uchar k;

uchar taddr = 0x81; for (k=0; k<7; k++) {

now_time[k] = read_data_ds1302(taddr);/*格式为: 秒 分 时 日 月 星期 年 */