ds1302数码管显示应用

上传人:博****1 文档编号:497784701 上传时间:2024-02-26 格式:DOC 页数:7 大小:71KB
返回 下载 相关 举报
ds1302数码管显示应用_第1页
第1页 / 共7页
ds1302数码管显示应用_第2页
第2页 / 共7页
ds1302数码管显示应用_第3页
第3页 / 共7页
ds1302数码管显示应用_第4页
第4页 / 共7页
ds1302数码管显示应用_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《ds1302数码管显示应用》由会员分享,可在线阅读,更多相关《ds1302数码管显示应用(7页珍藏版)》请在金锄头文库上搜索。

1、DS1302 应用 刚学单片机,好多好奇,所以想做个简单的时钟。下面是 PROTEUS 仿真电 路和电路图,简单易懂。文笔不好,说了多余。下面是程序。 #include#include #include #define uint unsigned int#define uchar unsigned char#define BCDTUAN(str) (str/10*16+str%10)/定义宏,将要写入 DS1302 的时间转化为BCD 码#defineWrite_Min0x82#defineWrite_Hou0x84#defineWrite_Dat0x86#defineWrite_Mon0x8

2、8#defineWrite_day0x8a#defineWrite_Yea0x8c#defineWrite_WP0x8e#define Write_Sec 0x80#define Write_TCR 0x90/写保护位#defineRead_Min0x83#defineRead_Hou0x85#defineRead_Dat0x87#defineRead_Mon0x89#defineRead_Day0x8b#defineRead_Yea0x8d#define CLK_BurstW0xbf#define CLK_BurstR0xbf#define Read_Sec 0x81/时钟突发模式写/时钟突

3、发模式读/RAM 第一个字节写指令 /RAM 第一个字节读指令 /突发模式写 RAM /突发模式读 RAM#define Write_RAM_Begin0xc0#define Read_RAM_Begin0xc1#define RAM_BurstW0xfe#define RAM_BurstR0xffsbit _74hc154_A = P1A0;sbit _74hc154_B = PUl;sbit _74hc154_C = P1A2;sbit _74hc154_D = P1A3; sbit CE =P1A6;sbit SCLK=P1A5; sbit IO =P1A4;uchar code sca

4、n4=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(voi

5、d);/读取 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)Wri

6、teDS1302();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); / 年 scanbu

7、ff10=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;

8、/十位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;CE=1;driven to high level.SendCmd(RCmd); for(temp=0;temp=1;SCLK=0;if(IO=1) valu|=0x80;delayus(1);SCLK

9、=1;delayus(1);CE=0;/初使化/初使化,并为 rise edge 做准备/初使化, 传输开始。 The SCLK must be low when CE is/传送地址/结束传输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=O;/初使化,并为rise edge做准备CE=1;/初使化,传输开始。S

10、endCmd(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;/结

11、束突发模式读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 B

12、urstWrite_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;/为下一个上升沿做准备/tt=2 ,延时为 2usfor(temp=0;temp8;temp+) SCLK=0; IO=cmd&0x01;SCLK=1;de

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号