当前位置:文档之家› ds1302实时时钟c程序加仿真原理图

ds1302实时时钟c程序加仿真原理图

ds1302实时时钟c程序加仿真原理图
ds1302实时时钟c程序加仿真原理图

#ifndef _1602_yejing_

#define _1602_yejing_

#include

#define uchar unsigned char

#define uint unsigned int

sbit lcden=P3^4;

sbit lcdrs=P3^5;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com) {

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_lcd(uchar x,char *cha)

{ uchar length,i=0;

write_com(x);

for(length=0;cha[length]!=0;length++);

for(i=0;i

{

write_data(cha[i]);

delay(5);

}

}

void write_bcd(uchar cha)

{

uchar ch1,ch2;

ch1=(cha&0x0f)+'0';

ch2=((cha>>4)&0x0f)+'0';

write_data(ch2);

write_data(ch1);

}

void write_fd(float t)//显示float型函数{ uchar s1,s2,s3,s4;

uint tt;

tt=t*100;

s1=tt/1000;s1+=0x30;

s2=tt%1000/100;s2+=0x30;

s3=tt%1000%100/10;s3+=0x30;

s4=tt%10;s4+=0x30;

write_data(s1);

write_data(s2);

write_data(46);

write_data(s3);

write_data(s4);

}

void init()

{

lcden=0;

write_com(0x38);//设置16*2显示

write_com(0x0c);//设置开显示,不显示光标

write_com(0x06);//写一个字符后地址指针加1

write_com(0x01);//显示清0,数据指针清0

}

#endif

/**************************************************************************

THE REAL TIMER DS1302 DRIVER LIB

COPYRIGHT (c) 2010 BY ZYK.

-- ALL RIGHTS RESERVED --

File Name: DS1302.h

Author: ZHANG YUAN KE

Created: 2010/06/21

Modified: NO

Revision: 1.0

***************************************************************************/ #ifndef _DS1302_2010_06_21_

#define _DS1302_2010_06_21_

sbit SCLK = P1^6; //实时时钟时钟线引脚

sbit DIO = P1^7; //实时时钟数据线引脚

sbit CE = P1^5; //实时时钟复位线引脚

sbit ACC0 = ACC^0;

sbit ACC7 = ACC^7;

char sec,min,hour,day,mon,week,year;

char *tab[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat",};

void write_1302(uchar add,uchar dat)

{

uchar i;

ACC=add;

CE=0;

SCLK=0;

CE=1;

for(i=0;i<8;i++)

{

DIO=ACC0;

SCLK=1;

SCLK=0;

ACC>>=1;

}

ACC=dat;

for(i=0;i<8;i++)

{

DIO=ACC0;

SCLK=1;

SCLK=0;

ACC>>=1;

}

CE=0;

}

uchar read_1302(uchar add)

{

uchar i;

ACC=add;

CE=0;

SCLK=0;

CE=1;

for(i=8;i>0;i--) // 为什么不能for(i=0;i<8;i++) 又为什么用我写的函数不能改时间!!!!!!!!!!!!

{

DIO=ACC0;

SCLK=1;

ACC>>=1;

SCLK=0;

}

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

{ ACC>>=1;

ACC7=DIO;

SCLK=1;

SCLK=0;

}

return(ACC);

CE=0;

}

void inputbyte(uchar d) //实时时钟写入一字节(内部函数)

{

uchar i;

ACC=d;

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

{

DIO=ACC0; //相当于汇编中的RRC

SCLK=1;

SCLK=0;

ACC>>=1;

}

}

uchar outputbyte() //实时时钟读取一字节(内部函数)

{

uchar i;

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

{

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

ACC7=DIO;

SCLK=1;

SCLK=0;

}

return(ACC);

}

void write_1302(uchar add,uchar dat) //ucAddr: DS1302地址, ucData: 要写的数据{

CE=0;

SCLK=0;

CE=1;

inputbyte(add); // 地址,命令

inputbyte(dat); // 写1Byte数据

CE=0;

}

uchar read_1302(uchar add) //读取DS1302某地址的数据

{

uchar dat;

CE=0;

SCLK=0;

CE=1;

inputbyte(add); // 地址,命令

dat=outputbyte(); // 读1Byte数据

CE=0;

return(dat);

}

void setprotect(bit flag)

{

if(flag)

write_1302(0x8e,0x80);

else

write_1302(0x8e,0x00);

}

void gettime_1302()

{

sec=read_1302(0x81);

min=read_1302(0x83);

hour=read_1302(0x85);

day=read_1302(0x87);

mon=read_1302(0x89);

week=read_1302(0x8b);

year=read_1302(0x8d);

}

void stop_time(bit flag) // 是否将时钟停止{

unsigned char dat;

dat=read_1302(0x81);

setprotect(0);

if(flag)

write_1302(0x80, dat|0x80);

else

write_1302(0x80, dat&0x7F);

}

void init_1302()

{

uchar second=read_1302(0x81);

if(second&0x80)

write_1302(0x80,0);

}

/****************************************************************************** **

void BurstWrite1302(unsigned char *pWClock) //往DS1302写入时钟数据(多字节方式) {

unsigned char i;

Write1302(0x8e,0x00); // 控制命令,WP=0,写操作?

DS1302_RST = 0;

DS1302_CLK = 0;

DS1302_RST = 1;

DS1302InputByte(0xbe); // 0xbe:时钟多字节写命令

for (i = 8; i>0; i--) //8Byte = 7Byte 时钟数据+ 1Byte 控制

{

DS1302InputByte(*pWClock); // 写1Byte数据

pWClock++;

}

DS1302_CLK = 1;

DS1302_RST = 0;

}

void BurstRead1302(unsigned char *pRClock) //读取DS1302时钟数据(时钟多字节方式) {

unsigned char i;

DS1302_RST = 0;

DS1302_CLK = 0;

DS1302_RST = 1;

DS1302InputByte(0xbf); // 0xbf:时钟多字节读命令

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

{

*pRClock = DS1302OutputByte(); // 读1Byte数据

pRClock++;

}

DS1302_CLK = 1;

DS1302_RST = 0;

}

******************************************************************************* */

