单片机电子时钟实验报告

更新时间:2023-12-18 17:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计报告

设计题目: 电子时钟设计 指导教师:

姓 名: 学 号: 班 级: 专 业:

日 期: 2012-1-5

目录

1

摘要 ................................................................................................... 3 第一章 系统设计要求 ................................................................... 4

1.1 基本功能 .................................................................................... 4 1.2 扩展功能 .................................................................................... 4

第二章 硬件总体设计方案 .......................................................... 4

2.1系统功能实现总体设计思路 ...................................................... 4 2.2各部分功能实现 ......................................................................... 6 2.3系统工作原理 ............................................................................. 6 2.4时钟各功能分析及图解 .............................................................. 6

2.4.1电路各功能图解分析.................................................................................... 7

2.4.2电路功能使用说明...................................................................................... 10

第三章软件总体设计方案 ............................................................ 1

控制电路的C语言源程序 ............................................................. 10

第四章 课程设计结果分析 .................................................... 19 第五章 总结 .................................................................................. 20 参考文献 ........................................................................................ 21

单片机电子时钟

2

摘要:单片机 即单片微型计算机。(Single-Chip

Microcomputer ),是 集 CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于工业自动化上和智能产品。时钟,自从它被发明的那天起,就成为了人类的好朋友,但随着时间的推移,科学技术的不断发展,时钟的应用越来越广范,人们对时间计量的精度要求也越来越高。怎样让时钟更好的为人民服务,怎样让我们的老朋友再次焕发青春呢?这就要求我们不断设计出新型的时钟,来不断满足人们的日常生活需要。然而市场上的时钟便宜的比较笨重,简单实用的又比较昂贵。那么,有没有一款既简单实用价格又便宜的时钟呢?

我们课程设计小组设想:可不可以利用单片机功能集成化高,价格又便宜的特点设计一款结构既简单,价格又便宜的单片机电子时钟呢?

基于这种情况,我们课程设计小组成员多方查阅资料,反复论证设计出了这款既简单实用,又价格便宜的——单片

机电子时钟。

关键词:单片机 时钟 计时

3

第一章 系统设计要求

1.1 基本功能 (1)能够显示时分秒 (2)能够调整时分秒

1.2 扩展功能

(1)能够任意设臵定时时间 (2)定时时间到闹铃能够报警 (3)实现了秒表功能

第二章 硬件总体设计方案

本次设计时钟电路,使用了STC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、显示屏即可满足设计要求。 2.1系统功能实现总体设计思路

此设计原理框图如图2-1所示,此电路包括以下四个部分:单片机,键盘,闹铃电路及显示电路。

4

数码管显示 独立键盘 51单片机 闹铃电路

图2-1 设计原理框图

经多方论证硬件我们小组采用AT89C51单片机和7SED八位共阳极数码管等来实现单片机电子时钟的功能。

详细元器件列表如表2.1所示:

表2.1 详细元器件列表 STC89c52RC 7SED四位共阳极数码管 PNP三极管 100p电容 30p电容 1K电阻 150欧姆电阻 10k欧姆电阻 100欧姆电阻

1片 2片 9个 6个 2个 6个 8个 8个 8个 5

2.2各部分功能实现

(1) 单片机发送的信号通过程序控制最终在数码管上显示

出来。

(2) 单片机通过输出各种电脉冲信号来驱动控制各部分正

常工作。

(3) 为使时钟走时与标准时间一致,校时电路是必不可少

的,键盘用来校正数码管上显示的时间。

(4) 单片机通过控制闹铃电路来完成 定时闹钟的功能。 2.3系统工作原理

设计的电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以及校正电路。 详细电路功能图如图2-2:

1234abcdefgdpabcdefgdp5678R1200C110k10k10k10k10k10k1922uFU1XTAL1X1CRYSTAL010203040506C222uF18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161712345678abcdefgdpQ1PNPLS1100p100p100p100p100p100p293031PSENALEEASOUNDE12345610010010010010010001020304050612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 6

本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。

2.4时钟各功能分析及图解 2.4.1电路各功能图解分析

(1) 时钟运行图

