时间温度显示电路 - 图文(3)

2019-04-01 16:28

入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图 。

数据读写时序

3 电路原理图:

电路原理图如图,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。

4软件设计

软件各模块设计流程: 日期功能设计:

时间功能设计:

闹钟功能设计:

闹钟设置显示设计 实现三个闹钟能够独立显示设置,互相之间没有干扰 编写程序实现闹钟到点后蜂鸣器响,LED灯亮红色 闹钟时间点过去后蜂鸣器停止响声,LED灯灭 模块功能实对显示的时间进行长度判断 在LED数码管上显示读出的时间 初始化向DS1302芯片写入初始化时从DS1302中读出时间 模块功能实对显示的日期进行在LED数码管上显示读初始化向DS1302芯片写入初始化日从DS1302中读出日DS1302芯片 DS1302芯片 程序实现代码:

#include

typedef unsigned char unchar; typedef unsigned int unint;

sbit T_CLK = P2^0; //DS1302中串行时钟引脚

sbit T_IO = P2^1; //DS1302中串行数据输入/输出 sbit T_RST = P2^2; //DS1302中复位/片选线 sbit Bee = P2^7; sbit DQ = P3^4; sbit DT =P0^7; sbit P1_6=P1^6; sbit P1_7=P1^7;

sbit TAD = P2^7; sbit K1=P2^6; sbit K2=P2^5; sbit K3=P2^4;

sbit ACC0=ACC^0;//累加寄存器 sbit ACC7=ACC^7;

unchar data year=0x10, month=0x07, date=0x25, day=0x01, hour=0x12, minute=0x59, second=0x45;

unchar data Led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //分别代表0,1,2,3,4,5,6,7,8,9,-

unchar data Dispbuff[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unchar data ring[]={0x00,0x00}; unchar data ring1[]={0x00,0x00}; unchar data ring2[]={0x00,0x00};

unsigned char Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

unchar sec,min,hou,dat,mon,wek,yea,i=0,j=0,i1=0,i2=0,i3=0,i4=0; long k=0;

void CDelay(unchar CDelay) //延时 {

while(CDelay--); }

ReadOneChar(void) //读一个字节 {

unchar i = 0; unchar dat = 0; for(i=8;i>0;i--) {

DQ = 0; dat>>=1; DQ = 1;

if(DQ) //判断DQ高低电平,若为高电平则赋给dat高电平值 {

dat |= 0x80; }

CDelay(4);//延时 }

return(dat); //返回dat值 }

WriteOneChar(unchar dat) //写一个字节 {

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

DQ = 0; //低电平脉冲信号 DQ = dat&0x01; CDelay(5);//延时

DQ = 1; //高电平脉冲信号 dat >>= 1;//dat右移一位 }

CDelay(4); }

void oneByteToClock(unchar ucDa) //向DS1302中写一位 {

unchar i; ACC= ucDa; for(i=8; i>0; i--) {

T_IO = ACC0; //相当于汇编中的 RRC T_CLK = 1; T_CLK = 0;

ACC =ACC>> 1;//下一位移到ACC0 } }

unchar oneByteFromClock(void) //从DS1302中读一位 {

unchar i;

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

ACC = ACC>>1; //*相当于汇编中的 RRC ACC7 = T_IO;

T_CLK = 1; T_CLK = 0; }

return(ACC); }

void giveOneTime(unchar ucAddr, unchar ucDa) {

T_RST = 0; T_CLK = 0; T_RST = 1;

oneByteToClock(ucAddr); //地址,命令 oneByteToClock(ucDa); //写1Byte数据 T_CLK = 1; T_RST =0; }

unchar getOneTime(unchar ucAddr) {

unchar ucDa; T_RST = 0; T_CLK = 0; T_RST = 1;

oneByteToClock(ucAddr); // 地址,命令

ucDa = oneByteFromClock(); // 读1Byte数据 T_CLK = 1; T_RST =0; return(ucDa); }

void resetTime(void) {

giveOneTime(0x8e,0x00); //8e:写寄存器BIT7=WP 作

T_RST = 0; T_CLK = 0;

控制命令,WP=0,写操


时间温度显示电路 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于linux平台的WEB安全技术研究 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: