ds1302数码管显示.doc_第1页
ds1302数码管显示.doc_第2页
ds1302数码管显示.doc_第3页
ds1302数码管显示.doc_第4页
ds1302数码管显示.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DS1302应用刚学单片机,好多好奇,所以想做个简单的时钟。下面是PROTEUS仿真电路和电路图,简单易懂。文笔不好,说了多余。下面是程序。#include#include#include#define uint unsigned int#define uchar unsigned char#define BCDTUAN(str) (str/10*16+str%10) /定义宏,将要写入DS1302的时间转化为BCD码#define Write_Sec0x80#defineWrite_Min0x82#defineWrite_Hou0x84#defineWrite_Dat0x86#defineWrite_Mon0x88#defineWrite_day0x8a#defineWrite_Yea0x8c#defineWrite_WP0x8e/写保护位#define Write_TCR0x90#define Read_Sec0x81 #defineRead_Min0x83#defineRead_Hou0x85#defineRead_Dat0x87#defineRead_Mon0x89#defineRead_Day0x8b#defineRead_Yea0x8d#define CLK_BurstW0xbf/时钟突发模式写 #define CLK_BurstR0xbf/时钟突发模式读#define Write_RAM_Begin0xc0/RAM第一个字节写指令#define Read_RAM_Begin0xc1/RAM第一个字节读指令#define RAM_BurstW0xfe/突发模式写RAM#define RAM_BurstR0xff/突发模式读RAMsbit _74hc154_A = P10;sbit _74hc154_B = P11;sbit _74hc154_C = P12;sbit _74hc154_D = P13;sbit CE =P16;sbit SCLK=P15;sbit IO =P14; uchar code scan4=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, 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 WriteDS1302(void);/向DS1302写入时间。void ReadDS1302(void);/读取DS1302中的年,月,日,星期几,小时,分钟和秒.void SendCmd(unsigned char cmd);/传送地址void delayus(unsigned char tt); void delay(uchar z) uchar x,y; for(x=z;x0;x-) for(y=120;y0;y-); void _74hc154(uchar k) /位扫描设定 _74hc154_A=scank0; _74hc154_B=scank1; _74hc154_C=scank2; _74hc154_D=scank3;void main() uchar i; while(1) WriteDS1302(); ReadDS1302() ;for(i=0;i12;i+) _74hc154(i); /位扫描 P0=dispdatescanbuffi;/数据送P0口 delay(10); void WriteDS1302(void)WriteByte(Write_Yea,BCDTUAN(13);/写13年/读取DS1302中的年,月,日,星期几,小时,分钟和秒.void ReadDS1302(void)unsigned char buff;/将读取的数据送入缓存数组,住输出数据为16进制buff=ReadByte(Read_Yea); /年scanbuff10=buff/16; /十位scanbuff11=buff%16; /个位buff=ReadByte(Read_Mon); /月scanbuff6=buff/16; /十位scanbuff7=buff%16; /个位buff=ReadByte(Read_Dat); /日scanbuff8=buff/16; /十位scanbuff9=buff%16; /个位buff=ReadByte(Read_Hou); /时scanbuff0=buff/16; /十位scanbuff1=buff%16; /个位buff=ReadByte(Read_Min); /分scanbuff2=buff/16; /十位scanbuff3=buff%16; /个位buff=ReadByte(Read_Sec); /秒scanbuff4=buff/16; /十位 scanbuff5=buff%16; /个位/读取地址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.SendCmd(RCmd);/传送地址for(temp=0;temp=1;SCLK=0;if(IO=1)valu|=0x80; delayus(1);SCLK=1;delayus(1);CE=0; /结束传输return valu; /向WCmd地址写入时间/数据若写入时间,则时间用#define BCD(time) (time/10*16+time%10)处理.void WriteByte(unsigned char WCmd,unsigned char valu)unsigned char temp;CE=0;SCLK=0;/初使化,并为rise edge做准备CE=1;/初使化,传输开始。SendCmd(WCmd);for(temp=0;temp=1;CE=0;/结束传输 /突发模式读RAM num个字节void BurstRead_CLK(unsigned char *ptr)unsigned char temp,temp2,valu;CE=0;SCLK=0;CE=1;SendCmd(RAM_BurstR);/突发模式读取CLK开始for(temp2=0;temp28;temp2+)for(temp=0;temp=1;SCLK=0;if(IO=1)valu|=0x80; delayus(2);SCLK=1;delayus(2);*ptr=valu;ptr+;CE=0;/结束突发模式读void BurstRead_RAM(unsigned char *ptr,unsigned char num)unsigned char temp1,temp2,valu;CE=0;SCLK=0;CE=1;SendCmd(CLK_BurstR);/突发模式读取CLK开始for(temp2=0;temp2num;temp2+)for(temp1=0;temp1=1;SCLK=0;if(IO=1)valu|=0x80; delayus(2);SCLK=1;delayus(2);*ptr=valu;ptr+;CE=0;/结束突发模式读/突发模式写RAMvoid BurstWrite_RAM(unsigned char Data)unsigned char size=sizeof(Data),temp1,temp2,valu;if(size31)size=31;CE=0;SCLK=0;CE=1;SendCmd(RAM_BurstW);for(temp2=0;temp2size;temp2+)valu=Datatemp2;for(temp1=0;temp1=1;CE=0;void BurstWrite_CLK(unsigned char Time)unsigned char size=sizeof(Time),temp1,temp2,valu;if(size8)size=8;CE=0;SCLK=0;CE=1;SendCmd(CLK_BurstW);for(temp2=0;temp2size;temp2+)valu=Timetemp2;for(temp1=0;temp1=1;CE=0;/传送指令void SendCmd(unsigned char cmd)unsigned char temp;for(temp=0;temp=1;void delayus(unsigned char tt) /tt=2,延时为2ustt-;这个是ds1302.h头文件内容,建个txt文档将下面内容复制进去,改后缀为.h即可添加了#ifndef DS1302_H#define DS1302_Hextern unsigned char ReadByte(unsigned char RCmd);extern void WriteByte(unsigned char WCmd,unsigned char valu);ex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论