#endif

#include "1602.h"

#include "DS1302.h"

sbit set=P3^2;

sbit jia1=P3^0;

sbit jian1=P3^1;

uchar bcdtoasc(uchar cha)

{

return ((cha/16)*10+(cha%16));

}

uchar asctobcd(uchar cha)

{

return ((cha/10)*16+(cha%10));

}

void disp_week()

{ switch(week)

{

case 1:{write_lcd(0xcd,tab[0]); break;}

case 2:{write_lcd(0xcd,tab[1]); break;}

case 3:{write_lcd(0xcd,tab[2]); break;}

case 4:{write_lcd(0xcd,tab[3]); break;}

case 5:{write_lcd(0xcd,tab[4]); break;}

case 6:{write_lcd(0xcd,tab[5]); break;}

case 7:{write_lcd(0xcd,tab[6]); break;}

}

}

void disp_time()

{

write_com(0x87);

write_bcd(year);

write_com(0x8a);

write_bcd(mon);

write_com(0x8d);

write_bcd(day);

write_com(0xc5);

write_bcd(hour);

write_com(0xc8);

write_bcd(min);

write_com(0xcb);

write_bcd(sec);

disp_week();

}

void keyscan()

{

jia1=1;

jian1=1;

stop_time(1);

if(set==0)

{delay(10);

if(set==0) {

delay(200); slect++;

}

if(slect==8) {slect=0; stop_time(0);write_com(0x0c);} }

if(slect)

{

switch(slect)

{ case 1:{

write_com(0xcb);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

sec=read_1302(0x81);

sec=sec&0x7f;

sec=bcdtoasc(sec);

sec+=1;

if(sec==60)

sec=0;

sec=asctobcd(sec);

write_1302(0x80,sec);

write_com(0x0c);

write_bcd(sec);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

sec=read_1302(0x81);

sec=sec&0x7f;

sec=bcdtoasc(sec);

sec-=1;

if(sec<0)sec=59;

sec=asctobcd(sec);

write_1302(0x80,sec);

write_com(0x0c);

write_bcd(sec);

}

}

break;

}

case 2:{write_com(0xc8);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

min=read_1302(0x83);

min=bcdtoasc(min);

min+=1;

if(min==60)

min=0;

min=asctobcd(min);

write_1302(0x82,min);

write_com(0x0c);

write_bcd(min);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

min=read_1302(0x83);

min=bcdtoasc(min);

min-=1;

if(min<0)min=59;

min=asctobcd(min);

write_1302(0x82,min);

write_com(0x0c);

write_bcd(min);

}

}

break;}

case 3:{write_com(0xc5);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

hour=read_1302(0x85);

hour=bcdtoasc(hour);

hour+=1;

if(hour==24)

hour=0;

hour=asctobcd(hour);

write_1302(0x84,hour);

write_com(0x0c);

write_bcd(hour);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

hour=read_1302(0x85);

hour=bcdtoasc(hour);

hour-=1;

if(hour<0)hour=23;

hour=asctobcd(hour);

write_1302(0x84,hour);

write_com(0x0c);

write_bcd(hour);

}

}

break;}

case 4:{write_com(0x8d);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

mon=read_1302(0x89);

year=read_1302(0x8d);

day=read_1302(0x87);

day=bcdtoasc(day);

day+=1;

year=bcdtoasc(year);

if(year%4==0)

{

if(mon==2)

{if(day==29)day=1;}

else if(day==30)day=1;

}

else{ switch(mon)

{case 1:{if(day==32)day=1;break;}

case 2:{if(day==30)day=1;break;}

case 3:{if(day==32)day=1;break;}

case 4:{if(day==31)day=1;break;}

case 5:{if(day==32)day=1;break;}

case 6:{if(day==31)day=1;break;}

case 7:{if(day==32)day=1;break;}

case 8:{if(day==32)day=1;break;}

case 9:{if(day==31)day=1;break;}

case 0x10:{if(day==32)day=1;break;}

case 0x11:{if(day==31)day=1;break;}

case 0x12:{if(day==32)day=1;break;}

}

if(mon==1|mon==3|mon==5|mon==7|mon==8|mon==0x10|mon==0x12) if(day==32)day=0; */

if(mon==4|mon==6|mon==9|mon==0x11)

{if(day==31)day=1;}

else if(day==32)day=1;

}

day=asctobcd(day);

write_1302(0x86,day);

write_com(0x0c);

write_bcd(day);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

day=read_1302(0x87);

day=bcdtoasc(day);

day-=1;

if(day<1)

{ mon=read_1302(0x89);

year=read_1302(0x8d);

switch(mon)

{ case 0x01: {day=31; break;}

case 0x02: {day=29; break;}

case 3: {day=31; break;}

case 4: {day=30; break;}

case 5: {day=31; break;}

case 6: {day=30; break;}

case 7: {day=31; break;}

case 8: {day=31; break;}

case 9: {day=30; break;}

case 0x10: {day=31; break;}

case 0x11: {day=30; break;}

case 0x12: {day=31; break;}

}

year=bcdtoasc(year);

if(year%4==0)if(mon==2)day=28;

}

day=asctobcd(day);

write_1302(0x86,day);

write_com(0x0c);

write_bcd(day);

}

}

break;}

case 5:{write_com(0x8a);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

mon=read_1302(0x89);

mon=bcdtoasc(mon);

mon+=1;

if(mon==13)

mon=1;

mon=asctobcd(mon);

write_1302(0x88,mon);

write_com(0x0c);

write_bcd(mon);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

mon=bcdtoasc(mon);

mon-=1;

if(mon<1)mon=12;

mon=asctobcd(mon);

write_1302(0x88,mon);

write_com(0x0c);

write_bcd(mon);

}

}

