单片机原理及应用基础实验报告电子时钟设计
- 格式:docx
- 大小:404.65 KB
- 文档页数:15
单片机实训报告课程名称:单片微型计算机原理与接口技术实验项目:电子时钟实验班级:09电本一设计人:于润婷学号:2009104143004指导老师:祁伟实验时间:2011.9.28~2011.9.12学校:广东技术师范学院目录第一章绪论 (2)1.1 电子时钟的概述 (2)1.2 电子时钟的发展现状及前景 (2)第二章控制系统的硬件设计 (3)2.1 电源模块 (3)2.2 处理器模块 (5)2.3 显示模块 (6)2.4 按键模块 (9)2.5 蜂鸣器模块 (10)第三章系统的的软件实现 (11)3.1 主程序流程图 (11)3.2 按键流程图 (13)3.3 时钟中断流程图 (15)3.4 显示流程图 (15)第四章系统的功能及性能测试 (19)心得体会 (21)参考文献 (22)附件:程序清单第一章:绪论1.1 电子时钟的概述1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,基于单片机设计的电子时钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使电子时钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
另外,程序较为简洁,具有可靠性和较好的可读性。
如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。
该电子时钟由AT89C51,SN74LS04N ,按键,数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天,满三十一天为一个月,满十二个月为一年。
单片机实验报告数字时钟设计报告一、实验目的本次单片机实验的目的是设计并实现一个基于单片机的数字时钟。
通过该实验,深入了解单片机的工作原理和编程方法,掌握定时器、中断、数码管显示等功能的应用,提高综合运用知识解决实际问题的能力。
二、实验原理1、单片机选择本次实验选用了常见的 51 系列单片机,如 STC89C52。
它具有丰富的资源和易于编程的特点,能够满足数字时钟的设计需求。
2、时钟计时原理数字时钟的核心是准确的计时功能。
通过单片机内部的定时器,设定合适的定时时间间隔,不断累加计时变量,实现秒、分、时的计时。
3、数码管显示原理采用共阳或共阴数码管来显示时间数字。
通过单片机的 I/O 口控制数码管的段选和位选信号,使数码管显示相应的数字。
4、按键控制原理设置按键用于调整时间。
通过检测按键的按下状态,进入相应的时间调整模式。
三、实验设备与材料1、单片机开发板2、数码管3、按键4、杜邦线若干5、电脑及编程软件(如 Keil)四、实验步骤1、硬件连接将数码管、按键与单片机开发板的相应引脚通过杜邦线连接起来。
确保连接正确可靠,避免短路或断路。
2、软件编程(1)初始化单片机的定时器、中断、I/O 口等。
(2)编写定时器中断服务程序,实现秒的计时。
(3)设计计时算法,将秒转换为分、时,并进行进位处理。
(4)编写数码管显示程序,将时间数据转换为数码管的段选和位选信号进行显示。
(5)添加按键检测程序,实现时间的调整功能。
3、编译与下载使用编程软件将编写好的程序编译生成可执行文件,并下载到单片机中进行运行测试。
五、程序设计以下是本次数字时钟设计的主要程序代码片段:```cinclude <reg52h>//定义数码管段选码unsigned char code SEG_CODE ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//定义数码管位选码unsigned char code BIT_CODE ={0x01, 0x02, 0x04, 0x08, 0x10,0x20, 0x40, 0x80};//定义时间变量unsigned int second = 0, minute = 0, hour = 0;//定时器初始化函数void Timer_Init(){TMOD = 0x01; //定时器 0 工作在方式 1 TH0 =(65536 50000) / 256; //定时 50ms TL0 =(65536 50000) % 256;EA = 1; //开总中断ET0 = 1; //开定时器 0 中断TR0 = 1; //启动定时器 0}//定时器 0 中断服务函数void Timer0_ISR() interrupt 1{TH0 =(65536 50000) / 256;TL0 =(65536 50000) % 256;second++;if (second == 60){second = 0;minute++;if (minute == 60){minute = 0;hour++;if (hour == 24){hour = 0;}}}}//数码管显示函数void Display(){unsigned char i;for (i = 0; i < 8; i++)P2 = BIT_CODEi;if (i == 0){P0 = SEG_CODEhour / 10;}else if (i == 1){P0 = SEG_CODEhour % 10;}else if (i == 2){P0 = 0xBF; //显示“”}else if (i == 3){P0 = SEG_CODEminute / 10;else if (i == 4){P0 = SEG_CODEminute % 10;}else if (i == 5){P0 = 0xBF; //显示“”}else if (i == 6){P0 = SEG_CODEsecond / 10;}else if (i == 7){P0 = SEG_CODEsecond % 10;}delay_ms(1);//适当延时,防止闪烁}}//主函数void main(){Timer_Init();while (1){Display();}}```六、实验结果与分析1、实验结果将程序下载到单片机后,数字时钟能够正常运行,准确显示时、分、秒,并且通过按键可以进行时间的调整。
编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 V L 液晶显示偏压信号11 D4 Data I/O4 R S 数据/命令选择端12 D5 Data I/O5 R/W 读/写选择端13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA背光源正极8 D1 Data I/O 16 BLK 背光源负极单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。
电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。
二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。
本系统设计采用字符型液品显示模块 LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。
1 LCD1602 简介字符型液晶显示模块 LCD1602 已经是单片机应用设计中最常用的信息显示器件。
LCD1602 可以显示两行,每行16 个字符,采用+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
2 LCD1602 功能介绍2.1 引脚功能LCD1602 采用标准 14 脚(无背光)或 16 脚(带背光)接口,各引脚功能见表 1。
表1 引脚功能2.2 LCD1602 读写指令LCD1602 读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令 38H:显示模式设置;②写指令 08H:显示关闭;③写指令 01H:显示清屏;④写指令 06H:显示光标移动设置;⑤写指令 0CH:显示开及光标设置。
单片机电子时钟课程设计实验报告(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. 硬件设计。
(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。
(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。
(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。
(4)按键输入,设计按键来调整时间,包括调整小时和分钟。
(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。
2. 软件设计。
(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。
(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。
(3)按键处理,设计按键扫描程序,实现对时间的调整。
(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。
四、设计实现。
1. 硬件实现。
根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。
2. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉MCS51类CPU 的定时器、中断系统编程方法, 了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容编写一个时钟程序, 产生一个50ms 的定时中断, 对定时中断计数, 将时、分、秒显示在数码管上。
三、程序框图主程序中断处理电子钟程序框图四、实验步骤 1.连线说明: E5 区A0 ←→ A3 区A0 E5 区CS ←→ A3 区CS5 E5 区CLK ←→ B2 区2MHzE5 区A.B.C.D ←→ G5 区A.B.C.D (排线每个8 位, 注意高低位一致) 2.时间显示在数码管上五、程序清单 ms50 DATA 31H ;存放多少个50ms sec DATA 32H ;秒 min DATA 33H ;分hour DATA 34H ;时buffer DATA 35H ;显示缓冲区EXTRN CODE(Display8)ORG 0000HLJMP STARORG 000BH ;定时器T0中断处理入口地址LJMP INT_Timer0ORG 0100HSTAR: MOV SP,#60H ;堆栈MOV ms50,A ;清零ms50MOV hour,#12 ;设定初值: 12:59:50MOV min,#59MOV sec,#50MOV TH0,#60 ;定时中断计数器初值MOV TL0,#176 ;定时50msMOV TMOD,#1 ;定时器0: 方式一MOV IE,#82H ;允许定时器0中断SETB TR0 ;开定时器T0STAR1: LCALL Display ;调用显示JNB F0,$CLR F0SJMP STAR1 ;需要重新显示时间;中断服务程序INT_Timer0: MOV TL0,#176-5MOV TH0,#60PUSH 01HMOV R1,#ms50INC @R1 ;50ms单元加1CJNE @R1,#20,ExitIntMOV @R1,#0 ;恢复初值INC R1INC @R1 ;秒加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;分加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;时加1CJNE @R1,#24,ExitInt1MOV @R1,#0ExitInt1: SETB F0ExitInt: POP 01HRETIHexToBCD: MOV B,#10DIV ABMOV @R0,BINC R0MOV @R0,AINC R0RETDisplay: MOV R0,#bufferMOV A,secACALL HexToBCDMOV @R0,#10H ;第三位不显示INC R0MOV A,minACALL HexToBCDMOV @R0,#10H ;第六位不显示INC R0MOV A,hourACALL HexToBCDMOV R0,#bufferLCALL Display8RETENDEXTRN CODE (Display8)BUFFER DA TA 60HORG 0000HAJMP MAINORG 000BHAJMP IT0PMAIN: MOV TMOD,#01HMOV 20H,#20HCLR AMOV 52H,A ;计数和显示MOV 51H,A ;空间清零MOV 50H,#50HMOV 40H,AMOV 41H,AMOV 43H,AMOV 44H,AMOV 46H,AMOV 47H,ASETB ET0SETB EAMOV TH0,#9EH ;计数器赋初值MOV TL0,#58HSETB TR0MOV 45H,#11HMOV 42H,#11HMOV R0,#BUFFERLCALL Display8HERE: AJMP HEREIT0P: PUSH PSWPUSH ACCMOV TH0,#9EH ;重新转入计数值MOV TL0,#58HDJNZ 20H,RETURN ;计数不满20返回MOV 20H,#20H ;重置中断次数MOV A,#01H ;秒加1ADD A,50HDA A ;秒单元十进制调制PUSH ACCCJNE A,#60H,SWS ;是否到60秒, 否则返回MOV A,#00HSWS: MOV R5,ASW AP AANL A,#0FHMOV 41H,AMOV A,R5ANL A,#0FHMOV 40H,A ;满60秒, 秒单元清零LCALL AAAPOP ACCMOV 50H,ACJNE A,#60H,RETURNMOV 50H,#00HMOV A,#01H ;分单元加1ADD A,51H ;分单元十进制调整DA APUSH ACCCJNE A,#60H,SWS1;是否到60分, 否则返回MOV A,#00HSWS1: MOV R5,A·SW AP AANL A,#0FHMOV 44H,AMOV A,R5ANL A,#0FHMOV 43H,ALCALL AAAPOP ACCMOV 51H,ACJNE A,#60H,RETURNMOV 51H,#00H ;满60分, 分单元清零MOV A,#01H ;时单元加1ADD A,52HDA APUSH ACCCJNE A,#24H,SWS2 ;是否到24小时, 否则返回MOV A,#00HSWS2: MOV R5,ASW AP AANL A,#0FHMOV 47H,AMOV A,R5ANL A,#0FHMOV 46H,ALCALL AAAPOP ACCMOV 52H,ACJNE A,#24H,RETURNMOV 52H,#00H ;满24小时, 时单元清零RETURN:POP PSWPOP ACCRETIAAA: MOV R0,#40H ;计数器的值赋MOV R1,#60H ;给显示空间MOV R5,#08HABC: MOV A,@R0MOV @R1,AINC R1INC R0DJNZ R5,ABCMOV R0,#BUFFERLCALL Display8RETEND六、思考题1.电子钟走时精度与哪些有关系?中断程序中给TL0赋值为什么与初始化程序中不一样?2、使用定时器方式二, 重新编写程序。
单片机电子钟实验报告单片机电子钟实验报告引言:单片机是一种集成电路,具有微处理器的功能。
它广泛应用于各种电子设备中,包括电子钟。
在这个实验中,我们通过使用单片机和其他电子元件,成功地制作了一台电子钟。
本报告将详细介绍我们的实验过程、结果和总结。
实验目的:我们的实验目的是设计和制作一台精确可靠的电子钟。
通过这个实验,我们希望了解单片机的基本原理和应用,同时提高我们的电路设计和焊接能力。
实验步骤:1. 准备工作:我们首先收集了所需的材料和工具,包括单片机、晶振、电容、电阻、显示器等。
然后,我们仔细阅读了单片机的技术规格和电路图。
2. 电路设计:根据单片机的技术规格和电路图,我们开始设计电路。
我们确定了电源电压、电路连接方式和元件数值。
然后,我们使用仿真软件验证了我们的设计。
3. 焊接电路板:在确认电路设计无误后,我们开始焊接电路板。
我们小心翼翼地将元件焊接到电路板上,并确保焊接点牢固可靠。
焊接完成后,我们使用万用表对焊接点进行了测试。
4. 编程:接下来,我们使用C语言编写了单片机的程序。
我们根据电路的功能需求,编写了显示时间、闹钟设置、闹钟响铃等功能的代码。
然后,我们使用编程器将程序烧录到单片机中。
5. 调试:在完成编程后,我们对电路进行了调试。
我们逐一测试了各个功能,确保电子钟的正常运行。
我们检查了显示、闹钟和时间设置等功能,并进行了一系列的测试。
实验结果:经过我们的不懈努力,我们成功地制作了一台功能完善的电子钟。
它能够精确显示时间,并具备闹钟功能。
在我们的测试中,电子钟的运行稳定,显示清晰可见。
实验总结:通过这个实验,我们深入了解了单片机的工作原理和应用。
我们学会了电路设计、焊接和编程等技能。
通过实际操作,我们提高了自己的动手能力和问题解决能力。
然而,我们也遇到了一些挑战。
在焊接电路板时,我们需要小心操作,以避免短路或焊接不牢固。
在编程过程中,我们需要仔细调试,以确保程序的正确性。
在未来的学习中,我们将进一步探索单片机的应用领域,并不断提高自己的技术水平。
单片机电子时钟实验报告一、实验目的:1.了解单片机的基本知识和工作原理;2.掌握单片机的时钟生成方法;3.实现一个基本的电子时钟。
二、实验器材:1.STC89C52单片机开发板;2.LCD1602液晶显示屏;3.外部晶体振荡器;4.面包板、杜邦线等。
三、实验原理:单片机是由一个集成电路芯片组成的微型计算机系统。
它具有高度集成和灵活应用的特点,被广泛应用于各种电子设备中。
STC89C52是一种常见的单片机,具有可编程的特点,可以通过编写程序实现各种功能。
为了实现电子时钟功能,我们需要了解单片机的时钟生成方法。
单片机一般内部包含一个振荡器电路,通过外部晶体振荡器提供的时钟信号来控制单片机的工作速度。
具体实现时钟功能需要通过编写程序生成一个固定频率的脉冲信号,并通过控制液晶显示屏显示当前的时间。
四、实验步骤:1.将STC89C52单片机开发板、液晶显示屏、外部晶体振荡器等连接起来,按照电路图进行布线。
2.编写程序,通过设置定时器,生成1毫秒的定时中断信号。
在中断程序中,获取当前的系统时间,并进行相应的显示。
4.观察液晶显示屏,检查是否显示当前的时间,如正常显示,则实验成功。
五、实验结果与分析:经过实验,我们成功实现了一个简单的电子时钟。
液晶显示屏能够正常显示当前的时间,而且精度较高。
实验过程中,我们对单片机的工作原理和编程方法有了更深入的了解。
六、实验心得与体会:通过这次实验,我掌握了单片机的基本知识和工作原理,并实际编写了一个电子时钟程序。
通过实际操作,我对单片机的应用有了更深入的理解,也提高了动手能力和解决问题的能力。
在今后的学习和工作中,我将继续深入学习单片机的原理和应用,不断提高自己的技术水平。
单片机课程设计报告电子时钟单片机课程设计报告电子时钟随着科技的发展,电子产品已经成为人们日常生活不可或缺的一部分,电子时钟也是其中一个重要的产品。
电子时钟主要通过计算机技术来实现时间的显示和调节,而单片机是一种高速度、高可靠性的计算机芯片,通过单片机技术来设计和制作电子时钟,不仅可以提高产品的性能和稳定性,还可以实现更多的功能。
设计目的这个单片机课程设计的目的是通过使用单片机技术来设计一款电子时钟,具体实现以下功能:1. 显示时间:电子时钟能够准确地显示当前的时间,包括小时、分钟、秒钟,同时可以根据需要进行调整。
2. 显示日期:电子时钟也可以显示当前的日期,包括年、月、日。
3. 闹钟功能:电子时钟具有闹钟功能,可以设置闹铃时间,提醒用户特定时间。
4. 睡眠功能:电子时钟还具有睡眠功能,可以设置睡眠时间,使用户在睡眠中就可以关闭闹钟。
设计原理电子时钟的原理是通过单片机技术和电路设计实现。
主要包括三个部分:时钟模块、驱动模块和输入输出模块。
1. 时钟模块电子时钟的时钟模块是最核心的部分,它决定了电子时钟的准确度和稳定性。
一般使用DS1302作为时钟模块,DS1302是一块低功耗时钟芯片,能够提供祥细和稳定的计时功能。
2. 驱动模块驱动模块是电子时钟控制显示的关键部分,通过使用七段LED数字显示器,以及驱动芯片74HC595来控制LED显示器的亮度和显示。
74HC595是一种串行输入并行输出的芯片,可以通过控制引脚来输出对应的电路信号。
3. 输入输出模块输入输出模块是电子时钟中用户进行设置和操作的关键部分,它支持用户与电子时钟进行通信,包括根据用户的操作来控制时钟、日期、闹钟等功能。
例如,用户可以通过按键控制输入模块来实现时钟、日期、闹钟等的选项设置。
设计步骤设计电子时钟的步骤主要包括以下几个方面。
1. 确定电路需求:首先需要明确电子时钟具备哪些特性功能,例如显示日期、时间、使用闹钟等。
2. 电路设计:根据电子时钟设计需求,设计时钟模块、驱动模块和输入输出模块的电路,包括使用电路图工具进行和PCB设计。
(一)实验目的通过电子时钟综合设计,使学生学会利用8051 定时器时间计时处理功能,了解按键扫描及控制LED 数码管显示原理,掌握单片机和按键以及LED 数码管硬件电路设计及控制程序的设计方法。
思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高学生解决实际问题的能力。
(二)设计任务及要求利用实验平台上4 个LED 数码管,设计带有闹铃功能的数字时钟,要求:1.在4 位数码管上显示当前时间。
显示格式“时时分分”2.由LED 闪动做秒显示。
3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。
当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
(三)工作原理及设计思路利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。
其显示电路如图1图1闹铃声由交流蜂鸣器产生,电路如图2,当P1.7输出不同频率的方波,.蜂鸣器便会发出不同的声音。
VCC图2(四)设计框图(五)源程序#include<reg52.h> //包含单片机寄存器的头文件sbit led1=P1^0;sbit led2=P1^2;sbit led5=P1^5;sbit du=P2^6;//段选sbit we=P2^7;//位选sbit s1=P3^4;sbit s2=P3^5;sbit s3=P3^6;sbit s4=P3^7;sbit beep=P2^3;sbit dot=P0^7;unsigned char shi,fen,miao,unit,keyv,key,av,ashi,afen,amiao;void delay() //1ms{unsigned char a,b;for(b=102;b>0;b--)for(a=3;a>0;a--);}void delay5(void) //误差 5ms{unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--);}void delayhalf (void) //误差 0.5s{unsigned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}void display( unsigned char h,f,s){Unsignedchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x38};unsigned char code mawei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char shiwan,wan,qian,bai,shi,ge;shiwan=h/10;wan=h%10;qian=f/10;bai=f%10;shi=s/10;ge=s%10;P0=duma[shiwan];du=1;du=0;P0=mawei[0];we=1;we=0;delay();P0=duma[wan]; dot=1;du=1;du=0;dot=0;P0=mawei[1];we=1;we=0;delay();P0=duma[qian]; du=1;du=0;P0=mawei[2]; we=1;we=0;delay();P0=duma[bai];dot=1;du=1;du=0;dot=0;P0=mawei[3];we=1;we=0;delay();if(key!=1&&key!=2) {P0=duma[shi];du=1;du=0;P0=mawei[4];we=1;we=0;delay();P0=duma[ge];du=1;du=0;P0=mawei[5];we=1;we=0;delay();}if(key==1||key==2)// {P0=duma[10];du=1;du=0;P0=mawei[4];we=1;we=0;delay();P0=duma[11];du=0;P0=mawei[5];we=1;we=0;delay();}P0=0xff;we=1;we=0;}//////////////////////// passtime(){if(unit==100){miao++;unit=0;led1=!led1;led2=!led2;}if(miao==60){fen++;miao=0;}if(fen==60){fen=0;}if(shi==24){shi=0;}}////////////////////////////////////// void InitTimer0(void)//10ms{TMOD = 0x01;TH0 = 0x0DC;TL0 = 0x00;EA = 1;ET0 = 1;TR0 = 1;unit=0;}void Timer0Interrupt(void) interrupt 1 {TH0 = 0x0DC;TL0 = 0x00;unit++ ;//add your code here! passtime();}void adjustment(void){if(s1==0){delay5();if(s1==0){while(!s1);amiao=0;key++;led5=0;if(key==5){key=0;TR0=1;led5=1;}}}//////s1 countif(s2==0){delay5();if(s2==0){while(!s2);if(key==1)//alram {ashi++;if(ashi==24){ashi=0; }}if(key==2){afen++;if(afen==60) {afen=0; }}//alramif(key==4)///// {miao=0;TR0=0;fen++;if(fen==60) {fen=0;}}if(key==3)///{miao=0;TR0=0;shi++;if(shi==24)shi=0;}}}}//adj +///////////////////adj-if(s3==0){delay5();if(s3==0){while(!s3);if(key==1)//alram {ashi--;if(ashi==-1){ashi=23;}}if(key==2){afen--;if(afen==-1){afen=59;}//alramif(key==4)// {miao=0;TR0=0;fen--;if(fen==-1) {fen=59; }}if(key==3)/// {miao=0;TR0=0;shi--;if(shi==-1) {shi=23; }}}}//adj -}/////////////////void alarm(void){if(fen!=afen){av=0;}if(av==0){if(shi==ashi&&fen==afen){beep=0;delayhalf();beep=1;delayhalf();beep=0;delayhalf();beep=1;delayhalf();}}//av==0}/******************************************************* 主函数********************************************************/void main(void){ashi=7;afen=0;InitTimer0();led2=0;while(1){if(keyv==0)//close display {if(s4==0){delay5();if(s4==0){while(!s4);keyv=1;av=1;}}}if(keyv==1){if(s4==0){delay5();if(s4==0){while(!s4);keyv=0;}}}//close displayif(keyv==0){adjustment();if(key!=1&&key!=2){display(shi,fen,miao);}if(key==1||key==2){display(ashi,afen,amiao);}}if(key==0||key==3||key==4){alarm();}}//while}(六)总结这次课程设计,我觉得十分有意义,在完成过程中,我不仅加强了对51单片机汇编语言编程的学习,而且还学习了使用proteus仿真工具对单片机电路进行仿真,同时,还对实际的硬件电路的设计、实现以及故障的检查和排除有了深刻的认识。
这次的课程设计对我来说,是一次学习理论知识,锻炼思维能力,提高动手能力的很好的经历。