-
数字时钟仿真电路设计
2018-12-27 18:30:03课题设计要求 时间以24小时为一个周期 显示时、分、秒 具有校时功能,可以分别对时分秒进行单独校时,使其校正到...设计数字时钟仿真电路图 仿真运行 上机连线操作 调试排查并改正错误与不足之处 设计原理 数字...课题设计要求
- 时间以24小时为一个周期
- 显示时、分、秒
- 具有校时功能,可以分别对时分秒进行单独校时,使其校正到标准时间
- 计时过程具有报时功能,当时间到达整点前十秒进行蜂鸣报时
- 为了保证计时的稳定及准确,须由晶体振荡器提供表针时间基准信号
准备工作
- 查阅资料了解课题设计原理
- 下载Multisim软件
- 设计数字时钟仿真电路图
- 仿真运行
- 上机连线操作
- 调试排查并改正错误与不足之处
设计原理
数字电子时钟框架图
秒脉冲发生器
振荡器是计数器计数的关键,所以需要稳定的脉冲源,这里采用555定时器和电阻电容构成一个产生1kHz的电路,然后通过分频器分频得到 1Hz 的脉冲信号。而分频器本就是由计数器构成,所以这里采用3片74LS160级联组成一个分频器,每个芯片都是1/10分频,最终得到 1Hz的脉冲信号。
24进制的实现
本课题是用的2片74LS161芯片以及与非门实现24进制(00~23)。时计数器的十位是二进制,个位是十进制,同时和与非门相连,实现满24时清零。电路图如下图所示:
60进制的实现
分、秒都是60进制(00~59),所以它们的电路都是一样的,采用2片74LS161和与非门实现,分、秒计数器的十位都是 6进制,个位都是10进制,共同构成60进制。当记满59时,再来一个脉冲就清零变为00,接着再重新开始计数。
整点报时
课题设计要求整点前10s开始报时,这里主要是通过与非门实现,当分计数器计数为59且秒计数器的十位计数为5时开始报时,将分的两位及秒的十位分别用一个与门连接(对应接5、9、5),然后接一个与非门,与非门的输出端再次取反接蜂鸣器,就实现了报时功能(好像看起来有点繁琐,应该有更简单的方法)。
校时功能
用了最简单的方法,在分、秒的与非门与上一级的脉冲接口之间接一个开关即可。当开关按下时,产生一个低电平给计数器,从而在下降沿的时候计数器加一。
数字时钟电路仿真图
下面就是仿真图,图中的秒脉冲信号直接换成了一个小的脉冲,如果不用这个,可直接换成上面介绍的秒脉冲发生器电路代替。
实验箱上组装调试
这玩意儿看着图不难,但真正在实验箱上组装的时候还是不容易啊,密密麻麻的线,一不留神就连错,找错也是很麻烦的,各种各样的问题,比如接线不稳,与非门的芯片有问题,或其他芯片问题都有可能出现。经过几个小时的奋战,总算是把它弄好了,下面是最后的效果图。
参考文章
数字钟设计
数字钟仿真
参考书:《数字电路实验及课程设计指导书》电路设计使用的软件
主要使用Multisim进行仿真,软件安装教程:Multisim安装教程
-
基于FPGA的数字时钟设计
2010-06-16 15:59:34EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL和C语言在FPGA实验板上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为23时59分59秒、。总的程序由几个各具不同功能的单元模块程序拼接而成,其中... -
VHDL实现的多功能数字时钟
2012-04-17 13:06:251、基本时、分、秒的显示(24时制) 2、支持年、月、日显示(闰年判断) 3、支持秒表功能,可计时、可暂停 4、能够实现闹钟的功能(音乐播放) 5、能够对以上各参数进行手动设置 6、支持LCD显示 附实验报告、使用... -
evangelion-clock-screensaver:受Neon Genesis Evengelion图形界面启发的数字时钟屏保-源码
2021-02-03 06:16:19Mac的数字时钟屏幕保护程序,其灵感来自Neon Genesis Evengelion的图形界面。 它以小时,分钟和秒的形式显示时间,并且有两种样式。 正常 红 屏幕保护程序中的文字: 活动限界まで(剩余活动时间) 内部(内部) ... -
Anuko World Clock(世界时钟) v6.1.0.5406.zip
2019-07-13 10:12:23软件集数字时钟、指针时钟、桌面月历、倒计时、日记本和闹铃提醒、备忘录提醒等诸多功能为一体。软件界面美观简洁、简单全面、实用方便,是用户实现桌面世界时钟功能的好帮手。对于用户来说是一款很不错的软件,小编... -
基于51单片机的LCD1602电子时钟
2018-11-14 10:03:45学习任务: (1)基本了解LCD1602 (2)基于51单片机用LCD1602实现分秒的计时; (3)按键控制分秒的调整(两个按键分别...字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本次使用的LCD160...学习任务:
(1)基本了解LCD1602
(2)基于51单片机用LCD1602实现分秒的计时;
(3)按键控制分秒的调整(两个按键分别控制分和秒的增加);
(4)能实现整时报时的功能(蜂鸣器响);
(5)了解下载模块、下载原理;
(6)基本上了解并使用DXP绘制PCB板;
知识点总结:
一、LCD1602:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本次使用的LCD1602为16*2型。
1、基本操作时序
1、1读状态:输入:RS=L,Rw=H,E=H 输出:D0~D7=状态字;
1、2写指令:输入:RS=L,Rw=L,D0~D7=指令码,E=高脉冲,输出:无;
1、3读数据:输入:RS=H,Rw=H,E=H 输出:D0~D7=数据;
1、4写数据:输入:RS=L,Rw=H,D0~D7=数据,E=高脉冲,输出:无;
2、状态字说明
STA7……STA0
D7……D0
STA0~6为当前数据地址指针的数值;STA7为读写操作使能 1 禁止 0 允许;
第一行取地址为80 第二行为80+40;
3、初始化设置
显示模式设置
00111000(0x38)
显示开关及光标设置
指令码
00001DCB D=1开显示 ,D=0关
C=1显示光标,C=0关
B=1光标闪烁,B=0关
000001NS N=1 当读或写一个地址后字符指针加一,且光标加一
N=0 减 减
S=1 写一个字符,整屏显示左移(N=1)或右移(N=0)以得到光标不移动而屏移动
S=0 不移动
4、指示码
80H+地址码(0-27H 40-67H)(只显示每行前十六位)
01H 显示清屏:1、数据指针清零 2、所有显示清零
02H 显示回车:数据指针清零
5、初始化过程(复位过程)
1、延时15ms
2、写指令38H(不检测忙信号)
3、延时5ms
4、写指令38H(不检测忙信号)
5、延时5ms
6、写指令38H(不检测忙信号)
7、写指令38H:显示模式设置
8、写指令08H:显示关闭
9、写指令01H:显示清屏
10、写指令06H:显示光标移动设置
11、写指令0cH:显示开及光标设置
二、计时器
1、TMOD
用于设置定时、计数器的工作方式,低四位用于T0,高四位用于T1
位 7 6 5 4 3 2 1 0
字节地址 GATE C/T M1 M0 GATE C/T M1 M0 TMOD
GATE是门控位,用于控制定时器的启动是否受外部中断源信号的影响,用软件使TCON中的TR0或者TR1 为1 ,就可以启动定时/计数器工作;GATE=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能使定时/计数器工作。即此时定时器的启动条件加上了INT0/1引脚为高电平这一条件;
C/T:定时/计数模式选择位 C/T=0为定时模式;C/T=1为计数模式;
M1M0:工作模式设置位
定时/计数有四种工作方式
M1M0 工作方式 说明
00 1 13位定时器/计数器
01 2 16位定时器/计数器
10 3 8位自动重装定时/计数器
11 4 T0分为两个独立的8位定时/计数器;T1此方式停止计数方式3:只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数
工作方式3将T0分成两个独立的8位计数器TL0好TH0
2、初始化程序
对TMOD赋值,已确定T0和T1的工作方式
计算初值,并将其写入TH0、TL0或TH1、TL1
中断方式时,则对EA赋值,开放定时器中断
使TR0或TR1置位,启动定时、计数器定时或计数
学习过程:
通过视频或网上资料对LCD1602及TMOD定时器有个基本的认识并进行初始化操作;
分析问题
首先使LCD1602能够基本的可以显示分秒位置;
再次能够使定时器能够实现每秒的增加,即对定时器设置成每秒变化,因为定时器为2^16us 所以为了使其能准确的在1s调整一位则在走一次定时器时实现50ms,然后重复走20次定时器时进行秒的增加;
在实现分秒增加的时候最好在按键的同时是定时器停止运行即TR0=0,然后显示光标及光标的闪烁即0x0f,然后每按一次使秒数增加,调整分时道理同上,在结束调整的时候使光标消失闪烁停止(0x0c),计时继续开始(TR0=1)
同时在主程序运行之前,按键扫描最好进行消抖处理,分秒程序放在主程序之前;DXP画PCB板
先建立工程,再建立原理图及PCB 将这两个拖入工程中进行保存后开始在库中找元器件并进行连线,连线的同时注意引脚要确定连接好否则在导入PCB板时会出现错误,注意元器件的封装,没有封装的元器件不会导入PCB中
原理图画完之后导入PCB并没有错误的时候开始设置PCB板的大小及元器件的位置和连线,同时连线不要过于细,尽量将线连接适当。#include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar num=0,AN=0,e; char fen=0,miao=0; sbit rs=P2^6; sbit rw=P2^5; sbit E=P2^7; sbit beef=P1^5; sbit key1=P3^1; sbit key2=P3^2; void delay_50us(uchar i) { uchar j; for( ;i>0;i--) for(j=100;j>0;j--); } void write_com(uchar com) { rs=0; rw=0; E=0; P0=com; delay_50us(10); E=1; delay_50us(20); E=0; } void write_data(uchar dat) { rs=1; rw=0; E=0; P0=dat; delay_50us(10); E=1; delay_50us(20); E=0; } void write_shu(uchar add,uchar date) { uchar ge,shi; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); } void init(void) { delay_50us(300); write_com(0x38); delay_50us(10); write_com(0x38); delay_50us(10); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); write_com(0x80); write_com(0x80+0x46); write_data(':'); delay_50us(10); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void key_scan() { if(key1==0) delay_50us(100); if(key1==0) { TR0=0; AN++; while(!key1); } if(AN==1) { write_com(0x80+0x40+8); write_com(0x0f); if(key2==0) delay_50us(100); if(key2==0) { while(!key2); miao++; if(miao==60) { beef=~beef; delay_50us(10); miao=0; fen++; if(fen==60) fen=0; write_shu(4,fen); } write_shu(7,miao); } } if(AN==2) { write_com(0x80+0x40+5); write_com(0x0f); if(key2==0) delay_50us(100); if(key2==0) { while(!key2); fen++; if(fen==60) fen=0; write_shu(4,fen); } } if(AN==3) { TR0=1; AN=0; write_com(0x0c); } } void int0 () interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==20) { num=0; miao++; if(miao==60) { miao=0; beef=~beef; delay_50us(10); beef=~beef; delay_50us(10); beef=~beef; delay_50us(10); beef=~beef; delay_50us(10); beef=~beef; delay_50us(10); beef=~beef; delay_50us(10); fen++; if(fen==60) { fen=0; } } write_shu(4,fen); write_shu(7,miao); } } void main() { init(); while(1) { key_scan(); } }
-
数字逻辑与数字电路实验.rar
2020-04-09 12:50:01(2) 实验原理:7段数码显示译码器设计采用case语句对数码管的七个段分别进行赋值0或1,实现数字的显示;使用if-else语句设计模16计数器。 (3) 实验内容1:使用VerilogHDL语言设计一个7段数码显示译码器并进行仿真及... -
嵌入式51单片机实时时钟 pcf8563完整代码
2018-06-07 14:18:03时钟所有的功能都有,只差一个秒表,,这个很简单,,,外部中断来一个或者定时器T1中断来一个都可以,我没弄,因为我这个已经代码很长了,头疼、加中断还得加显示函数和秒表变化函数if分大于60 时++啥的,但因为这... -
微机原理-基于8086数码管数字钟计时器设计-protues仿真资料
2021-01-06 10:32:41设计并完成LED七段数码管数字时钟,数字钟显示格式为:HH:MM:SS。要求:具有通过键盘调整时、分、秒的功能。 通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对...设计并完成LED七段数码管数字时钟,数字钟显示格式为:HH:MM:SS。要求:具有通过键盘调整时、分、秒的功能。
通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
【资源下载地址如下357】:https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
-
基于单片机的数字万年历设计
2020-09-27 18:46:55本设计以STC89C52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动...文末下载完整资料
2 系统概述
本设计以STC89C52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示。人机接口由三个按键来实现,用这三个按键对时间、日期可调,并可对闹铃开关进行设置。软件控制程序实现所有的功能。整机电路使用+5V稳压电源,可稳定工作。系统框图如图2-1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。
3 方案选择
由于电子万年历的种类比较多,因此方案选择在设计中是至关重要的。正确地选择方案可以减小开发难度,缩短开发周期,降低成本,更快地将产品推向市场。3.1 方案1——基于AT89S52单片机的电子万年历设计
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。AT89S52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦写1000余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
若采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。这样就实现了直接用单片机来实现电子万年历设计。
用单片机来实现电子万年历设计,无须外接其他芯片,充分利用了单片机的资源。但是精度不够高,误差较大,掉电后丢失所有数据,软件编程较复杂。3.2 方案2——基于DS1302的电子万年历设计
在以单片机为核心构成的装置中,经常需要一个实时的时钟和日历,以便对一些实时发生事件记录时给予时标,实时时钟芯片便可起到这一作用。过去多用并行接口的时钟芯片,如MC146818,DS12887等。它们已能完全满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂、占用地址, 数据总线接线多、芯片体积大占用空间多、近年来串行接口的各种芯片在单片机系统中应用愈来愈多,串行接口的实时时钟芯片也出现了不少,DS1302是一个综合性能较好且价格便宜的串行接口实时时钟芯片。
利用单片机进行控制,采用DS1302作为实时时钟芯片,其三线接口SCLK、I/O、/RST与单片机进行同步通信,外加掉电存储电路、显示电路、键盘电路,即构成一个基本的电子万年历系统,若还要添加其他功能,在这基础上外扩电路即可。
由于在系统设计时,需要考虑以下几点因素:功耗低、精确度高、软件编程较简单,芯片的体积小、芯片成本低等,而DS1302芯片有上面所述的诸多优点,所以本设计采用方案2。4 系统硬件电路的设计
按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、存储模块、键盘接口模块、显示模块和闹铃模块共6个模块组成,电路系统构成框图如图4-1所示。主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302,存储模块采用美国ATMEL公司生产的低功耗CMOS串行EEPROM存储芯片AT24C02。DS1302作为主要计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备 (2.5~5.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
4.1 系统核心部分——闪电存储型器件AT89S52
4.1.1 AT89S52具有下列主要性能[5]:
•8KB可改编程序Flash存储器(可经受1000次的写入/擦除周期)
•全静态工作:0Hz~24MHz
•三级程序存储器保密
•128×8字节内部RAM
•32条可编程I/O线
•2个16位定时器/计数器
•6个中断源
•可编程串行通道
•片内时钟振荡器
4.1.2 AT89S52的引脚及功能
AT89S52单片机的管脚说明如图4-2所示。
4.2 DS1302时钟电路
4.2.1 DS1302芯片介绍
低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义[8]。
采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。
(1) DS1302的性能特性
•实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;
•用于高速数据暂存的31×8位RAM;
•最少引脚的串行I/O;
•2.5~5.5V 电压工作范围;
•2.5V时耗电小于300nA;
•用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
•简单的3线接口;
•可选的慢速充电(至VCC1)的能力。
DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。
(2) DS1302数据操作原理
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC >=2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的管脚图如图4-3所示,内部结构图如图4-4所示,表4-2为各引脚的功能。
DS1302的控制字如图4-5所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。
为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图4-6所示。
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表4-3,其中奇数为读操作,偶数为写操作。
时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。
AM-PM/12-24[小]时方式:[小]时寄存器的位7定义为12或24[小]时方式选择位。它为高电平时,选择12[小]时方式。在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM,在24[小]时方式下,位5为第二个10[小]时位(20~23h)。
4.2.2 DS1302 的应用
实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超级电容(10万μF以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100μF就可以保证1小时的正常走时)[9]。DS1302在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间及闹铃。DS1302的时钟电路如图4-3所示。4.3 存储电路
4.3.1 AT24C02管脚介绍
AT24C02[10]是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送。第6脚SCL为串行时钟输入线。SDA和SCL都需要和正电源间各接一个4.7K的电阻上拉。
I2C总线是一种用于I2C器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。
4.3.2 AT24C02的特性
(1) I2C总线的基本结构
采用I2C总线标准的单片机或I2C器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。
(2) 双向传输的接口特性
传统的单片机串行接口的发送和接收一般都各用一条线,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。
总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。 SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。
(3) I2C总线上的时钟信号
在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。
当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。
(4) 数据的传送
在数据传送过程中,必须确认数据传送的开始和结束。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。
I2C总线的数据传送格式是:在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)确定。
在I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。每次都是先传最高位,通常从器件在接收到每个字节后都会做出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时(例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C总线上的数据字节),可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL线,主器件继续传送。
当主器件发送完一个字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,在此时钟内主器件释放SDA线,一个字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。
(5) 总线竞争的仲裁
总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。例如,多单片机系统中,可能在某一时刻有两个单片机要同时向总线发送数据,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。
24C02与单片机的接口非常简单,如图4-8所示。A0,A1,A2为器件地址线,WP为写保护引脚,SCL,SDA为二线串行接口,符合I2C总线协议。
5 系统程序的设计
5.1 阳历程序的设计
因为使用了时钟芯片DS1302,阳历程序只需从DS1302各寄存器中读出年、周、月、日、[小]时、分、秒等数据,再处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,再经过处理后,送给显示缓冲单元。阳历程序流程图见图5-1所示。
全套资料免费下载:
关注v-x-公-众-号:【嵌入式基地】
后-台-回-复:【毕业设计】 即可获资料
回复【编程】即可获取
包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料
-
郭天祥十天学会C51单片机视频教程下载地址,国内公认最好教程
2014-12-11 11:26:45模拟电压与数字电压的关系、为什么要使用AD及DA、ADC0804的操作方法、DAC0832的操作方法 下载地址:http://pan.baidu.com/s/1o6n1pGI 第七讲:串口通讯原理及操作流程 串口通讯工作方式、10位数据通讯、波特率... -
Android控件之AnalogClock、DigitalClock探究
2012-02-14 18:52:45时钟控件包括AnalogClock和DigitalClock,它们都负责显示时钟,所不同的是AnalogClock控件显示模拟时钟,且只显示时针和分针,而DigitalClock显示数字时钟,可精确到秒 以下模拟时钟的用法 目录结构 2011... -
✅ 在线AI图像处理:一款免下载免注册的在线图像处理工具,支持黑白照片上色、图像无损放大、人像漫画化 - 更多介绍 2020年6月1号添加 timeromantic - Github ✅ 鱼塘热榜:专注摸鱼的趣味新闻热榜网站 - 更...
-
2016年广州市中等职业学校技能大赛《电子产品装配与调试》6
2016-11-25 03:46:50信息化纯数字时钟资料 3》新电路 常见模块电路 电路检修模块-采用74LS138的加法计数器的起停控制电路(故障板) 电路检修模块-采用74LS138的脉冲顺序控制电路(故障板) 电路检修模块-采用CD4028的加法计数器的起停... -
基于单片机的频率计设计
2020-09-27 17:55:55文末下载完整资料 引 言 频率测量方法的优化越来越受到重视. 频率计的基本原理是用一个频率...数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或 -
2016年广州市中等职业学校技能大赛《电子产品装配与调试》1
2016-11-23 16:02:04信息化纯数字时钟资料 3》新电路 常见模块电路 电路检修模块-采用74LS138的加法计数器的起停控制电路(故障板) 电路检修模块-采用74LS138的脉冲顺序控制电路(故障板) 电路检修模块-采用CD4028的加法计数器的起停... -
2016年广州市中等职业学校技能大赛《电子产品装配与调试》4
2016-11-24 14:43:24信息化纯数字时钟资料 3》新电路 常见模块电路 电路检修模块-采用74LS138的加法计数器的起停控制电路(故障板) 电路检修模块-采用74LS138的脉冲顺序控制电路(故障板) 电路检修模块-采用CD4028的加法计数器的起停... -
梦畅电脑闹钟 v8.2.2 官方版.rar
2019-07-09 13:05:45桌面可显示时钟、数字时钟、倒计时等信息,界面美观。 永久免费 上述功能都是免费、无限制使用,我们承诺永久免费。 更新日志: 梦畅闹钟8.2.1版本正式发布,根据大家的反馈, 已经优化、更新 ,官网已提供梦畅... -
EXCEL集成工具箱V9.0 多国语言最终原版(2003-2010通用)
2011-01-07 20:40:25【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体... -
EXCEL集成工具箱V8.0完整增强版(精简)
2010-09-23 16:58:17【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体... -
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)
2010-09-11 12:08:58【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体... -
电子设计.doc
2019-05-28 11:58:280016、多功能数字时钟设计论文资料 0017、肺活量测量仪设计论文资料 0018、高保真音响设计制作论文资料 0019、高灵敏无线探听器电路资料 0020、给初学51单片机的40个实验汇编语言对应C语言加说明 0021、国旗升降系统... -
基于AT89S52 单片的频率计
2010-01-04 08:47:37用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性 变化的信号。因此,数字频率计是一种应用很广泛的仪器 电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。 数字电路制造... -
EXCEL集成工具箱完整版 (简体/繁体/英文多国语言版) V7.0
2010-08-13 10:31:10【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体字... -
EXCEL集成工具箱V6.0
2010-09-11 01:44:37【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体... -
程序天下:JavaScript实例自学手册
2018-07-08 12:59:552.13 选择不同的列表项就显示不同的按钮 2.14 使用按钮控制文本渐变 2.15 翻页效果的公告栏 2.16 动态设置控件的事件 第3章 字符串文本和输入框特效 3.1 只带下划线的输入框 3.2 限定文本框可输入字符数 3.3 文字过... -
vc++ 应用源码包_1
2012-09-15 14:22:12一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_... -
vc++ 应用源码包_2
2012-09-15 14:27:40一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_... -
vc++ 应用源码包_6
2012-09-15 14:59:46一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_... -
vc++ 应用源码包_5
2012-09-15 14:45:16一个简单的数字时钟程序,其中的date类派生于MFC CStatic 基类。 CIVStringSet_Demo.zip CIVStringSet_Source.zip 基于MFC和STL平台的字符串类,可以实现在快速字符串搜索。 enum_display_modes_demo.zip enum_...