硬件中断时钟设计
东软UCOS-II教程-03-中断与时钟
![东软UCOS-II教程-03-中断与时钟](https://img.taocdn.com/s3/m/254988bc1a37f111f1855b2f.png)
3 Sept. 2008 Confidential
3.1.4 中断级任务切换
与任务级切换函数OSCtxSW() 的原因一样,中断级任务切换函数OSIntCtxSw ()通常 是用汇编语言来编写的:
OSIntCtxSw() { OSTCBCur = OSTCBHighRdy; OSPrioCur = OSPrioHighRdy; SP = OSPrioHighRdy ->OSTCBStkPtr; 用出栈指令把 R1、 R2…… 弹入 CPU 的通用寄存器; RETI ; } // 中断返回,使 PC指向待运行任务 // 使 SP指向待运行任务堆栈 // 任务控制块的切换
学时:3.0学时 教学方法:讲授ppt+上机练 习+点评+案例分析
3 Sept. 2008 Confidential
3.1 uC/OS-II 的中断
� 中断:任务在运行过程中,应内部或外部异步事件的请求中止当前 任务,而去处理异步事件所要求的任务的过程叫做中断。 � 中断服务程序:应中断请求而运行的程序叫中断服务子程序 (ISR)。 � 中断向量:中断服务子程序的入口地址叫中断向量。 � CPU响应中断的条件: •至少有一个中断源向 CPU发出中断信号 •系统允许中断,且对此中断信号未予屏蔽
•
• OS_CRITICAL_METHOD==2 实现OS_ENTER_CRITICAL() 时,先在堆栈中保存中断的开/关状态,然后再 关中断;实现OS_EXIT_CRITICAL() 时,从堆栈中弹出原来中断的开/关状态; 方法2的示意性代码 #define OS_ENTER_CRITICAL() asm(“PUSH asm(“DI”) #define OS_EXIT_CRITICAL() asm(“POP PSW”) PSW”)
单片机课程设计报告--电子时钟(2021整理)
![单片机课程设计报告--电子时钟(2021整理)](https://img.taocdn.com/s3/m/7cecb28d5acfa1c7ab00cc90.png)
一、设计内容该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。
二、电子时钟设计思想:用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY〔自己计算〕。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms 计数,计20次产生秒计数器78H单元加1,秒计数器加到60那么分计数器79H单元加1,分计数器加到60那么时计数器7AH单元加1,时计数器加到24那么时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
三、MCS-51单片机系统简介单片机应用系统由硬件系统和软件系统两局部组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。
在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。
配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED 指示灯就可以进行处理了。
在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。
多功能电子时钟实训报告
![多功能电子时钟实训报告](https://img.taocdn.com/s3/m/de7680f80129bd64783e0912a216147917117eae.png)
一、实训目的本次实训旨在通过学习单片机技术,设计并实现一个基于单片机的多功能电子时钟系统。
通过实训,使学生掌握以下知识和技能:1. 熟悉单片机的基本原理和编程方法;2. 掌握电子时钟系统的硬件设计、软件编程和调试方法;3. 提高动手能力和实际应用能力。
二、实训内容1. 系统硬件设计(1)核心控制器:选用AT89C51单片机作为系统的核心控制器。
(2)时钟芯片:使用DS1302实时时钟芯片,提供精确的时间信号。
(3)液晶显示屏:选用1602液晶显示屏,用于显示时间、日期、温度等信息。
(4)按键模块:设计包含时间设置键、日期设置键、闹钟设置键等的按键模块。
(5)温度传感器:使用DS18B20温度传感器,用于检测环境温度。
(6)电源模块:为整个系统提供稳定的工作电压。
2. 系统软件设计(1)主程序:负责系统初始化、时钟显示、闹钟提醒、温度检测等功能。
(2)中断程序:负责时钟中断、闹钟中断、温度中断等。
(3)显示程序:负责液晶显示屏的显示内容更新。
(4)按键处理程序:负责按键扫描、按键消抖、按键功能处理等。
三、实训过程1. 硬件搭建(1)根据设计图纸,焊接电路板。
(2)连接单片机、时钟芯片、液晶显示屏、按键模块、温度传感器和电源模块。
(3)检查电路连接是否正确,确保系统硬件正常工作。
2. 软件编程(1)编写主程序、中断程序、显示程序和按键处理程序。
(2)使用C语言进行编程,并利用Keil软件进行编译。
(3)将编译好的程序烧录到单片机中。
3. 调试与优化(1)在Proteus仿真软件中,对系统进行仿真调试。
(2)检查程序运行是否正常,优化程序代码。
(3)对硬件电路进行调整,确保系统稳定运行。
四、实训结果1. 系统功能实现(1)显示当前时间、日期和温度。
(2)设置闹钟时间,并在设定时间响起。
(3)计时器功能,可以记录时间。
(4)温度检测功能,实时显示环境温度。
2. 系统稳定性通过仿真和实际测试,系统稳定运行,满足设计要求。
简易电子时钟设计报告
![简易电子时钟设计报告](https://img.taocdn.com/s3/m/a4d01da16394dd88d0d233d4b14e852458fb391f.png)
简易电子时钟设计报告1. 引言电子时钟是一种用数字形式显示时间的时钟,广泛应用于日常生活中。
本文将介绍一种简易的电子时钟设计方案,包括硬件设计和软件实现。
该电子时钟采用数字LED显示屏,并通过开发板上的微控制器控制时间的显示。
2. 硬件设计2.1 硬件组成该电子时钟的主要硬件组成包括:- 数字LED显示屏:用于显示时钟的小时和分钟数。
该显示屏采用共阳极的数码管,每个数字有7个段可以点亮。
- 微控制器:使用STM32F103C8T6微控制器,具备足够的输入输出和处理能力。
- 调节按钮:用于调节时钟的小时和分钟数。
2.2 电路设计数字LED显示屏的每个段通过一个继电器和一个可控硅管来控制。
继电器通过微控制器的输出口来控制,可控硅管则通过脉宽调制(PWM)来控制。
微控制器通过GPIO口读取调节按钮的状态,根据按钮的操作来调整时钟的小时和分钟数。
同时,微控制器通过定时器中断来实现时钟的运行和显示。
电路设计如下图所示:![电子时钟电路设计图](clock_circuit_design.png)3. 软件实现3.1 开发环境本设计使用Keil MDK开发环境进行软件的编写和调试。
Keil MDK 是一款常用的嵌入式开发工具,提供了强大的代码编辑、编译和仿真功能。
3.2 时钟控制软件中定义了一个结构体`Time`,包含了小时数和分钟数的变量。
通过定时器中断,每隔一秒钟将时钟的秒数加一,并根据秒数的变化更新时钟的小时和分钟数。
具体实现如下:cstruct Time {int hour;int minute;int second;void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); time.second++;if (time.second >= 60) {time.second = 0;time.minute++;}if (time.minute >= 60) {time.minute = 0;time.hour++;}if (time.hour >= 24) {time.hour = 0;}}3.3 数字显示根据时钟的小时和分钟数,将数字转换成BCD码,然后通过GPIO 口控制数字LED显示屏的每个段点亮或熄灭。
基于单片机的简易电子时钟设计_毕业设计论文 精品
![基于单片机的简易电子时钟设计_毕业设计论文 精品](https://img.taocdn.com/s3/m/adc663e9f90f76c661371a28.png)
论文题目基于单片机的简易电子时钟设计班级:xxxxxx专业:电子信息工程学生姓名:xxxx指导教师:xxxx日期:xxxx-xx-xx摘要数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。
在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。
单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
关键字:单片机,数字时钟。
AbstractDigital clock has become an indispensable necessities in People's Daily life, widely used in personal family and office and other public places, to people's life, study, work, entertainment, bring great convenience. Due to the development of the digital integrated circuit technology and adopts the advanced quartz technology, walking make digital clock has advantages of accurate, stable performance, easy to carry, it is also used in timing, automatic feed and automatic control and other fields. Although already on the market at present the ready-made digital clock chip for sale, cheap, use is convenient, but in view of the single chip microcomputer timer function also can complete the design of the digital clock circuit, therefore is necessary for the design of digital clock. Here we will have learned more fragmented knowledge of digital circuit of the organic link, the system used in practice, to develop our comprehensive analysis and circuit design, programming, debugging circuit ability.SCM has small volume and powerful function, high reliability, low price and a series of advantages, not only has become widely used in the field of industrial measurement and control intelligent control instruments, and has penetrated into every corner of the people work and life, effectively promote the industry's technological transformation and upgrading of products, the wide prospect of application.Keywords: Single chip microcomputer,Digital clock.目录第一章设计方案 (1)1.1 课程设计目的 (1)1.2 设计要求 (1)1.3 实现时钟计时的基本方法 (1)1.4 电子钟的时间显示 (1)1.5 电子钟的时间调整 (2)1.6 总体方案介绍 (2)1.6.1 计时方案 (2)1.6.2 控制方案 (2)第二章系统硬件电路设计 (3)2.1 单片机模块设计 (3)2.1.1 芯片分析 (3)2.1.2 晶振电路 (4)2.1.3 复位电路 (5)2.2 数码显示模块设计 (5)2.3 按键模块 (8)第三章系统软件设计 (9)3.1 软件设计分析 (9)3.2 系统软件设计流程图 (9)3.2.1 主程序流程图 (9)3.2.2 定时器流程图 (9)3.2.3 按键检测流程图 (10)3.2.4 时间显示流程图 (10)3.3 源程序清单 (11)第四章系统仿真与实验测试 (16)4.1 系统仿真 (16)4.2 实验测试 (16)小结 (17)致谢 (18)参考文献 (19)附录 (20)第一章设计方案1.1 课程设计目的(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。
基于51单片机的简易电子钟设计
![基于51单片机的简易电子钟设计](https://img.taocdn.com/s3/m/4ef0e57886c24028915f804d2b160b4e767f81e6.png)
基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。
二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。
1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。
以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。
同时,根据用户按键的操作,可以调整时间的设定。
2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。
可以显示当前时间和设置的闹钟时间。
初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。
3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。
通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。
4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。
同时可以添加外部中断用于响应用户按键操作。
三、主要功能和实现步骤1.系统初始化。
2.设置定时器,每1秒产生一次中断。
3.初始化LCD显示屏,显示初始时间00:00:00。
4.查询键盘状态,判断是否有按键按下。
5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。
-数字键:根据键入的数字进行时间的调整和闹钟设定。
6.根据定时器的中断,更新时间的显示。
7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。
8.循环执行步骤4-7,实现连续的时间显示和按键操作。
四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。
但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。
C52单片机电子时钟电路设计 课程设计
![C52单片机电子时钟电路设计 课程设计](https://img.taocdn.com/s3/m/6d28de3e14791711cc791767.png)
C52单片机电子时钟电路设计课程设计单片机原理及应用课程设计题目: C52单片机电子时钟电路设计姓名: 陶鹏鹏专业: 电子科学与技术班级: 121班指导教高海涛师:安徽科技学院数理学院目录1、基于单片机的电子时钟电路设计.........1.1设计任务与要求...................1.1.1设计目的:.................1.1.2设计要求:.................1.2方案设计 ........................2、单片机应用系统简介...................2.1AT89C52单片机的功能结构..........2.2单片机的引脚定义及功能...........2.3 定时/计数器....................2.3.1定时/计数器结构............2.3.2工作原理...................2.4键盘接口技术 ....................2.5复位操作 ........................2.6 显示控制模块....................3、硬件电路设计.........................3.1电子时钟的电路图.................3.2单元电路设计 ....................3.2.1晶振、复位电路模块.........3.2.2键盘控制模块...............3.2.3蜂鸣器电路模块.............3.2.4显示器电路模块.............4、软件设计.............................4.1系统主程序设计...................4.2主程序清单 ......................4.3系统仿真与调试...................5、结论与心得...........................摘要电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
单片机电子时钟设计程序
![单片机电子时钟设计程序](https://img.taocdn.com/s3/m/1cb8c7e0294ac850ad02de80d4d8d15abe230090.png)
单片机电子时钟设计程序
1.引用头文件和定义全局变量
首先需要引用相应的头文件,例如`reg52.h`,并定义全局变量用于
存储时间、闹钟时间以及其他相关参数。
2.初始化时钟
在主函数中,首先进行时钟的初始化。
这包括设置定时器和中断相关
的寄存器,以及初始化显示屏和按钮等外设。
3.时间更新
编写一个中断服务函数,用于根据定时器的中断来更新时间。
在该中
断服务函数中,需要将全局变量中的时间进行递增,并考虑到分钟、小时、日期和星期等的进位和换算。
4.按钮输入
设置一个子函数用于读取按钮输入,并根据按钮的状态来进行相应的
操作,比如切换时钟显示模式、设置闹钟等。
5.显示时间
编写一个子函数用于将时间信息显示在数码管上。
这需要先将时间信
息转换为数码管的显示格式,然后通过IO口输出控制数码管的显示。
6.闹钟设置
使用按钮输入的功能,可以设置闹钟时间和开关闹钟功能。
当闹钟时
间到达时,可以通过控制蜂鸣器发声或点亮LED等方式来进行提醒。
7.主函数
在主函数中,循环执行按钮输入的检测和相应操作,以及时间的更新和显示等功能。
可以通过一个状态机来控制整个程序的流程。
以上是一个简要的单片机电子时钟设计程序的概述。
实际的程序设计过程中,还需要考虑到各个模块之间的交互、错误处理、电源管理以及代码的优化等细节问题。
具体的程序实现可以根据具体需求和硬件平台的差异进行适当的修改和扩展。
基于STC89C52单片机时钟的设计与实现
![基于STC89C52单片机时钟的设计与实现](https://img.taocdn.com/s3/m/2534c374cdbff121dd36a32d7375a417866fc1b3.png)
基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
基于51单片机的电子时钟的设计与实现综述
![基于51单片机的电子时钟的设计与实现综述](https://img.taocdn.com/s3/m/bcd6096bbc64783e0912a21614791711cc7979e7.png)
基于51单片机的电子时钟的设计与实现综述基于51单片机的电子时钟是一种常见的嵌入式系统设计项目。
它通过使用51单片机作为核心处理器,结合外部电路和显示设备,实现了时间的计时和显示功能。
本文将对基于51单片机的电子时钟的设计和实现进行综述,包括硬件设计和软件设计两个部分。
一、硬件设计1.时钟电路时钟电路是电子时钟的核心部分,它提供稳定的时钟信号供给单片机进行计时。
常用的时钟电路有晶振电路和RTC电路两种。
晶振电路通过外接晶体振荡器来提供时钟信号,具有较高的精度和稳定性;RTC电路则是通过实时时钟芯片来提供时钟信号,具有较高的时钟精度和长期稳定性。
2.显示电路显示电路用于将时钟系统计算得到的时间信息转换为人们可以直接观察到的显示结果。
常用的显示器有数码管、液晶显示屏、LED显示屏等。
显示电路还需要与单片机进行通讯,将计时的结果传输到显示器上显示出来。
3.按键电路按键电路用于实现对电子时钟进行设置和调节的功能。
通过设置按键可以实现修改时间、调节闹钟等功能。
按键电路需要与单片机进行接口连接,通过读取按键的输入信号来实现对时钟的操作。
4.供电电路供电电路为电子时钟提供电源,通常使用直流电源。
供电电路需要满足单片机和其他电路的电源需求,同时还需要考虑电源的稳定性和保护措施等。
二、软件设计1.系统初始化系统初始化主要包括对单片机进行外设初始化、时钟初始化和状态变量初始化等。
通过初始化将各个外设配置为适合电子时钟功能运行的状态,并设置系统初始时间、闹钟时间等。
2.计时功能计时功能是电子时钟的核心功能,通过使用定时器和中断技术来实现。
通过设置一个固定时间间隔的定时器中断,单片机在每次定时器中断时对计时寄存器进行增加,实现时间的累加。
同时可以将计时结果转化为小时、分钟、秒等形式。
3.显示功能显示功能通过将计时结果传输到显示器上,实现时间信息的显示。
通过设置显示器的控制信号,将时间信息依次发送到各个显示单元上,实现数字或字符的显示功能。
基于STM32定时中断的电子闹钟设计
![基于STM32定时中断的电子闹钟设计](https://img.taocdn.com/s3/m/54e9552c0640be1e650e52ea551810a6f424c847.png)
基于定时中断的电子闹钟一、系统主要功能可以通过LCD的输出显示公历和农历时间,通过按键设置时间和闹钟;通过蜂鸣器响应闹钟。
三、电路原理图、接口、硬件构成1.原理图2.接口本次实验使用了串口、定时器、中断接口。
3.硬件组成(1)实验设计程序流程图如图左所示,中断流程图如图右所示。
(2)该设计分为软件设计和硬件设计两大模块,硬件电路由ARM 最小系统电路、时钟显示电路和闹钟提醒电路组成,采用stm32f103RCT6芯片,芯片管脚图示如下。
(3)时钟电路此电路主要是复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图所示:晶振采用的是 8MHz 和 32.786KHz , 8MKz 分别接 STM32 的5 脚和 6 脚, 32.786KHz 分别接 STM32 的 3 脚和 4 脚。
(4)闹钟提醒电路本次实验设计的闹钟提醒电路为蜂鸣器电路,接入芯片的PC7引脚,当时间为设置闹钟时间时,蜂鸣器工作,发出响声,提醒电路如图所示。
四、核心代码(带注释)#include "delay.h"#include "sys.h"#include "lcd.h"#include "dht11.h"#include "ds1302.h"#include "KEY.h"#include "beep.h"u8 temp;u8 humi;u8 t=0;u8 flag=0,flag1=0,flag2=0,flag3=1; u8 a,b,c;int min1=10,hour1=10;DHT11_Data_TypeDef DHT11_Data;void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载计时器的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, DISABLE); //使能TIMx }void gui0(u8 mode){LCD_ShowPicture(0,0,480,320);if(flag3==1){LCD_ShowPicture3(445,0,479,34);}LCD_ShowChinese(0+40,0,0,BLUE,32,mode);//字LCD_ShowChinese(32+40,0,8,BLUE,32,mode);LCD_ShowChinese(64+40,0,9,BLUE,32,mode);LCD_ShowChinese(96+40,0,10,BLUE,32,mode);LCD_ShowNum(52,40,temp,2,BLUE,32,mode);//温度LCD_ShowChinese(132,40,12,BLUE,32,mode);LCD_ShowChinese(128+80+30,0,0,BLUE,32,mode);LCD_ShowChinese(160+80+30,0,8,BLUE,32,mode);LCD_ShowChinese(192+80+30,0,11,BLUE,32,mode);LCD_ShowChinese(224+80+30,0,10,BLUE,32,mode);LCD_ShowNum(248+30,40,humi,2,BLUE,32,mode);LCD_ShowChar(280+30,40,'%',BLUE,32,mode);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间 LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode);LCD_ShowChar(200,65,':',BLUE,160,mode);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode);LCD_ShowNum(380,80,min%10,1,BLUE,160,mode);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);LCD_ShowChinese(64,250,13,BLUE,32,mode);LCD_ShowNum(96,250,month,2,BLUE,32,mode);LCD_ShowChinese(128,250,14,BLUE,32,mode);LCD_ShowNum(160,250,day,2,BLUE,32,mode);LCD_ShowChinese(192,250,15,BLUE,32,mode);LCD_ShowChinese(224,250,16,BLUE,32,mode);LCD_ShowChinese(256,250,week,BLUE,32,mode);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);LCD_ShowChar(33,283,':',BLUE,32,mode);LCD_ShowNum(50,283,min1,2,BLUE,32,mode);}void keyscan(u8 mode){switch(t){case KEY0_PRES:if(min1==min&&hour1==hour){flag2=1;BEEP(OFF);}switch(flag){case 1: hour++; if(hour>23)hour=0;LCD_ShowPicture2(20,80,190,240);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode);break;case 2: min++; if(min>59)min=0;LCD_ShowPicture2(290,80,460,240);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode); LCD_ShowNum(380,80,min%10,1,BLUE,160,mode); break;case 3: year++; LCD_ShowPicture2(0,250,64,282);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);break;case 4: month++; if(month>12) month=1;LCD_ShowPicture2(96,250,128,282); LCD_ShowNum(96,250,month,2,BLUE,32,mode);break;case 5: day++; if(day>31) day=1;LCD_ShowPicture2(160,250,192,282);LCD_ShowNum(160,250,day,2,BLUE,32,mode); break; case 6: week++; if(week>7) week=1;LCD_ShowPicture2(256,250,288,282);LCD_ShowChinese(256,250,week,BLUE,32,mode);break;case 7: hour1++; if(hour1>23)hour1=0;LCD_ShowPicture2(0,283,32,315);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);break;case 8: min1++;if(min1>59)min1=0;LCD_ShowPicture2(50,283,82,315);LCD_ShowNum(50,283,min1,2,BLUE,32,mo de);break;case 9: flag3=1; LCD_ShowPicture3(445,0,479,34); break;default: break;}break;case KEY1_PRES:if(min1==min&&hour1==hour){flag2=1;BEEP( OFF );}switch(flag){case 1: hour--; if(hour<0)hour=23;LCD_ShowPicture2(20,80,190,240);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode); break;case 2: min--; if(min<0) min=59;LCD_ShowPicture2(290,80,460,240);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode);LCD_ShowNum(380,80,min%10,1,BLUE,160,mode); break;case 3: year--; LCD_ShowPicture2(0,250,64,282);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);break;case 4: month--; if(month<1) month=12; LCD_ShowPicture2(96,250,128,282);LCD_ShowNum(96,250,month,2,BLUE,32,mode);break;case 5: day--; if(day<1) day=31;LCD_ShowPicture2(160,250,192,282);LCD_ShowNum(160,250,day,2,BLUE,32,mode); break;case 6: week--; if(week<1) week=7;LCD_ShowPicture2(256,250,288,282);LCD_ShowChinese(256,250,week,BLUE,32,mode); break; case 7: hour1--; if(hour1<0)hour1=23;LCD_ShowPicture2(0,283,32,315);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);break;case 8: min1--;if(min1<0)min1=59;LCD_ShowPicture2(50,283,82,315);LCD_ShowNum(50,283,min1,2,BLUE,32,mo de);break;case 9: flag3=0; LCD_ShowPicture2(445,0,480,36);break;default: break;}break;case WKUP_PRES:cc1();flag++;switch(flag){case 1: TIM_Cmd(TIM3, DISABLE); LCD_DrawLine(20,242,190,243,BLUE);break;case 2: LCD_ShowPicture1(242,243);LCD_DrawLine(290,242,460,243,BLUE); break;case 3: LCD_ShowPicture1(242,243); LCD_DrawLine(0,287,64,288,BLUE);break;case 4: LCD_ShowPicture1(287,288);LCD_DrawLine(96,287,128,288,BLUE);break;case 5: LCD_ShowPicture1(287,288); LCD_DrawLine(160,287,192,288,BLUE); break; case 6: LCD_ShowPicture1(287,288);LCD_DrawLine(256,287,288,288,BLUE); break; case 7: LCD_ShowPicture1(287,288); LCD_DrawLine(0,316,32,317,BLUE);break; case 8: LCD_ShowPicture1(316,317); LCD_DrawLine(50,316,82,317,BLUE);break;case 9: LCD_ShowPicture1(316,317); LCD_DrawLine(445,37,479,38,BLUE);break;case 10: LCD_ShowPicture2(445,37,479,38);ds_wtime();a=sec;b=min;c=hour;TIM_Cmd(TIM3, ENABLE);flag=0;break;default: break;}break;default: delay_ms(5); break;}}int main(void){delay_init();NVIC_Configuration();DHT11_Init ();KEY_Init();BEEP_GPIO_Config();BEEP( OFF );TIM3_Int_Init(9999,7199);ds1302_init();ds_read_time();cc();a=sec;b=min;c=hour;Lcd_Init();LCD_Clear(WHITE);gui0(1);TIM_Cmd(TIM3, ENABLE);while(1){t=KEY_Scan(0);keyscan(1);if( DHT11_Read_TempAndHumidity (&DHT11_Data ) == SUCCESS&&flag==0) {temp=DHT11_Data.temp_int;humi=DHT11_Data.humi_int;LCD_ShowPicture2(52,40,84,72);LCD_ShowPicture2(278,40,310,72);LCD_ShowNum(52,40,temp,2,BLUE,32,1);LCD_ShowNum(278,40,humi,2,BLUE,32,1);}if(flag==0&&min1==min&&hour1==hour&&flag2==0&&flag3==1) {BEEP( ON );}}}。
基于单片机的电子时钟的设计
![基于单片机的电子时钟的设计](https://img.taocdn.com/s3/m/b8a7a3a8988fcc22bcd126fff705cc1755275f96.png)
基于单片机的电子时钟的设计基于单片机的电子时钟是一种采用单片机作为主控芯片的数字显示时钟。
它能够准确显示时间,并可以通过编程实现其他功能,如闹钟、倒计时、温湿度显示等。
本文将介绍基于单片机的电子时钟的设计原理、硬件电路和软件编程等内容。
1.设计原理基于单片机的电子时钟的设计原理是通过单片机的计时器和定时器模块来实现时间的计数和显示。
单片机的计时器可以通过设定一个固定的时钟频率进行计数,而定时器可以设定一个固定的计数值,当计数到达设定值时,会触发一个中断,通过中断服务程序可以实现时间的更新和显示。
2.硬件电路基于单片机的电子时钟的硬件电路主要包括单片机、显示模块、按键模块和时钟模块。
其中,单片机作为主控芯片,负责控制整个电子时钟的运行;显示模块一般采用数字管或液晶屏,用于显示时间;按键模块用于设置和调整时间等功能;时钟模块用于提供稳定的时钟信号。
3.软件编程基于单片机的电子时钟的软件编程主要分为初始化和主程序两个部分。
初始化部分主要是对单片机进行相关寄存器的设置,包括计时器和定时器的初始化、中断的使能等;主程序部分是一个循环程序,不断地进行时间的计数和显示。
3.1初始化部分初始化部分首先要设置计时器模块的时钟源和计数模式,一般可以选择内部时钟或外部时钟作为时钟源,并设置计时器的计数模式,如自动重装载模式或单次模式;然后要设置定时器模块的计数值,一般可以通过设定一个固定的计数值和计数频率来计算出定时时间;最后要设置中断使能,使得当定时器计数器达到设定值时触发一个中断。
3.2主程序部分主程序部分主要是一个循环程序,通过不断地读取计时器的计数值,并计算得到对应的时间,然后将时间转换成显示的格式,并显示在显示模块上。
同时,还可以通过按键来实现时间的设置和调整功能,如增加和减少小时和分钟的值,并保存到相应的寄存器中。
4.功能扩展-闹钟功能:设置闹钟时间,并在设定的时间到达时触发报警;-温湿度显示:通过连接温湿度传感器,实时显示当前的温度和湿度数据;-倒计时功能:设置一个倒计时的时间,并在计时到达时触发相应的动作。
基于单片机的电子时钟的设计与实现
![基于单片机的电子时钟的设计与实现](https://img.taocdn.com/s3/m/07208dc48662caaedd3383c4bb4cf7ec4afeb6bb.png)
基于单片机的电子时钟的设计与实现电子时钟是一种使用微处理器或单片机作为主控制器的数字时钟。
它不仅能够显示当前时间,还可以具备其他附加功能,如闹钟、日历、温度显示等。
一、设计目标设计一个基于单片机的电子时钟,实现以下功能:1.显示时间:小时、分钟和秒钟的显示,采用7段LED数码管来显示。
2.闹钟功能:设置闹钟时间,到达设定的时间时会发出提示音。
3.日历功能:显示日期、星期和月份。
4.温度显示:通过温度传感器获取当前环境温度,并显示在LED数码管上。
5.键盘输入和控制:通过外部键盘进行时间、日期、闹钟、温度等参数的设置和调整。
二、硬件设计1.单片机选择:选择一款适合的单片机作为主控制器,应具备足够的输入/输出引脚、中断和定时器等功能,如STC89C522.时钟电路:使用晶振为单片机提供稳定的时钟源。
3.7段LED数码管:选择合适的尺寸和颜色的数码管,用于显示小时、分钟和秒钟。
4.温度传感器:选择一款适合的温度传感器,如DS18B20,用于获取环境温度。
5.喇叭:用于发出闹钟提示音。
6.外部键盘:选择一款适合的键盘,用于设置和调整时间、日期、闹钟等参数。
三、软件设计1.初始化:设置单片机定时器、外部中断和其他必要的配置。
2.时间显示:通过定时器中断,更新时间,并将小时、分钟和秒钟分别显示在相应的LED数码管上。
3.闹钟功能:设置闹钟时间,定时器中断检测当前时间是否与闹钟时间一致,若一致则触发警报。
4.日历功能:使用定时器中断,更新日期、星期和月份,并将其显示在LED数码管上。
5.温度显示:通过定时器中断,读取温度传感器的数据,并将温度显示在LED数码管上。
6.键盘输入和控制:通过外部中断,读取键盘输入,并根据输入进行相应的操作,如设置时间、闹钟、日期等。
7.警报控制:根据设置的闹钟时间,触发警报功能,同时根据用户的设置进行控制。
四、测试与调试完成软件设计后,进行系统测试与调试,包括验证显示时间、日期、温度等功能的准确性,以及闹钟和警报功能的触发与控制。
单片机课程设计电子时钟
![单片机课程设计电子时钟](https://img.taocdn.com/s3/m/5f8b651b0740be1e650e9aa6.png)
目录第一部分设计任务及要求 (2)1.1单片机设计设计内容 (2)1.2单片机课程设计要求 (2)1.3 系统运行流程 (2)第二部分设计方案 (3)2.1 总体设计方案说明 (3)2.2 系统方框图 (3)2.3 系统流程图 (3)第三部分主要器材及基本简介 (7)3.1 主要器材 (7)3.2主要器材简介 (7)第四部分系统硬件设计 (7)4.1 数码管显示电路 (7)4.2键盘输入电路 (8)4.3 蜂鸣器 (8)第五部分课程设计总结 (9)附录 (9)1. 系统源程序注释及功能说明 (9)2. 原理图 (17)毕竟是两年前写的东西了,在这里分享一下自己的思路,程序100%能运行,只不过是在我的那块板子上,要参考的话,最好去看看自己用的板子的接口和板子的原理图啥样。
第一部分设计任务及要求1.1单片机设计设计内容利用STC89C51RC单片机和LCD7407六段数码管实现可预置参数的电子钟,可由按键切换不同的功能。
1.2单片机课程设计要求80C51系列单片机的外围接口电路设计,掌握应用软件的编写及调试。
学会用软件调试硬件和用硬件调试软件。
1.硬件设计要求:CPU选用 STC89C51RC,内有 4KB Flash ROM。
显示用6位LED,LED共阴极接法,采用动态显示法。
用芯片7407作7段LED段选驱动,用芯片7406段LED位段选驱动。
要求有单片机复位键,功能选择键,加/减键,移位键,确认键。
要求用Protel绘制电路原理图2.软件编写要求:(1)基本要求:实时时钟:显示年月日时分秒,各两位,分二页显示。
可以上电自动按预置时间走时。
(2)提高要求:时钟上电后,显示时分秒,用按键切换年月日3秒后,返回时分秒。
可以手动预置年、月、日、时、分、秒后,时间走时。
预置的位要求闪烁。
闹钟功能:定时到报警(喇叭发声),手动预置定时时间。
定时器(倒计时)功能:定时清0报警(喇叭发声),手动预置定时时间。
基于单片机的简易电子时钟设计
![基于单片机的简易电子时钟设计](https://img.taocdn.com/s3/m/b957d329b94ae45c3b3567ec102de2bd9605ded7.png)
基于单片机的简易电子时钟设计引言:电子时钟是人们日常生活中广泛应用的一种设备,基于单片机的电子时钟可以实现精确的时间显示、闹钟设置、定时功能等。
本设计将使用单片机控制电子时钟的各种功能,通过一个LCD显示屏来显示时间和其他信息。
一、设计目标:1.实现准确显示时间功能;2.设计带有闹钟设置的功能;3.实现定时功能。
二、设计原理:该电子时钟工作原理主要是通过单片机将外部的时钟信号进行调整和处理,然后控制液晶显示屏显示时间。
电子时钟的核心是单片机,通过单片机的计时功能实现时钟的准确显示,并通过输入设备设置闹钟功能和定时功能。
三、设计流程:1.系统初始化:首先,将单片机初始化,设置时钟和计时器的相关参数,开启显示屏的显示功能。
2.时间显示功能:通过计时器中断,定时更新时间,并将时间值传递给液晶显示屏显示出来。
3.闹钟设置功能:通过按键输入设置闹钟时间,将设置好的闹钟时间存储到单片机中。
4.定时功能:通过按键输入设置定时时间,将设置好的定时时间存储到单片机中,当定时时间到达时,触发相应的动作,如报警等。
四、硬件设计:1.单片机选择:选用一款适合的单片机,如51系列单片机。
2.时钟电路:通过外部晶振或者RTC芯片来提供准确的时钟信号。
3.输入设备:使用按键作为输入设备,用于设置闹钟和定时功能;4.显示屏:选用合适的液晶显示屏,用于显示时间。
五、软件设计:1.系统初始化:设置时钟和计时器的相关参数,开启显示屏的显示功能。
2.时间显示功能:通过计时器中断,定时更新时间,并将时间值传递给液晶显示屏显示出来。
3.闹钟设置功能:通过按键输入设置闹钟时间,将设置好的闹钟时间存储到单片机中。
4.定时功能:通过按键输入设置定时时间,将设置好的定时时间存储到单片机中,当定时时间到达时,触发相应的动作,如报警等。
六、实验结果:本设计可以准确显示时间,并可以设置闹钟和定时功能。
当闹钟和定时时间到达时,会触发相应的动作,实现了基本要求。
8253和8259来实现的简单的时钟,硬件中断时钟设计
![8253和8259来实现的简单的时钟,硬件中断时钟设计](https://img.taocdn.com/s3/m/5766457726d3240c844769eae009581b6bd9bd77.png)
8253和8259来实现的简单的时钟,硬件中断时钟设计利⽤8253和8259实现简单时钟⼀、内容利⽤PC系列微机现有的硬件和软件资源编写程序,以便在显⽰器屏幕上显⽰XX (时):XX(分):XX(秒),并且每秒钟更新⼀次显⽰。
⼆、设计⽬的掌握8253、8259A芯⽚。
三、设计思路IBM PC/XT系统板上使⽤了⼀⽚8253-5,其地址为40H ~ 43H,其中0通道在⽅式3下⼯作,初值设置23⼩时59分50秒,每隔55ms向中断控制器8259A的IRQ0端发⼀次中断请求。
此定时中断的⽤途之⼀是系统报时。
现在借⽤原有电路,重新设置定时器、编写中断服务程序来做硬件时钟实验,为此程序开始应⾸先保护原系统的08H中断的中断⽮量(中断服务程序⼊⼝地址),以便程序退出时恢复原系统的设置。
保护原系统的08H中断的中断⽮量可⽤DOS 35H功能调⽤读出,并加以适当保存,也可以⽤以下指令将中断⽮量压⼊堆栈保存。
具体过程:等待按键按下,调⽤DOS的显⽰字符串功能,并对中断进⾏压栈操作后,建⽴数据段的可寻址性,通过装载现⾏的中断服务程序,使⽤8253初始化的0通道,3⽅式,⼆进制计数进⾏⽅式3的10ms⽅波,即每10ms中断⼀次,通过保护原有的8259A的中断屏蔽寄存器IMR的内存,进⾏下⼀步的IMR的重写,只开放始终和键盘的中断处理。
进⽽开中断,运⾏TIMER 模块的时间调⽤及DOS显⽰系统时间的功能,待TIMER模块运⾏结束之后,关闭中断返回DOS,程序结束。
CLI ;关中断CLD ;DF=0MOV AX ,0000HMOV DS ,AX ;DS:SI指向08H中断⽮量表中的位置MOV SI ,0020HLODSWMOV BX ,AX ;BX:原中断服务程序⼊⼝偏移地址LODSW ;AX:原中断服务程序⼊⼝的段地址PUSH AX ;压栈保护PUSH BX四、硬件原理图及相关说明1、8253这是8253的相关图形,⼀般8253要实现定时、计数控制⼤致可采⽤三种⽅法:①设计数字逻辑电路来实现定时或计数的要求。
基于单片机的LCD1602电子时钟设计
![基于单片机的LCD1602电子时钟设计](https://img.taocdn.com/s3/m/f067ab876037ee06eff9aef8941ea76e58fa4af8.png)
基于单片机的LCD1602电子时钟设计近年来,随着物联网和智能设备的快速发展,电子时钟作为一种常见的智能设备,广泛应用于家庭、办公室等各种场合。
本文将基于单片机设计一款LCD1602电子时钟,实现时间显示、闹钟设置等功能。
一、硬件设计1.单片机选择在本设计中,选择常用的51系列单片机AT89C51,具有丰富的外设资源和强大的处理能力。
该单片机具有8位数据总线、16位地址总线,并且集成了定时/计数器、中断控制器和串行通信接口等外设。
2.显示模块选择3.时钟模块选择通过接入DS1302时钟模块,可以实现实时时钟的功能。
DS1302模块具有时钟计数器、电压检测电路、串行通信接口等,并且具有低功耗特点。
4.控制板设计根据LCD1602的引脚连接方式,设计一个控制板,用于将单片机、显示模块和时钟模块等连接在一起。
同时,需注意设计供电电路、外设输入输出电平等电路。
二、软件设计1.初始化设置通过单片机的GPIO口配置,将LCD1602和DS1302对应的引脚设置为输出模式,同时初始化LCD显示屏并进行清屏操作。
此外,需设置DS1302时钟模块的时钟、日期、闹钟等参数。
2.时间显示通过读取DS1302时钟模块的计数器,获得当前的小时、分钟和秒数,然后将其格式化为HH:MM:SS的形式,并通过LCD显示出来。
3.时间设置通过单片机的外部中断,当用户按下设置按钮后,进入时间设置模式。
在时间设置模式下,用户可以通过按下不同的按键来调整小时、分钟和秒数。
调整完成后,再次按下设置按钮即可保存设置。
4.闹钟设置通过单片机的定时器中断,设定一个闹钟定时器。
当闹钟定时器触发时,触发相应的中断,然后通过LCD显示闹钟提示。
此外,用户也可以通过按下按钮来设置闹钟时间,并通过单片机的外部中断进行处理。
5.闹钟响铃当闹钟时间到达时,触发相应的中断,通过LCD显示闹钟提示,并通过蜂鸣器发出响铃声。
总结通过本设计,可以实现一款功能齐全的LCD1602电子时钟。
毕业设计162实时钟设计
![毕业设计162实时钟设计](https://img.taocdn.com/s3/m/92901812fc4ffe473268ab0c.png)
目录1.需求分析 (1)2.概要设计 (1)3.详细设计 (1)3.1 键盘模块 (1)3.2 实时钟模块 (4)3.3 显示模块 (6)3.4 整点报时模块 (7)3.5 主程序模块 (7)4.调试数据与运行结果分析 (7)5.程序说明 (8)6.软件程序框图 (8)6.1 显示子程序流程图 (8)6.2 键盘子程序流程图 (9)6.3 整点报时子程序流程图 (9)6.4 实始终子程序流程图 (10)7.附录 (11)8.参考文献 (11)9.附录源代码 (11)10.课设心得 (18)11.硬件原理图 (18)实时钟设计一.需求分析1.设备和器材PC机一台,8031芯片一块,并行接口8155A一片,数字开关1个,LED数码管6只,蜂鸣器一只,四行八列键盘。
2.功能实现⑴采用定时器中断的方法,设计一个一天24小时进制的实时时钟;⑵用6个发光二极管分别显示时、分、秒的记时;⑶能进行整点报时;⑷可以从键盘中预置、修改时钟值。
二.概要设计本设计共有四个模块,即键盘模块,实时钟模块,显示模块以及整点报时模块。
键盘模块包含两个部分,一个是键盘扫描,判断是哪一个键被按下;另一个是将键码换算成数字,送到显示缓冲区;1.实时钟模块:用六个内存单元储存六个显示器所要显示的数据,利用8031内部的定时/计数器实现中断计时;2.显示模块:6位显示器采用动态显示方式,8155A的PA口输出位码,以轮流点亮六个LED显示器;缓冲区内的六个单元通过PB口输出控制段码,实现显示的数字控制;3.整点报时模块:在实时钟显示到整点的时候启动蜂鸣器报时,即向管脚P1.7输入一个高电平一个低电平,延时,并通过内存单元22H传递整点小时数使得蜂鸣器通过鸣响的次数报时。
三.详细设计1.键盘模块A.硬件设置: 8031通过8155H与8759键盘相连,8155的PA口8线控制8根列线,PC口低4位控制4根行线;另外键盘这个模块是通过外部中断实现的,只有在外部输入负脉冲的时候才执行,所以8031的P3.2口必须连接负脉冲/SP口。
基于51单片机的电子时钟设计
![基于51单片机的电子时钟设计](https://img.taocdn.com/s3/m/2355db94284ac850ad0242cd.png)
时钟的基本原理分析利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
三,时钟设计分析针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。
运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。
第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北华航天工业学院课程设计报告(论文)设计课题:硬件中断时钟设计专业班级:学生姓名:指导教师:设计时间:2010-12-16目录一概述 (4)二设计内容 (4)三设计目的 (4)四方案设计及论证 (4)4.1设计思路 (4)4.2硬件原理图及相关说明 (5)4.2.1 8253 (5)4.2.2 8259A (6)4.3 软件流程图及其说明 (6)4.4 功能模快设计说明 (7)4.5 源程序 (9)4.6 程序调试 (9)4.5.1 程序调试界面 (12)4.5.2 程序运行过程 (12)五心得体会 (14)六参考文献 (14)一、概述本设计是利用Masm for window集成实验环境来实现的,编写程序,利用主机内的8253/8254-2的计数器0产生10ms对称方波输出,该输出送至IRQ0使8259A每10ms产生一次中断,100次中断后秒数加1,通过计数器值count自减,即从100自减到0为止,即是100*10ms=1s,只有当COUNT数值减到1时,才是1s的时间,通过秒值+1,重复操作秒个位和“9”比较,如果为真,返回DOS显示当前时间的数值;如果为假,即是进位后秒十位加1操作而个位清零操作,然后用上述道理,比较分个位与“9”的大小,如果为真,返回DOS显示当前时间的数值;如果为假,即是进位后分十位加1操作而分个位清零操作,并在DOS窗口下进行输出显示。
程序从按下任意键开始显示数据区中存放的时间值,运行中按下空格键则停止运行,并返回DOS。
二、设计内容利用PC系列微机现有的硬件和软件资源编写程序,以便在显示器屏幕上显示XX (时):XX(分):XX(秒),并且每秒钟更新一次显示。
三、设计目的1)掌握8253可编程定时器/计数器的编程方法。
2)掌握在PC机上使用中断方式工作时主程序及中断服务程序的编写方法。
四、方案设计与论证1.设计思路IBM PC/XT系统板上使用了一片8253-5,其地址为40H ~ 43H,其中0通道在方式3下工作,初值设置23小时59分50秒,每隔55ms向中断控制器8259A的IRQ0端发一次中断请求。
此定时中断的用途之一是系统报时。
现在借用原有电路,重新设置定时器、编写中断服务程序来做硬件时钟实验,为此程序开始应首先保护原系统的08H中断的中断矢量(中断服务程序入口地址),以便程序退出时恢复原系统的设置。
保护原系统的08H中断的中断矢量可用DOS 35H功能调用读出,并加以适当保存,也可以用以下指令将中断矢量压入堆栈保存。
具体过程:等待按键按下,调用DOS的显示字符串功能,并对中断进行压栈操作后,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化的0通道,3方式,二进制计数进行方式3的10ms方波,即每10ms中断一次,通过保护原有的8259A的中断屏蔽寄存器IMR的内存,进行下一步的IMR的重写,只开放始终和键盘的中断处理。
进而开中断,运行TIMER模块的时间调用及DOS显示系统时间的功能,待TIMER模块运行结束之后,关闭中断返回DOS,程序结束。
CLI ;关中断CLD ;DF=0MOV AX ,0000HMOV DS ,AX ;DS:SI指向08H中断矢量表中的位置MOV SI ,0020HLODSWMOV BX ,AX ;BX:原中断服务程序入口偏移地址LODSW ;AX:原中断服务程序入口的段地址PUSH AX ;压栈保护PUSH BX2.硬件原理图及相关说明(1)8253这是8253的相关图形,一般8253要实现定时、计数控制大致可采用三种方法:①设计数字逻辑电路来实现定时或计数的要求。
即由硬件电路实现的定时器/计数器。
②用软件来实现定时和计数的要求。
即采用循环方式执行若干条指令,使程序段执行时占用一定的延时时间。
③采用可编程定时器/计数器。
其定时与计数功能可由程序灵活设定,设定后于CPU并行工作,不占用CPU的时间,可以很好地解决以上两种定时存在的不足,这种方式广泛应用于各种定时或计数场合。
8253的工作方式三是方波发生器,方式三的输出为方波,具有“初始化自动重装”功能。
向8253写入控制字后,OUT输出变为高电平,在写完计数初值后计数器自动开始对输入时钟CLK计数,OUT输出保持高电平。
当计数到一半时,输出变为低电平,直至计数到0,在重装计数初值,OUT端变高开始新一轮计数。
(2)8259A8259A常用于中断优先级管理电路,它的功能有三种:①它可以接受多个外部中断源的中断请求,并进行优先级别判断,选中当前优先级别最高的中断请求,再将此请求送到微处理器的中断输入端。
具有提供中断向量、屏蔽中断输入等功能。
②8259A使用单+5V电源供电,有多种中断管理方式,自动提供中断服务程序入口地址,使用灵活方便。
3.软件流程图及其说明开始等待键按下(DOS7号调用)是空格键?Y取原8H 中断的中断矢量并压栈保护建立数据段的可寻址性装载现在的中断服务程序8253初始化产生10ms 方波,10ms 中断一次保护原8259A 的IMR(中断屏蔽寄存器)内容重写IMR,只开放时钟和键盘中断开中断检测键盘(DOS6号调用)有键按下?显示时间值(DOS9号调用)取消秒秒值变否?关中断恢复IMR 重新设置8253,55ms 中断一次恢复原中断矢量开中断返回DOS 结束YNNYN图1.0 硬件中断时钟设计流程图硬件中断时钟设计算法具体描述,等待建按下调用DOS 的7号功能键,并将中断的中断矢量进行压栈保护,建立数据段的可寻址性,通过装载现行的中断服务程序,使用8253初始化产生10ms 方波,每10ms 中断一次,保护原有的8259A 的中断屏蔽寄存器IMR 的内存,进行下一步的IMR 的重写。
进而开中断,然后调用DOS 的6好功能键,通过判断是否有键按下和是否按下的是空格键实现显示时间和关闭中断返回DOS ,程序结束。
4.功能模快设计说明(1)模块1是空格键?关中断恢复IMR重新设置8253,55ms中断一次恢复原中断矢量开中断返回DOS结束这部分模块是实现当按下空格键时程序关中断,恢复IMR,重新设置8253中断时间,恢复中断矢量以及开中断。
(2)模块2有键按下?显示时间值(DOS9号调用)取消秒N(3)模块3 秒值变否?N这个模块是实现的等待功能(4)模块4检测键盘(DOS6号调用)Y秒值变否?根据秒值是否相同来执行循环,但秒值变化了就返回继续执行程序。
5.源程序STACK SEGMENTDB 256 DUP(0)STACK ENDSDATA SEGMENTCOUNT DB 100TENH DB '2'HOUR DB '3:'TENM DB '5'MINUTE DB '9'DB ':'TENS DB '5'SECOND DB '0',0DH,'$'DATA ENDSCODE SEGMENTSTART PROC FARASSUME CS:CODEPUSH DSMOV AX,0PUSH AXMOV AH, 08H ;等待键按下,AL=字符的ASCII码INT 21H ;将中断矢量压入堆栈保存CLI ;清中断允许位CLD ;清方向标志位MOV AX, 0000HMOV DS, AXMOV SI, 0020H ;DS:SI指向08H中断向量LODSW ;取08中断入口的偏移地址MOV BX,AXLODSW ;取08中断入口段地址PUSH AX ;压栈保护PUSH BX;将中断矢量压入堆栈保存MOV AX,DATA ;建立数据段的可寻址性MOV DS, AXASSUME DS:DATA;将向中断矢量写入新地址MOV AX, 0000HMOV ES, AXMOV DI, 0020H ;ES:DS指向08中断向量存放地址MOV AX,OFFSET TIMERSTOSW ;写入偏移地址MOV AX,CSSTOSW ;写入段地址;将向中断矢量写入新地址MOV AL,00110110B ;8253初始化,0通道,3方式,二进制计数 OUT 43H,ALMOV AX,11932 ;初值=11932OUT 40H, ALMOV AL ,AHOUT 40H, ALIN AL,21H ;读8259的中段屏蔽寄存器IMRPUSH AX ;压栈保护;MOV AL, 0FCHSTI ;开中断FOREVER:MOV DL,0FFH ;有键按下吗?MOV AH, 06HINT 21HJZ DISP ;无键按下则转显示DISPCMP AL, 20H ;是空格键吗?JZ EXIT ;是则退出DISP:MOV DX, OFFSET TENH ;不是则显示时间 MOV AH, 09HINT 21HMOV AL, SECOND ;取秒单元值WAITCHA:CMP AL,SECOND ;改变否?JZ WAITCHA ;没变则等待JMP FOREVER ;变则转FOREVEREXIT:CLI ;有空格键按下退出关中断CLD ;清方向标志位POP AXOUT 21H,AL ;恢复IMRMOV AL, 36H ;8253初始化,55ms OUT 43H,ALMOV AL, 0OUT 40H,ALOUT 40H,AL;恢复中断矢量MOV AX,0 ;恢复08H中断中断向量MOV ES, AXMOV DI, 4*8POP AXSTOSWPOP AXSTOSWSTI;恢复中断矢量RETSTART ENDPCODE ENDSEND START6.程序调试本次实验采用的是MASM FOR WINDOWS集成实验环境2010软件,只需要用记事本将程序保存成.asm文件,然后直接用其打开然后运行即可自动编译连接并出结果。
如程序有问题可直接在MASM FOR WINDOWS集成实验环境2010软件中调试并运行直到结果正确。
(1)程序调试界面(2)运行过程①打开运行窗口②按下任意键显示时间③按下空格键停止计时④按下任意键退出窗口八、心得体会一转眼一周的微机原理课程设计在在紧张而又忙碌的氛围中度过了。
在本次课程设计中,我的设计题目是硬件中断时钟设计。
经过一周的课程设计,我们不但对课本上的知识有了更深的了解和巩固,而且我还学到了平时在课堂上都学习不到的知识,使我对系统的开发过程有了更加完整的认识。
在设计过程中虽然遇到了不少困难,但当我通过自己查资料、或是向指导老师请教以及向同学请教在网上询问,在克服了一个又一个难点之后,我的设计正是进入具体操作阶段:1 设计思路的分析阶段。
我根据一些经典的算法再加上我的自我分析,写出了符合这次设计要求的算法,并就此画出相应的流程图;2 源代码的编写阶段。