break;}

case 6:{write_com(0x87);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

year=read_1302(0x8d);

year=bcdtoasc(year);

year+=1;

if(year==100)

year=0;

year=asctobcd(year);

write_1302(0x8c,year);

write_com(0x0c);

write_bcd(year);

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

year=read_1302(0x8d);

year=bcdtoasc(year);

year-=1;

if(year<0)year=99;

year=asctobcd(year);

write_com(0x0c);

write_bcd(year);

}

}

break;}

case 7:{write_com(0xcd);

write_com(0x0d);

if(jia1==0)

{delay(10);

if(jia1==0)

{

delay(200);

week=read_1302(0x8b);

week=bcdtoasc(week);

week+=1;

if(week==8)

week=1;

week=asctobcd(week);

write_1302(0x8a,week);

write_com(0x0c);

disp_week();

/* switch(week)

{

case 1:{write_lcd(0xcd,tab[0]); break;}

case 2:{write_lcd(0xcd,tab[1]); break;}

case 3:{write_lcd(0xcd,tab[2]); break;}

case 4:{write_lcd(0xcd,tab[3]); break;}

case 5:{write_lcd(0xcd,tab[4]); break;}

case 6:{write_lcd(0xcd,tab[5]); break;}

case 7:{write_lcd(0xcd,tab[6]); break;}

} */

}

}

if(jian1==0)

{

delay(10);

if(jian1==0)

{ delay(200);

week=read_1302(0x8b);

week=bcdtoasc(week);

week-=1;

if(week<1)week=7;

week=asctobcd(week);

write_1302(0x8a,week);

write_com(0x0c);

disp_week();

/* switch(week)

{

case 1:{write_lcd(0xcd,tab[0]); break;}

case 2:{write_lcd(0xcd,tab[1]); break;}

case 3:{write_lcd(0xcd,tab[2]); break;}

case 4:{write_lcd(0xcd,tab[3]); break;}

case 5:{write_lcd(0xcd,tab[4]); break;}

case 6:{write_lcd(0xcd,tab[5]); break;}

case 7:{write_lcd(0xcd,tab[6]); break;} } */

}

}

break; }

}

}

}

main()

{

init();

init_1302();

write_lcd(0x80,"DATE:20 - -");

write_lcd(0x80+0x40,"TIME: : :");

while(1)

{

gettime_1302();

set=1;

if(set==0)

{delay(10);

if(set==0){delay(200);slect++;}

}

while(slect)

keyscan();

disp_time();

delay(30);

}

}

简易数字钟设计(已仿真)

简易数字钟设计 摘 要 本文针对简易数字钟的设计要求,提出了两种整体设计方案,在比较两个方案的优缺点后,选择了其中较优的一个方案,进行由上而下层次化的设计,先定义和规定各个模块的结构,再对模块内部进行详细设计。详细设计的时候又根据可采用的芯片,分析各芯片是否适合本次设计,选择较合适的芯片进行设计, 最后将设计好的模块组合调试,并最终在EWB 下仿真通过。 关键词 数字钟,EWB ,74LS160,总线,三态门,子电路 一、引言:所谓数字钟,是指利用电子电路构成的计时器。相对机械钟而言,数字钟能达到准确计时,并显示小时、分、秒,同时能对该钟进行调整。在此基础上,还能够实现整点报时,定时报闹等功能。 设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。 二、任务分析:能按时钟功能进行小时、分钟、秒计时,并显示时间及调整时间,能整点报时,定点报时,使用4个数码管,能切换显示。 总体设计 本阶段的任务是根据任务要求进行模块划分,提出方案,并进行比较分析,最终找到较优的方案。 方案一、采用异步电路,数据选择器 将时钟信号输给秒模块,秒模块的进位输给分模块,分模块进位输入给时模块,切换的时候使用2选1数据选择器进行切换,电路框图如下: 该方案的优点是模块内部简单,基本不需要额外的电路,但缺点也很明显,该方案结构不清晰,模块间关系混乱,模块外还需使用较多门电路,不利于功能扩充,且使用了异步电路,计数在59的时候,高一级马上进位,故本次设计不采用此方案。 方案二、采用同步电路,总线结构 时钟信号分别加到各个模块,各个模块功能相对独立,框图如下: 显示 切换 秒钟 分钟 小时 控制 1Hz 脉冲信号 闹钟

数字钟设计(带仿真和连接图)

- 数字电子技术课程设计报告 题目:数字钟的设计与制作 : 专业:电气本一班 学号:姓名: 指导教师: 时间: - —