仿真开始运行时,或按下key4键时,时钟从12:00:00开始运行,其中key2键对分进行调整,key3对小时进行调整,key6可以让时钟暂停。 时钟运行图如图 2-3 所示:

1234abcdegdpabcdegdp5678R1200C110k10k10k10k10k10k1922uFU1XTAL1X1CRYSTAL010203040506C222uF18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161712345678abcdefgdpQ1PNPLS1100p100p100p100p100p100p293031PSENALEEASOUNDE12345610010010010010010001020304050612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 7

(2)秒表计时图

当按下key1键进入秒表计时状态,key6是秒表暂停键,可按key4键跳出秒表计时状态。 如图2-4:

1234abcdefgdpabcdefgdp5678R1200C110k10k10k10k10k10k1922uFU1XTAL1X1CRYSTAL010203040506C222uF18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161712345678abcdefgdpQ1PNPLS1100p100p100p100p100p100p293031PSENALEEASOUNDE12345610010010010010010001020304050612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 (3)闹铃设臵图及运行图

当按下key5,开始定时,分别按key2调分,key3调时设臵闹铃时间,然后按下key4键恢复时钟运行状态(图2-5)当闹铃设臵时间到时,蜂鸣器将发出10秒中蜂鸣声(图2-6)。

8

1234abcdefgdpabcdefgdp5678R1200C110k10k10k10k10k10k1922uFU1XTAL1X1CRYSTAL010203040506C222uF18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161712345678abcdefgdpQ1PNPLS1100p100p100p100p100p100p293031PSENALEEASOUNDE12345610010010010010010001020304050612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 该数字钟是用一片STC89C52单片机通过编程去驱动8个数码管实现的。通过6个开关控制,从上到下6个开关KEY1-KEY6的功能分别为:KEY1,切换至秒表;KEY2,调节时间,每调一次时加1;KEY3, 调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设臵状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:

A通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.

B从P0.0输出一个信号使二极管发光,二极管在设臵的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。

9

2.4.2电路功能使用说明

(1) 各个控制键的功能:可对时间进行校准调节(只能加1);按下设臵键数字时钟进入闹钟设臵状态,设臵闹钟的时间;时加1、分加1键是在校准时间时或设臵闹钟时间对小时数或分钟数调节而设臵的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。 STC89C51单片机,通过编写程序对数码显示进行控制。 (2) 八个7段数码管显示时钟和秒表信号。

第三章软件总体设计方案

控制电路的C语言源程序

#include #include

unsigned char data dis_digit; unsigned char key_s, key_v;

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3

10

0x99,0x92,0x82,0xf8,0x80,0x90, 0xbf};// 4, 5, 6, 7, 8, 9,— unsigned char data dis_buf[8]; unsigned char data dis_index; unsigned char hour,min,sec; unsigned char sec100;

sbit K1 = P1^1; sbit K2 = P1^2; bit scan_key(); void proc_key(); void inc_sec(); void inc_min(); void inc_hour(); void display();

void delayms(unsigned char ms);

void main(void) { P2 = 0xff; P3 = 0xff;

TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xdc;

11

TL1 = 0;

TH0 = 0xFC; TL0 = 0x17;

hour = 12; min = 00; sec = 00;

sec100 = 0;

dis_buf[0] = dis_code[hour / 10]; // 时十位 dis_buf[1] = dis_code[hour % 10]; // 时个位 dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 dis_buf[6] = dis_code[sec / 10]; // 秒十位 dis_buf[7] = dis_code[sec % 10]; // 秒个位 dis_buf[2] = 0xbf; // 显示\ dis_buf[5] = 0xbf; // 显示\

dis_digit = 0xfe; dis_index = 0;

12

TCON = 0x01;

IE = 0x8a; // 使能timer0,1 中断 TR0 = 1; TR1 = 1;

key_v = 0x03; while(1) {

if(scan_key()) {

delayms(10); if(scan_key()) {

key_v = key_s; proc_key(); } } }

13

}

bit scan_key() {

key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1;

return(key_s ^ key_v); }

void proc_key() { EA = 0;

if((key_v & 0x01) == 0) // K1 {

inc_hour(); // JJ=1; }

else if((key_v & 0x02) == 0) // K2 { min++;

14

// JJ=0; if(min > 59) { min = 0; }

dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 } EA = 1; }

