单片机课程设计——时间控制器
- 格式:doc
- 大小:114.50 KB
- 文档页数:15
单片机系统课程设计成绩评定表设计课题:可编程作息时间控制器设计学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:可编程作息时间控制器设计专业班级:学生姓名:学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书1、引言 (1)1.1研究背景和用途 (3)1.2设计思想及基本功能 (3)1.3研究内容及采方法 (3)(1)主要研究内容 (3)(2)主要采用方法 (4)2、总体设计方案 (4)2.1 方案选取 (4)2.2系统框图 (4)2.3系统工作原理 (5)3、硬件电路及芯片介绍 (5)3.1 AT89C51单片机 (5)3.2 1602LCD液晶显示器 (8)3.3其他重要元件 (9)(1) 独立式键盘的接口电路: (9)(2)蜂鸣器: (10)3.4硬件电路设计图 (11)4、系统软件设计 (12)4.1主程序软件设计 (12)4.2键盘扫描程序设计 (13)4.3时钟调节程序设计 (14)4.4闹钟时间调节程序设计 (15)4.5闹钟时间判断子程序设计 (16)5、总结 (17)参考文献 (18)附录: (19)1、引言1.1研究背景和用途20世纪末,电子技术得到了飞速的发展。
在其推动下,现代电子产品乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。
时间对于人来说总是那么珍贵,工作的忙碌性和繁杂让人容易忘记当前时间。
然而遇到重大事情的时候,一旦忘记时间,就会给自己或他人造成更大的麻烦。
对于学校来说作息时间尤为重要。
如今,在电子计算机基础上发展而来的可编程作息时间控制器,它可以利用电子计算机的内部时间,通过程序判断处理,完成对作息时间的精确控制,并且由于是程序控制,所以可通过改变程序而进而灵活改变作息时间,同时可以实时显示时间,并实现打铃功能。
目录第一章引言 (3)选题背景及其意义 (3)877A单片机的介绍 (3)设计要求及其功能 (4)本设计实现的功能 (4)第二章系统整体方案 (5)系统整体方案框图 (5)设计要求 (5)按照设计要求画出系统框图 (5)控制系统时刻分析表 (6)处置器的选择 (6)时钟芯片的选择 (7)液晶显示器的选择 (7)第三章硬件部份的设计 (7)系统部份 (7)键盘接口电路 (8)显示部份 (9)第四章控制系统软件部份 (10)软件介绍 (10)程序流程图 (11)按键的扫描子程序 (12)铃声控制程序 (12)仿真电路 (13)第五章总结 (15)参考文献 (16)致谢 (16)基于单片机的可编程作息时刻控制器的设计何欢(伊犁师范学院电子与信息工程学院电子信息科学与技术09-2班,新疆伊宁市 835000)摘要:本设计是作息时刻控制器,由单片机最小系统、按键模块、数码管显示模块、铃声模块组成。
采用PIC16F877A单片机、主频4MHZ晶振,通过按键STATE、TEN、UNIT控制时刻的校正时刻和铃声设定;数码管显示模块用来显示时刻,显示格式为“时分”,并能够按照需要显示年、月、日,由数码管小数点闪动作为秒计数;铃声模块进行到时提示并出相应动作:发光二极管闪亮,同时播放音乐。
时钟芯片采用的是DS1302,此芯片是DALLAS 公司推出的涓流充电时钟芯片,其内含有一个实不时钟/日历和31 字节静态RAM,并通过简单的串行接口与单片机进行通信。
实不时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每一个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。
DS1302 工作时功耗很低,维持数据和时钟信息时功率小于1mW。
该设计采用C语言编写程序,由于汇编语言的移植性比较差,而C语言则比较灵活,许多子函数都能够直接移植过去。
关键词:PIC16F877A单片机;晶振;液晶显示器;源程序Based on single chip microcomputer controller design ofprogrammable calendarHehuan(ili normal college of electronic and information engineering college of electronic information science and technology 09-2 class, xinjiang yining city, 835000 )Abstract:This is the time schedule controller designed by single chip microcomputer minimum system module, buttons, digital tube display module, alarm module. Using PIC16F877A MCU, 4 MHZ crystal vibration main frequency, through the button STATE, TEN, UNIT control time correction time and set ring; Digital tube display module is used to display time, display format of"time", and can according to need to display year, month, day, by the digital tube decimal counting flashing as seconds; Bell module to remind and make the corresponding action: light-emitting diodes, play music at the same time.Used clock chip DS1302, this chip is DALLAS company to launch a trickle charging the clock chip, containing a real-time clock/calendar and 31 bytes static RAM, and communicate with single chip microcomputer with simple serial interface. Real-time clock/calendar circuit provides seconds, minutes, and information day, date, month, year, number of days per month and leap year the number of days can be automatically adjusted, clock operation by an AM/PM indicator decided to adopt 12 or 24 hour format. DS1302 power consumption is low, while working to keep data and clock information when the power is less than 1 mw.This design USES the C language program, due to the portability of assembly language, but C is more flexible, Many functions can be directly transplanted in the past.Keywords: PIC16F877A MCU;crystals and liquid crystal display; the source program第一章引言选题背景和意义自从人类学会计时开始,计时方式由在木棍和骨头上刻标记,随着人类的智慧的进展,到后面利用计时工具不断的改良,由最开始的圭表、日晷、漏壶、漏箭、机械闹钟、秒表、沙漏、怀表、自摆钟、石英钟等。
课程设计(论文)题目:作息时间控制器院(系):电子工程与自动化学院专业:测控技术与仪器学生姓名:吉哲学号: 0900820413指导教师:徐翠锋职称:讲师2012年12月27日摘要本次作息时间控制器设计是采用AT89S52单片机作为系统的核心元件,在其最小系统基础上与DS1302时钟芯片配合,四个独立按键控制,六位七段数码管显示,无源蜂鸣器发声。
单片机最小系统作为核心处理和控制单元;时钟芯片用来实现实时时间的精准输出和闹钟信息的存储,并可用纽扣电池供电以保持时间的连续运行;独立按键用于进行时间及闹钟的设定;数码管用于显示时间及闹钟信息;蜂鸣器用于在达到设定的时间后进行及时提醒。
关键词:时间控制;AT89S52;单片机;DS1302;时钟芯片;闹铃;定时报警AbstractThis work and rest time controller design is to use AT89S52 SCM as the core of the system components, in its minimum system with DS1302 clock chip based on coordination, four independent key control, six seven period of digital tube display, passive buzzer sound. Single chip microcomputer minimum system as the core processing and control unit; Clock chip to realize real-time time accurate output and alarm information storage, and use button batteries to keep continuous operation time, Independent key for time and alarm clock Settings; Digital tube is used to display the time and alarm information; Buzzer to reach a set time for timely remind.Key words:Time control; AT89S52 devices; SCM; DS1302; Clock chip; Alarm; Timing alarm目录引言 (1)1 课程设计任务及要求 (1)2 硬件设计 (1)2.1 总体设计思路及系统框图 (1)2.2 中央处理控制器 (2)2.3 晶振电路 (3)2.4 时钟信号产生电路 (3)2.5 显示电路 (4)2.6 控制电路 (6)2.7 闹铃电路 (8)2.8 电源及下载电路 (8)3 程序设计 (9)3.1 主程序流程图 (9)3.2 按键扫描程序流程图 (9)3.3 响铃扫描程序 (10)4 制板、组装与调试 (11)4.1 PCB制作 (11)4.2 制作PCB板流程 (11)4.3 调试 (11)5 方案总结 (11)心得体会 (12)谢辞 (13)参考文献 (14)附录 (15)引言时间是人类生活必不可少的重要元素,从古至今它都扮演着一个非常重要的角色。
单片机指令的时钟和定时器控制时钟和定时器控制是单片机中非常重要的功能模块。
单片机的时钟主要用于控制指令的执行过程,而定时器功能则可以实现精确的时间测量和任务调度。
本文将详细介绍单片机指令的时钟和定时器控制。
一、时钟控制在单片机中,时钟是指定时单元(Timer/Counter)的运行时钟。
时钟信号可以是外部晶振信号,也可以是由外部晶振经过分频电路产生的。
时钟信号的频率直接影响到单片机的运行速度和性能。
不同型号的单片机支持的最大工作频率不同,需要根据具体型号的手册来设置时钟频率。
时钟的分频系数可以通过内部的控制寄存器来设置,通常可以选择不同的分频因子来适应不同的应用需求。
在设置时钟的分频系数时,需要考虑到单片机的工作环境、外部设备的要求以及功耗等方面的因素。
在程序中,可以通过配置寄存器来设置时钟源、分频系数等参数。
常见的时钟源有外部晶振,内部振荡器等。
下面是一个简单的示例代码:```C#include <reg51.h>void main(){// 设置时钟源为外部晶振,分频系数为12TMOD = 0x01;TCON = 0x00;TH0 = 0x1A;TL0 = 0x1A;TR0 = 1;while(1){// 在这里编写其他的代码}}```在上面的示例代码中,通过设置TMOD寄存器来配置定时器的工作模式。
TCON寄存器用于启动定时器,并设置定时器的计数初值。
最后通过设置TR0寄存器来启动定时器的计数。
二、定时器控制定时器是单片机中常用的功能模块之一,它可以根据设置的参数自动定时中断,并执行相应的处理函数。
定时器通常用于实现精确的时间测量、任务调度、脉冲计数等应用。
在单片机中,常见的定时器有定时器0和定时器1。
定时器0通常用于系统的时基控制和通信协议的实现,定时器1则通常用于编码器计数、PWM信号生成等应用。
定时器的工作原理是通过计数器的自动累加和溢出来实现的。
当定时器溢出时,会触发相应的中断,并执行中断处理函数。
单片机原理及系统课程设计专业:电气工程及其自动化班级:姓名:学号:指导教师:兰州交通大学自动化与电气工程学院2014 年1 月13 日单片机原理及系统课程设计报告基于单片机的作息时间控制器设计1. 课程设计目的(1)进一步熟悉和掌握单片机的最小系统结构及其工作原理。
(2)掌握单片机的接口技术和键盘扫描、数码管显示的原理及拓展使用方法。
(3)通过课程设计,提高综合运用所学知识的能力,掌握单片机程序设计、调试,应用电路设计、分析及调试检测。
2. 设计方案及原理本设计是作息时间控制器,设计其实现的功能主要有:使用4位七段显示器来显示当前的时间,由LED闪动作为秒计数表示,显示格式为“时分”,并可显示日期,显示格式为“月日”,年份单独显示。
由4个按键来作功能设置,可以设置现在的日期、时间及定时设置时间,一旦设置的时间到则作出相应动作:发光二极管闪亮,同时播放音乐。
单数码管显示模块片机最按键控制模块小系闹钟模块统系统方框图图13. 硬件设计3.1单片机AT89C52提供以下标准功能:8K字节FLASH闪存,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
3.2 按键控制模块按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按键控制模块主要有由四个按键1单片机原理及系统课程设计报告组成:K1、K2、K3、K4、。
其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。
K1KKK按键控制模23.3 数码管显示模块时间显示模块主要由四位七段数码管来显示,配合按键控制模块的校正与设定时间,相应的显示。
单片机课程设计——时间控制器一.设计要求:设计一个以AT89 C52为核心的时间控制器。
可以实现时间显示和设置闹钟功能。
用89S52单片机设计一个时间控制器,有8位数码管显示年月日及时分秒,具有日历和时钟功能,有一路输出控制电灯,有一路输出控制蜂鸣器,可以设置年月日及时分秒,可以设置一张时间表,该时间表记录什么时间开、关电灯,什么时间开、关蜂鸣器,而单片机按这张时间表来控制电灯和蜂鸣器。
该时间表要求掉电时仍能保存不掉数据,所以需要用一片EEPROM来保存数据,如用24C02/04/08等。
二.设计原理:在AT80C52单片机内部对机器周期进行计数,从而得到定时。
由于AT89 C52的内部计数器是16位的,振荡脉冲频率为12MHZ,这样一个机器周期为1μs,计满一次为65536μs。
显示器选用8位共阳极数码管,分别表示时、分、秒。
同时选用两个74HC273作为片选和位选锁存器。
同时经过P0口外加四个键盘用以调整时间。
软件部分分为四大模块:调整初始时间、设置闹铃时间实现闹铃功能、显示时间和脉冲计数模块。
脉冲计数模块,通过AT89 C52的T0进行计数,设置T0计数溢出时,由内部硬件置位,同时开放中断,使系统进入中断服务程序。
在定时器运行前,在其中先预置入计数初值,为了计算方便,在次设置中预置的初值为(65536-1000),这样一次“硬件计时周期”就可定时1000μs。
在中断服务程序设置进行1000次“硬件计时周期”就可得到1S。
同理进行分、小时的计时。
三.流程图:四.设计原理图:五.程序清单:SYSTEM equ 0 NMLIGHTON equ 6 NMLIGHTOFF equ 7 NMALARMON equ 8 ANALARMOFF equ 9 YEAR1 equ 10H YEAR2 equ 11H YEAR3 equ 12H YEAR4 equ 13H MONTH1 equ 14H MONTH2 equ 15H DAY1 equ 16H DAY2 equ 17H HOUR1 equ 18H HOUR2 equ 19H MINUTE1 equ 1AH MINUTE2 equ 1BHSECOND1 equ 1CHSECOND2 equ 1DHWEEKDAY1 equ 1EHWEEKDAY2 equ 1FH;time tableLIGHTONT equ 100LIGHTOFF equ 200ALARMON equ 300ALARMOFF equ 400org 00hjmp startorg 03hjmp Int0Procorg 1BHjmp T1Procorg 13Hjmp Int1Procorg 30hstart: mov DPTR,#SYSTEMmovx A,@DPTRjnz Next3 ;have value in external ROMmov A,#01Hmovx @DPTR,Acall Initmov R4,#1 ;first display Dateclr C ;LED turn off in the firstmov P3.0,CNext3: mov TL1,#9cHmov TH1,#0ffHmov TMOD,#11H ;Timer 1 mode 1setb TR1setb ET1setb IT0 ;smart heresetb IT1setb PX0setb EX0setb EX1setb EASECOND: mov R5,#2call WaitSecondcpl P3.1jb P1.3, Next7call SetDateNext7: jb P1.4,Next8call SetTimeNext8: mov DPTR,#SECOND2movx A,@DPTRinc Amovx @DPTR,A ;seconds increase 1,then write to ROMxrl A,#10jnz SECONDmov A,#0mov DPTR,#SECOND2movx @DPTR,A ;clear SECOND2mov DPTR,#SECOND1movx A,@DPTRinc Amovx @DPTR,A ;inc SECOND1movx A,@DPTRxrl A,#6jnz SECONDmov A,#0movx @DPTR,AMINUTE: mov DPTR,#MINUTE2movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#10 ;BCD codejnz SECONDmov A,#0movx @DPTR,Amov DPTR,#MINUTE1movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#6jnz SECONDmov A,#0movx @DPTR,AHOUR: mov DPTR,#HOUR2movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#10 ;BCD codejnz Next4mov A,#0movx @DPTR,Amov DPTR,#HOUR1movx A,@DPTRinc Amovx @DPTR,A ;write to ROMjmp SECONDNext4: mov DPTR,#HOUR1movx A,@DPTRmov B,A ;save hour1 to Bmov A,#10mul ABmov R0,A ;save the result to R0mov DPTR,#HOUR2movx A,@DPTRmov R1,A ;save hour2 to R1mov A,B ;restore the resultadd A,R1xrl A,#24jnz SECONDmov A,#0mov DPTR,#HOUR2movx @DPTR,A ;reset HOUR2mov DPTR,#HOUR1movx @DPTR,Amp SECONDT1Proc: mov TH1,#0FfHmov TL1,#9cHcpl P3.1retiInt0Proc: push DPLpush DPHpush ACCclr EAmov A,R4jnz Next5call WriteTimejmp Return3Next5: call WriteDateReturn3: setb EApop ACCpop DPHpop DPLretiInt1Proc: push ACCpush Bclr EAinc R6 ;R6 to mark Date/Time on the LEDmov A,R6mov B,#3div ABmov A,B ;judge the remainderjz Next6mov R4,#0jmp Return5Next6: mov R4,#1HReturn5: setb EApop Bpop ACCretiWriteTime: inc R7 ;R7 to generate scan signal of LED mov A,R7xrl A,#8jnz I0mov R7,#0I0: mov A,R7xrl A,#0jnz I1call WriteHour1jmp Return4I1: mov A,R7xrl A,#1jnz I2call WriteHour2jmp Return4I2: mov A,R7xrl A,#2jnz I3call WriteMinute1jmp Return4I3: mov A,R7xrl A,#3jnz I4call WriteMinute2jmp Return4I4: mov A,R7xrl A,#4jnz I5call WriteSECOND1jmp Return4I5: mov A,R7xrl A,#5jnz I6call WriteSECOND2jmp Return4I6: mov A,R7xrl A,#6jnz I7call WriteWeekday1jmp Return4l7: mov A,R7xrl A,#7jnz Return4call WriteWeekday2 Return4: retWriteDate: inc R7mov A,R7xrl A,#8jnz IS0mov R7,#0IS0: mov A,R7xrl A,#0jnz IS1call WriteYear1jmp Return1IS1: mov A,R7xrl A,#1jnz IS2call WriteYear2jmp Return1IS2: mov A,R7xrl A,#2jnz IS3call WriteYear3jmp Return1IS3: mov A,R7xrl A,#3jnz IS4call WriteYeaR5jmp Return1IS4: mov A,R7xrl A,#4jnz IS5call WriteMonth1jmp Return1IS5: mov A,R7xrl A,#5jnz IS6call WriteMonth2jmp Return1IS6: mov A,R7xrl A,#6jnz IS7call WriteDay1jmp Return1IS7: mov A,R7xrl A,#7jnz Return1call WriteDay2Return1: retWriteYear1: mov DPTR,#YEAR1movx A,@DPTRanl P1,#11111000B ; P1=0mov P2,AretWriteYear2: mov DPTR,#YEAR2movx A,@DPTRorl P1,#00000001B ; P1=1mov P2,AretWriteYear3: mov DPTR,#YEAR3movx A,@DPTRxrl P1,#00000011B ;P1=2mov P2,AretWriteYeaR5: mov DPTR,#YEAR4 ;P1=3movx A,@DPTRorl P1,#00000001Bmov P2,AretWriteMonth1: mov DPTR,#MONTH1movx A,@DPTRxrl P1,#00000111B ;P1=4mov P2,AretWriteMonth2: mov DPTR,#MONTH2movx A,@DPTRorl P1,#00000001B ;P1=5mov P2,AretWriteDay1: mov DPTR,#DAY1movx A,@DPTRxrl P1,#00000011B ;P1=6mov P2,AretWriteDay2: mov DPTR,#DAY2movx A,@DPTRorl P1,#00000001B ;P1=7mov P2,AretWriteHour1: mov DPTR,#HOUR1movx A,@DPTRanl P1,#11111000B ; P1=0mov P2,AretWriteHour2: mov DPTR,#HOUR2movx A,@DPTRorl P1,#00000001B ; P1=1mov P2,AretWriteMinute1: mov DPTR,#MINUTE1movx A,@DPTRxrl P1,#00000011B ;P1=2mov P2,AretWriteMinute2: mov DPTR,#MINUTE2movx A,@DPTRorl P1,#00000001B ;P1=3mov P2,AretWriteSECOND1: mov DPTR,#SECOND1movx A,@DPTRxrl P1,#00000111B ;P1=4mov P2,AretWriteSECOND2: mov DPTR,#SECOND2movx A,@DPTRorl P1,#00000001B ;P1=5mov P2,AretWriteWeekday1: mov DPTR,#WEEKDAY1movx A,@DPTRxrl P1,#00000011B ;P1=6mov P2,AretWriteWeekday2:mov DPTR,#WEEKDAY2movx A,@DPTRorl P1,#00000001B ;P1=7mov P2,AretInit: mov A,#2mov DPTR,#YEAR1movx @DPTR,Amov A,#0mov DPTR,#YEAR2movx @DPTR,Amov A,#0mov DPTR,#YEAR3movx @DPTR,Amov A,#8mov DPTR,#YEAR4movx @DPTR,Amov A,#0mov DPTR,#MONTH1movx @DPTR,Amov A,#1mov DPTR,#MONTH2movx @DPTR,Amov A,#0mov DPTR,#DAY1movx @DPTR,Amov A,#1mov DPTR,#DAY2movx @DPTR,Amov A,#1mov DPTR,#HOUR1movx @DPTR,Amov A,#7mov DPTR,#HOUR2movx @DPTR,Amov A,#1mov DPTR,#MINUTE1movx @DPTR,Amov A,#6mov DPTR,#MINUTE2movx @DPTR,Amov A,#1mov DPTR,#SECOND1movx @DPTR,Amov A,#0mov DPTR,#SECOND2movx @DPTR,Amov A,#0mov DPTR,#WEEKDAY1movx @DPTR,Amov A,#2mov DPTR,#WEEKDAY2movx @DPTR,AretSetTime: clr EX1 ;forbid interrupt 1mov R4,#00H ;show time alwaysmov A,#0mov DPTR,#SECOND2movx @DPTR,A ;clear secondsmov DPTR,#SECOND1movx @DPTR,Asettime1:jb P1.4,Return7jb P1.5,Next9call SetHour ; P1.5=0 ,key pressNext9: jb P1.6,settime1call SetMinute ;P1.6=0,key pressjmp settime1Return7: setb EX1retSetMinute:mov DPTR,#MINUTE2movx A,@DPTRinc Amovx @DPTR,A ;increase Minute2xrl A,#10jnz Jmov A,#0movx @DPTR,ASetYear: mov DPTR,#YEAR4movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR3movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR2movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR1movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,AJ5: jb P1.5,Return13 ;wait the key to releasejmp J5Return13:retWaitSecond: mov A,R5jz Return6WaitSecond1:mov TL0,#0B0H ;50000(0xc350) ticks before overflow = 0.5s at 1.2MHz Clock mov TH0,#3cHmov A,TMODorl A,#00000001Bmov TMOD,A ;Timer 0 mode 1setb TR0;Timer 0 runsWaitSecond2: jnb TF0,WaitSecond2clr TR0 ;Timer 0 stops(no interrupt,can't auto clear,so software clear)clr TF0dec R5mov A,R5jnz WaitSecond1Return6: retEND。
单片机作息时间控制器设计方案第1章总体方案设计1.1 设计要求本课题要求以单片机为核心,设计一个具有定时和计数功能的智能化作息时间控制器,用于学校教学楼的时间控制,实现时间基准定时,并配合“启动”、“复位”等按键的操作,并按作息时间显示的容要求有有以下功能:(1)按作息时间接通/断开电铃;(2)课间接通/断开播放音乐设备;(3)时间的设置与值显示(显示的容要求有时、分、秒各两位)1.2优点及意义本课题要求设计一个具有定时和计数功能的智能化作息时间控制器,用于学校教学楼的时间控制,实现时间基准定时。
数码管显示电路采用LED动态控制方式,显示时分秒。
按键电路控制定时计时。
闹铃指示电路控制铃声。
1.3 系统硬件电路设计本方案采用一种是用以STC89C52为核心,外加8位数码管,蜂鸣器,继电器和按键完成系统的设计要求。
系统硬件设计框图。
根据设计要求,确定系统的设计方案,图1-1为系统总体设计计框图。
硬件电路由6个部分组成,即单片机时钟电路、复位电路、键盘输入电路、LED数码管显示电路、蜂鸣器电路、继电器电路。
1.4初步设计思路(1)定义一组数表,存字形码(2)定义4个数据缓冲区,对应4个数码管,将要显示的字符的偏移量存入。
通过查表指令从P1口输出。
(3)LED数码管通过驱动电路,显示相应的状态。
位选由P2口高四位产生,(4)通过P3口接通继电器和蜂鸣器。
(5)系统设置3个按键,分别是选择键、时间加键、时间减键。
第2章硬件电路设计2.1时钟电路设计单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如图2-1所示。
图2-1时钟电路电路中器件选择可以通过计算和实验确定,也可以参考一些典型电路参数。
电路中,电容器C1和C2对振荡频率有微调作用,同时帮助晶振起振,通常取值围在22±0.1PF,一般晶振为12MHZ,电容取22PF。
课程设计课程名称微机原理与应用学科名称SCM 作息时间控制器课程设计作业书课程名称微机原理与应用主题微控制器作息时间控制器,目录第 1 章引言 (7)1.1 简介及技术要求 (7)1.2 时序方案 (7)1.3 键盘/显示方案 (7)第二章硬件设计............................................................ 8 2.1 电路原理图 (8)2.2 系统工作流程 (9)2.3 系统使用说明 (10)第三章系统软件设计 (10)3.1 软件设计 (10)3.2 系统工作流程 (11)第4章程序模块设计。
(15)4.1 主程序模块 (16)4.2 定时中断服务程序模块 (18)4.3 扫描显示模块 (22)4.4 按键扫描子程序 (23)4.5 键值处理子程序……………………………………………………274.6 Shift键处理模块……………………………………………………30第五章调试与分析 (32)第 6 章课程总结 (33)参考 (34)附录 (35)第一章简介因为单片机种类多,模型复杂,我们学习起来也比较困难,所以对于MCS-51系列的产品来说,就是一种典型的学习方式。
对于类似于组装的MCU编程过程来说,这也是一个非常有趣的过程。
为了更好的说明,我先从应用电路入手,介绍它们的使用方法,以便我快速掌握它们的应用。
1.1 简介及技术要求校园作息时间控制系统主要用于学校,以24小时为周期自动控制一些开关量。
如钟声和扩音设备的开合,教学楼照明的定时开合,学生宿舍灯和校园路灯的定时开关的控制。
技术要求如下:(1)计时准确,月误差<=10%。
(2)有显示和上课时间功能。
(3)具有时间到时响铃的功能。
1.2 时序方案采用软件控制,利用MCS-51系列单片机的定时器/计数器进行数年计时,配合软件延时实现时分秒计时。
该方案节省了硬件成本,可以使读者锻炼和提高定时器/计数器的使用、年份和编程,因此本系统将采用软件的方式来实现计时。
单片机课程作息时间控制设计报告1. 引言单片机是现代电子技术的重要组成部分,在工业自动化、电子产品控制等领域都有广泛应用。
本次设计目的是通过单片机实现课程作息时间的自动控制,以解决学校师生在课程安排上的繁琐和误差问题。
2. 设计方案2.1 系统功能本系统通过采集外部的时间信息,并通过单片机进行处理和控制,最终实现对学校课程作息时间的自动控制。
2.2 硬件设计本系统的硬件设计主要包括单片机、时钟模块和显示模块。
单片机负责控制整个系统的运行以及与外部硬件的交互,时钟模块提供系统需要的准确时间信息,显示模块用于显示当前的时间和课程信息。
2.3 软件设计本系统的软件设计主要包括时间采集模块、时间处理模块和课程控制模块。
时间采集模块负责从时钟模块获取当前的时间信息,时间处理模块用于处理时间数据,课程控制模块根据时间数据决定当前课程的状态和下一节课的时间。
3. 工作流程3.1 初始化系统启动时,单片机初始化各个硬件模块,并从时钟模块获取当前的时间信息。
3.2 时间采集单片机通过时钟模块定时采集当前的时间信息,并将其存储在内部存储器中。
3.3 时间处理时间处理模块从内部存储器中读取当前的时间信息,并根据预设的课程时间表以及当前的时间,确定当前课程的状态(上课、下课或休息)。
3.4 课程控制课程控制模块根据当前课程的状态,通过单片机控制相关设备的开关,实现对课程作息时间的控制。
4. 技术难点4.1 时间信息的准确获取为了保证系统的准确性,需要选择一款精度较高的时钟模块,并采用合适的算法来处理时间数据。
4.2 课程时间表的灵活性不同学校的课程安排可能不同,因此需要设计一个灵活可变的课程时间表,以适应不同学校的需求。
5. 结论通过单片机实现课程作息时间的自动控制,可以提高学校课程安排的效率,减少学生和老师的繁琐操作。
本设计报告详细介绍了系统的硬件和软件设计,以及系统的工作流程和技术难点。
在实际应用中,可以根据具体需求进行相应的改进和调整,以满足不同学校的需求。
单片机课程设计作息时间控制器设计报告XX大学单片机课程设计报告作息时间控制器设计姓名:学号:专业班级:自动化班指导老师:所在学院:电气工程与自动化学院2022年X月X日摘要本设计是作息时间控制器的设计,由单片机AT89C52芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子作息时间控制器。
该功能的实现主要通过软件编程来完成,降低了硬件电路的复杂性,成本也有所降低。
设计内容包括了秒信号指示、时间“时”和“分”显示电路、按键调整电路、供电电源以及闹铃指示电路等几部分的设计。
采用四个开关来控制作息时间控制器的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。
当作息时间控制器达到课程设计的要求,在到达设定的定时时间时蜂鸣器便被控制立即发出声音,持续一分钟,而后按K4键退出显示闪烁状态,即恢复时钟状态。
显示采用的四位数码管电路,定时提示采用蜂鸣器发声指示。
本设计方案也可以经过改进作为实现定时控制系统的控制定时电路。
关键词:作息时间单片机显示定时目录1概述31.1课程设计的目的和意义31.2单片机课程设计的要求31.3作息时间控制器的设计要求32系统总体方案及硬件设计42.1系统总体设计42.2系统各个部分的电路设计53软件的设计83.1概述83.2主模块的设计83.3显示模块设计93.4时间设定模块设计93.5闹铃功能的实现104Proteus软件仿真124.1仿真结果124.2性能及误差分析145课程设计体会15参考文献15附1程序源代码16附2原理图261概述1.1课程设计的目的和意义综合利用所学单片机知识完成一个单片机应用系统设计并仿真、由硬件实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下良好基础。
1.2单片机课程设计的要求1、进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;2、掌握单片机仿真软件Proteus的使用方法;3、掌握键盘和显示器在的单片机控制系统中的应用。
简单数控作息时间控制系统设计1.系统设计要求该时钟控制器有4位LED数码显示器,具有基本时钟(显示当前时间的小时及分钟)功能,通过外扩继电器、光电耦合器或国体继电器还可实现多点、多路电气设备的控制。
该控制器可广泛应用于学校、工厂和机关的自动打铃、电视、路灯、室内照明及其他对象控制,也可用于家庭或学生寝室进行时间指示及多点时间提醒。
2.硬件电路硬件电路如图所示。
电路采用单片机A T89C51,显示器采用四联共阴极LED数码显示器。
其中字段由串入并出的移位寄存器74LS164控制,74LS164的串行数据输入端由P1.4控制,移位脉冲由P1.5提供;宇位由P1.0~P1.3控制,Pl.0~P1.3对应控制L4~L1。
SW1~Sw3用来迸行时间校准及控制时间点的设定。
LEDl~LED8用来模拟被控对象。
另有铃响信号输出(铃响信号驱动蜂鸣器发声)。
图作息时间控制系统3.设计要求(l)时间校对在任何时候均可通过按压SW2和SW3按钮进行时间校准。
每按动一下SW2,小时自动加1;持续按住不放,小时将自动连续加1。
当小时指示为24时,再加1将自动回零。
每按动一下SW3,分钟自动加l:持续按住SW3按钮不放,分钟将自动连续加1。
当分钟指示为59时,再按动SW3,分钟将变为00。
(2)控制时间设定需要设定控制时间点时,应首先按Swl按钮,然后再按动Sw2和SW3,使指示时间与要求时间一致,再按Sw1按钮进入“控制码”(控制对象)设置状态,按Sw3进行对象切换,最后按Sw2保存时间点;也可以按SW1取消本次设定。
如此可设定多个控制时间点。
在正常状态按下SW1不放,然后再按Sw3按钮可删除所有的控制时间点。
4.实训考核要求软件采用MCS-51汇编语言编写,使用T0产生50ms时基信号,通过软计数器产生时、分、秒信号。
主程序已给出,请按图连线正确并编写有关的子程序。
5.评分标准:1)连线不正确、子程序基本思路不清晰<60分2)连线基本正确、子程序基本思路清晰60-69分3)连线正确、子程序基本思路清晰完整70-85分4)连线正确、子程序思路清晰完整86-100分参考程序如下:;****************************************************************** ;实训7.asm;作息时间控制系统;************************头文件************************************ SDATA BIT P1.4 ;定义74LS164串行移位数据端SCLK BIT P1.5 ;定义74Is164串行移位时钟端DIS EQU Pl ;定义字形口Control EQU P0 ;控制输出Swl EQU P3.2Sw2 EQU P3.3Sw3 EQU P3.4Ms EQU 10H ;定义50ms计数器Secs EQU 11H ;定义秒计数器Minute EQU 12H ;定义分钟计数器Hour EQU 13H ;定义时计数器T-Minute EQU 18H ;定义定时分单元T-Hour EQU 19H ;定义定时时单元TControl EQU 1AH ;定义控制码单元;******************************************************************* ORG 0000HLJMP Main;******************************************************************* ORG 000BHLJMP T0INT;******************************************************************* Main∶MOV SP,#70H ;将栈区设置在70H~7FHMOV IE,#10000010B ;允许T0中断MOV TMOD,#01H ;T0定时方式1MOV Ms,#20 ;50ms单元初值,使20×50ms=1sMOV secs,#0MOV Minute,#0MOV Hour,#12H ;开机显示12∶00MOV T-MinuteMOV T-Hour,#6MOV B,#20HCLR F0MOV R0,,#80MOV TH0,#0B0HSETB TR0LOOP:MOV R1,#MinuteLCALL SplitLCALL DISPLCALL VerifyNOPLCALL setupMOV A,secsCJNE A,#5,$+3JNC LOOPLCALL CompareSJMP LOOP;****************中断服务程序***********;***********************************Compare:;***************************************************** CLP1: INC R0 ;指向分CLP2∶INC R0 ;指向控制码MOV A,@R0JNZ CLP3RET;***************************************************** CPL3:INC R0 ;指向下一个时间的开始CJNE R0,#6FH,$+3JC NextTime;***************************************************** Verify:;***************************************************** VLP3:;***************************************************** Setup:;***************************************************** sLP2:;********************************************* sTORE:MOV R1,BCJNE Rl,#6AH,$+3JC STLP1MOV R1,#20HMOV B,RlSTLP1: MOV @R1,T-HourINC R1MOV @R1.T-MinuteINC R1MOV @R1,TComtrolINC RlMOV B,R1RET;***********************************************Split: MOV R0,#14H ;分个位显示缓冲单元MOV A,@RlANL A,#0FH ;取分个位MOV @R0,AINC Ro ;指向分+位显示缓冲单元MOV A,@R1SwAP AANL A,NlFH ;取分十位MOV @R0,AINC R0 ;指向时个位显示缓冲单元INC R1MOV A,@R1ANL A,#0FH ;取时个位MOV @R0,AINC R0 ;指向时十位显示缓冲单元MOV A,@R1SwAP AANL A,#0FH ;取时十位MOV @R0,ARET*********************************************************DISP∶PUSH 00HMOV R0,#14H ;显示缓冲区首地址MOV R2,#11111110B ;对应个位的字位码MOV DPTR,#WordTab ;送字形表首地址JNB F0,DISP0DJNZ R7,DISP1CPL F1MOV R7,#6SJMP DISP1DISP0:CLR F1DISP1: ORL DIS,#00001111B ;关显示器MOV R3,#20DJNZ R3,$ ;延时40 usMOV A,@R0 ;取待显示数字MOVC A,@A+DPTR ;查宇形WordOut: MOV R3,#8 ;传送字形码到74LS164 MOV SDATA,C ;送数椐到数据口SETB SCLK ;产生时钟CLR SCLKDJNZ R3.NEXTB ;继续送下一位INC R0JB F1,HIDEMOV A,R2 ;取字位码ANL DIs,AHIDE:MOV R3,#5 ;延时lmsMOV R4,#100DJNZ R4,$DJNZ R3,$-4MOV A,R2 ;修改字位码RL AMOV R2,AJB ACC.4,DISP1DExit: POP 00HRET;-------------------------------------------------------------------------------- WordTab: DB 3FH,06H,5BH,4FH ;"0","1","2","3"DB 66H,6DH,7DH,07H ;"4","5","6","7"DB 7FH,6FH,77H,7CH ;"8","9","A","B"DB 39H,5EH,79H,71H ;"C","D","E","F"DB 40H,38H ;"-","L"END;--------------------------------------------------------------------------------。
江西理工大学专科毕业论文可编程作息时间控制器设计与制作摘要:本文介绍了一款基于A T89S52单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。
论文重点阐述了数字钟硬件中主控制模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作;软件同样采用模块化的设计,本设计实现了时间与闹钟的修改功能、语音播报功能、年、月、日和星期等的显示功能。
并且通过对比实际的时钟,查找出了误差的来源,确定了调整误差的方法,尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。
本次设计过程在硬件与软件方面是进行同步设计。
硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。
在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。
显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。
7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。
为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。
74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。
软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。
程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。
关键词:时钟电钟;DS1302;DS18B20;动态扫描;单片机ABSTRACTThis article describes an AT89S52 microcontroller based digital clock design, through multi-functional digital clock design ideas, detailed description of the system hardware and software realization process. Paper focuses on the digital clock in the main control module hardware, the clock modules, display modules and associated control modules, modular design and production; software as modular design, the design and implementation of the changes of time and alarm functions, voice broadcast function, year, month, day and week, etc. display. And by comparing the actual clock, find out the source of the error, the error of the method of determining the adjustment, as much as possible to reduce errorsEnable the system to achieve a practical digital clock within allowable error.Hardware mainly by the AT89C52 microcontroller, LED display circuit, and the tune composed of the circuit when the button. In the SCM choice I used the AT89C52 microcontroller, which is suitable for many of the more complex control applications. Monitor the use of two 7SEG--MPX8--CA and a 7SEG--MPX4--CA. 7SEG-MPX8-CA is a total of eight-yang display 7SEG-MPX4-CA is a total of four-yang diode display. In order to more easily control the three monitors, I use three 74HC164 to drive.74HC164 is an 8-bit edge-triggered shift register, serial input data, and parallel output. The software includes calendar program, time to adjust procedures, turn the lunar calendar programs display programs. Programs written in assembly language used in order to more easily adjust the time and the realization of the lunar calendar display. All programming is complete, the wave software debugging,Key words:Clock electric clock:DS1302;DS18B20:DYNAMIC ;SCANSCM江西理工大学专科毕业论文目录摘要 (6)ABSTRACT (7)前言 (10)一.设计要求与方案探讨 (11)1.1 设计目的与意义 (10)1.2 设计要求 (11)1.3 系统基本方案选择探讨 (11)1.3.1主控制芯片的选择方案探讨 (11)1.3.2 时钟芯片的选择方案探讨 (12)1.3. 3 LED显示系统选择方案探讨 (13)二.硬件设计 (14)2.1系统电路设计框图 (14)2.2 系统硬件设计概述 (14)2.3系统主要基本单元电路的设计 (14)2.3.1主控制系统电路的设计 (14)2.3.2时钟电路的设计 (16)2.3.3 LED显示电路的设计 (17)2. 4 系统电路原理说明 (18)三、软件设计 (22)3.1程序流程框图 (22)3.2 子程序的设计 (24)3.2.1 读、写DS1302子程序 (25)四、硬件与软件调试 (2)4.1硬件调试 (25)4.2软件调试 (27)4.3调试结果分析与结论 (29)4.3.1 调试结果分析 (29)4.3.2 调试结论 (29)五、论文总结 (30)参考文献 (30)附录一:系统电路图 (31)附录二:系统程序清单 (32)致谢 (50)江西理工大学专科毕业论文前言随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。
基于单片机的作息时间控制器设计
基本思路:
作息时间控制器可以分为两个部分:硬件部分和软件部分。
硬件包括单片机、时钟模块、显示模块、按键模块和继电器模块,软件则是以单片机为核心开展的程序设计。
1. 硬件部分的设计
单片机的选择:根据具体需求选择适合的单片机,通常采用8051系列单片机,如STC89C52。
因为这种单片机具有可编程性强、集成度高、性能稳定等优点。
时钟模块的选择:由于作息时间控制器需要精确计时,需要选用高精度的DS1302时钟模块。
显示模块的选择:通常采用大屏幕液晶显示屏,方便用户查看时间。
按键模块的选择:按键模块一般采用矩阵按键,方便用户选择需要设置的时间。
继电器模块的选择:用于控制开关机,一般选用5V继电器。
2. 软件部分的设计
(1) 初始界面设计:控制器初始界面需要显示当前时间、日期和上下午。
(2) 按键扫描算法:根据不同按键的输入数据,采用按键扫描算法对输入进行处理并进行响应操作。
(3) 设置起始时间和结束时间:根据用户设置的起始时间和结束时间,计算相应的时间差,并把时间差发送给继电器控制模块。
(4) 定时查询计算当前时间: 通过定时查询时钟模块,计算当前时间,在LCD屏幕上显示出来。
(5) 控制继电器开关:软件需要对继电器模块进行控制,控制器需要根据设置的起始时间和结束时间,给继电器模块发送控制信号,实现自动开关机。
以上就是基于单片机的作息时间控制器设计的基本思路,具体实现需要根据具体要求进行详细设计和开发。
扬州大学能源与动力工程学院题目:可编程作息时间控制器设计课程:单片机原理及应用课程设计专业:电气工程及其自动化班级:姓名:学号:第一部分任务书《单片机原理及应用》课程设计任务书一、课题名称详见《单片机课程设计题目(一)》:主要是软件仿真,利用Proteus软件进行仿真设计并调试;《单片机课程设计题目(二)》:主要是硬件设计,利用单片机周立功实验箱进行设计并调试。
二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
三、课程设计内容设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。
2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。
3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。
摘要本设计详细介绍了利用AT89C51单片机设计时间控制器的方法。
该时间控制器是以AT89C51单片机为核心,扩展一片XICOR公司的X5045组成的小系统,控制一路继电器:可以设定一天中的时间,设定继电器的开启时间和关闭时间,可以清除不需要的定时,能够紧急启动:所有的设定均通过键盘实现,按键具有连击功能,每个状态都有指示灯提示。
我们设计的作息时间控制是用单片机实现的,是为了更好的对时间控制智能化。
时间控制器包括硬件和软件。
硬件部分包括继电器,存储器和显示器接口芯片。
软件部分,主要是主程序设计。
软硬件结合在一起,先调试子程序,然后逐级叠加调试,最后系统调试通过。
时间控制系统可以准确的显示时间,在定时时间到时发出悦耳的铃声提醒同学们按时上下课。
关键词:单片机,控制,时间AbstractThis design USES AT89C51 is introduced time controller design method. The time controller based on AT89C51 single-chip microcomputer as the core, expanding a XICOR X5045 consisting of small systems, control relay all the way: you can set the time of day, set the relay open time and close time, timing, can remove don't need to start the emergency: all set by keyboard and buttons with functions of combo, each state has a light hint. Our design work and rest time control are implemented using single chip microcomputer, is intelligent in order to better control over time. Time controller includes hardware and software. Hardware part includes relay, storage and display interface chip. Software part, mainly is the main program design. Hardware and software together, debugging subroutine first, and then overlay debugging step by step, finally system debugging through. Time control system can accurately display the time in the regular time when a melodious bell remind students adding and dropping classes on time.目录1.系统设计方案与论证 (3)2.1设计要求 (3)2.2系统设计总体方案 (3)2系统的硬件设计与实现 (4)2.1.1时钟芯片DS12887性能简介 (4)2.1.2时钟芯片读写时序 (6)2.1.3 时间寄存器地址 (6)2.1.4 特殊控制寄存器功能 (7)2.2.1 液晶SYB12864介绍 (8)2.2.2 液晶与单片机的接口 (8)2.2.3 液晶写操作时序 (9)2.3.1 红外发送与接收 (10)2.3.2 遥控码数据分析 (10)2.3.3 接收电路 (11)2.4.1电源部分电路图 (11)3.程序设计 (12)3.主程序流程图 (12)3.2 按键识别 (13)3.3 课表计算 (13)3.4 遥控解码 (14)4.系统测试与总结 (16)附录1主要元器件清单 (17)附录2程序清单 (18)附录3原理图与印制板图 (35)附录4系统使用说明 (36)附录5系统实物图片 (37)1.系统设计方案与比较1.1 设计要求一、时钟功能:能显示年、月、日、星期、时、分、秒 二、调整功能:能校正年份、日期、时间等三、打铃功能:按指定时间表播放音乐、现场修改作息时间表 四、设置的作息时间表数据在单片机掉电后不会丢失1.2系统设计总体方案根据设计要求实现的功能,可以采用不同的设计系统方案如下:方案一:采用单片机自带定时器进行计时,外加存储器保存课表数据,普通键盘输入。
单片机课程设计——时间控制器一.设计要求:设计一个以AT89 C52为核心的时间控制器。
可以实现时间显示和设置闹钟功能。
用89S52单片机设计一个时间控制器,有8位数码管显示年月日及时分秒,具有日历和时钟功能,有一路输出控制电灯,有一路输出控制蜂鸣器,可以设置年月日及时分秒,可以设置一张时间表,该时间表记录什么时间开、关电灯,什么时间开、关蜂鸣器,而单片机按这张时间表来控制电灯和蜂鸣器。
该时间表要求掉电时仍能保存不掉数据,所以需要用一片EEPROM来保存数据,如用24C02/04/08等。
二.设计原理:在AT80C52单片机内部对机器周期进行计数,从而得到定时。
由于AT89 C52的内部计数器是16位的,振荡脉冲频率为12MHZ,这样一个机器周期为1μs,计满一次为65536μs。
显示器选用8位共阳极数码管,分别表示时、分、秒。
同时选用两个74HC273作为片选和位选锁存器。
同时经过P0口外加四个键盘用以调整时间。
软件部分分为四大模块:调整初始时间、设置闹铃时间实现闹铃功能、显示时间和脉冲计数模块。
脉冲计数模块,通过AT89 C52的T0进行计数,设置T0计数溢出时,由内部硬件置位,同时开放中断,使系统进入中断服务程序。
在定时器运行前,在其中先预置入计数初值,为了计算方便,在次设置中预置的初值为(65536-1000),这样一次“硬件计时周期”就可定时1000μs。
在中断服务程序设置进行1000次“硬件计时周期”就可得到1S。
同理进行分、小时的计时。
三.流程图:四.设计原理图:五.程序清单:SYSTEM equ 0 NMLIGHTON equ 6 NMLIGHTOFF equ 7 NMALARMON equ 8 ANALARMOFF equ 9 YEAR1 equ 10H YEAR2 equ 11H YEAR3 equ 12H YEAR4 equ 13H MONTH1 equ 14H MONTH2 equ 15H DAY1 equ 16H DAY2 equ 17H HOUR1 equ 18H HOUR2 equ 19H MINUTE1 equ 1AH MINUTE2 equ 1BHSECOND1 equ 1CHSECOND2 equ 1DHWEEKDAY1 equ 1EHWEEKDAY2 equ 1FH;time tableLIGHTONT equ 100LIGHTOFF equ 200ALARMON equ 300ALARMOFF equ 400org 00hjmp startorg 03hjmp Int0Procorg 1BHjmp T1Procorg 13Hjmp Int1Procorg 30hstart: mov DPTR,#SYSTEMmovx A,@DPTRjnz Next3 ;have value in external ROMmov A,#01Hmovx @DPTR,Acall Initmov R4,#1 ;first display Dateclr C ;LED turn off in the firstmov P3.0,CNext3: mov TL1,#9cHmov TH1,#0ffHmov TMOD,#11H ;Timer 1 mode 1setb TR1setb ET1setb IT0 ;smart heresetb IT1setb PX0setb EX0setb EX1setb EASECOND: mov R5,#2call WaitSecondcpl P3.1jb P1.3, Next7call SetDateNext7: jb P1.4,Next8call SetTimeNext8: mov DPTR,#SECOND2movx A,@DPTRinc Amovx @DPTR,A ;seconds increase 1,then write to ROMxrl A,#10jnz SECONDmov A,#0mov DPTR,#SECOND2movx @DPTR,A ;clear SECOND2mov DPTR,#SECOND1movx A,@DPTRinc Amovx @DPTR,A ;inc SECOND1movx A,@DPTRxrl A,#6jnz SECONDmov A,#0movx @DPTR,AMINUTE: mov DPTR,#MINUTE2movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#10 ;BCD codejnz SECONDmov A,#0movx @DPTR,Amov DPTR,#MINUTE1movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#6jnz SECONDmov A,#0movx @DPTR,AHOUR: mov DPTR,#HOUR2movx A,@DPTRinc Amovx @DPTR,A ;write to ROMmovx A,@DPTRxrl A,#10 ;BCD codejnz Next4mov A,#0movx @DPTR,Amov DPTR,#HOUR1movx A,@DPTRinc Amovx @DPTR,A ;write to ROMjmp SECONDNext4: mov DPTR,#HOUR1movx A,@DPTRmov B,A ;save hour1 to Bmov A,#10mul ABmov R0,A ;save the result to R0mov DPTR,#HOUR2movx A,@DPTRmov R1,A ;save hour2 to R1mov A,B ;restore the resultadd A,R1xrl A,#24jnz SECONDmov A,#0mov DPTR,#HOUR2movx @DPTR,A ;reset HOUR2mov DPTR,#HOUR1movx @DPTR,Amp SECONDT1Proc: mov TH1,#0FfHmov TL1,#9cHcpl P3.1retiInt0Proc: push DPLpush DPHpush ACCclr EAmov A,R4jnz Next5call WriteTimejmp Return3Next5: call WriteDateReturn3: setb EApop ACCpop DPHpop DPLretiInt1Proc: push ACCpush Bclr EAinc R6 ;R6 to mark Date/Time on the LEDmov A,R6mov B,#3div ABmov A,B ;judge the remainderjz Next6mov R4,#0jmp Return5Next6: mov R4,#1HReturn5: setb EApop Bpop ACCretiWriteTime: inc R7 ;R7 to generate scan signal of LED mov A,R7xrl A,#8jnz I0mov R7,#0I0: mov A,R7xrl A,#0jnz I1call WriteHour1jmp Return4I1: mov A,R7xrl A,#1jnz I2call WriteHour2jmp Return4I2: mov A,R7xrl A,#2jnz I3call WriteMinute1jmp Return4I3: mov A,R7xrl A,#3jnz I4call WriteMinute2jmp Return4I4: mov A,R7xrl A,#4jnz I5call WriteSECOND1jmp Return4I5: mov A,R7xrl A,#5jnz I6call WriteSECOND2jmp Return4I6: mov A,R7xrl A,#6jnz I7call WriteWeekday1jmp Return4l7: mov A,R7xrl A,#7jnz Return4call WriteWeekday2 Return4: retWriteDate: inc R7mov A,R7xrl A,#8jnz IS0mov R7,#0IS0: mov A,R7xrl A,#0jnz IS1call WriteYear1jmp Return1IS1: mov A,R7xrl A,#1jnz IS2call WriteYear2jmp Return1IS2: mov A,R7xrl A,#2jnz IS3call WriteYear3jmp Return1IS3: mov A,R7xrl A,#3jnz IS4call WriteYeaR5jmp Return1IS4: mov A,R7xrl A,#4jnz IS5call WriteMonth1jmp Return1IS5: mov A,R7xrl A,#5jnz IS6call WriteMonth2jmp Return1IS6: mov A,R7xrl A,#6jnz IS7call WriteDay1jmp Return1IS7: mov A,R7xrl A,#7jnz Return1call WriteDay2Return1: retWriteYear1: mov DPTR,#YEAR1movx A,@DPTRanl P1,#11111000B ; P1=0mov P2,AretWriteYear2: mov DPTR,#YEAR2movx A,@DPTRorl P1,#00000001B ; P1=1mov P2,AretWriteYear3: mov DPTR,#YEAR3movx A,@DPTRxrl P1,#00000011B ;P1=2mov P2,AretWriteYeaR5: mov DPTR,#YEAR4 ;P1=3movx A,@DPTRorl P1,#00000001Bmov P2,AretWriteMonth1: mov DPTR,#MONTH1movx A,@DPTRxrl P1,#00000111B ;P1=4mov P2,AretWriteMonth2: mov DPTR,#MONTH2movx A,@DPTRorl P1,#00000001B ;P1=5mov P2,AretWriteDay1: mov DPTR,#DAY1movx A,@DPTRxrl P1,#00000011B ;P1=6mov P2,AretWriteDay2: mov DPTR,#DAY2movx A,@DPTRorl P1,#00000001B ;P1=7mov P2,AretWriteHour1: mov DPTR,#HOUR1movx A,@DPTRanl P1,#11111000B ; P1=0mov P2,AretWriteHour2: mov DPTR,#HOUR2movx A,@DPTRorl P1,#00000001B ; P1=1mov P2,AretWriteMinute1: mov DPTR,#MINUTE1movx A,@DPTRxrl P1,#00000011B ;P1=2mov P2,AretWriteMinute2: mov DPTR,#MINUTE2movx A,@DPTRorl P1,#00000001B ;P1=3mov P2,AretWriteSECOND1: mov DPTR,#SECOND1movx A,@DPTRxrl P1,#00000111B ;P1=4mov P2,AretWriteSECOND2: mov DPTR,#SECOND2movx A,@DPTRorl P1,#00000001B ;P1=5mov P2,AretWriteWeekday1: mov DPTR,#WEEKDAY1movx A,@DPTRxrl P1,#00000011B ;P1=6mov P2,AretWriteWeekday2:mov DPTR,#WEEKDAY2movx A,@DPTRorl P1,#00000001B ;P1=7mov P2,AretInit: mov A,#2mov DPTR,#YEAR1movx @DPTR,Amov A,#0mov DPTR,#YEAR2movx @DPTR,Amov A,#0mov DPTR,#YEAR3movx @DPTR,Amov A,#8mov DPTR,#YEAR4movx @DPTR,Amov A,#0mov DPTR,#MONTH1movx @DPTR,Amov A,#1mov DPTR,#MONTH2movx @DPTR,Amov A,#0mov DPTR,#DAY1movx @DPTR,Amov A,#1mov DPTR,#DAY2movx @DPTR,Amov A,#1mov DPTR,#HOUR1movx @DPTR,Amov A,#7mov DPTR,#HOUR2movx @DPTR,Amov A,#1mov DPTR,#MINUTE1movx @DPTR,Amov A,#6mov DPTR,#MINUTE2movx @DPTR,Amov A,#1mov DPTR,#SECOND1movx @DPTR,Amov A,#0mov DPTR,#SECOND2movx @DPTR,Amov A,#0mov DPTR,#WEEKDAY1movx @DPTR,Amov A,#2mov DPTR,#WEEKDAY2movx @DPTR,AretSetTime: clr EX1 ;forbid interrupt 1mov R4,#00H ;show time alwaysmov A,#0mov DPTR,#SECOND2movx @DPTR,A ;clear secondsmov DPTR,#SECOND1movx @DPTR,Asettime1:jb P1.4,Return7jb P1.5,Next9call SetHour ; P1.5=0 ,key pressNext9: jb P1.6,settime1call SetMinute ;P1.6=0,key pressjmp settime1Return7: setb EX1retSetMinute:mov DPTR,#MINUTE2movx A,@DPTRinc Amovx @DPTR,A ;increase Minute2xrl A,#10jnz Jmov A,#0movx @DPTR,ASetYear: mov DPTR,#YEAR4movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR3movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR2movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,Amov DPTR,#YEAR1movx A,@DPTRinc Amovx @DPTR,Axrl A,#10jnz J5mov A,#0movx @DPTR,AJ5: jb P1.5,Return13 ;wait the key to releasejmp J5Return13:retWaitSecond: mov A,R5jz Return6WaitSecond1:mov TL0,#0B0H ;50000(0xc350) ticks before overflow = 0.5s at 1.2MHz Clock mov TH0,#3cHmov A,TMODorl A,#00000001Bmov TMOD,A ;Timer 0 mode 1setb TR0;Timer 0 runsWaitSecond2: jnb TF0,WaitSecond2clr TR0 ;Timer 0 stops(no interrupt,can't auto clear,so software clear)clr TF0dec R5mov A,R5jnz WaitSecond1Return6: retEND。