一、设计内容 数字钟设计 … 技术指标: (1)时间以24小时为周期; (2能够显示时,分,秒; (3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; (4)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时; (5)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号. ~ 二、设计时间: 第十五、十六周 三、设计要求: (1)画出设计的电路原理图; $ (2) 选择好元器件及给出参数,在原理图中反应出来; (3)并用仿真软件进行模拟电路工作情况; (4)编写课程报告。

! 摘要 数字钟实际上是一个对标准频率(1Hz)进行计数的计数电路。振荡器产生的时钟信号经过分频器形成秒脉冲信号,秒脉冲信号输入计数器进行计数,并把累计结果以“时”、“分”、“秒”的数字显示出来。秒计数器电路计满60后触发分计数器电路,分计数器电路计满60后触发时计数器电路,当计满24小时后又开始下一轮的循环计数。一般由振荡器、分频器、计数器、译码器、数码显示器等几部分组成。 振荡电路:主要用来产生时间标准信号,因为时钟的精度主要取决于时间标准信号的频率及稳定度,所以采用石英晶体振荡器。 分频器:因为振荡器产生的标准信号频率很高,要是要得到“秒”信号,需一定级数的分频器进行分频。 计数器:有了“秒”信号,则可以根据60秒为1分,24小时为1天的进制,分别设定“时”、“分”、“秒”的计数器,分别为60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位信号。 译码显示:将“时”“分”“秒”显示出来。将计数器输入状态,输入到译码器,产生驱动数码显示器信号,呈现出对应的进位数字字型。 由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路可以对分和时进行校时。另外,计时过程要具有报时功能,当时间到达整点前10秒开始,蜂鸣器1秒响1秒停地响5次。 } 为了使数字钟使用方便,在设计上使用了一个变压器和一个整流桥来实现数字钟电能的输入,使得可以方便地直接插入220V的交流电就可以正常地使用了。关键词数字钟振荡计数校正报时

DS1302读写程序

随笔/mcu51 发表于2007-06-17, 21:53 /*---------------------------------------------- DS1302读写一体化C51源程序 HotPower@https://www.doczj.com/doc/6c18405214.html, ------------------------------------------------*/ //打开DS1302 void TimeSpiOpen(void) { TIMECLK = 0; TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMERST = 1;//使能DS1302 } //关闭DS1302 void TimeSpiClose(void) { TIMERST = 0;//禁止DS1302 TIMEIO = 1;//释放数据总线 TIMECLK = 1; } //读写DS1302 unsigned char TimeSpiReadWrite(unsigned char val) { unsigned char i; ACC = val;//取8位数据 for (i = 8;i > 0; i--) { TIMECLK = 0;//时钟下降沿输入数据(DS1302读) _nop_();//延时

CY = TIMEIO;//接收串行数据到CY _rrca_();//右移一位数据到CY(先存后取) TIMEIO = CY;//发送串行数据 TIMECLK = 1;//时钟上升沿打入数据(DS1302写) TIMEIO = 1;//释放数据总线 } val = ACC; return val; } //读DS1302字节 unsigned char TimeByteRead(unsigned char address) { TimeSpiOpen();//打开DS1302 TimeSpiReadWrite(address);//写入DS1302命令 address = TimeSpiReadWrite(0xff);//读入DS1302数据 TimeSpiClose();//关闭DS1302 return address;//返回数据 } //读DS1302RAM字节 unsigned char TimeRamByteRead(unsigned char address) { TimeSpiOpen();//打开DS1302 TimeSpiReadWrite((address << 1) | 0xc1);//写入DS1302命令 address = TimeSpiReadWrite(0xff);//读入DS1302数据 TimeSpiClose();//关闭DS1302 return address;//返回数据 }

数字时钟的设计与仿真

湖北民族学院 课程设计报告 数字时钟设计与仿真 课程:电子线路课程设计 专业:电子信息科学与技术 班级: 0312409 学号: 031240910 学生姓名:谢加龙 指导教师:易金桥 2014年 06月 21日

信息工程学院课程设计任务书 2014-06-21

摘要 基于单片机AT89c51设计而成的简易数字电子时钟,其主要功能皆由对单片机编程即由软件完成,外围硬件电路只包括报时电路、键盘输入电路和显示电路三个模块。具有外围硬件电路简单、运行功能可靠的优点。 关键词:单片机时钟键盘输入显示

目录 1、系统设计要求 (1) 1.1 基本功能 (1) 1.2扩展功能 (1) 2、硬件设计 (2) 2.1系统设计方案选择 (2) 2.2系统原理框图 (2) 2.3各单元的功能描述 (2) 2.4电路连接图 (2) 2.5元器件清单列表 (2) 2.6所用芯片的管脚图 (2) 3、软件设计 (3) 3.1主程序的流程图 (3) 3.2键盘扫描程序流程图 (3) 3.3发声程序流程图 (3) 3.4总程序 (3) 4、调试 (4) 4.1仿真调试 (4) 4.2硬件调试 (4) 5、总结 (5) 参考文献 (6)

1、系统设计要求 1.1 基本功能 (1)、要求准确显示“时”、“分”、“秒”,24 小时制; (2)、具有整点报时功能,在每小时59 分51 秒、53 秒、55 秒、57 秒发出低音,59秒整发出高音; (3)、系统工作符合一般时钟要求。 1.2扩展功能: (1)、具有校时功能,用户可修改“时”、“分”,且互不影响; (2)、可切换12 小时制和24 小时制。

ds1302时钟程序详解-ds1302程序流程图(C程序)

ds1302时钟程序详解,ds1302程序流程图(C程序) ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从 低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日 历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RA M的31个字节,命令控制字为FEH(写)、FFH(读)。

ds1302程序流程图 3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基 本操作进行编程:

数字时钟的Multisim设计与仿真

数字时钟的M u l t i s i m 设计与仿真 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

数字电子技术课程设计 学院:信息工程学院 班级:电气二班 姓名:刘君宇张迪王应博 学号:

数字时钟的Multisim设计和仿真 一、设计和仿真要求 学习综合数字电子电路的设计、实现 基础调研 应用设计、逻辑设计、电路设计 用Multisim 软件验证电路设计 分析电路功能是否符合预期,进行必要的调试修改 撰写Project 报告,提交Multisim 二、总体设计和电路框图 24 分、校时部分。主要由矩形波产生器、秒计数器、分计数器、时计数器、LED 图1. 数字钟电路框图 七段显示数码管、时间校准电路,闹钟电路构成。 五、结论 由脉冲发生器、秒计数器、分计数器、时计数器、LED显示数码管设计了数字时钟电路,经过仿真得出较理想的结果,说明电路图及思路是正确的,可以实现所要求的基本功能:计时、显示精确到秒、时分秒校时。 下页附设计感想和分工 整点报时设计体会

刘君宇分工:完成电路设计,整点报时,闹钟,扩展功能) 通过对软件Multisim的学习和使用,进一步加深了对数字电路的认识。在仿真过程中遇到许多困难,但通过自己的努力和同学的帮助都一一克服了。首先,连接电路图过程中,数码管不能显示,后经图形放大后才发现是电路断路了。其次,布局的时候因元件比较多,整体布局比较困难,因子电路不如原电路直观,最后在不断努力下,终于不用子电路布好整个电路。 调试时有的器件在理论上可行,但在实际运行中就无法看到效果,所以得换不少器件,有时无法找出错误便更换器件重新接线以使电路正常运行。在整个设计中,计数器的接线比较困难,反复修改了多次,在认真学习其用法后采用归零法和置数法设计出60进制和24进制的计数器。 同时,在最后仿真时,预置的频率一开始用的是1hz,结果仿真结果反应很慢,后把频率加大,这才在短时间内就能看到全部结果。总之,通过这次对数字时钟的设计与仿真,为以后的电路设计打下良好的基础,一些经验和教训,将成为宝贵的学习财富。

