笔记本电脑数字键盘时不时自动打数字0000 随便按下键盘就停了 过了几秒钟又开始000000000 有

您的位置: →
第一篇:数字钟表设计报告撰写要求
1. 设计报告,报告中要包括以下几部分内容:
(1)封皮:设计题目,姓名、学号,班级,授课教师姓名 【格式见后面附 表】 (2)写明设计任务 (3)写出设计题目的原理框图; (4)完成设计功能所选用的器件,及相应各器件的引脚排列图和功能表; (5)画出综合逻辑电路图; (6)用仿真软件进行调试的调试过程(即:在调试时遇到了哪些实际问题,你 是如何解决的); (7)各人在本次设计中的体会和收获。
正文小四号宋体,1.5 倍行间距。
课 程 设 计 报 告
学生姓名 学 班 题 院级目:
学号电气工程学院 电自 1116 数字时钟设计
指导教师:
一. 设计要求
多功能数字钟具有时间显示、闹钟设置、报时功能、校正作用。走时准 确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同 时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于 集成化而受广大消费的喜爱。数字钟广泛用于个人家庭,车站, 码头办公室等 公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和 石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的 数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时 功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自 动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用 等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应 用,有着非常现实的意义。数字钟已成为我们生活中不可缺少的必须品,广泛的应用于家庭以及办公 室等公共场所。给我们生活、学习、工作、娱乐带来了极大的方便。本次设计主要是采用 555 定时器提供定时脉冲,74160 集成块作为计时模 块,8 段数码显示管作为显示工具。应用电子工作平台软件来设计和仿真多功 能数字钟设计,并通过硬件实验的调试来相互验证实际结果。由振荡器输出稳定的高频脉冲信号作为时间基准,经分频振荡器输出标准的 秒脉冲,秒计数器满60向分计数器进位,分计数器满60向小时进位,小时计数器按 “12翻1”规律计数,计数器经译码器送到显示器;计数出现误差可用校时电路进 行校时、校分、校秒。并具有可整点报时与定时闹钟的功能。设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。其中,基 本功能部分的有准确计时,以数字形式显示时、分、秒的时间和校时功能。扩 展功能部分则具有:定时控制、、自动报整点时数和触摸报正点的功能。数字 钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由 主体电路实现,而扩展功能部电路实现。这两部分都有一个共同特点就是它们 都要用到振荡电路提供的 1Hz 脉冲信号。在计时出现误差时电路还可以进行校 时和校分,为了使电路简单所设计的电路不具备校秒的功能。并且要用数码管 显示时、分、秒,各位均为两位显示,扩展部分要有相应的响应电路。分则由 扩展 能按时钟功能进行小时、分钟、秒计时,能调时调分,能整点报时,使用 3 个 2 位数码管显示。总体设计
1.时钟显示功能,能够以十进制显示“时”、“分”、“秒”。其中时为 24 进 制,分秒为 60 进制。2. 其他功能扩展(1)设计一个电路实现时分秒校准功能。(2)闹钟功能,可按设定的时间闹时。通过 16~32 开关控制。(3)设计一个电路实现整点报时功能等。在 59 分 56 秒、57 秒、58 秒、59 秒输出 750Hz 音频信号,在 59 分 59 秒时输出 1000Hz 信号,音频持续 1s, 在 1000Hz 荧屏结束时刻为整点。(4)设计一个星期电路,0 代表周日,123456 代表周一到周六。(5)设计一个秒表电路,用以比赛计时。
本阶段的任务是根据任务要求进行模块划分,提出方案,并进行比较分 析,最终找到较优的方案。该方案的优点是模块内部简单,基本不需要额外的电路,该方案结构简 单,模块间关系较明确,模块外不需使用较多门电路,但不利于功能扩充。
2.设计功能要求
基本功能(1)时的计时要求为“12 翻 1”和 24 翻 1,分和秒的计时要求为 60 进制 (2)准确计时,以数字形式显示时,分,秒的时间 (3)校正时间 扩展功能(1)定时控制; (2)仿广播电台报时功能; (3)自动报整点时数; (4)触摸报整点时数; (5)秒表电路,用以比赛计时 (6)星期电路用以提示工作日和周末
二.设计原理及框图 多功能数字钟原理分析
数字电子钟主干电路系统由秒信号发生器、“时、分、秒”计数器、译码器 及显示器电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系 统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用 60 进制计数器,每 累计 60 秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分 计数器”也采用 60 进制计数器,每累计 60 分钟,发出一个“时脉冲”信号,该信 号将被送到“时计数器”。“时计数器”可以选择 12 或 24 进制计时器,可实现 12 或 24 小时的累计。通过六个 LED 显示器显示出来,计数出现误差可用校时电 路进行校时、校分、校秒。本次所设计的多功能数字钟用到了 555 定时器、 74160 递增集成计数器、EWB 软件。555 定时器是一种模拟和数字功能相结合 的中规模集成器件,74160 是 4 位十进制同步加计数器多功能数字钟原理框架 如图 1-1 所示,电路包括以下几个部分:标准秒信号发生器、显示电路、时分 秒计数器、校时电路。
图 1-1 多功能电子钟的总体框图 根据设计要求首先建立了一个多功能 数字钟电路系统的组成框图,框图如 图 1 所示。
秒显示器 定时控制
秒译码器 仿电台报
主体电路 图1
由图 1 可知,电路的工作原理是:多功能数字钟电路由主体电路和扩展电 路两大部分组成。其中主体电路完成数字钟的基本功能,扩展电路完成数字钟 的扩展功能。振荡器产生的高脉冲信号作为数字钟的振源,再经分频器输出标准秒脉 冲。秒计数器计满 60 后向分计数器个位进位,分计数器计满 60 后向小时计数 器个位进位并且小时计数器按照“12 翻 1”的规律计数。计数器的输出经译码 器送显示器。计时出现误差时电路进行校时、校分、校秒。扩展电路必须在主 体电路正常运行的情况下才能进行扩展功能。实现同步 60 进制计数,可调整
电源 时钟信号输入 进位输入 进位输出 显示输出
5v 接 1Hz 的信号源 接秒的进位信号,实现秒功能时,接低电平。秒模块接分模块,分模块接时模块 接到译码器输入,能闪烁
闹钟比较信号输出 接到闹钟,秒模块悬空 整点报时信号输出 接到响铃,实现响停交替 5 次响铃 调整使能端 入 0 有效,有效时,显示信号输出,同时屏蔽进位 输入和进位输出,允许调整信号输入。
显示使能端 调整信号输入
555 定时器的介绍
555 定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极 性工艺制作的称为 555,用 CMOS 工艺制作的称为 7555,除单定时器外,还有 对应的双定时器 556/ 定时器的电源电压范围宽,可在 4.5V~16V 工 作,7555 可在 3~18V 工作,输出驱动电流约为 200mA,因而其输出可与 TTL、CMOS 或者模拟电路电平兼容。555 定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多 谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为 定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。
555 定时器的构成及原理
555 定时器的集成电路引脚如 2-1 图所 示 1 脚为接地端(GND)、2 脚为低触发 端( TR )、3 脚为输出端 (OUT)、4 脚 为复位端( R )、5 脚为控制电压端 (CO)、6 脚为高触发端(TH)、7 脚为 放电端(D)、8 脚为电源端(VCC)。555 定时器由分压器、比较器、基本 图 2-1 脚图 555 定时器电路引
RS 触发器和放电三极管等部分组成,其内部电路图如图 2-2 所示。分压器由三 个 5 K ? 的等值电阻串联而成。分压器为比较器 A1 、 A2 提供参考电压,比较器
1 A1 的参考电压为 2 3 Vcc ,加在同相输入端,比较器 A2 的参考电压为 3 Vcc ,加在反
相输入端。比较器由两个结构相同的集成运放 A1 、 A2 组成。高电平触发信号加 在 A1 的反相输入端,与同相输入端的参考电压比较后,其结果作为基本 RS 触 发器 R D 端的输入信号;低电平触发信号加在 A2 的同相输入端,与反相输入端 的参考电压比较后,其结果作为基本 RS 触发器 S D 端的输入信号。基本 RS 触 发器的输出状态受比较器 A1 、 A2 的输出端控制。R 是复位端,当其为 0 时, 555 输出低电平。平时该端开路或接 VCC。
CO 是控制电压端(5 脚),平时输出 2 作为比较器 A1 的参考电平,当 5 3 Vcc 脚外接一个输入电压,即改变了比较器的参考电平,从而实现对输出的另一种 控制,在不接外加电压时,通常接一个 0.01uf 的电容器到地,起滤波作用,以 消除外来的干扰,以确保参考电平的稳定。VT 为放电管,当 VT 导通时,将给接于脚 7 的电容器提供低阻放电电路。
555 定时器的内部电路
555 定时器的功能
当复位控制端(TH)的电压大于 2 3 Vcc 时,写为 VTH=1,当复位控制端
1 (TH)的电压小于 2 3 Vcc 时,写为 VTH=0。当置位控制端( TR )的电压大于 3 Vcc
时,写为 VTR=1,当置位控制端( TR )的电压小于 1 3 Vcc 时,写为 VTR=0。555 定时器有“低触发”、“高触发”和“保持”三种基本状态。
2 (1)当低触发端输入电压小于 1 3 Vcc 且高触发端输入电压小于 3 Vcc 时,
VTR=0,VTH=0,比较器 A2 输出为低电平, A1 输出为高电平,基本 RS 触发器的 输入端 S =0、 R =0,使 Q=1, Q =0,经输出反相缓冲期后,OUT=1,T 截止。这时称 555 定时器“低触发”。
2 (2)若低触发端输入电压大于 1 3 Vcc 且高触发端输入电压小于 3 Vcc ,则
VTR=1,VTH=0, S = R =1,基本 RS 触发器保持,OUT 和 T 状态不变,这时称 555 定时器“保持”。
(3)若高触发端输入电压大于 2 则 VTH=1,比较器 A1 输出为低电平,无 3 Vcc 论 A2 输出何种电平,基本 RS 触发器因 R =0,使 Q =1,经输出反相缓冲器后 OUT=0、T 导通。这时称 555 定时器“高触发”。CO 为控制电压端,在 OUT 端加入电压,可改变两比较器 A1 、 A2 的参考电 压。正常工作时,要在 CO 和地之间接 0.01 uF (电容量标记为 103)电容。放电 管 T 的输出端为集电极开路输出。以上原理综合分析见下表 2-1。表 2-1 输入 高触发 端 U TH × &2 3 Vcc &2 3 Vcc &2 3 U cc 低触发端 直接复位 555 定时器的功能表 中间状态 输出 Q 放电管状态
× &1 3 Vcc &1 3 Vcc &1 3 Vcc
0 0 保持 1
导通 导通 保持不变 截止
555 定时器基本功能测试
按图 2-3 所示连接实验电路,测试 555 定时器的输入、输出关系。根据以 下的测试电路说明,按照步骤进行操作,将得出的数据再填入所绘制的表中, 从而可分析出 555 定时器的输入、输出关系。
图 2-3 555 定时器输入、输出关系 测试图 测试电路说明(1) 开关 1 打到 2 端时,4 脚复位端 R 接电源,也就是接高电平;开关 1 打 到 1 端时,4 脚复位端 R 接地,也就是接低电平。(2) 开关 2 打到 2 端时,5 脚控制电压端 CO 接电源 2,也就是接高电平;开 关 2 打到 1 端时,5 脚控制电压端 CO 悬空。(3) 调整可调电阻 RP1,控制 2 脚低触发端 VTR 的电压,其值可有电压表 1 读取;调整可调电阻 RP2,控制 6 脚高触发端 VTH 的电压,其值可有电压表 2 读取。(4) 发光二极管 LED1 亮说明输出端 3 脚 OUT 输出高电平用 OUT 表示;发 光二极管 LED1 灭说明输出端 3 脚 OUT 输出低电平用 UOL 表示。(5) 发光二极管 LED2 亮说明 555 定时器内部三极管 T 饱和,放电端 7 脚对 地近视短路。用导通表示;发光二极管 LED2 灭说明 555 定时器内部三极管 T 截止,放电端 7 脚对地近视断路。用截止表示。经过测试,我们可以得出 555 定时器的输入、输出关系,如表 2―2 所示。
表 2―2 复位端 R 0 1 控制电压 端 CO 0 0
555 定时器的输入、输出关系 高出发端 VTH * 2 ? VCC 3 低触发 端 VTR * 1 ? VCC 3 输出端 OUT UOL UOL T 的状态 导通 导通
* &VCO 1 &VCO *
1 ? VCC 3 1 ? VCC 3 1 ? VCO 2 1 ? VCO 2 1 ? VCO 2
不变 UOH UOL UOL 不变
不变 截止 导通 不变 截止
2 递增集成计数器 74160 的介绍
74160 递增集成计数器功能介绍
74160 是 4 位十进制同步加计数器,其中 CLR 是异步清零端,LOAD 是预 置端,A、B、C、D 是预置数据输入端,ENP 和 ENT 是计数使能端,RCO 是 进位输出端,它的设置为多片集成计数器的级联提供了方便 CLK 为时钟控制 端。*1 表示 RCO 在从 9 变为 0 时输出为 1; 图 2-4 为 74160 的引脚图;74160 的功能如表 2-3 。
图 2-4 74160 引脚 图 表 2―3
J 预置 H CLR 0 1 1 1 1 LOAD × 0 1 1 1 使能 ENP ENT × × × × 0 × × 0 1 1 时钟 CLK × ↑ × × ↑
74160 的功能表
输出 QA QB QC QD RCO 0 0 0 0 0 A B C D *1 保 持 保 持 十进制计数 异步清零 同步置数 数据保持 数据保持 加法计数 工作模式
预置数据输入 A B C D × × × × × × × × × × × × × × × × × × × ×
当输入端 CLR=0 时,不论有无时钟脉冲 CLK,计数器输出将被直接置零叫做 异步清零;当输入端 LOAD=0 时,无论其它输入状态如何,计数器输出将直接 置数叫做同步置数。
当 CLR=LOAD=ENP=ENT=1 时,在计数脉冲(上升)作用下,进行计数。
74160 递增计数器的基本功能检测
74160 为一个具有清零与置数功能的十进制递增计数器,由显示器件库中 选择带译码器的七段显示数码管与计数器输出端相连,在信号源中选择方波电 压(频率 1KHZ,占空比 50,幅值 5V)作为计数器的时钟脉冲源,将脉冲 源及计数器输出端连接至逻辑分析仪输入端便于观察波形,所连电路如图 2-5 所示。
图 2-5 线图
74160 递增计数器基本功能检测接
二. 设计过程
该方案用总线结构,主要功能集中在模块内部,模块功能较为独立,模块 间连线简单,易于扩展,但设计难度大,门电路数量也比较多。3.1 震荡电路 震荡电路是数字电子钟的基础,电路输出一个频率为 1Hz 的时钟信号作为电 子钟的秒信号。由于石英晶体振荡器所产生的频率比较稳定和精确,所以选择石英晶体来产 生振荡。选用 32768Hz 的石英晶振,经过分频率后,可产生频率为 1Hz 的时钟 信号。3.2 分频电路
由于晶体振荡器产生的时钟信号频率高,不可直接作为秒信号的时钟输入信 号,所以要对晶体振荡器产生的信号进行分频。方法:由于 2 的 15 次方刚好是 32768Hz,所以对晶体振荡器产生的信号进行 15 次分频后,即可得到 1Hz 的时钟信号。
3.3 计数器电路 根据设计要求,电子钟由秒,分,时,三部分组成,下面分别对三部分电路 进行阐述。3.3.1 秒位计数器 由于以上所说晶体振荡器产生频率为 32768Hz 时钟信号经过 15 次分频后即可 产生 1Hz 的时钟信号,所以可以直接把所得的 1Hz 信号作为秒位计数器的时钟 信号。计数方面选择具有计数功能的 74LS90 芯片,采用反馈清零方法,组成 60 进 制的计数器,60 秒之后产生进位信号,与电子钟的秒位 60 后进位相对应。3.3.2 分位计数器 分位计数器同样采用 74LS90 芯片,用秒位的进位信号作为时钟信号,秒位 60 秒产生一个进位信号,当秒位产生一次进位信号,分位相应地计一个数,与 数字电子钟秒位 60 秒后分位计数一次相对应。同时用 74LS90 采用反馈清零法组成一个 60 进制计数器,计数到 60 后产生一 个进位信号,作为时信号的时钟信号。3.3.3 时位计数器 原理跟以上阐述的一样,分位计数到 60 后产生一个进位信号作为时位的时钟 信号,60 分钟后,时位计一次数,与数字电子钟相对应。同样用 74LS90 计数,所不同的是在时位需要用反馈清零法组成一个 24 进制 计数器。3.4 译码显示电路 译码显示是将计数器的状态直观地显示出来。由于计数器输出的是一个 8421BCD 码,所以可以用 4511 显示译码器与 2 位共 阴极数码管进行译码显示。
3.5 校时电路 数字电子钟必须具有校时功能才有现实意义,所以对设计的电子钟加校时电 路。方法:利用开关和或门电路达到校时功能,由于机械开关在工作时有时会产 生抖动现象,造成校时错误,或者跳得比较多,或者比较快,所以应加去抖电 路。3.6 报时电路 为增强数字电子钟的功能,有必要加上报时功能。可利用蜂鸣器与组合逻辑电路,设计成到 59 分 56 秒开始响,到整点一共 5 秒时间内响 5 次,1 秒响一次。
标准秒信号发生器
晶体振荡器电路组成的秒脉冲发生器
晶体振荡器产生的高脉冲信号作为数字钟的振源,再经分频器输出标准秒 脉冲。秒计数器计满 60 后向分计数器个位进位,分计数器计满 60 后向小时计 数器个位进位并且小时计数器按照“12 翻 1”的规律计数。计数器的输出经译 码器送显示器。计时出现误差时电路进行校时、校分、校秒。晶体振荡器 数字电路中的时钟是由振荡器产生的,振荡器是数字钟的核心。振荡器的 稳定度及频率的精度决定了数字钟计时的准确程度,一般来说,振荡器的频率 越高,计时精度越高,它利用某种反馈方式产生时钟信号。为了提高秒信号准确性和稳定性,利用石英晶体来构成振荡电路。由于石英 晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信 号均会被它所衰减,而且,振荡信号的频率与振荡电路中元件的数值无关。因 此,,这种振荡电路输出的是准确度极高的信号。然后再利用分频电路,将其输 出信号转变为秒信号, 其组成框图如图4-1。
图4-1 分频器电路
电路构成框图
分频器的作用是将由石英晶体产生的高频信号分频成基时钟脉冲信号和扩 展部分所需的频率。在此电路中,分频器的功能主要有两个:一是产生标准脉 冲信号;二是功能扩展电路所需的信号。由于石英晶体振荡产生频率很高为 4MHz,而电子钟需要秒脉冲,可采用分频电路实现,先经过 1 次四分颁,再经 过 6 次十分频,最后得到秒脉冲信号。这里采用 74LS161 作为四分频、将 74LS161QC 连接于 74LS192,增计数 CPV 端。用 74LS192 作为十分频,将 74LS161 四分频信号加 74LS1925 脚 CPV,将进位信号 C0 连接下一片 74LS192 的 CPV,完成十分频,最后输出 1HZ 的秒脉冲给计数电路。
555 构成的标准秒脉冲电路
555 定时器组成的多谐振荡器 由 555 定时器组成的多谐振荡器如图 4-2 所示,其中 R1、R2 和电容 C 为外接元件。其工作波如图 4-3 所示。
设电容的初始电压 U c =0,t=0 时接通电源,由于电容电压不能突变,所以 高、低触发端 VTH = VTL =0& 1 ,比较器 A1 输出为高电平, A2 输出为低电平, 3 Vcc 即 RD ? 1 , S D ? 0 (1 表示高电位,0 表示低电位), R ? S 触发器置 1,定时器 输出 u0 ? 1 此时 Q ? 0 ,定时器内部放电三极管截止,电源 Vcc 经 R1 , R2 向电容 C 充电, u c 逐渐升高。当 u c 上升到 1 时, A2 输出由 0 翻转为 1,这时 3 Vcc
R D ? S D ? 1 ,RS 触发顺保持状态不变。所以 0&t& t1 期间,定时器输出 u 0 为高电
S D ? 1 ,RS 触发器复 0,定时器输出 u0 ? 0 。
,比较器 A1 的输出由 1 变为 0,这时 R D ? 0 , t ? t1 时刻, u c 上升到 2 3 Vcc
t1 ? t ? t2 期间, Q ? 1 ,放电三极管T导通,电容 C 通过 R2 放电。u c 按指数
S ?1, 规律下降,当 uc ? 2 3 Vcc 时比较器 A1 输出由 0 变为 1,RS 触发器的 R D ? D
Q 的状态不变, u 0 的状态仍为低电平。
R D ? 1, S D ? 0,触发器处于 1,定时器输出 u0 ? 1 。此时电源再次向电容 C 放
电,重复上述过程。通过上述分析可知,电容充电时,定时器输出 u0 ? 1 ,电容放电时,
t ? t2 时刻, u c 下降到 1 3 Vcc ,比较器 A2 输出由 1 变为 0,RS 触发器的
u0 ? 0,电容不断地进行充、放电,输出端便获得矩形波。多谐振荡器无外部信
号输入,却能输出矩形波,其实质是将直流形式的电能变为矩形波形式的电 能。由图 4-3 可知 振荡周期 T ? T1 ? T2 。T1 为电容充电时间, T2 为电容放电时间。充电时间 T1 ? ( R1 ? R2 )C ln 2 ? 0.7( R1 ? R2 )C 放电时间 T2 ? R2C ln 2 ? 0.7R2C 矩形波的振荡周期 T ? T1 ? T2 ? ln 2( R1 ? 2R2 )C ? 0.7( R1 ? 2R2 )C
因此改变 R1 、 R2 和电容 C 的值,便可改变矩形波的周期和频率。1 1 1.44 振荡频率f ? ? ? T t PH ? t PL ( R1 ? 2 R2 )C 对于矩形波,除了用幅度,周期来衡量外,还有一个参数:占空比 q,q= (脉宽 t w )/(周期 T), t w 指输出一个周期内高电平所占的时间。图 4-2 所示 T T1 R ? R2 电路输出矩形波的占空比 q ? 1 ? 。当 R2&&R1 时,占空系数近 ? 1 T T1 ? T2 R1 ? 2 R2 似为 50% 。555 构成的标准秒脉冲电路 如图 4-4 所示,由 555 定时器和外接元件 R1、R2、C 构成多谐振荡器,脚 2 与脚 6 直接相连。电路没有稳态,仅存在两个暂稳态,电路亦不需要外加触发 信号,利用电源通过 R1、R2 向 C 充电,以及 C 通过 R2 向放电端 Ct 放电,使电
2 路产生振荡。电容 C 在 1 3 Vcc 和 3 Vcc 之间充电和放电,其波形如图 4-5 所示。555
电路要求 R1 与 R2 均应大于或等于 1KΩ ,但 R1+R2 应小于或等于 3.3MΩ 。外部 元件的稳定性决定了多谐振荡器的稳定性,555 定时器配以少量的元件即可获 得较高精度的振荡频率和具有较强的功率输出能力。在此,我们将电路进行了进一步的改进,将上图中的 R1 和 R2 合并为一个 100KΩ 的电位器,通过调节电位器可以得到相对比较稳定并且精确地秒脉冲信 号,提供给秒计数器使用。将图中电阻 R1pR2 关系式,电容 C 元件的参数代 入上式,要使脉冲周期为 T=1s,计算得:R1≈57.14KΩ 。两种方案的比较:方案一中的振荡电路输出的是准确度极高的信号,然后 再利用分频电路,将其输出信号转变为秒信号,石英晶体振荡器有频率精确、 振荡稳定、温度系数小等特点,而且晶振频率越高,产生的秒脉冲越稳定,可 以满足电子钟走时的准确性的要求;方案二中的555多谐振荡器外部元件的稳定 性决定了多谐振荡器的稳定性,555定时器配以少量的元件即可获得较高精度的 振荡频率和具有较强的功率输出能力,因此也可以满足电子钟走时的准确性的 要求。但是由于方案一的成本比较高,对石英晶振的要求较高,再加上引入了 分频电路,增加了电路的复杂性;而方案二的成本相对来说低得多,对元器件 的要求也不是很高,电路实现起来相当容易,也可以得到较高精度的振荡频 率。因此,相比之下,我们就采用了方案二:用555构成多谐振荡器,产生秒脉 冲信号,供给计数电路使用。
三. 仿真调试过程
(1)启动仿真电路,可观察到数字时钟的秒位开始计时,计数到 60 后异 步清零,并进位到分计时电路。(2)观察到数字时钟的分为开始计时,计数到 60 后异步清零,并进位到 时计时电路。(3)开关 J1 可控制时计时电路的二十四进制或十二进制计数方式的选 择。单击控制键“空格”,可实现计数方式的转换。(4)控制键“A”“B”、“C”可控制将校时所用 2HZ 时钟脉冲直接引入 时、分、秒计数器,从而实现校时、校分、校秒功能。(5)出现整点,即时计数器出现变化时,蜂鸣器会发出相应点数的报时 (为得到短促响亮的声响,一般将蜂鸣器的频率设置为 1KHz)。
石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它 还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振 动,有了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互 为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定。这用压电谐振的频率即为晶体振荡器的固有频率。一般来说,般来说,振荡器的频率越高,计时精度越高,但耗电量将增 大。如果精度要求不高也可以采用由集成电路定时器 555 与 RC 组成的多谐振荡 器。如图 1 所示。设振荡频率 f=1KHz,R 为可调电阻,微调 R1 可以调出 1KHz 输出。② 分频器 由于振荡器产生的频率很高,要得到秒脉冲,需要分屏电路。本实验由集 成电路定时器 555 与 RC 组成的多谐振荡器,产生 1KHz 的脉冲信号。故采用 3 片中规模集成电路计数器 74LS90 来实现,得到需要的秒脉冲信号。
74160 递增计数器构成六十进制计数器
在实际工作中,经常需要组成非十进制(N 进制)递增计数器,欲组成 N 进制递增计数器,只要将计数器第 N 状态中输出为“ 1”的 Q 端,经与非门 “ 与非”后控制清零端(CLR)即可(因为计数器 74160 清零端低电平有 效)。例如:我们将 74160 输出端 QA 和 QD 通过与非门控制计数器的清零 端,即可将十进制递增计数器 74160 改造成九进制递增计数器,改造之后的电 路如图 所示。
图 4-6 74160 组成的九进 显然,通过选择计数器不同输出端作为反馈端,利用一片 74160 可组成 10 制计数器 以内任意进制递增计数器。利用两片 74160 计数器芯片采用同步级联方式连接 就可以将其改造成 60 进制的计数器,十位计数器选择 QC 与 QB 做反馈端,经 与非门输出控制十位计数器的清零端(CLR),接成六进制计数形式。个位与
十位计数器之间采用同步级联方式,将个位计数器的进位输出控制端(RCO) 接至十位计数器的计数使能端(ENP 和 ENT),完成个位计数器对十位计数器 的进位控制。74160 组成的 60 进制计数器连接电路如图 4-7 所示。而且,我们 都知道秒计数器和分计数器都采用的时六十进制计数器完成的,所以,在我们 要制作分计数器的时候,可参考秒计数器的原理分析来进行连接,也是利用两 片 74160 计数器芯片采用同步级联方式连接就可以将其改造成 60 进制的计数 器,十位计数器选择 QC 与 QB 做反馈端,经与非门输出控制十位计数器的清 零端(CLR),接成六进制计数形式。个位与十位计数器之间采用同步级联方 式,将个位计数器的进位输出控制端(RCO)接至十位计数器的计数使能端 (ENP 和 ENT),完成个位计数器对十位计数器的进位控制。
4.3 74160递增计数器构成12/24进制计数器
由于电子钟的“时”计数器有 12 和 24 两种计数方式,需要进行 12 和 24 进制之间的转换,所以要设计一个可以在 12 和 24 进制之间转换的计数器电 路。可以用异步清零的方法实现 12 和 24 进制的计数,但是这种方法实现的 12 进制计数不能实现在计数器显示完 12 之后直接显示 01,而用同步置数方法实 现的 12 进制计数就可以解决这个问题,同时也可以实现在显示完 23 之后直接 显示 00,所以这里采用同步置数方法实现的 12 和 24 进制计数。两片 74160 组成的 12/24 进制计数器的电路如图 4-8 所示。将个位计数器的进位输出端(RCO)接至十位计数器的计数使能端(ENT 和 ENP),完成个位计数器对十位计数器的进位控制。十二进制部分选择十位 计数器的 QA 端与个位计数器的 QB 端做反馈端,经与非门与下边转换开关 (SPACE)相连控制 74160 芯片的预置端(LOAD),使得当计数器计数到 12 时对 74160 芯片的预置端(LOAD)发出一个低电平脉冲,另外将个位计数器 的输入端(A)经上边转换开关(SPACE)与电源 VCC 相连,其余输入端 (B、C、D)与接地端相连,十位计数器的输入端(A、B、C、D)与接地端 相连,使得当计数器转换为同步置数工作模式时,个位计数器有一个 0001 的输 入,十位计数器有一个 0000 的输入,经过输出端由数码译码显示器显示出来, 完成当计数器计数到 12 之后直接显示 01 的功能;24 进制部分选择个位计数器 的 QB 端与 QA 端做反馈端,经与门之后和与非门的输入端相连,选择十位计 数器的 QB 端做反馈端与与非门的另外一个输入端相连,与非门的输出与下边 转换开关(SPACE)的另外一个端点相连,完成对两片 74160 芯片的预置端 (LOAD)的控制,将上边转换开关(SPACE)的另外一个端点与接地端相 连,十位计数器的输入端(A、B、C、D)也与接地端相连,使得当计数器转
换为同步置数工作模式时,个位与十位计数器均有一个 0000 的输入信号通过输 出端由数码译码显示器显示出来,完成当计数器计数到 23 之后直接显示 00 的 功能。当转换开关拨到上边的时候实现的是24进制计数,当转换开关拨到下边的时候 实现的是24进制计数。
4.调时、调分电路及整点报时电路 如电路图(全图),将时、分电路的计数器直接接到振荡器,再分别由开关“1” 及“2”控制电路的接通与断开,实现调时、调分。整点报时电路 整点报时电路的功能要求是,每当数字钟计时快要到整点时发出声响,通常按 照 4 低音 1 高音的顺序发出间断声响,以最后一声高音结束的时刻为整点时 刻。设 4 声低音(约 500Hz)分别发生在 59 分 51 秒、53 秒、55 秒及 57 秒, 最后一声高音(约 1KHz)发生在 59 分 59 秒,它们的持续时间均为 1 秒。根据以上设定可得到电台正点报时时的分十位状态 Q2M2Q0M2=11 (0101),分个位的状态为 Q3M1Q0M1=11(1001),秒十位状态为 Q2S2Q0S2=11 (0101),秒个位的状态为 Q0S1=1(1、3、5、7、9)。而发低音还是高音只 与秒个位有关,根据设定可列表如表 1 所示由表中的状态可总结出如下结论:秒个位的第三位 Q3S1 可用来作为鸣低音或高 音的控制信号,即 Q3s1=0 时,输入 500Hz 的低频信号至音响电路 Q3S1=1 时,输入 1kHz 的高频信号至音响电路。
第一个问题是秒计数到 59 的同时十位为 1,即秒向分的进位提前了一个脉 冲。我用到的解决方法是秒向分的进位必须是秒的十位为 5、个位为 9 时,给 分的个位一个脉冲,让分的个位开始计数,所以增加了三个与门,将秒十位片 的 QD、QA 和个位片的 QC、QA 相与接到分的个位片的使能端 ENP。第二个问题是分电路的个位向十位进位时也是提前进位。我用到的解决方 案是当分的个位片计数到 9 时,十位片才开始计数,需增加一个与门,将个位 片的进位与个位片的进位端 RCO 相与接到分的十位端。第三个问题是小时电路模块到 11 或 23 时不清零。我用到的解决方案是我 发现这是理论性的错误。因为 CLR 是异步清零的,所以得将时个位的 QB 或 QC 与十位相与,再接到清零端。
整点 报时电路经与门连接将59分56秒,59分57 秒,59分58秒,59分59秒分别将高电平连接接在蜂鸣器上,频率改在较低位, 将秒给分进位支路和分给小时进位支路经与门将高电平连接接在蜂鸣器上,这 样整点报时电路就完成了,也可以将以上满足条件的前四个支路经与门连接后 经或门连接在一个蜂鸣器上。
6.定时闹钟 数字钟在指定的时刻发出信号,或驱动音响电路“闹时”,或对某装置的电源 进行接通或断开“控制”。不管是闹时还是控制,都要求时间准确,即信号的 开始时刻与持续时间必须满足规定的要求。例如要求上午 7 时 59 分发出闹时信号,持续时间为 1 分钟。本实验设计为 7 时 59 分时,音响电路的晶体管导通,则扬声器发出 1KHz 的声音。持续 1 分钟到 8 点整晶体管因输入端为“0”而截止,电路停闹。闹钟由可调时、分显示器,4个74290芯片,3个4077芯片和两个7421芯片的 电路构出时钟的多功能部分。其中,四个74290和四个显示器构成定时闹钟的显 示部分(调时部分可以由开关3、4直接控制电路与振荡器的连接来实现); 闹钟模块(60clock,24clock) 实现可与时钟比较,并输出闹铃信号,可调整
电源,时钟信号 闹钟信号输入 显示输出 闹铃输出
同上 秒模块接分模块,分模块接时模块 同上 接到蜂鸣器
调整使能端,显示 同上 使能端,调整信号 输入 4077芯片的作用是比较实际时钟部分与闹钟部分的输出数据是否一致,再由两 个7421芯片校验作最后校验,当全部输出对比为真时,则发光二极管亮起来, 实现定时闹钟功能。具体电路如下图:
手动闹钟电路图按进制转换比如设早上八点闹钟,时
间一分钟,即 00,0000,则将第十二号开关上端闭合,其余下端闭 合,闹钟开关控制电路如图所示。即将开关一侧接时分的 16 位输出,另一端经 与门连接与蜂鸣器和发光二极管相连。
7.秒表电路设计
100 进制计数原理图
8.时钟电路设计
时钟总电路 9.星期电路设计 七进制计数器
在以上各部分电路,时分秒,星期,报时,闹钟设定,校时系统, 秒表,及 24 12 进制转换,以及稳定电源输出,测试发光二级管等 功能在仿真过程均正常。四. 设计体会及收获
(1)时间计数电路的连接与测试 六进制、十进制都没有什么大的问题,只是芯片引脚的老问题,只要重新插过 芯片就可以解决了。但在六十进制时,按图接线后发现,显示器上的数字总是 100 进制的,而不是六十进制,检测后发现无论是线路的连通还是芯片的接触 都没有问题。最后,在重对连线时发现是线路接错引脚造成的,改过之后,显 示就正常了。(2)校正电路 因上面程因引脚接错而造成错误,所以校正电路是完全按照仿真图所连 的,在测试时,开始进行时校时时,没有出现问题,但当进行到分校时时,发 现计数电路的秒电路开始乱跳出错。因此,电路一定是有地方出错了,在反复 对照后,发现是因为在接入校正电路时忘了把秒十位和分个位之间的连线拿掉 而造成的。2 设计体会 通过此次的课程设计,总体来说,收获颇丰,无论是在培养自己的实验动手 能力还是培养自己的性情方面。“纸上学来终觉浅,绝知此事要躬行”,在此 次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作 原理和其集体的使用方法。将已学过的比较零散的数字电路知识有机的、系统 的联系起来,培养综合分析、设计电路的能力。在连接六进制,十进制,六十 进制的进位及二十四进制的接法中,要求熟悉逻辑电路及其芯片各引脚的功 能,那么在电路出错时便能准确地找出错误所在并及时纠正了。在摸索该如何设计程序使之实现所需功能的过程中,培养了我的设计思 维,使我们在逻辑电路的分析和设计上有了很大的进步,加深了我们对计数 器、分频器、振荡器的认识,进一步增加了对一些常见器件的了解,我们还深 刻认识到数字电路这门课程对科学发展的重要性。同时,查阅参考书的独立思 考能力以及以及培养非常重要。此次设计立足于电子技术的实际运用,不断实践,开拓了思维,设计以考 查、调研、搜集资料、拟订方案、进行系统规划、编程、仿真、调试的流程, 使我深刻的体会到了在学习我们专业的过程中理论与实践相结合的重要性,同 时也解决了以前学习比较模糊的专业知识点,使自己掌握的专业知识更加结构 化、系统化。此外,相互讨论共同研究是设计过程的重中之重,有助于完整的设计了电 路图,并且增加了额实际操作能力,再让我体会到了设计的艰辛的同时,更让 我体会到成功的喜悦与快乐。一个小小的错误便是失败的原因,我们为此拆了 又搭搭了又拆。这样的实验更能使我们对于所学的有一个跟好的掌握。在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握 一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学 分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运 筹帷幄。加强了动手能力,更深入的了解了所学知识的用途。在这次设计过程
中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致 用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环 节,从而加以弥补。
第一篇:数字钟表课 程 设 计 报 告
课程设计名称数字时钟 系 三 钱骏 电信 1
学生姓名班 学 成 级号绩:
指导教师:
开课时间 学年 下 学期
一.设计题目
二.主要内容
利用定时器设计一个电子钟,并定义一个启动键。当按下该键时电子时钟从 当前设定值开始走时。按秒刷新,要求在 LCD 屏上显示。
三.具体要求
在课程设计时,1 人一组,设计报告由学生独立完成,不得互相抄袭。教师 的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和 按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考 问题、分析问题和解决问题,而不应处处被动地依赖指导老师。学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但 必须和题目的要求相符合, 保证设计的正确。学生学会掌握和使用各种已有的技 术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力 都获得提高。学生要在老师的指导下制定好自己各环节的详细设计进程计划,按 给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计,边修改, 软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计 的效率,保证按时完成设计工作并交出合格的设计报告。
四.进度安排
周一 讲课设内容,安 排任务 周二 查资料,确定硬 件电路方案 周三 画出程序流程 图,写出程序清 单 周四 画出程序流程 图,写出程序清 单 周五 写总结报告
五.成绩评定
考核方法:现场验收(占 50%),课程设计报告(占 50%)。考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质 量、演示效果、设计报告质量。成绩评定:优,良,中,及格,不及格。特别说明:如发现抄袭,按照不及格处理。
第一章 系统概要 1.1 系统背景 ??????????????????????4 1.2 系统功能 ??????????????????????4 第二章 系统硬件设计 2.1 系统原理图 ?????????????????????5 2.2 单片机(MCU)模块 2.2.1 MC9S08AW60 单片机功能概述 ???????????6 2.2.2 内部结构简图 ??????????????????6 2.3 串行通信模块 2.3.1 MAX232 引图 ??????????????????7 2.3.2 串行通信的电路原理 ???????????????7 2.4 液晶显示模块 ????????????????????8 第三章 系统软件设计 3.1 MCU 方(C)程序 3.1.1 主程序(mian.c) ????????????????10 3.1.2 中断子程(Isr.c) ????????????????11 3.1.3LCD 子程序(LCD.c) ??????????????11 3.1.4 定时器(Timer.c) ????????????????13 3.1.5 串行通信子程(SCI.c) ????????????????16 第四章 系统测试 ???????????????????????18 第五章 总结展望 5.1 总结 ????????????????????????22 5.2 展望 ????????????????????????23 参考文献 ???????????????????????????23
第一章 系统概要
1.1 系统背景
这些年,人们对数字时钟的要求也越来越高,传统的时钟已不能够满足人 们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有了电子 闹钟,数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人们对 数字钟的功能及工作顺序都非常的熟悉。但是却很少知道它内部结构以及工作原 理。由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计 时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行 定时,校时功能。输出设备显示器可以用液晶显示技术和数码管显示技术。随着科学技术的发展电子技术产业结构调整,单片机开始迅速发展,由于 家用电器逐渐普及, 市场对于智能时钟控制系统的需求也越来越大。数字时钟, 就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,相比 模拟钟能给人一种一目了然的感觉,不仅如此它还能同时显示时,分,秒。而且 能对时,分,秒准确校时,这是普通钟所不及的。由于单片机集成度高,功能强, 可靠性高,体积小,功耗低,使用方面,价格低廉等一系列优点,目前已经渗入 到人们工作和生活的方方面面,几乎“无处不在,无所不为” 。单片机的应用领 域已从面向工业控制,通讯,交通,智能仪表等迅速发展到家用消费产品,办公 自动化,汽车电子,PC 机外围以及网络通讯等广大领域。单片机系统座位一种典型的嵌入式系统,其系统设计包括硬件设计和软件 设计编程设计两个方面,其调试过程一般分为软件调试,硬件调试,系统调试。
1.2 系统功能
本次课程设计的主要任务是设计一个时钟计数器,也就是要做一个秒表,能 够计数, 并且按照我们平时的时间计数格式显示, 当我们按下某个计数按键时候, 这个计数系统就一秒一秒的计数,当计数到 59 秒就进位,显示分钟的部分加 1, 当计数分钟的数字显示到 59, 同样要进位, 这时候时钟部分加 1, 如此循环下去。当我们再次按下此按键时候, 计数器暂停计数,此时显示器也就暂停在那个时候 不在计数了,并且显示当前计数时间。LCD 显示器要求每显示一次就刷新一次, 或者刷新频率更高些。
第二章 系统硬件设计
2.1 系统原理图
表 2.1 定时器显示控制系统的硬件构件划分 构件中文名称 AW60最小系统 电源 液晶显示 构件功能 AW60 MCU的最小系统, 包含BDM AW60-MinSys 电路。Power LCD 将+24V电压转换为+3.3V电压。采用串行输入模式显示数据。构件英文名称 类型 核心构件 中间构件 终端构件
上图中 AW60 是主要模块,所有的信号都是经过 AW60 模块进行处理,各个 功能模块在 AW60 模块的连接下才能够协调运行起来。图中, 左边一块是各异晶 振和两个电容连接,用来产生标准的时钟脉冲,在 AW60 上面连接的是 LCD 液 晶显示器,用来动态显示当前所计数的秒数,右边一个模块是接地使用,最下面 的是一个开关模块, 用来在程序加载后由此开关控制何时开始计数,何时暂停计 数,以及一些复位等操作。
2.2 单片机(MCU)模块
2.2.1 MC9S08AW60 单片机性能概述 S80 是单芯片 8 位微控制器解决法案。MC9S08AW60/AW60/AW48/AW32/AW16 是 低成本高性能的 8 位饿、微处理器单元(MCU)S08 家族中的成员。家族中有的 MCU 使用增强型 S08S 核,且使用不同的模块,存储空间,存储器类型与封装类 型。AW60 系列主要常规模块和特点(1)最高达 40MHz 的 CPU 工作频率和 20MHz 的内部总线工作频率;时钟源选 项包括晶振,谐振器,外部时钟或,内部产生的时钟。(2)相比 HC08CPU 指令集,S08CPU 增加了 BGND 指令。(3)单线后台调试模式接口:增强的断点能力,允许单一的断点设置在线调 试(在片内调试模块增加了多于两个的断点) 。(4)内含 32 个中断/复位源;内含 2KB 的片内 RAM;内含 60KB 的片内在线可 编程的 Flash 存储器,带有 块保护和安全选项。(5)可选的计算机正常操作(COP)复位;低电压检测与复位或中断;非法操 作码检测与复位;非法地址检测与复位。(6)ADC:多达 16 个通道,10 个 A/D 转换器与动动比较功能;两个串行通信 接口 SCI 模块与可选的 13 位中断;一个串行外设接口 SPI 模块;集成电 路互联总线 IIC 模块运行高达 100kbps 的最高总线负载;8 引脚键盘中 断 KBI 模块。(7)Timers:1 个 2 通道和一个 6 通道 16 位定时器/脉冲宽度调制器模块。既有输入捕获,输出比较,脉宽调制功能。AW 子系列 MCU 的 4 种封装形式只是引脚数量和形式有所区别,其他方面 是一致的。2.2.2 内部结构简图 1. 内部结构简图
BDM SPI 6 通道定时器/PWM
2 通道定时器/PWM
存储器 2KB RAM 64KB Flash
HCS08 内核 图 2-1 AW60 MCU 内部结构框图
图 2-1 给出了 SW60 内部结构框图,它对于我们理解和应用 AW60 MCU 有重要 作用,在学习了基本方法后,应再反过来熟悉这个内部结构图,以便好好地理解 AW60 MCU 的基本原理。从内部结构框图可以看出, AW60 主要有以下部件CPU, S08 存储器,定时器接口模块,定时器模块,看门狗模块,通用 I/O 模块,串行通信 模块(SCI),串行外设接口模块(SPI),I2C(IIC)模块,A/D 转换模块,键盘中断 模块,时钟发生器模块,复位与中断模块等。
2.3 串行通信模块
2.3.1 MAX232 引脚图 在 MCU 中,若用 RS-232 总线进行串行通信,则需外界电路实现电平转换, 在发送端需要用驱动电平将 TTL 电平转换成 RS-232 电平;在接收端,需要用接 收电路将 RS-232 电平转换为 TTL 电平。电平转换器不仅可以由晶振管分立元件 构成,也可以直接使用集成电路。目前使用 MAX232 芯片比较多,该芯片使用 单一+5V 电源供电实现电平转换,上图的引脚说明(1)VCC(16 脚) :正电源端,一般为+5V; (2)GND(15 脚) :接地; (3)Vs+(2j 脚):vs+=2vcc-1.5v=8.5v; (4)Vs-(6 脚):vs-=-2vcc-1.5v=-11.5v; (5)C2+,C2-(4,5 脚):一般接 1uF 的电解电容; (6)C1+,C2-(1,3 脚):一般接 1uF 的电解电容。2.3.2 串行通信的电路原理 图 2-2 MAX232 引脚 1、焊接到 PCB 板上的 MSX232 芯片检测方法 正常情况下, (1)T1IN=5V,则 T1OUT=-9V;T1IN=0V;则 T1OUT=9V。(2) 将 R1IN 与 T1OUT 相连,令 T1IN=5V,则 R1OUT=5V;令 T1IN=0V,则 T1OUT=0V。具有串行通信接口的 MCU,一般具有发送引脚(TxD)与接受引脚(RxD) , 不同公司或不同系列的 MCU,使用的引脚缩写名可能不一致,但含义相同。串 行通信接口的外围硬件电路,主要目的是:将 MCU 的发送引脚 TxD 与接收端 引脚 RxD 的 TTL 电平,通过 RS-232 电平转换器芯片转换成 RS-232 电平,上图 就是基本串行通信的电平转换电路。2、 MAX232 芯片进行电平转换的基本原理 发送过程:MCU 的 TxD(TTL 电平)经过 MAX232 的 11 脚(T1IN)送到 MAX232 内部,在内部 TTL 电平被“提升”为 232 电平,通过 14 脚(T1OUT) 发送出去。接收过程:外部 232 电平经过 MAX232 的 13 脚(R1IN)送入到 MAX232 的内部,在内部的电平被“降低”为 TTL 电平,经过 12 脚(R1OUT)送到 MCU 的 RxD,进入 MCU 内部。进行 MCU 的串行通信接口编程时,只针对 MCU 的发送与接收引脚,与 MAX232 无关,MAX232 只是起到电平转换作用。输入输出引脚分两组,基本含义如表 1 所示。在实际使用时,若只需要一路串行 通信接口,可以使用其中任何一组
表 1 MAX232 芯片输入输出引脚分类与基本接法
组别 1 TTL电平引脚 11 12 2 10 9 方向 输入 输出 输入 输出 典型接口 接MCU的TxD 接MCU的RxD 接MCU的TxD 接MCU的RxD 232电平引脚 13 14 8 7 方向 输入 输出 输入 输出 典型接口 连接到接口,与其它设备通 过232相接 连接到接口,与其它设备通 过232相接
2.4 液晶显示模块
1.点阵字符型 LCD 基本特点LCD 作为电子信息产品的主要显示器件,相对于其他类型的显示器件来说有 其自身的特点, 主要包括(1)低电压,低功耗; (2)平板型结构; (3)使用寿命长; (4)被动显示; (5)显示信息量大且易于彩色化; (6)无电磁辐射。点阵字符型 LCD 是专门用于显示数字,字母,图形符号及少量自定义符号的 液晶显示器。这类显示器把 LCD 控制器,点阵驱动器,字符存储器,显示体及少 量的阻容元件等集成一个液晶显示模板。鉴于字符型液晶显示模块目前在国际上 已经规范化,其电特性及接口特性是统一的,只要设计出一种型号的接口电路, 在指令上稍加修改即可使用各种规格的字符型液晶显示器模块。点阵字符型液晶显示器模块的控制器大多数为日立公司生产的 HD44780 及其 兼容的控制电路,如:SED1278(SEIKO EPSON),KS0066(SAMSUNG),NJU6408(NER JAPANRADIO)等。
2.字符型液晶显示器模块的特点如下(1)液晶显示屏是以若干 5*8 或 5*11 点阵块等组成的显示字符群。每个点阵 块块为一个字符位,字符间距和行间距都是一个点的宽度。(2)主控制电路为 HD44780(HITACHI)及 其他公司的兼容电路。从程序员 的角度来看 LCD 显示接口与编程是面向 HD44780 的,只要了解 HD44780 的编程结构即可进行 LCD 的显示编程。(3)内部具有字符发生器 ROM,可显示 192 种字符。(4)具有 64 字节的字符发生器 RAM,可以定义 8 个 5*8 点阵字符或 4 个 5*11 的点阵字符。(5)具有 64 字节的数据显示 RAM,供显示器编程使用。(6)标准接口特性,与 MC9S08 系列的 MCU 容易接口。(7)模块结构紧凑,轻巧,装配容易。(8)单+5V 电源供电(宽温型需要加-7V 驱动电源) 。(9)低功耗,高可靠性。
第三章 系统软件设计
3.1 MCU 方(C)程序
3.1.1 主程序(main.c) //------------------------------------------------------------------------* //工 程 名Timer //硬件连接MCU 的串口与 PC 方的串口相连 //程序描述// (1)打开程序目录中的 Timer1.exe,用串口发生给 MCU 表示时间的 3 字节数 据 // (2)利用定时器溢出中断修改时间,并发送新时间 //目 的学习定时器基本功能 //说 明无 //---------------- 苏 州 大 学 飞 思 卡 尔 嵌 入 式 系 统 实 验 室 2010 年 -------------------* //总头文件 #include &Includes.h& //在此添加全局变量定义 uint8 time[3]; void main(void) { uint8 i=0; uint8 LCDbuff[] = & uint8 //1 关总中断 DisableInterrupt(); //2 芯片初始化 MCUInit(); //3 模块初始化 TPMinit(1); //(1)定时器 1 初始化 SCIInit(1,SYSTEM_CLOCK,9600); //(2)串行口初始化 //4 内存初始化 time[0] = 0; time[1] = 0; time[2] = 0; remember = time[2]; LCDshow(LCDbuff);
//记录时间的数组
&;//32 个空格,显示屏初始字符 //记录当前秒数的变量 //禁止总中断
//(1) &时分秒&缓存初始化(00:00:00)
//(2) 临时变量 remember 初始化 //显示初始字符
//5 开放中断 EnableSCIReInt(); EnabletimerInt(1); EnableInterrupt(); //6 主循环 while (1) { if (time[2] != remember) {
//(1)开放串口接受中断 //(2)开放定时器 1 溢出中断 //(3)开放总中断
SCISendN(1, 3, time); LCDbuff[0]=time[0]/10+'0'; LCDbuff[1]=time[0]%10+'0'; LCDbuff[2]=time[1]/10+'0'; LCDbuff[3]=time[1]%10+'0'; LCDbuff[4]=time[2]/10+'0'; LCDbuff[5]=time[2]%10+'0'; LCDshow(LCDbuff) ; remember=time[2]; } } } 3.1.2 中断子程序(Isr.c) //------------------------------------------------------------------------* //文件名isr.c // 说 明中断处理函数文件 //------------------------------------------------------------------------* //头文件 #include &Includes.h& //此处为用户新定义中断处理函数的存放处 //------------------------------------------------------------------------* //函数名isrT1Out //功 能定时器 1 溢出中断处理函数,以秒为最小单位计时,并清定时器 1 溢出 标志位 * //参 数无 //返 回无 //说 明调用 SecAdd1 函数 //------------------------------------------------------------------------*
interrupt void isrT1Out(void) { uint8 DisableInterrupt(); SecAdd1(time);
//禁止总中断 //1s 到,递增时,分,秒缓冲区的值
//清定时器 1 溢出标志位 temp = AW60_TPM_CSTR(1); //读取定时器 1 状态和控制寄存器 TPM1SC AW60_TPM_CSTR(1) &= ~(AW60_TPM_CSTR_TOF); //向定时器溢出标志位 TOF 写0 EnableInterrupt(); //开放总中断 } //------------------------------------------------------------------------* //函数名isrSCIre //功 能SCI 接收中断处理函数,接收 3 个字节数据作为基准时分秒的值,放入 // time[0-2] //参 数无 //返 回无 //说 明调用了 SCIReN 函数 //------------------------------------------------------------------------* interrupt void isrSCIre(void) { uint8 DisableInterrupt(); //禁止总中断 temp=SCIReN(1, 3, time); //接收 3 个字节,放入 time 数组 EnableInterrupt(); //开放总中断 }
//未定义的中断处理函数,本函数不能删除 interrupt void isrDummy(void) { } //中断处理子程序类型定义 typedef void( *ISR_func_t)(void); //中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目 const ISR_func_t ISR_vectors[] @0xFFCC =
{ isrDummy, // 0xFFCC //RTI (periodic interrupt) vector isrDummy, // 0xFFCE //IIC vector isrDummy, // 0xFFD0 //analog to digital conversion vector isrDummy, // 0xFFD2 //keyboard vector isrDummy, // 0xFFD4 //SCI2 transmit vector isrDummy, // 0xFFD6 //SCI2 receive vector isrDummy, // 0xFFD8 //SCI2 error vector isrDummy, // 0xFFDA //SCI1 transmit vector isrSCIre, // 0xFFDC //SCI1 receive vector isrDummy, // 0xFFDE //SCI1 error vector isrDummy, // 0xFFE0 //SPI vector isrDummy, // 0xFFE2 //TPM2 overflow vector isrDummy, // 0xFFE4 //TPM2 channel 1 vector isrDummy, // 0xFFE6 //TPM2 channel 0 vector isrT1Out, // 0xFFE8 //TPM1 overflow vector isrDummy, // 0xFFEA //TPM1 channel 5 vector isrDummy, // 0xFFEC //TPM1 channel 4 vector isrDummy, // 0xFFEE //TPM1 channel 3 vector isrDummy, // 0xFFF0 //TPM1 channel 2 vector isrDummy, // 0xFFF2 //TPM1 channel 1 vector isrDummy, // 0xFFF4 //TPM1 channel 0 vector isrDummy, // 0xFFF6 //ICG vector isrDummy, // 0xFFF8 //low voltage detect vector isrDummy, // 0xFFFA //IRQ pin vector isrDummy // 0xFFFC //SWI vector // RESET defined in Project.prm }; 3.1.3 LCD 子程序(LCD.c) //------------------------------------------------------------------------* // 文件名LCD.c // 说 明LCD 驱动 //------------------------------------------------------------------------* #include &LCD.h& //该头文件包含寄存器及相关位定义 //------------------------------------------------------------------------* //函数名LCDinit //功 能初始化 LCD(HD44780),设置显示方式,输入方式,并清屏 //参 数无 //返 回无
//说 明调用了 LCDcommand 函数 //------------------------------------------------------------------------* void LCDinit(void) { uint16 //定义数据口(PTA0-7)为输出 LCDdataD = 0b; // |||||||| // |||||||+--------PTA0 // ||||||+---------PTA1 // |||||+----------PTA2 // ||||+-----------PTA3 // |||+------------PTA4 // ||+-------------PTA5 // |+--------------PTA6 // +---------------PTA7 //定义控制口(PTC4,PTC6)为输出 LCDctrlD1 |=(1&&LcdRS); LCDctrlD1 |=(1&&LcdRW); LCDctrl1 &=~(1&&LcdRS); //RS、R/W=00,写指令 LCDctrl1 &=~(1&&LcdRW); //定义控制口(PTF6)为输出 LCDctrlD2 |=(1&&LcdE); LCDctrl2 |=(1&&LcdE); //E=1 //1 功能设置 LCDcommand(0b); //5*7 点阵模式, 2 行显示,8 位数据总线 // ||| // ||+--------设置点阵模式,0-5*7 点阵,1-5*10 点阵 // |+---------设置显示行数,1-2 行显示,0-1 行显示 // +----------设置数据接口位数,1-8 位数据总线,0-4 位数据 总线 //2 显示开关控制 LCDcommand(0b); // 不闪烁, 关光标显示,关显示 // ||| // ||+-----闪烁控制,0-不闪烁,1-闪烁 // |+------光标控制,0-关光标,1-开光标 // +-------显示控制,0-关显示,1-开显示 //3 清屏 //3.1 清 DD RAM 内容,光标回原位,清 AC LCDcommand(0b); //3.2 等待清屏完毕,时间 & 1.6ms
for(i = 0; i& 4000; i++) asm(&NOP&); //4 输入方式设置 LCDcommand(0b); // 显示不移动,光标左移(A = 1), 数据读写操 作后,AC 自动增 1 // || // |+------0-显示不移动,1-显示移动 // +-------0-AC 自动减 1,1-AC 自动增 1 //5 光标或画面移位设置 LCDcommand(0b);//光标右移一个字符位,AC 自动加 1 //6 显示开关控制 LCDcommand(0b); //不闪烁, 关光标显示,开显示 // ||| // ||+------闪烁控制,1-闪烁,0-不闪烁 // |+-------光标控制,1-开光标,0-关光标 // +--------显示控制,1-开显示,0-关显示 } //------------------------------------------------------------------------* //函数名LCDcommand //功 能执行给定的 LCD 命令,并延时 //参 数cmd:待执行的命令 //返 回无 //说 明无 //------------------------------------------------------------------------* void LCDcommand(uint8 cmd) { uint16 //1 等待 & 40us for(i = 0; i & 1000; i++) asm(&NOP&); //2 数据送到 LCD 的数据线上 LCDdata = //3 给出 E 信号的下降沿,使数据写入 LCD LCDctrl2 |=(1&&LcdE); asm(&NOP&); asm(&NOP&); asm(&NOP&); LCDctrl2 &=~(1&&LcdE); //Lcd 结束接收数据 //4 等待 & 40us for(i = 0; i & 1000; i++) asm(&NOP&); }
//------------------------------------------------------------------------* //函数名LCDshow //功 能在 LCD(HD44780)显示屏上显示 32 个数据 //参 数str 待显示数据的首地址 //返 回无 //说 明调用 LCDinit、LCDcommand 函数 //------------------------------------------------------------------------* void LCDshow(uint8 str[]) { uint8 //1 LCD 初始化 LCDinit(); //2 显示第 1 行 16 个字符 //2.1 设置显示首地址 LCDctrl1 &=~(1&&LcdRS); //RS、R/W=00,写指令 LCDctrl1 &=~(1&&LcdRW); LCDcommand(0b); //后 7 位为 DDRAM 地址 0x00 //2.2 写 16 个数据到 DDRAM LCDctrl1 |=1&&LcdRS; //RS、R/W=10,写数据到 DDRAM 中 LCDctrl1 |=~(1&&LcdRW); for (i = 0;i & 16;i++)//将要显示在第 1 行上的 16 个数据逐个写入 DD RAM 中 { LCDcommand(str[i]); } //3 显示第 2 行 16 个字符 //3.1 设置显示首地址 LCDctrl1 &=~(1&&LcdRS); //RS、R/W=00,写指令 LCDctrl1 &=~(1&&LcdRW); LCDcommand(0b); //后 7 位为 DDRAM 地址 0x40 //3.2 再写 16 个数据到 DDRAM LCDctrl1 |=1&&LcdRS; //RS、R/W=10,写数据到 DDRAM 中 LCDctrl1 &=~(1&&LcdRW); for (i = 16;i & 32;i++) //将要显示在第 2 行上的 16 个数据逐个写入 DD RAM 中 { LCDcommand(str[i]); }
3.1.4 定时器(Timer.c) //------------------------------------------------------------------------* // 文件名timer.c // 说 明定时器驱动文件 //------------------------------------------------------------------------* //定时器头文件 #include &timer.h& //------------------------------------------------------------------------* //函数名TPMinit //功 能对定时器初始化,禁止定时器 1 溢出中断,设置为 1s 发生 1 次定时器 溢出中断 * //参 数TPMNo 为定时器号(1~2) //返 回无 //说 明无 //------------------------------------------------------------------------* void TPMinit(uint8 TPMNo) { //参数溢出处理 if(TPMNo&2) TPMNo=2; else if(TPMNo&1) TPMNo=1; //设置定时器状态和控制寄存器 //分频因子 64,设置为固定时钟频率,为 2MHz,禁止溢出中断 TPM_CSTR(TPMNo) =0b; // | ||||| // | ||||+-----PS0\ // | |||+------PS1 ----64 倍分频 // | ||+-------PS2/ // | |+--------CLKSA\ // | +---------CLKSB/--时钟源选择系统固定时钟 // +-----------TOIE----禁止溢出中断 //计数寄存器初值 = 0x0000 TPM_CNTH(TPMNo) = 0x00; TPM_CNTL(TPMNo) = 0x00; //预置寄存器设定值 = 0x7A12
TPM_MODH(TPMNo) = 0x7A; TPM_MODL(TPMNo) = 0x12; } //------------------------------------------------------------------------* //函数名SecAdd1 //功 能以秒为最小单位递增时,分,秒缓冲区的值(00:00:00-23:59:59) //参 数*p:计数变量的首地址 //返 回无 //说 明无 //------------------------------------------------------------------------* void SecAdd1(uint8 *p) { *(p+2) += 1; //秒加 1 if (*(p+2) &= 60) //秒溢出 { *(p+2) = 0; //清秒 *(p+1) += 1; //分加 1 if (*(p+1) &= 60) //分溢出 { *(p+1) = 0; //清时 *p += 1; //时加 1 if (*p &= 24) //时溢出 *p = 0; //清时 } } } 3.1.5 串行通信子程序 //------------------------------------------------------------------------* //文件名SCI.c //说 明SCI 构件函数源文件 //------------------------------------------------------------------------* //头文件 #include &SCI.h& //该头文件包含 SCI 相关寄存器及标志位宏定义 //------------------------------------------------------------------------* //函数名SCIInit //功 能初始化 SCIx 模块。x 代表 1,2 //参 数uint8 SCINo第 SCINo 个 SCI 模块。其中 SCINo 取值为 1,2 // 如果 SCINo 大于 2,则认为是 2
// uint8 sysclk系统总线时钟,以 MHz 为单位 // uint16 baud波特率,如 ,1 // 一般来说,速度慢一点,通信会更稳定 //返 回无 //说 明SCINo=1 表示使用 SCI1 模块,依此类推。//------------------------------------------------------------------------* void SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) { uint16 ubgs=0; if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } //1. 计 算 波 特 率 并 设 置 :ubgs = fsys/( 波 特 率 *16)( 其 中 fsys=sysclk*1000000) ubgs = sysclk*(10000/(baud/100))/16; //理解参考上一行,此处便于 CPU 运算 SCI_BDH(SCINo) = (uint8)((ubgs & 0xFF00) && 8); SCI_BDL(SCINo) = (uint8)(ubgs & 0x00FF); //无校验,正常模式(开始信号 + 8 位数据(先发最低位) + 停止信号) SCI_C1(SCINo) = 0b; //SCI 控制寄存器 1 // |||||||| // |||||||+-PT ---奇偶校验类型,在 PE=1 时游泳 // ||||||+--PE ---奇偶校验使能, // |||||+---ILT ---闲置线路类型选择 // ||||+----WAKEI---接受长期唤醒方式选择 // |||+-----M ---9 位或 8 位数据选择 // ||+------RSRC ---接收器源选择 // |+-------SCISWAI 等待模式中 SCI 停止 // +--------LOOPS---循环模式选择 //允许发送,允许接收,中断方式收发 SCI_C2(SCINo) = 0b; //SCI 控制寄存器 2 // |||||||| // |||||||+-SBK ---发送中止字符 // ||||||+--RWU ---接收器唤醒控制 // |||||+---RE ---接收器使能 // ||||+----TE ---发送器使能 // |||+-----ILIE ---闲置线路中断使能 // ||+------RIE ---接收器中断使能 // |+-------TCIE ---发送完成中断使能 // +--------TIE ---发送中断使能 }
//------------------------------------------------------------------------* //函数名SCISend1 //功 能串行发送 1 个字节 //参 数uint8 SCINo第 SCINo 个 SCI 模块,其中 SCINo 取值为 1,2 // uint8 ch要发送的字节 //返 回无 //说 明SCINo=1 表示使用 SCI1 模块,依此类推 //------------------------------------------------------------------------* void SCISend1(uint8 SCINo, uint8 ch) { if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } while(!(SCI_S1(SCINo) & 0b1000000));//判断发送缓冲区是否为空 SCI_D(SCINo) = } //------------------------------------------------------------------------* //函数名SCISendN //功 能串行发送 N 个字节 //参 数uint8 SCINo第 SCINo 个 SCI 模块,其中 SCINo 取值为 1,2 // uint16 n发送的字节数 // uint8 ch[]待发送的数据 //返 回无 //说 明SCINo=1 表示使用 SCI1 模块,依此类推 // 调用了 SCISend1 函数 //------------------------------------------------------------------------* void SCISendN(uint8 SCINo, uint16 n, uint8 ch[]) { uint16 if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } for (i = 0; i & i++) SCISend1(SCINo,ch[i]); } //------------------------------------------------------------------------* //函数名SCIRe1
//功 能从串口接收 1 个字节的数据 //参 数uint8 SCINo第 SCINo 个 SCI 模块,其中 SCINo 取值为 1,2 //返 回接收到的数(若接收失败,返回 0xff) // uint8 *p接收成功标志的指针(0 表示成功,1 表示不成功) //说 明参数*p 带回接收标志,*p = 0,收到数据;*p = 1,未收到数据 * //说 明SCINo=1 表示使用 SCI1 模块,依此类推 //------------------------------------------------------------------------* uint8 SCIRe1(uint8 SCINo, uint8 *p) { uint16 uint8 if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } for (k = 0; k & 0 k++)//有时间限制 if((SCI_S1(SCINo) & 0b) != 0)//判断接收缓冲区是否满 { i = SCI_D(SCINo); *p = 0x00; } if (k &= 0xfbbb) //接受失败 { i = 0 *p = 0x01; } } //------------------------------------------------------------------------* //函数名SCIReN //功 能从串口接收 N 个字节的数据 //参 数uint8 SCINo第 SCINo 个 SCI 模块,其中 SCINo 取值为 1,2 // uint16 n要接收的字节数 // uint8 ch[]存放接收数据的数组 //返 回接收标志= 0 接收成功,= 1 接收失败 //说 明SCINo=1 表示使用 SCI1 模块,依此类推 // 调用了 SCIRe1 函数 //------------------------------------------------------------------------* uint8 SCIReN(uint8 SCINo, uint16 n, uint8 ch[])
{ uint16 uint8 //接收标志 m = 0; if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } while (m & n) { ch[m] = SCIRe1(SCINo, &fp); if (fp == 1) { return 1; //接收失败 } m++; } return 0; //接收成功 } //------------------------------------------------------------------------* //函数名SCISendString //功 能串口传输字符串 //参 数uint8 SCINo第 SCINo 个 SCI 模块,其中 SCINo 取值为 1,2 // char *p要传输的字符串的指针 //返 回无 //说 明字符串以'\0'结束 // 调用了 SCISend1 函数 //------------------------------------------------------------------------* void SCISendString(uint8 SCINo,char *p) { uint32 if(SCINo & 2) { SCINo = 2; //若传进的通道号大于 2,则按照 2 来接收 } if(p == 0) for(k = 0; p[k] != '\0'; ++k) { SCISend1(SCINo,p[k]); } }
第四章 系统测试
4.1 运行界面调试:
4.2 运行结果图:
第五章 总结展望
5.1 总结 为期一个星期的单片机课程设计结束了,这次课程设计让我学 到了很多东西,了解到了很多自身的不足,单片机是我们这学期开 设的课程,很多东西书上都有提到,但是等到实际操作时会发现有 很多困难,并且其实很多学的东西都已经忘得差不多了,其次,课 程设计要求理论与实践相结合,程序与硬件结合,这对我们无外乎 是另一番天地。很多理论部分一到实践时就出了很多意想不到的问 题, 刚开始就连程序都不正确, 运行不了, 后来又发现很多机器 LED 显示不了,有时候是连线的问题,有时候是忘了打开机箱里面的开 关,各种平时不经意的小问题都会一点一点的慢慢浮出水面,在我 们共同合作,老师的精心指导下,终于做出了结果。在身心都投入 到实验中去之后, 我发现了单片机的重要性与高难度性,为期一周的 单片机课程设计让我不仅从中学到了很多.,也让我对单片机有了更 深一步的了解.它是一个精细活,需要有耐心的一点一点去检查,调 试,去认真做。我觉得我对单片机的一些知识在这个动手的过程中 真的是从无到有增长的。从刚开始的一窍不通,到后来渐渐的得心 应手,我渐渐的学会处理一些基本的问题。学会该怎样去学,学会 怎样与同学共同合作,以团队的精神去做一件事。在此之中,我们 不光学到了很多知识,同学间的友谊也无形中增加了,这对我们大 有裨益。总而言之,这次单片机课程设计确实提高了我们很多,给了 我们一次实现自己所学知识的机会。
5.2 展望 在经历了一个星期的单片机课程设计之后,我发现自身存在很 多问题,首先我理论知识很欠缺,有时候连基本的程序都读不懂, 更不用说让自己来写了,其次,我对硬件部分很不熟悉, 很难上手, 连基本的线路都不会连,这次试验通过不断的查资料、上网搜索, 在老师、同学的共同帮助下才勉强完成。在一个星期的试验之后, 我觉得以后还需要注意几点的学习:首先,要把理论基础过过关, 像我这种连程序都读不懂的人很明显是非常不合格的,不光要看懂 书本,其次,要多进行试验,将理论与实践相结合,只有多看多做 多理解才能学好这门课程。
[1] 王宜怀、张书奎、王林、吴瑾著.嵌入式技术基础与实践(第二版) ,北京:清华大学 出版社,2011. [2] 田泽. 嵌入式系统开发与应用. 北京:北京航天航空大学出版社,2006. [3] 田泽. 嵌入式系统开发与应用教程. 北京:北京航天航空大学出版社,2006. [4] 王宜怀、陈建明、蒋银珍著. 基于 32 位 ColdFire 构建嵌入式系统. 北京:电子工业出 版社,2006. [5] 王粉花、王志良. 嵌入式系统与单片机实践教程. 北京:清华大学出版社,2010.
第一篇:数字钟表数字时钟 一、 课题设计任务及要求
用中、小规模集成电路设计一台能显示日、时、分秒的数字电子钟,要求如下1.由晶振电路或者 555 多谐振荡电路产生 1HZ 标准秒信号。2.秒、分为 00-59 六十进制计数器。3.时为 00-23 二十四进制计数器。4.可手动校正能分别进行秒、 分、时的校正。只要将开关置于手动位置。可分别对秒、 分、时进行连续脉冲输入调整。5.整点报时。整点报时电路要求要求报时声响四低一高,最后一响为整点。
二、方案论证及总体电路框图
2.1、总体电路框图
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不 可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的 1HZ 时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。1 所示为数字钟 图 的总体构成框图。
主体电路 扩展电路 定时控制 时译码器 分译码器 秒译码器 报整点时 数 时计数器 分计数器 秒计数器
图表 1 数字钟的总体框图
2.2方案论证
2.2.1 时间脉冲产生电路 方案一:由集成电路定时器 555 与 RC 组成的多谐振荡器作为时间标准信号源。
图表 2 555 与 RC 组成的 1HZ 多谐振荡器图 通过计算可以知道频率 f=1.43/( R1+2*R2)*C,其中 R1=5.1KΩ ,R2=4.7KΩ ,最终解出 f=0.956HZ,那么 T=1/f=1.046s。其误差为 4.6%,在精度要求不高时可以使用。方案二振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的 准确程度, 通常选用石英晶体构成振荡器电路。石英晶体振荡器的作用是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
图表 3 石英晶体振荡器图 此电路采用的 32768 晶体振荡电路,其频率为 32768Hz,然后再经过 15 分频电路可得到 标准的 1Hz 的脉冲输出。
方案三:由集成逻辑门与 RC 组成的时钟源振荡器。
门电路组成的多谐振荡器图
对于 TTL 门电路通常在 0.7~2KΩ 之间;对于 CMOS 门则常在 10~100MΩ 之间。由门 电路组成的多谐振荡器的振荡周期不仅与时间常数 RC 有关, 而且还取决于门电路的阈值电 压 VTH,由于 VTH 容易受到温度、电源电压及干扰的影响,因此频率稳定性较差,只能用 于对频率稳定性要求不高的场合
综上所述:选用方案三比较合适,但是考虑到实验电路实线连接的方便性,我们选择方 案一和二结合使用。
2.2.2 分频电路
由于石英晶体是 32768HZ 的频率,所以要进行多级二进制分频,通常选用 CD4060 和 CD4040 芯片,由于实验器材的局限性,我们选择由 555 多谐振荡电路提供 1Hz 的电路,用 CD4040 芯片分频提供 1000HZ 和 500HZ 的高低频率。通常,有石英晶体振荡电路产生的 32768 给分 频器CP端一个脉冲,进行分频,从 2、5 接口就能得到我们所需要的频率。
2.2.3 计时电路
通过 74s192 芯片进行计时,由秒个位和秒十位计数器、分个位和分十位计数器及时个位和 时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为 60 进制计 数器,而根据设计要求,时个位和时十位计数器为 24 进制计数器。
在刚开机接通电源或计时出现误差时,都需要对时间进行校正。校“时”电路的基本原 理是将周期为 0.5s 的脉冲信号直接引进“时”计数器,同时将“分”计数器置零,让“时” 计数器快速计数,在“时”的指示达到需要的数字后,切断 0.5s 的脉冲信号。
2.2.5 报时电路
每当数字钟计时快要到正点时候发出响声,通常按照四低音,一高音的顺序发出间断声,以 最后一声高音结束的时刻为正点时刻。4 低音(约 500Hz)分别发生在 59 分 51 秒、发生在 59 分 53 秒、发生在 59 分 55 秒、发生在 59 分 57 秒、,最后一声高音(约 1KHz)发生在 59 分 59 秒,他们的持续时间均为 1s,共响 5 次,并且前四次为低音,最后一响为高音,此 时计数器正好为整点。
三、单元电路设计
3.1 时间脉冲产生电路的设计
图表 5 产生 1024HZ 和 512HZ 电路图 CD4040 同时构成振荡电路和分频电路。如图 8, CP 接入振荡器外接元件可实现振荡, 在 并利用时计数电路中多一个 2 分频器可实现 5 级 2 分频和 6 级 2 分频, 即可得 1024HZ 和 512HZ 信号。
图表 6 产生 1HZ 电路图 通过计算选择合适的电阻电容即可得到大约 1HZ 的脉冲,即输出 1s。虽然误差有点大, 但是实验室器材局限性,所以选择了此电路作为时钟源。3.2
3.2 计数电路的设计
秒、分计数器为 60 进制计数器。小时计数器为 24 进制计数器。实现这两种模数的计数 器采用中规模集成计数器 CC40161。
3.2.1 60 进制计数器的设计
“秒”计数器电路与“分”计数器电路都是 60 进制,它由一级 10 进制计数器和一级 6 进制计数器连接构成。如图 8.所示由 74s192 构成的 60 进制计数器。首先将两片 74s1921 设置成十进制加法计数器, 将两片计数器并行进位则最大可实现 100 进制的计数器。现要设 计一个 60 进制的计数器, 可利用“反馈清零”的方法实现。当计数器输出“2Q32Q22Q12Q0、 1Q3Q2Q1Q0=”时,通过门电路形成一置数脉冲,使计数器归零。
图表 7 60 进制电路
3.2.2 24 进制计数器的设计
同理当个位计数状态为“Q3Q2Q1Q0=0100”,十位计数器状态为“Q3Q2Q1Q0=0010”时, 要求计数器归零。
图表 8 24 进制电路
3.3 电路显示设计
若将 74192 芯片的“秒”、 “分”、 “时”计数器的每位输出分别接到相应的数码管接 入端,便可进行不同数字的显示,如图 10。
图表 9 显示电路
3.4 校时电路的设计
首先对图做下解释说明。开关 3 连接时的个位的 UP 进位端,开关,2 连接分的个位的 UP 进 位端,开关 5 上端连接秒个位的 UP 端,下端连接 555 定时器的输出端,开关 1 接各个 192 芯片的 DOWN 端。开关 Space 是连向各个 192 芯片的清零端进行清零。当开关 1、 开关 space 接高电平时,控制开关 2、3、5 分别进行分、时、秒的校时。
图表 10 校时电路
3.5 报时电路
根据要求,电路应在整点前 10 秒钟内开始整点报时,即当时间在 59 分 50 秒到 59 分 59 秒期间时,报时电路报时控制信号。当时间在 59 分 50 秒到 59 分 59 秒期间时,分十位、 分个位和秒十位均保持不变,分别为 5、9 和 5,因此可将分计数器十位的 QC和 QA 、个 位的 QD和 QA及秒计数器十位的 QC和 QA相与,从而产生报时控制信号。选蜂鸣器为电声器件, 蜂鸣器是一种压电电声器件, 当其两端加上一个直流电压时酒会 发出鸣叫声,两个输入端是极性的,其较长引脚应与高电位相连,图 12 的三极管时为了驱 动蜂鸣器。
图表 11 报时电路图
四、安装与调试
1、根据自己的电路图清单找出相应的芯片和元器件。
2、按照电路图单步连接,并且每连接一步就要进行检验,一面出错到后边就难以改正。
1、接通电源逐级调试。如果出现错误,可先检查各芯片的电源线是否接上,并保证有 正常的工作电压。2、检查 555 振荡电路是否输出的为一秒,如果不为一秒,校验一下各电容和电阻是否 为我们需要的值。3、检查分频器是否能进行分频,达到我们需要的 1024HZ 和 512HZ 的高低电平,这个 需要用示波器检测。4、检查各级计数器的工作情况。将“秒”信号送入“秒”计数器,检查个位、十位是 否按 10s、60s 进位,若不能正常显示,则需检查计数器 74192 和数码管的工作状态。若不 能正常进行 60 进制, 则需检查产生清零信号的 74LS00 芯片是否正常。可按同样方法检查 “分” 和“时”计数器的工作情况。5、 检查校时电路的工作情况是否满足校时要求, 若不正常, 则需检查各线路是否断路。6、将时间调整到 59 分 50 秒,观察整点报时电路能否正常工作,若不正常,则需检查 相应的 74LS20 芯片的工作状态。7、当所有功能模块调整好后,再进行整机联调,直至数字钟能进行正常工作。
五、电路功能
1、准确计时,以数字形式显示时分秒; 2、小时的计时要求为 12 翻 1 ,分和秒为 60 进制; 3、手动校正时间; 4、整点报时(整点时发出提示音) 。
六、总体电路图和元件清单
6.1 总体电路图
图表 13 数字时钟电路总图
6.2 元件清单
序号 1 2 3 4 5 6 7 8 9 10 11 12 13
元器件名称 石英晶体振荡器 十进制计数器 555定时器 四2输入与非门 四2输入与非门 四输入非门 12位二进制计数器/分频器和 振荡器 电容 数码管 三极管 电阻 扬声器 开关
规格型号 32768Hz 74LS192 NE555 74LS00 74LS20 CC4040 20pf、100uf、 0.01uf BS201 3DG4 5.1K、4.7K、1K、 22欧
数量 1 6 6 2 2 1 1 2、1、1 6 1 1、1、2、1 1 5
七、总结与体会
7.1 问题发现与解决
通过本次实验我在操作过程中主要发现了如下问题1、 发现计数器没有规律的计时,经过思考和电路排查发现是置数端的线路接错了或者 把插口的引脚搞错了,经改正后恢复正常。2、 分频电路始终不分频或者就是偶尔分频。经过排查发现分频芯片 CD4040 在电路板 上接触不好,但是就是因为这个接触的小原因可能花费了我们近一个小时的时间排 查。3、 在试验中最麻烦是就是芯片老是坏了,再一开始都误以为刚去出的芯片不会有问 题,结果把电路看了一遍又一遍最终发现是这个原因。4、 最重要的一个问题就是电路连接好了之后,整点报时功能居然不报时。认真排查线 路发现没有问题,多次仿真也能正常使用,但芯片也换了多个使用,但任然不能实 验此功能。一直到实验结束也没有解决,这也是一直困扰我的原因。不过我和队友 分析认为是我们使用了两块实验台,而另外的一款试验虽然共地了,但是还有些许 不兼容,因为后来我们用另外一台的时钟脉冲验证发现不能用在第一台上。
7.2 实习总结
1、做实验要未雨绸缪。也就是说要提前准备好自己实验需要的相关质料,做到有 备而战,这一点我这次在实验中做得很不好。其实做任何事情都需要这样。2、做事情要踏踏实实。做电路实验十一个烦躁和反复的实验,如果不能不静下心 来,很难完成作业,例如电路可能因为一个导线连接错了就导致整个线路的瘫痪,而这 个时候如果不踏实下来,恐怕是很难检查出错误来的。3、要胆大心细。所谓胆大就是要敢于实践,敢于创新,将自己的想法用实验给实 现出来。所谓心细就是在实验的每一个小步凑中要认认真真,慢慢的连接,争取做到一 次行正确。4、失败是成功之母,实验实在无数次失败之后换来的成功,所以要败不馁。5、 从此次实验中我学会了用数字电路的知识设计出了多功能数字时钟。对用 74192
计数器构成的技术电路、555 定时器设计的振荡电路、逻辑门电路、等知识进行了一个 很好的复习,当然也学到了分频电路、校时电路、整点报时电路等新知识,将所学过的 知识进行了综合的运用。6、勤动手、多动脑,这是学习工科必备的。
八、参考文献
1、 《电子技能实与训第二版》 迟软河 电子工业版社 2005 年出版。2、 《电子线路实验.设计.测试第三版》 谢自美 华中科技大学出版社 2000.7。3、 《电子技术基础实验-电子电路实验、 设计、 仿真》 陈大钦 高教出版社。4、部分质料来自百度网(www.baidu.com)
数字钟表相关文章
《》由(易啊教育网)整理提供,版权归原作者、原出处所有。
Copyright &
All Rights Reserved.

我要回帖

更多关于 笔记本电脑数字小键盘 的文章

 

随机推荐