单片机时钟计时器设计实训
- 格式:doc
- 大小:169.24 KB
- 文档页数:14
摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(3个2位共阳数码管,一个发光二极管和一个蜂鸣器)和应用程序(proteus软件和KEIL编译软件),构成相应的应用系统。
关键词:单片机AT89C51 共阳数码管发光二极管蜂鸣器 proteus软件 KEIL编译软件目录1.课题设计目的 (4)2. AT89C51的单片机简介 (4)2.1 LED显示电路 (7)2.2键盘控制电路 (7)3.课程设计报告内容 (8)3.1.方案设计要求 (8)3.2系统设计流程图 (8)3.3绘制数字时钟电路Protues仿真原理图 (9)3.4运行程序 (10)4.总结 (10)5.数字时钟源程序............ 10-19数字时钟设计1. 课题设计目的数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和3个两位一体的共阳极的数码管为核心,辅以必要的电路,构成了一个单片机数字时钟。
2. AT89C51的单片机简介(一)AT89C51的介绍AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O接口电路等一台计算机所需要的基本功能部件,AT89C51单片机内包含下列几个部件:(1)一个8位CPU;(2)一个片内振荡器及时钟电路;(3)4K字节ROM程序存储器;(4)128字节RAM数据存储器;(5)两个16位定时器/计数器;(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;(7)32条可编程的I/O线(四个8位并行I/O端口);(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。
一、概述随着科技的不断发展,单片机技术已经成为现代电子设备中不可或缺的核心技术。
为了提高自身对单片机应用技术的理解和掌握,本实训报告以设计一个基于单片机的计时器为例,通过实践操作,深入探究单片机的编程与应用。
二、实训目的1. 熟悉单片机的基本原理和开发环境。
2. 掌握51单片机的编程方法,提高编程能力。
3. 学会使用数码管、按键等外部器件与单片机进行交互。
4. 培养动手实践能力和创新意识。
三、实训内容本实训主要设计一个基于51单片机的计时器,计时范围设置为00.0~99.9秒,精确到0.1秒。
计时器具有以下功能:1. 计时开始:按下开始按钮,计时器开始计时。
2. 计时暂停:按下暂停按钮,计时器暂停计时。
3. 计时复位:按下复位按钮,计时器清零。
4. 显示计时:通过数码管实时显示当前计时值。
四、硬件设计1. 单片机:选用51单片机作为核心控制单元。
2. 数码管:采用共阴型4位数码管,用于显示计时值。
3. 按键:设计三个按键,分别用于控制计时器的开始、暂停和复位功能。
4. 晶振:用于提供单片机的时钟信号。
5. 电阻、电容等:用于搭建电路。
五、软件设计1. 主程序:初始化单片机,配置I/O端口,设置定时器,进入主循环。
2. 计时函数:根据按键输入,控制计时器的开始、暂停和复位功能。
3. 显示函数:将计时值转换为数码管可识别的编码,并通过I/O端口输出。
六、程序实现以下为计时器设计的主要程序代码:```c#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit key_start = P1^0; // 开始按键sbit key_pause = P1^1; // 暂停按键sbit key_reset = P1^2; // 复位按键sbit display_data = P0; // 数码管数据端口sbit display_control = P2; // 数码管控制端口uchar code code_display[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 数码管编码uint time = 0; // 计时器值void delay(uint t) {while(t--);}void display() {uchar i;for(i = 0; i < 4; i++) {display_control = 0x01 << i; // 选择数码管位display_data = code_display[time / 10]; // 显示十位delay(10000);display_control = 0x01 << i; // 选择数码管位display_data = code_display[time % 10]; // 显示个位 delay(10000);}}void main() {TMOD = 0x01; // 设置定时器模式TH0 = 0xFC; // 设置定时器初值TL0 = 0x18;TR0 = 1; // 启动定时器display_control = 0xFF; // 关闭所有数码管while(1) {if(key_start == 0) { // 开始计时while(key_start == 0);time = 0;while(TF0 == 0);TF0 = 0;}if(key_pause == 0) { // 暂停计时while(key_pause == 0);while(TF0 == 0);TF0 = 0;}if(key_reset == 0) { // 复位计时器while(key_reset == 0);time = 0;}display();}}```七、测试与分析1. 功能测试:经过多次测试,计时器功能稳定可靠,能够实现计时、暂停和复位功能。
一、实训目的通过本次实训,使学生了解单片机计时器的基本原理和设计方法,掌握单片机计时器的硬件设计和软件编程,提高学生动手实践能力和创新能力。
二、实训内容本次实训设计一款基于51单片机的计时器,具备计时、暂停、复位功能,计时范围0-59秒,精确到0.1秒。
三、实训原理1. 计时原理:利用51单片机的定时器/计数器功能,通过定时器中断实现计时功能。
2. 暂停功能:在计时过程中,按下暂停按钮,关闭定时器中断,计时停止。
3. 复位功能:按下复位按钮,将计时器清零,数码管显示00.0。
四、实训步骤1. 硬件设计(1)选择51单片机作为核心控制单元。
(2)选择4位共阴数码管作为显示模块,用于显示计时时间。
(3)选择按键作为控制模块,实现计时、暂停、复位功能。
(4)设计电路原理图,包括单片机、数码管、按键等模块的连接。
2. 软件设计(1)编写程序,初始化定时器/计数器,设置中断时间。
(2)编写中断服务程序,实现计时功能。
(3)编写按键扫描程序,实现计时、暂停、复位功能。
(4)编写数码管显示程序,将计时时间显示在数码管上。
3. 系统调试(1)连接电路,将程序烧录到单片机中。
(2)测试计时功能,确保计时准确。
(3)测试暂停和复位功能,确保功能正常。
(4)测试按键功能,确保按键操作正确。
五、实训结果与分析1. 硬件设计结果根据设计要求,成功设计了一款基于51单片机的计时器,包括单片机、数码管、按键等模块的连接,电路原理图如下:```+3.3V||---[单片机]||---[数码管]||---[按键]|GND```2. 软件设计结果编写了完整的程序,实现了计时、暂停、复位功能,数码管显示计时时间,计时范围0-59秒,精确到0.1秒。
3. 系统调试结果经过调试,计时器功能正常,计时准确,按键操作正确,符合设计要求。
六、实训心得1. 通过本次实训,掌握了单片机计时器的基本原理和设计方法,提高了动手实践能力和创新能力。
2. 学会了如何使用51单片机定时器/计数器功能实现计时功能,了解了中断编程的基本方法。
一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。
为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。
通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。
二、实习内容1. 单片机数字钟硬件设计(1)选用AT89C51单片机作为核心控制单元,具有丰富的片上资源,方便编程和调试。
(2)采用LCD1602液晶显示屏,显示时间、日期等信息。
(3)使用DS1302实时时钟芯片,实现时间的存储和更新。
(4)选用按键作为输入设备,实现时间的调整和设置。
(5)选用蜂鸣器作为报警设备,实现定时报警功能。
2. 单片机数字钟软件设计(1)编写主程序,实现系统初始化、时间显示、按键扫描、时间调整等功能。
(2)编写中断服务程序,实现DS1302时钟芯片的读写、按键消抖等功能。
(3)编写子程序,实现时间的计算、格式化、显示等功能。
3. 单片机数字钟调试与测试(1)连接电路,检查各个模块的连接是否正确。
(2)编写程序,将程序烧录到单片机中。
(3)调试程序,确保程序运行正常。
(4)测试各个功能模块,如时间显示、按键调整、定时报警等。
三、实习过程1. 硬件设计(1)根据设计要求,绘制电路原理图。
(2)购买所需元器件,进行焊接。
(3)组装电路板,连接各个模块。
2. 软件设计(1)编写程序,采用C语言进行编程。
(2)使用Keil软件进行编译、烧录。
(3)在仿真软件Proteus中进行仿真,验证程序的正确性。
3. 调试与测试(1)连接电路,检查各个模块的连接是否正确。
(2)编写程序,将程序烧录到单片机中。
(3)调试程序,确保程序运行正常。
(4)测试各个功能模块,如时间显示、按键调整、定时报警等。
四、实习总结1. 通过本次实习,我们掌握了单片机的编程、调试、硬件连接等方面的知识。
2. 学会了使用LCD1602液晶显示屏、DS1302实时时钟芯片、按键等元器件。
单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。
为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。
本实训以AT89C51单片机为核心,通过学习时钟电路的设计、编程和调试,使学生掌握单片机在时钟设计中的应用,提高学生的动手能力和创新思维。
二、实训目的1. 掌握单片机的基本原理和编程方法;2. 熟悉时钟电路的设计和调试;3. 培养学生的实际工程应用能力和创新思维;4. 提高学生的团队协作能力和沟通能力。
三、实训内容1. 硬件设计(1)单片机选型:选用AT89C51单片机作为核心控制单元;(2)时钟电路:采用晶振电路作为时钟源,实现1Hz的基准时钟;(3)显示电路:采用LCD1602液晶显示屏,实现时间、日期和星期等信息显示;(4)按键电路:设计4个按键,分别用于设置时间、日期、星期和闹钟功能;(5)复位电路:采用上电复位和按键复位两种方式,保证系统稳定运行。
2. 软件设计(1)系统初始化:初始化单片机,设置波特率、定时器等;(2)时间显示:通过读取实时时钟芯片(如DS1302)的数据,显示时间、日期和星期;(3)按键处理:根据按键输入,实现时间、日期、星期和闹钟的设置与修改;(4)闹钟功能:当设定的时间到达时,通过蜂鸣器发出提示音。
3. 调试与优化(1)调试方法:使用Proteus软件进行仿真调试,观察程序运行状态,分析故障原因;(2)优化方法:针对仿真过程中出现的问题,优化程序代码,提高程序运行效率。
四、实训过程1. 硬件制作(1)按照设计图纸,焊接电路板;(2)连接晶振、LCD显示屏、按键和蜂鸣器等元器件;(3)调试电路,确保各元器件正常工作。
2. 软件编写(1)使用Keil C51软件编写程序,实现时钟显示、按键处理和闹钟功能;(2)编译程序,生成HEX文件。
3. 调试与优化(1)使用Proteus软件进行仿真调试,观察程序运行状态;(2)针对仿真过程中出现的问题,优化程序代码,提高程序运行效率;(3)将优化后的程序烧录到单片机中,进行实际运行测试。
一、概述随着科技的发展,单片机作为一种广泛应用于工业控制、家用电器、信息处理等领域的微控制器,已经成为现代电子技术的重要组成部分。
正计时器作为单片机的基本应用之一,对于理解单片机的编程原理和实现功能具有重要意义。
本次实训旨在通过实践操作,加深对单片机正计时器原理和编程方法的理解,提高实际应用能力。
二、实训目的1. 理解单片机正计时器的工作原理和编程方法。
2. 掌握单片机正计时器的硬件连接和软件编程。
3. 能够根据实际需求设计并实现简单的正计时器功能。
4. 培养动手实践能力和团队协作精神。
三、实训内容1. 硬件连接本次实训使用的单片机为STC89C52,正计时器采用定时器0。
硬件连接主要包括以下步骤:(1)将单片机的P1.0引脚与LED灯相连,作为显示计时结果的输出。
(2)将单片机的P3.2引脚与按钮S1相连,作为启动/停止计时器的输入。
(3)将单片机的定时器0的输入端(T0)与外部时钟源相连,此处使用晶振作为时钟源。
(4)将单片机的VCC和GND引脚与电源相连。
2. 软件编程正计时器的软件编程主要包括以下步骤:(1)初始化定时器0,设置定时器模式、计数初值等。
(2)编写中断服务程序,实现定时器溢出后的计时功能。
(3)编写主程序,实现启动/停止计时器的功能,并实时显示计时结果。
3. 功能实现(1)启动计时器后,LED灯开始闪烁,表示计时开始。
(2)计时过程中,LED灯闪烁频率逐渐加快,表示计时时间逐渐增加。
(3)停止计时器后,LED灯停止闪烁,并显示计时结果。
四、实训过程及结果1. 实训过程(1)根据实训内容,设计并绘制硬件电路图。
(2)编写正计时器的程序代码,并进行编译和调试。
(3)将程序烧录到单片机中,进行实际测试。
2. 实训结果(1)成功实现了正计时器的功能,LED灯能够根据计时结果进行闪烁。
(2)计时精度达到毫秒级,满足实际需求。
(3)通过实际操作,加深了对单片机正计时器原理和编程方法的理解。
一、实训目的本次单片机数码时钟实训旨在通过实际操作,让学生了解单片机的应用,掌握单片机数码时钟的设计与实现方法,提高学生的实践操作能力和创新思维。
二、实训内容1. 硬件设计(1)单片机:选用AT89C51单片机作为核心控制器。
(2)显示模块:采用4位数码管,实现时分秒的显示。
(3)时钟模块:采用12MHz晶振作为时钟源,通过单片机的定时器/计数器实现秒、分、时的计时。
(4)按键模块:设计启动/停止按钮、设置按钮、清零按钮等,实现对时钟的控制和设置。
(5)电源模块:采用5V电源适配器为系统供电。
2. 软件设计(1)主程序:初始化单片机,设置定时器/计数器,实现时分秒的计时。
(2)中断服务程序:实现按键控制、时间设置、清零等功能。
(3)显示程序:将计时的时分秒数据转换为数码管显示的格式。
三、实训过程1. 硬件搭建(1)按照电路图连接AT89C51单片机、数码管、晶振、按键等元件。
(2)检查电路连接是否正确,确保无短路、断路等现象。
2. 软件编写(1)编写主程序,初始化单片机,设置定时器/计数器,实现时分秒的计时。
(2)编写中断服务程序,实现按键控制、时间设置、清零等功能。
(3)编写显示程序,将计时的时分秒数据转换为数码管显示的格式。
3. 调试与测试(1)将编写好的程序烧录到单片机中。
(2)打开电源,观察数码管显示的时分秒是否正确。
(3)测试按键控制功能,包括启动/停止、设置、清零等。
(4)测试时间设置功能,包括小时、分钟、秒的设置。
四、实训结果1. 硬件方面:成功搭建了单片机数码时钟的硬件电路,包括单片机、数码管、晶振、按键等元件。
2. 软件方面:成功编写了单片机数码时钟的程序,实现了时分秒的计时、按键控制、时间设置等功能。
3. 功能实现:数码时钟能够正常显示时分秒,并通过按键控制实现启动/停止、设置、清零等功能。
五、实训总结1. 通过本次实训,使学生掌握了单片机数码时钟的设计与实现方法,提高了学生的实践操作能力和创新思维。
一、引言随着电子技术的不断发展,单片机在各个领域得到了广泛的应用。
电子钟作为单片机应用的一个重要实例,具有很高的实用价值。
本实训报告主要介绍了单片机电子钟的设计与实现过程,包括硬件电路设计、软件编程以及调试过程。
二、硬件电路设计1. 单片机选择本实训选用AT89C51单片机作为核心控制器,该单片机具有丰富的I/O端口、较强的计算能力和较大的存储空间,能够满足电子钟的设计需求。
2. 时钟芯片本实训采用DS1302时钟芯片作为时间源,该芯片具有年、月、日、周、时、分、秒的精确计时功能,并具备闰年补偿等功能。
3. 液晶显示屏本实训选用1602液晶显示屏用于显示时间、日期等信息。
1602液晶显示屏具有清晰显示多个字符和符号的特点,方便用户查看时间和其他信息。
4. 按键模块本实训设计按键模块用于用户输入和设置。
按键包括时间设置键、日期设置键、闹钟设置键等,方便用户进行各项操作。
5. 电源模块本实训采用DC5V电源模块,为整个电子钟提供稳定的电源供应。
三、软件编程1. 主程序主程序负责初始化单片机、时钟芯片、液晶显示屏等硬件设备,并进入主循环。
主循环中,程序会不断检测按键状态,根据按键输入调整时间、日期和闹钟设置。
2. 时钟控制程序时钟控制程序负责实现时钟的基本功能,包括计时、闰年补偿等。
程序通过定时器中断,每秒更新一次时间。
3. 显示程序显示程序负责将时间、日期等信息显示在液晶显示屏上。
程序使用1602液晶显示屏的指令集,动态显示时、分、秒和日期。
4. 按键扫描程序按键扫描程序负责检测按键状态,并根据按键输入调整时间、日期和闹钟设置。
程序采用轮询方式检测按键状态,以提高按键响应速度。
5. 闹钟程序闹钟程序负责实现闹钟功能,当时间达到设定的闹钟时间时,电子钟会发出蜂鸣声提示用户。
四、调试过程1. 硬件调试首先,对硬件电路进行调试,检查各元器件是否安装正确,连接是否牢固。
然后,使用万用表检测电源电压、单片机各引脚电压是否正常。
单片机60秒计时器实验报告一、实验目的本实验旨在设计并实现一个基于单片机的60秒计时器,通过学习单片机的基本原理和编程语言,掌握单片机计时器的设计和实现方法。
二、实验原理1. 单片机基础知识:单片机是一种集成电路芯片,它包含了中央处理器(CPU)、存储器(RAM、ROM)、输入输出(I/O)接口等多个功能模块。
单片机可以通过编写程序来控制各种外设,如LED灯、蜂鸣器等。
2. 计时器原理:计时器是一种用于测量时间的电子设备,它通常由一个晶振作为基准信号源,通过分频和计数来实现精确计时。
在单片机中,计时器通常由定时器(Timer)模块来实现。
3. 60秒计时器设计:本次实验需要设计一个能够精确计时60秒的计时器。
具体步骤如下:(1) 设置定时器工作模式为定时模式;(2) 设置定时时间为60秒;(3) 等待定时完成,并触发中断;(4) 在中断服务函数中输出时间到LED灯或数码管上。
三、实验材料1. STC89C52RC单片机开发板;2. 4位共阳数码管或8个LED灯;3. 杜邦线若干。
四、实验步骤1. 连接电路:将单片机开发板上的P0口连接到4位共阳数码管或8个LED灯的控制引脚,P3口连接到晶振、复位电路等。
2. 编写程序:使用Keil C51编写单片机程序,实现60秒计时器功能。
具体代码如下:#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit LED1 = P0^0; //LED灯连接到P0.0sbit LED2 = P0^1; //LED灯连接到P0.1sbit LED3 = P0^2; //LED灯连接到P0.2sbit LED4 = P0^3; //LED灯连接到P0.3void InitTimer() //初始化定时器{TMOD &= 0xF0; //设置工作模式为定时模式TH1 = 0x3C; //设置定时时间为60秒TL1 = 0xB0;ET1 = 1; //开启定时器中断允许位}void TimerInterrupt() interrupt 3 //定时器中断服务函数{static uchar cnt = 60; //计数器,初始值为60秒if(cnt > 0) cnt--; //每次中断计数器减一if(cnt == 10) { //当计数器为10秒时,LED1闪烁LED1 = ~LED1;}if(cnt == 0) { //当计数器为0秒时,所有LED灯关闭 LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;}}void main(){InitTimer(); //初始化定时器while(1) {LED2 = 1; //LED2始终点亮if(TF1) { //如果定时器溢出,重新加载计时器TF1 = 0; //清除定时器中断标志位TH1 = 0x3C; //设置定时时间为60秒TL1 = 0xB0;ET1 = 1; //开启定时器中断允许位cnt = 60; //重置计数器}}}3. 烧录程序:将编写好的程序通过ISP或其他烧录工具烧录到单片机中。
桂林单片机实训时钟计时器姓名学号班级指导教师实训时间:2011/12/5-2011/12/16目录1 问题描述..................................................................... 错误!未定义书签。
2 设计思想..................................................................... 错误!未定义书签。
3 硬件设计..................................................................... 错误!未定义书签。
3.1定时器\计数器.................................................... 错误!未定义书签。
3.2中断系统............................................................. 错误!未定义书签。
3.3键盘和LED数码管显示器............................... 错误!未定义书签。
4 软件设计..................................................................... 错误!未定义书签。
4.1主程序................................................................. 错误!未定义书签。
4.2.数码管显示模块.............................................. 错误!未定义书签。
4.3.定时器/计数器T0中断服务程序 .................. 错误!未定义书签。
4.4 按键处理模块.................................................... 错误!未定义书签。
5 仿真分析..................................................................... 错误!未定义书签。
6 课程设计总结............................................................. 错误!未定义书签。
参考文献......................................................................... 错误!未定义书签。
附录(源程序清单)..................................................... 错误!未定义书签。
11 问题描述时钟计时器广泛应用于各种继电器、电磁开关,控制器、延时器、定时器等的时间测试。
目前所使用的时钟计时器大多是指针式或集成电路型的,结构相对复杂、测试功能单一。
本仪器应当具有实时时钟、整点报时、手动调时等功能。
2 设计思想用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY(自己设置)。
形成定时时间为50ms。
用片内RAM 的7BH单元对50ms计数,计20次产生秒计数器78H单元加1,秒计数器加到60则分计数器79H单元加1,分计数器加到60则时计数器7AH单元加1,时计数器加到24则时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
3 硬件设计3.1定时器\计数器(1)、MCS-51系列中51子系列有两个16位的可编程定时\计数器:定时\计数器T0和定时\计数器T1。
它由加法计数器、方式寄存器TMOD、控制寄存器TCON等组成。
方式寄存器用于设定定时计数器T0和T1的工作方式,控制寄存器用于对定时计数器启动、停止进行控制。
(2)、每个定时计数器既可以对系统时钟计数实现定时,也可以外部信号计数实现计数功能通过编程设定来实现。
(3)、每个定时计数器都有多种工作方式,其中T0有四种工作方式,T1有三种工作方式,T2有三种工作方式。
通过编程可设定工作于某种方式。
四种工作方式为:13位定时\计数器、16位定时\计数器、8位自动重置定时\计数器、两个8位定时\计数器(只有T0有)(4)、每一个定时计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。
23.2中断系统(1)、MCS-51单片机提供5个硬件中断源,2个外部中断源,2个定时计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。
(2)、MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。
中断允许寄存器IE的字节地址为A8H,可以进行位寻址。
系统复位时,中断允许寄存器IE的内容为00H,如果要开放某个中断源,则必须使IE中的总控置位和对应的中断允许位置“1”。
(3)、MCS-51单片机有5个中断源,为了处理方便,每个中断源有两级控制,高优先级和低优先级。
通过由内部的中断优先级寄存器IP来设置,中断优先级寄存器IP的字节地址为B8H,可以进行位寻址。
如果某位被置“1”,则对应的中断源被设为高优先级;如果某位被清零,则对应的中断源被设为低优先级。
对于同级中断源,系统有默认的优先权顺序,从高到低优先权顺序为外部中断0、定时计数器T0中断、外部中断1、定时计数器T1中断、串行口中断。
通过设置中断优先级寄存器IP能够改变系统默认的优先级顺序。
3.24、MCS-51单片机响应中断的条件为:中断源有请求且中断允许。
3.3键盘和LED数码管显示器键盘是单片机应用系统中最常用的输入设备,在单片机应用系统中,操作人员一般都是通过键盘向单片机系统输入指令、地址和数据,实现简单的人机通信。
键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
键盘的结构形式一般有两种:独立式键盘和矩阵式键盘。
矩阵式键盘的工作方式有3种:查询工作方式、定时扫描工作方式和中断工作方式。
LED数码管显示器:在单片机应用系统中,经常用到LED数码管作为显示输出设备,LED数码管显示器虽然显示信息简单,但它具有显示清晰、亮度高、使用电压低、寿命长、与单片机接口方便等特点,基本上能够满足单片机应用系统的需要,所以在单片机应用系统中经常用到。
LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。
在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种。
所谓译码方式是指由显示字符转换得到对应的字段码的方式。
对于LED数码管显示器,通常的译码方式有两种:硬件译码方式和软件译码方式。
LED数码管在显示时,通常有两种显3示方式:静态显示方式和动态显示方式。
在使用时可以把它们组合起来。
在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。
4 软件设计电子时钟的软件系统由主程序和子程序组成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等。
4.1主程序主程序执行流程如图1所示,主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
4.2.数码管显示模块本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。
采用软件译码动态显示。
4.3.定时器/计数器T0中断服务程序定时器/计数器T0用于时间计时。
选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。
在对各单元计数的同时,把它们的值放到存储单元的指定位置。
定时器/计数器T0中断服务程序流程图如图2所示。
4.4 按键处理模块MCS-51单片机实现时钟计时显示的基本方法①首先要计算计数初值时钟计时的关键问题是秒的产生,因为秒是最小时钟单位,但使用MMCS-51的定时器/计数器进行定时,即使按工作方式1,其最大定时时间也只能达到131毫秒,离1秒还差好远。
为此,我们把秒计时用硬件定时和软件计数相结合的方法实现,即:把定时器的定时时间定为125毫秒,这样当计数溢出8次就可得到41秒,而8次计数可用软件方法实现。
为得到125ms定时,我们可使用定时器/计数器0,以工作方式1进行,当设定单片机为6MHz晶振,设计数初值为X,则有如下等式:(216-X)×2us=125000us计算得计数初值X=3036,二进制表示为0000101111001101,十六进制表示为0BCDH。
②定时器定时采用中断方式完成,以便于通过中断服务程序进行溢出次数(每次125毫秒)的累计,计满8次即得到秒计时。
③通过在程序中的数值累加和数值比较来实现从秒到分和从分到时的计时④设置时钟显示及显示缓冲区假定时钟时间在六位LED数码管(LED5~LED0)上进行显示(时、分、秒各占两位)。
为此,要在内部RAM中设置显示缓冲区,共6个单元(79H~7EH),与数码管的对应关系为:LED5→7EH、LED4→7DH、LED3→7CH、LED2→7BH、LED1→7AH、LED0→79H。
即显示缓冲区从左向右依次存放时、分、秒的数值。
⑤假定已有LED显示程序为SMXS可供调用程序流程①主程序(MAIN)主程序的主要功能是进行定时器/计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。
②中断服务程序(PIT0)中断服务程序的主要功能是进行计时操作。
程序开始先判断计数溢出是否满了8次,不满8次表明还没达到最小计时单位秒,中断返回;如满8次则表明已达到最小计时单位秒,程序继续向下执行,进行计时操作。
③加1子程序(DAAD1)加1子程序用于完成对秒、分和时的加1操作,中断服务程序中在秒、分、时加1时共有三处调用此子程序。
加1操作共包括以下三项内容:合数:由于每位LED显示器对应一个8位的缓冲单元,因此由两位BCD码表示的时间值各占用一个缓冲单元,且只占其低4位。
为此在加1运算之前需把两个缓冲单元中存放的数值合并起来,构成一个字节,然后才能进行加1运算。