数字电子钟设计说明..

数字电子钟课程设计 一、设计任务与要求 (1)设计一个能显示时、分、秒的数字电子钟,显示时间从00: 00: 00到23: 59: 59; (2)设计的电路包括产生时钟信号,时、分、秒的计时电路和显示电路(3)电 路能实现校正 (5)整点报时 二、单元电路设计与参数计算 1. 振荡器 石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动,有 了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定。这用压电谐振的频率即为晶体振荡器的固有频率。 2. 分频器 由于振荡器产生的频率很高,要得到秒脉冲需要分频,本实验采用一片74LS90 和两片74LS160实现,得到需要的秒脉冲信号。

3. 计数器 秒脉冲信号经过计数器,分别得到“秒”个位、十位、“分”个位、十位以及 “时”个位、十位的计时。“秒” “分”计数器为六十进制,小时为二十四进制。 (1)六十进制计数 由分频器来的秒脉冲信号,首先送到“秒”计数器进行累加计数,秒计数器应完 成一分钟之内秒数目的累加,并达到 60秒时产生一个进位信号。本作品选用一 片74LS161和一片74LS160采取同步置数的方式组成六十进制的计数器。 (2)二十四进制计数 “24翻1”小时计数器按照“ 00— 01—02,, 22—23— 00—01”规律计数。与生 活中计数规律相同。二十四进制计数同样选用74LS161和74LS160计数芯片。但 清零方式采用的是异步清零方式。 MMgM 加 EHagij Z 1 进位信号 脉冲

ds1302时钟程序详解经典

dsl302时钟程序详解经典 dsl302时钟程序详解 DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 2.3数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0 位到高位7o 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位 为BCD码形式,其日历、 时间寄存器及其控制字见表1。

? I日历?別间襦存祁及凡担制孑 fir* 野擅"itwtr 収他总cn - T ?fsy网 移 e S』3 2 1 0 林斶 son8!ll00-59 f.H IUSVX SIX X2H S3II oum(1Mh、 MH K4H851101 \2A12 24? 10 IIH HK MhH M7II01 -2S.2V, W-Jl ?o imiAre 8SH WII03 - !2(11) 0 IUM MOYI1I AAII8HH ni(i II ? 0 0h\V 8LH Mill OQ ? 9910YLAH 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器 及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH, FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 dsl302程序流程图

基于Multisim的数字时钟设计

东北大学 课程设计报告 课程设计名称:数字电子技术课程设计 专题题目: 指导教师: 学生姓名:学号: 专业:计算机科学与技术班级: 设计日期: 2017 年7 月 3 日~ 2017 年7 月7日

目录 摘要 (3) Abstract (3) 第1章概述 (4) 1.1设计思路 (4) 1.2主要内容 (4) 第2章课程设计任务及要求 (5) 2.1 设计任务 (5) 2.2 设计要求 (5) 第3章系统设计 (6) 3.1 方案论证 (6) 3.2 系统设计 (6) 3.2.1 结构框图及说明 (6) 3.2.2 系统原理图及工作原理 (7) 3.3单元电路设计 (8) 3.3.1数字时钟秒脉冲信号的设计 (8) 3.3.2器件分析 (8) 3.3.3 计数器设计 (9) 3.3.4 计时电路设计 (11) 3.3.5 数字时钟电路设计 (12) 3.3.6 校时电路 (12) 3.3.7 整点报时 (13) 3.3.8 闹钟电路 (14) 第4章仿真调试 (16) 4.1时钟显示 (17) 4.1.1 时钟显示完整的00:00:00 (17) 4.1.2 时钟完整显示01:00:00 (17) 4.1.3 时钟完整显示23:59:59 (18) 4.1.4 仿真开关校准“秒”电路 (18) 4.1.5 仿真开关校准“分”电路 (19) 4.1.6 仿真开关校准“时”电路 (19) 4.2 整点报时 (20) 4.2.1 07:59:50—07:59:59报时 (20) 4.3 闹钟电路 (21) 4.3.1 7:59:00闹钟设定 (21) 第5章结论 (22) 第6章利用Multisim14.0仿真软件设计体会 (23) 参考文献 (23) 第7章收获、体会和建议 (24)

DS1302时序和C语言程序

1 DS130 2 简介: DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图1 DS1302的外部引脚分配 图2 DS1302的内部结构 各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ①DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图3所示。

图 3 DS1302有关日历、时间的寄存器 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM 的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 ②DS1302有关RAM的地址 DS1302中附加31字节静态RAM的地址如图4所示。 图4 ③DS1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如图5所示。 图5 ④此外,DS1302还有充电寄存器等。 2 读写时序说明 DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。 要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图6。 图6 控制字(即地址及命令字节) 控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

数字电子钟仿真

数字电子钟课程总结 题目:基于Multisim10.0的多功能电子钟的设计与仿真 学院:电子工程学院 专业:电子信息工程 学 号: 20121271008 姓名:卫丽业 指导教师:蒋品群 2014年 05月