void timer0() interrupt 1

// 定时器0中断服务程序, 用于数码管的动态扫描

// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,

// 选通P2.0口数码管

// dis_buf --- 显于缓冲区基地址 {

TH0 = 0xFC;

15

TL0 = 0x17;

P3 = 0xff; // 先关闭所有数码管

P2 = dis_buf[dis_index]; // 显示代码传送到P0口 P3= dis_digit; //

dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管

dis_index++; //

dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 }

void timer1() interrupt 3 {

TH1 = 0xdc;

sec100++;

if(sec100 >= 100) {

16

sec100 = 0; inc_sec(); } }

void inc_sec() { sec++; if(sec > 59) { sec = 0; inc_min(); }

dis_buf[6] = dis_code[sec / 10]; // 秒十位 dis_buf[7] = dis_code[sec % 10]; // 秒个位 }

void inc_min() { min++; if(min > 59) {

17

min = 0; inc_hour(); }

dis_buf[3] = dis_code[min / 10]; // 分十位 dis_buf[4] = dis_code[min % 10]; // 分个位 }

void inc_hour() { hour++; if(hour > 23) { hour = 0; }

if(hour > 9)

dis_buf[0] = dis_code[hour / 10]; // 时十位 else

dis_buf[0] = 0xff; // 当小时的十位为0时不显示 dis_buf[1] = dis_code[hour % 10]; // 时个位 }

18

void delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) {

for(i = 0; i < 120; i++); } }

第四章 课程设计结果分析

此时钟设计是利用protues仿真软件进行仿真,基本上实现了课程设计要求实现的功能。

硬件部分设臵了的六个按键。当按键一按下时,进入秒表显示状态,秒表开始计时,当按键六按下时,秒表暂停;当按键四按下时恢复到时间显示功能;当按键二按下时,进入调分状态,按一次,分加一,60一循环;按键三按下时,进入调时状态,按一次,时加一,60一循环;按键五按下时,进入闹铃设臵功能,紧接着按下按键二和按键三进行时和分的设臵,再按下按键4恢复显示时间,当显示的时间和定时设臵的时间一致时,蜂鸣器发出蜂鸣

19

声,蜂鸣时间我们设臵为10秒。

第五章 总结

经过一周的单片机课程设计,我组成员已基本完成课题要求。功能上基本达标:时钟的显示,秒表显示,定时功能,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;秒表功能,可以满足比赛计时的需要;调时功能,方便快捷;定时功能准确可靠,还有扩展成音乐闹钟的余地。硬件设施合乎要求,软件设计可以配合硬件实现要求功能。但是由于时间比较短,出现部分不足:使用定时和秒表功能时时间显示功能停止运行。经讨论只是软件部分还不完善。不过,我们相信,如果时间充足,将软件改进,我们完全可以很好实现所有功能。

另外,在本次设计的过程中,我们发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我们觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。

20

从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。

参考文献

[1] 李叶紫.王喜斌.胡辉.孙东辉.编著MCS_51单片机应用教程清华大学出版社.2008.6.

[2] 陆剑.单片机应用技术指导书 河南工业职业技术学院2005.12.

[3] 汪道辉.单片机系统设计与实践.电子工业出版社 ( 50页 时、分、秒计时器设计,59页 键盘及接口技术). [4] 第二版.51系列单片机设计实例.北京航空航天大学出版社(81—89页 数码管时钟电路的设计).

[5] 辛友顺、胡永生、薛小玲.单片机应用系统设计与实现.福建科学技术出版社(184-186页 LED显示接口,190-193页 键盘接口).

[6] 黄庆华、张永格.单片机开发 与实例.电子工业出版社(127-162页 数字式电子时钟的设计).

[7] 闫玉德、俞红.MCS-51单片机原理与应用(C语言版).机械工业出版社(49-104页 单片机的C程序设计).

21

[8] 求是科技.单片机典型模块设计实例导航.人民邮电出版社(85-90页 单片机数字时钟).

[9] 刘守义,王静霞。《单片机应用技术》.西安电子科技大学出版社,2002.

22

本文来源:https://www.bwwdw.com/article/mat5.html

Top