基于Multisim10.0的多功能电子钟的设计与仿真 摘 要: 数字钟是由555定时器电路产生1KHz秒时钟信号, 经过分频器分频后输出稳定的秒脉冲, 作为时间基准。秒计数器满60向分计数 器进位,分计数器满60向时计数器进位, 时计数器以24为一个周 期。计数器的输出经译码器送到数码管显示,可将时、分、秒在相 应位置正确显示。计时出现误差或者调整时间时可以用校时电路 进行时、分的调整,并实现整点报时功能。 关键词: 数字钟 分频器 译码器 校时电路 整点报时电路 定时器 1.概述 主要是通过Multisim10.0软件作为应用平台,设计出电子数字钟逻辑电路,并在这个平台上进行仿真,验证它的工作状态是否正常,以实现要求的功能电路。 1.1 研究目标与任务 设计一个24小时制的数字时钟。要求计时、显示精确到秒、有校时功能,采用中小规模集成电路设计。 1.2 研究步骤 (1)根据要求,设计出比较合理的方案,选取合适的硬件器件,熟悉各个器件的性能; (2)通过Multisim10.0软件进行仿真和调试; (6)实验总结。 2.总体设计和电路框图 2.1 设计思路 1).由秒时钟信号发生器、计时电路、校时电路和整点报时电路构成。 2).秒时钟信号发生器可由555定时器构成。 3).计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 4).校时电路采用开关控制时、分计数器的时钟信号为校时脉冲以完成校时。 2.2 电路框图

数字时钟的multisim设计与仿真.doc

电子电路Multisim设计和仿真 学院: 专业和班级: 姓名: 学号:

数字时钟的Multisim设计和仿真 一、设计和仿真要求 学习综合数字电子电路的设计、实现和调试 1.设计一个24或12小时制的数字时钟。 2. 要求:计时、显示精确到秒;有校时功能。采用中小规模集成电路设计。 3.发挥:增加闹钟功能。 二、总体设计和电路框图 1. 设计思路 1).由秒时钟信号发生器、计时电路和校时电路构成电路。 2).秒时钟信号发生器可由555定时器构成。 3).计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 4).校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。 2. 电路框图 图1. 数字钟电路框图 三、子模块具体设计 1. 由555定时器构成的1Hz秒时钟信号发生器。 由下面的电路图产生1Hz的脉冲信号作为总电路的初输入时钟脉冲。

2. 分、秒计时电路及显示部分 在数字钟的控制电路中,分和秒的控制都是一样的,都是由一个十进制计数器和一个六进制计数器串联而成的,在电路的设计中我采用的是统一的器件74LS160D 的反馈置数法来实现十进制功能和六进制功能,根据74LS160D 的结构把输出端的0110(十进制为6)用一个与非门74LS00引到CLR 端便可置0,这样就实现了六进制计数。 由两片十进制同步加法计数器74LS160级联产生,采用的是异步清零法。 显示部分用的是七段数码管和两片译码器74LS48D 。 3. 时计时电路及显示部分 由两片十进制同步加法计数器74LS160级联产生,采用的是同步置数法,u1输出端为0011(十进制为3)与u2输出端0010(十进制为2)经过与非门接两片的置数端。 显示部分用的是七段数码管和两片译码器74LS48D 。 图2. 时钟信号发生电路 图3. 分秒计时电路

ds1302时钟程序详解 含电路图 源程序 注释

以下资料摘自电子发烧友网感谢作者,版权归网站所有,资料仅供参考 ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 ds1302程序流程图

3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:

单片机ds1302程序

#include #include #define uchar unsigned char #define uint unsigned int sbit LCD1602_E=P3^6; sbit LCD1602_RW=P3^5; sbit LCD1602_RS=P3^4; sbit DSIO=P0^7; sbit RST=P0^5; sbit SCLK=P0^6; extern uchar TIME[7]; void Ds1302Write(uchar addr, uchar dat); uchar Ds1302Read(uchar addr); void Ds1302Init(); void Ds1302ReadTime(); void Lcd1602_Delay1ms(uint c); //误差0us void LcdWriteCom(uchar com); void LcdWriteData(uchar dat) ; void LcdInit(); void LcdDisplay(); uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13}; void main() { LcdInit(); Ds1302Init(); while(1) { Ds1302ReadTime(); LcdDisplay(); } } void Ds1302Write(uchar addr, uchar dat) { uchar n; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。

数字时钟的Multisim设计与仿真

电子电路 设计和仿真 Multisim 学院: 专业和班级: 姓名:学号: 数字时钟的Multisim 设计和仿真 一、设计和仿真要求 学习综合数字电子电路的设计、实现和调试 1.设计一个24或12小时制的数字时钟。 2.要求:计时、显示精确到秒;有校时功能。采用中小规模集成电路设计。 3.发挥:增加闹钟功能。 二、总体设计和电路框图 1.设计思路 1).由秒时钟信号发生器、计时电路和校时电路构成电路。 2).秒时钟信号发生器可由555定时器构成。 3).计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 4).校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。2.电路框图

二、子模块具体设计 1.由555定时器构成的1Hz 秒时钟信号发生器。 由下面的电路图产生1Hz 的脉冲信号作为总电路的初输入时钟脉冲 图2.时钟信号发生电路 2. 分、秒计时电路及显示部分 -VC K ? OTT - ? THR ? T£L1 - O0&I H L : ? r GND ,,, 48kQ R2 48kQ —10uF 士伯 DtiF ....... ■ ■ j - ■ ■ >100Q

在数字钟的控制电路中,分和秒的控制都是一样的,都是由一个十进制计数器和一个六进制计数器串联而成的,在电路的设计中我采用的是统一的器件74LS160D 的反馈置数法来实现十进制功能和六进制功能,根据74LS160D的 结构把输出端的0110 (十进制为6)用一个与非门74LS00引到CLR端便可置0,这样就实现了六进制计数。 由两片十进制同步加法计数器74LS160级联产生,采用的是异步清零法显示部分用的是七段数码管和两片译码器74LS48D 。 图3.分秒计时电路 3.时计时电路及显示部分 由两片十进制同步加法计数器74LS160级联产生,采用的是同步置数法, u1输出端为0011 (十进制为3)与u2输出端0010 (十进制为2)经过与非门接两片的置数端。 显示部分用的是七段数码管和两片译码器74LS48D 。

基于FPGA的数字时钟的设计1

基于FPGA 的数字时钟的设计 课 题: 基于FPGA 的数字时钟的设计 学 院: 电气信息工程学院 专 业 : 测量控制与仪器 班 级 : 08测控(2)班 姓 名 : 潘 志 东 学 号 : 08314239 合作者姓名: 颜志林 2010 年 12 月 12 日

综述 近年来随着数字技术的迅速发展,各种中、大规模集成电路在数字系统、控制系统、信号处理等方面都得到了广泛的应用。这就迫切要求理工科大学生熟悉和掌握常用中、大规模集成电路功能及其在实际中的应用方法,除通过实验教学培养数字电路的基本实验方法、分析问题和故障检查方法以及双踪示波器等常用仪器使用方法等基本电路的基本实验技能外,还必须培养大学生工程设计和组织实验能力。 本次课程设计的目的在于培养学生对基本电路的应用和掌握,使学生在实验原理的指导下,初步具备基本电路的分析和设计能力,并掌握其应用方法;自行拟定实验步骤,检查和排除故障、分析和处理实验结果及撰写实验报告的能力。综合实验的设计目的是培养学生初步掌握小型数字系统的设计能力,包括选择设计方案,进行电路设计、安装、调试等环节,运用所学知识进行工程设计、提高实验技能的实践。数字电子钟是一种计时装置,它具有时、分、秒计时功能和显示时间功能;具有整点报时功能。 本次设计我查阅了大量的文献资料,学到了很多关于数字电路方面的知识,并且更加巩固和掌握了课堂上所学的课本知识,使自己对数字电子技术有了更进一步的认识和了解。

1、课题要求 1.1课程设计的性质与任务 本课程是电子与信息类专业的专业的专业基础必修课——“数字电路”的配套实验课程。目的在于培养学生的理论联系实际,分析和解决问题的能力。通过本课程设计,使学生在理论设计、计算机仿真、指标调测、故障排除等方面得到进一步的训练,加强学生的实践能力。学生通过设计、仿真、调试、撰写设计报告等过程,培养学生的动手能力和严谨的工作作风。 1.2课程设计的基本技术要求 1)根据课题要求,复习巩固数字电路有关专业基础知识; 2)掌握数字电路的设计方法,特别是熟悉模块化的设计思想; 3) 掌握QUARTUS-2软件的使用方法; 4) 熟练掌握EDA工具的使用,特别是原理图输入,波形仿真,能对仿真波形进行分析; 5) 具备EDA技术基础,能够熟练使用VHDL语言进行编程,掌握层次化设计方法; 6) 掌握多功能数字钟的工作原理,学会不同进制计数器及时钟控制电路的设计方法; 7) 能根据设计要求对设计电路进行仿真和测试; 8) 掌握将所设计软件下载到FPGA芯片的下载步骤等等。 9) 将硬件与软件连接起来,调试电路的功能。 1.3课程设计的功能要求 基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时,60分钟,60秒钟的计数器显示。 附加功能:1)能利用硬件部分按键实现“校时”“校分”“清零”功能; 2)能利用蜂鸣器做整点报时:当计时到达59’59’’时开始报时,鸣叫时间1秒钟; 3)定时闹铃:本设计中设置的是在七点时进行闹钟功能,鸣叫过程中,能够进行中断闹铃工作。 本人工作:负责软件的编程与波形的仿真分析。 2、方案设计与分析

数字电子钟的设计与仿真

数字电子钟的设计与仿真 Digital electronic clock design and simulation

摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。 关键字:单片机LED显示 Abstract At the end of the twentieth Century, electronic technology has obtained the rapid development, under its impetus, the modern electronic products almost permeated each domains of the society, effectively promoted the development of social productivity and the improvement of social information-based degree, but also makes the modern electronic products to further improve the performance, product upgrading has become increasingly fast pace. Modern life of people more and more attention to the concept of time, can be said to be the time and money is a sign. For

DS1302程序

#include #include #define uchar unsigned char #define uint unsigned int uchar count_10ms; //定义10ms计数器 sbit K1 = P3^2; //定义K1键 sbit K2 = P3^3; //定义K2键 sbit K3 = P3^4; //定义K3键 sbit K4 = P3^5; //定义K4键 sbit BEEP=P3^7; //定义蜂鸣器 sbit reset = P1^2; sbit sclk = P1^0; sbit io = P1^1; sbit LCD_RS=P2^0; sbit LCD_RW=P2^1 ; sbit LCD_EN=P2^2; bit K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。 uchar code line1_data[] = {"---LCD Clcok---"}; //定义第1行显示的字符 uchar code line2_data[] = {"****"}; //定义第2行显示的字符 uchar disp_buf[8] ={0x00}; //定义显示缓冲区 uchar time_buf[7] ={0,0,0x12,0,0,0,0}; //DS1302时间缓冲区,存放秒、分、时、日、月、星期、年 uchar temp [2]={0}; //用来存放设置时的小时、分钟的中间值 /********以下是函数声明********/ void Delay_ms(uint xms) ; bit lcd_busy(); void lcd_wcmd(uchar cmd); void lcd_wdat(uchar dat) ; void lcd_clr() ; void lcd_init() ; void write_byte(uchar inbyte); //写一字节数据函数声明 uchar read_byte(); //读一字节数据函数声明 void write_ds1302(uchar cmd,uchar indata); //写DS1302函数声明 uchar read_ds1302(uchar addr); //读DS1302函数声明 void set_ds1302(uchar addr,uchar *p,uchar n); //设置DS1302初始时间函数声明 void get_ds1302(uchar addr,uchar *p,uchar n); //读当前时间函数声明 void init_ds1302(); //DS1302初始化函数声明 /********以下是延时函数********/ void Delay_ms(uint xms) { uint i,j;

数字钟的设计与仿真

目录 摘要 (3) 前言 (4) 第一章理论分析 1.1 设计方案 (5) 1.2 设计目的 (5) 1.3 设计指标 (6) 1.4 工作原理及其组成框图 (6) 第二章系统设计 2.1 多谐振荡器 (8) 2.2 计数器 (10) 2.3 六十进制电路 (12) 2.4 译码与LED显示器 (13) 2.5 校时电路 (14) 2.6 电子时钟原理图 (15) 2.7 仿真与检测 (16) 2.8 部分元器件芯片结构图 (18) 2.9 误差分析 (19) 第三章小结 心得体会 (20) 致谢 (21) 参考文献 (22)

摘要 时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。在这次的毕业设计中,针对一系列问题,设计了如下电子钟。 本系统由555多谐振荡器,分频器,计数器,译码器,LED显示器和校时电路组成,采用了CMOS系列(双列直插式)中小规模集成芯片。总体方案手机由主题电路和扩展电路两大分组成。 其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能,进行了各单元设计,总体调试。 关键词:555多谐振荡器;分频器;计数器;译码器;LED显示器

前言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,因此在许多电子设备中被广泛使用。 电子钟是人们日常生活中常用的计时工具,而数字式电子钟又有其体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成时间及星期的显示功能。 本次设计以数字电子为主,分别对1S时钟信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合,来完成时、分、秒的显示并且有走时校准的功能。并通过本次设计加深对数字电子技术的理解以及更熟练使用计数器、触发器和各种逻辑门电路的能力。电路主要使用集成计数器,例如CD4060、CD4518,译码集成电路,例如CD4511,LED数码管及各种门电路和基本的触发器等,电路使用5号电池共电,很适合在日常生活中使用。

multisim_时钟的设计与仿真

[键入公司名称] [键入文档标题] 目录 1.设计要求 2. 总电路图及工作原理 3.电路组成介绍 3.1脉冲形成电路 3.2分频电路 3.3 60进制计数器及显示电路 3.4 24进制计数器及显示电路 3.5 时间设置电路 4. 电路的测试 5. 分析与评价 附录:元器件清单 1.设计要求

本次设计任务是要求用Multisim10.0软件设计一个数字时钟电路,即用数字显示出时间结果。设计要求如下: (a)以数字形式显示时、分、秒。 (b)小时计时采用24进制的计时方式,分、秒采用60进制的计时方式。 (c)要求能够对时钟进行时间设置。 2. 总电路图及工作原理 数字时钟的总电路图如下所示: 数字时钟工作原理:数字时钟电路由555振荡发生器、分频器、两个60进制分秒计数器、一个24进制小时计数器以及6个数字显示器组成。电路工作时由555振荡器产生频率为1000HZ 的脉冲,经由三个74LS90D 构成的千分频的分频器得到频率为1HZ 的脉冲,脉冲输入计数电路(分秒由60进制计数电路计数,小时由24进制计数电路计数),然后将相应数字显示到数字显示器上即所要显示的时间。另外,时钟的时间设置可以通过三个与单刀双掷开关相连的时钟信号发生器来实现。 电路的设计流程图如下所示 3.电路组成介绍

3.1 脉冲形成电路 脉冲形成电路为555计时器组成的振荡电路。考虑到时钟对精度要求较高,故在时钟电路中由555振荡电路产生频率为1KHz的脉冲信号,然后经过千分频的分频器分频产生1Hz脉冲。555振荡器的参数确定:T=0.7(R1+R2)C=1ms,f=1/t=1KHZ,故可令R1=5kΩ,R2=5KΩ,C=100nF。(以上设置在实际仿真的时候速度过慢,故在实际仿真中) 脉冲形成电路如下所示: 3.2 分频电路 分频电路是三个用十进制计数器74LS90串联而成的千分频的分频器。分频原理是在74LS90的输出端子中,从低位输入10个脉冲才从高位输出1个脉冲,这样一片74LS90就可以起十分频的作用,三个74LS90串联就构成了千分频的电路,输出的便是1HZ的标准脉冲信号。 分频电路如下所示: 3.3 60进制计数器及显示电路 在数字时钟电路中,分与秒的计数电路是由两个74LS90D组成的60进制的计数电路实现的。在下图中,U9是十进制计数器,U9的QD作为十进制的进位信号,74ls90计数器是十进制异步计数器,用反馈归零的方法实现十进制计数,U8和与非门构成六进制,其中与非门输出进位信号。 3.4 24进制计数器及显示电路 在数字时钟电路中,小时的计数电路是由两个74LS90D组成的24进制的计数电路实现的。如下图所示,计数电路由U16和U6俩部分组成。当时个位U6计数为4,U16计数为2时,两片74ls90复零,从而构成24进制计数。 3.5 时间设置电路 时间设置电路由一个单刀双掷开关与一个脉冲计数器组成。用单刀双掷开关切换计数功能与调时功能,另一端接计数器的脉冲输入端,开关置于函数发生器这一端便可以校时,置于计数器的进位端便是计时。不校正时间时开关都应打在与非门的那一端,校时时可用键盘操作改变开关的状态。如此,在时钟运行前及正在运行的过程中均可实现调时功能。 时间设置线路图如下所示(双掷开关左打调时,右打计数):

相关主题
文本预览
相关文档 最新文档