51单片机电子时钟课程设计实验报告

合集下载

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。

单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。

该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。

STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

单片机电子时钟课程设计报告

单片机电子时钟课程设计报告

单片机电子时钟课程设计报告一、设计目的。

本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。

通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。

二、设计原理。

本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。

利用数码管来显示小时和分钟,通过按键来调整时间。

同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。

三、设计方案。

1. 硬件设计。

(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。

(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。

(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。

(4)按键输入,设计按键来调整时间,包括调整小时和分钟。

(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。

2. 软件设计。

(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。

(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。

(3)按键处理,设计按键扫描程序,实现对时间的调整。

(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。

四、设计实现。

1. 硬件实现。

根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。

2. 软件实现。

编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。

五、实验结果。

经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。

六、总结与展望。

通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。

在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。

同时,也为学生今后的科研和创新工作奠定了良好的基础。

51单片机电子时钟课程设计实验报告

51单片机电子时钟课程设计实验报告

《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号: 13 29班级:自动化1211指导老师:阮海容目录1.题目与主要功能要求 (2)2.整体设计框图及整机概述 (3)3.各硬件单元电路的设计、参数分析及原理说明 (3)4.软件流程图和流程说明 (4)5.总结设计及调试的体会 (10)附录1.图一:系统电路原理图 (11)2.图二:系统电路 PCB (12)3.表一:元器件清单 (13)4.时钟程序源码 (14)题目:单片机电子时钟的设计与实现课程设计的目的和意义课程设计的目的与意义在于让我们将理论与实践相结合。

培养我们综合运用电子课程中的理论知识解决实际性问题的能力。

让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。

课程设计的基本任务利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。

主要功能要求最基本要求1)使用MCS-51单片机设计一个时钟。

要求具有6位LED显示、3个按键输入。

2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。

3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。

开始计时时为000000,到235959后又变成000000。

4)使用3个键分别作为小时、分、秒的调校键。

每按一次键,对应的显示值便加1。

分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。

在调校时均不向上一单位进位 (例如分加到59后变为00,但小时不发生改变)。

5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。

51单片机电子时钟设计报告

51单片机电子时钟设计报告

电子时钟实验报告全部代码在文档末尾:51 单片机,LCD1602 液晶显示屏平台下编程实现,可直接编译运行目录:一,实验目的. (1)二,实验要求. (2)三,实验基本原理. (2)四,实验设计分析. (2)五,实验要现. (3)A.电路设计 (3)1.整体设计 (3)2.分块设计 (4)输入部分 (4)输出部分 (5)晶振与复位电路 (6)B.程序设计 (6)程序总体设计 (6)程序主要模块 (7)五. 实验总结及感想 (7)一,实验目的20 世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。

对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以电子钟是以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,得到了广泛的使用。

1.学习8051定时器时间计时处理、按键扫描及LCD液晶显示的设计方法。

2.设计任务及要求利用实验平台上LCD1602液晶显示屏,设计带有闹铃功能的数字时钟二,实验要求A.基本要求:1.在LCD1602液晶显示屏上显示当前日期,时间。

2.利用按键可对时间及闹玲进行设置,并可显示设置闹玲的时间。

闹玲时间到蜂鸣器发出声响,一分钟后闹铃停止。

B.扩展部分:1.日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并调整)实现年月日时分秒的调整,星期准确的随着日期改变而改变进行显示。

2.定时功能(设定一段时间长度,定时到后,闹铃提示)C.可扩展部分:1.闹铃重响功能(闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响时间的间隔可调)2.可进行备忘录提示,按照年月日,可在设定的某年某月进行闹铃提示。

单片机电子时钟课程设计报告

单片机电子时钟课程设计报告

单片机电子时钟课程设计报告一、引言。

随着科技的不断发展,电子产品已经渗透到我们生活的方方面面。

其中,电子时钟作为一种常见的电子产品,被广泛应用于各个领域。

本课程设计旨在通过单片机技术,设计并实现一个功能强大、稳定可靠的电子时钟,以满足人们对精准时间的需求。

二、设计方案。

1. 硬件设计。

本课程设计选用了51单片机作为核心处理器,配合数码管显示模块、时钟芯片等外围器件,构成了电子时钟的硬件平台。

通过对硬件电路的设计和布线,实现了对时间的精准显示和控制。

2. 软件设计。

在软件设计方面,本课程设计采用了C语言作为编程语言,利用单片机的定时器、中断等功能模块,编写了精确的时钟控制程序。

通过对时钟的分、秒、小时的精准控制,实现了电子时钟的正常运行和显示。

三、功能实现。

1. 时间显示。

经过精心设计的软件程序,实现了对时间的精准显示。

时钟的显示界面清晰明了,数字显示稳定可靠,能够满足人们对时间的基本需求。

2. 时间调整。

通过设置按键,可以对时钟进行时间的调整。

用户可以根据实际需求,随时对时钟的时间进行调整,保证时钟的准确性。

3. 闹铃功能。

本课程设计还实现了闹铃功能,用户可以通过设置闹铃时间,让时钟在设定的时间点发出提示音,提醒用户重要事件的发生。

四、实验结果。

经过实际测试,本课程设计的电子时钟能够稳定可靠地运行,显示精准,功能完善。

时钟的硬件和软件设计均达到了预期的要求,符合设计的初衷和要求。

五、总结与展望。

本课程设计通过对单片机电子时钟的硬件和软件设计,成功实现了一个功能强大、稳定可靠的电子时钟。

但是,仍有一些功能可以进一步完善和优化,比如增加温湿度显示功能、实现无线时间校准等。

未来,我们将继续努力,不断完善电子时钟的功能,为人们的生活带来更多的便利。

六、参考文献。

[1] 《单片机原理与接口技术》,XXX,XXX出版社,2008。

[2] 《C语言程序设计》,XXX,XXX出版社,2010。

七、致谢。

感谢所有为本课程设计提供帮助和支持的老师和同学们,在他们的帮助下,本课程设计得以顺利完成。

基于51单片机汇编语言的数字钟课程设计报告(含有闹钟万年历)

基于51单片机汇编语言的数字钟课程设计报告(含有闹钟万年历)

单片微型计算机课程设计报告多功能电子数字钟姓 名 许伟敏学 号 060301021124班 级 电气二班指导教师 林卫2009-06-25目录一:概述 (1)二:设计基本原理简介 (2)三:设计要求及说明 (3)四:整体设计方案 (4)系统硬件电路设计 4系统软件总流程设计 5模块划分及分析 6五:单模块流程设计 (8)各模块设计概述、流程图 8模块源程序集合及注释 13六:单模块软件测试 (23)七:系统检测调试 (24)硬件电路调试软件部分烧写调试八:系统优化及拓展 (26)九:心得体会 (28)单片微型计算机课程设计 基于汇编语言的电子数字钟 概述课程设计流程图↑一、概述课程设计题目:电子数字钟应用知识简介:● 51单片机单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。

51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。

在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。

● 汇编语言汇编语言是一种面向机器的计算机低级编程语言,通常是为特定的计算机或系列计算机专门设计的。

汇编语言保持了机器语言的优点,具有直接和简捷的特点,其代码具有效率高实时性强等优点。

但是对于复杂的运算或大型程序,用汇编语言编写将非常耗时。

汇编语言可以与高级语言配合使用,应用十分广泛。

● ISPISP (In-System Programming )在系统可编程,是当今流行的单片机编程模式,指电路板上的空白元器件可以编程写入最终用户代码,而不需要从电路板上取下元器件。

已经编程的器件也可以用ISP 方式擦除或再编程。

本次课程设计便使用ISP 方式,直接将编写好的程序下载到连接好的单片机中进行调试。

51单片机电子时钟设计报告

51单片机电子时钟设计报告

51单片机电子时钟设计报告一、引言电子时钟是一种常见的电子产品,它通过控制数字显示器的数字显示,来实现时间的显示功能。

本报告将介绍一种基于51单片机的电子时钟设计方案。

二、系统架构本电子时钟系统采用分级结构,分为实时时钟电路、中央处理器、显示器等核心模块。

实时时钟电路模块负责提供系统的时钟信号,中央处理器负责对时间进行处理和控制,显示器用于显示时间。

三、硬件设计1.实时时钟电路实时时钟电路采用DS1302芯片,该芯片集成了时钟实时计数器,能够提供精确的时钟信号。

同时,芯片还内置了电池供电电路,当外部电源中断时,电子时钟可以通过电池继续工作。

2.中央处理器中央处理器使用51单片机,它具有较强的计算和控制能力,可以方便地对时间进行处理和控制。

通过与实时时钟电路的通信,中央处理器可以获取当前时间,并进行各种计算操作。

3.显示器显示器采用数码管,可以直观地显示时间。

通过中央处理器控制,可以实现小时、分钟、秒钟的显示,并且可以进行亮度的调节。

四、软件设计1.时钟管理中央处理器的软件主要负责对时间的管理。

它可以从实时时钟电路中获取当前时间,并根据需要进行时间的累加和更新。

同时,中央处理器还可以通过按键实现时间的手动调节。

2.显示控制中央处理器通过对数码管的控制,实现时间的显示功能。

它可以根据当前时间的变化,动态地更新数码管的显示内容。

同时,还可以通过按键控制,对数码管的亮度进行调节。

五、系统特点1.精确性高:采用DS1302芯片实时时钟电路,能够提供精确的时钟信号,确保时间的准确性。

2.易于操作:中央处理器软件通过按键实现时间的调节,操作简单方便。

3.显示效果好:采用数码管进行显示,显示效果清晰,易于观察时间。

六、应用领域本电子时钟设计适用于各种需要显示时间的场景,如家庭、办公室、学校等。

七、总结本报告介绍了一种基于51单片机的电子时钟设计方案。

通过实时时钟电路提供精确的时钟信号,中央处理器进行时间管理和控制,显示器进行时间的显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计目录1.题目与主要功能要求 (2)2.整体设计框图及整机概述 (3)3.各硬件单元电路的设计、参数分析及原理说明 (3)4.软件流程图和流程说明 (4)5.总结设计及调试的体会 (10)附录1.图一:系统电路原理图 (11)2.图二:系统电路PCB (12)3.表一:元器件清单 (13)4.时钟程序源码 (14)题目:单片机电子时钟的设计与实现课程设计的目的和意义课程设计的目的与意义在于让我们将理论与实践相结合。

培养我们综合运用电子课程中的理论知识解决实际性问题的能力。

让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。

课程设计的基本任务利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。

主要功能要求最基本要求1)使用MCS-51单片机设计一个时钟。

要求具有6位LED显示、3个按键输入。

2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。

3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。

开始计时时为000000,到235959后又变成000000。

4)使用3个键分别作为小时、分、秒的调校键。

每按一次键,对应的显示值便加1。

分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。

在调校时均不向上一单位进位 (例如分加到59后变为00,但小时不发生改变)。

5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。

6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。

7)掌握硬件和软件联合调试的方法。

8)完成系统硬件电路的设计和制作。

9)完成系统程序的设计。

10)完成整个系统的设计、调试和制作。

11)完成课程设计报告。

基本要求1)实现最基本要求的1~10部分。

2)键盘输入可以控制电子时钟的走时/调试。

3)设计键盘输入电路和程序并调试。

4)掌握键盘和显示配合使用的方法和技巧。

提高发挥部分1)另设三个键,分别作小时、分、秒的减1调校。

2)在以上设计的基础上,修改程序制作一个电子秒表。

分、秒各占用2位显示,1/10秒、 1/100秒各占用1位显示。

设定二个键分别作启动/停止、清零(清零应在停止后有效)。

3)在做完(2)后,将时钟与秒表合二为一,并且在同时使用时互不影响,即可在时钟与秒表之间任意切换,而不影响走时、计秒。

整体设计框图及整机概述整体设计框图整机概述1)开机为走时模式,正常显示时间。

在此模式下,时钟可调。

2)共设置7个按键,分别为模式键、功能键、加一键、减一键、复位键、秒表启动键、秒表复位键。

按动模式键,模式将在‘走时/调时/显示及秒表显示及调整’2个模式下切换。

3)在时钟模式下,功能键选择是正常走时,还是进入调试(时、分、秒)模式。

4)按动加一键可以将值(时、分、秒)加一。

5)按动减一键可以将值(时、分、秒)减一。

6)按动秒表中开始/暂停按键可以随时控制秒表的开始和停止。

7)按动秒表中清零按键时,秒表计的数就会被清除(只有在秒表停止了以后)。

8)按下复位键后,无论是任何状态都会从新开始。

9)开机时钟与闹钟都为00:00:00。

各硬件单元电路的设计、参数分析及原理说明电源电路元件有限没有制作电源电路部分。

使用9V的电池经过7805稳压后进行供电。

按键参考书本P232的键盘接口电路原理图,P3口(除去P3.6)接的是键盘按键。

当按键按下后,P3口被拉成低电平,给单片机一个信号,使单片机产生一个中断。

单片机再指令相应的P0口,P2口产生变化。

单片机最小系统参考实验指导书与课本及网络资料设计按键电平复位。

LED数码管首先P0口作为段码输出。

由于P0口输出级无上拉电阻,故需添加一排阻为其上拉电阻。

其次采用共阳极数码管。

段码端为低电平时导通LED,此时数码管向89S51芯片P0口灌电流,为防止芯片烧坏,还需加1个1 KΩ的限流电阻。

考虑到数码管的亮度问题,采用了PNP三极管做驱动电路。

基极接上1 KΩ电阻后再与P2口相连(P2.0~P2.5)进行位选。

发射极接5V电源,集电极接数码管位选。

软件流程图和流程说明软件流程图1)主程序流程图流程图说明初始化:包括定时器赋初值,初始化各内存单元。

开定时器中断,开CPU中断。

时间显示及调整子程序与秒表显示及调整子程序流程图与调时模式子程序大同小异。

总结设计及调试体会硬件设计部分:首先要通过计算与参考资料等决定参数。

而后通过仿真软件等调试,确定参数无误后再开始用AD画原理图,进而生成PCB进行布板。

在焊板子的时候,也出现了问题,不小心将7805焊成了7905,结果又调试了一个时间。

软件设计部分:设计软件首先要考虑要做的功能,确定出合理的算法。

合理的算法不仅要可以实现功能,而且在添加功能的时候要方便灵活。

有的人为了实现某种功能用了各种各样的方法来实现,结果程序结构吃死,当想要添加功能或者修改其他功能的时候,将修改程序大部分结构,也就是说要破坏程序现有的结构。

关于调试:Keil软件调试单片机程序的时候,编译通过并不代表程序是正确的。

编译通过只能说明程序没有语法上的错误。

进行软件仿真或者下载到开发板上进行调试,经常会出现各种各样的错误。

许多超出预期效果的现象往往是一些微小错误引起的。

例如没有现场保护跟恢复现场等,所以养成良好的编程习惯也很重要。

有些想达成某些功能而添加的语句,实际上确一点效果也没有。

举个编程中的小问题:当有按键按下时,我们都要有软件防抖。

正常的方法是调用一个延时。

在实际调试中,要跳过这个抖动,需要100MS左右。

如果使用正常的延时,会导致按键按下时CPU100MS内无法进行其他操作,也就是说。

平均1S内100MS不调用显示子程序,这样就会导致亮度降低。

这时候,考虑到显示子程序一次有十几毫秒,就特别写了一个程序来作为按键防抖的延时,实际上效果也是很不错的。

这个想法就是在修改了多次程序未达到想要的效果(有按键按下时显示亮度不降低)后最终想出来的办法。

最后在做完板,焊完电路后,在接通电源之前,要用万用表仔细检查电路是否有连接错,以免烧坏芯片和数码管。

设计课设的其他体会:态度要积极,不要认为很简单就不紧不慢。

很多东西并不是自己设想的那么顺利,有时候一个小问题可以花上你半天甚至一天的时间。

虽然自己在程序上并没遇到太大的问题,但是因为态度不够积极,对于没画过的PCB图迟迟不去下手,在周四晚上才解决。

本以为周五一天可以做完板并完成整机调试,可是各种突发事件让自己措手不及。

发现板来不及做完后才将程序功能进行扩展。

这是我在这次实验中的一个教训,也让我明白了对于自己不能太过于自信,态度决定一切。

图一:系统电路原理图图二:系统电路PCB在protues中调试的结果在开发板上实现的效果(见实物)在焊的PCB板子上效果(见实物)在protues里的仿真以及在开发板上实现和自己做实物所看到的现象是不一样的。

在protues里不用接三极管(NPN)就可以实现效果,但是在自己做板子的时候就不行了,因为51单片机的输出的电流不能驱动数码管发光,需要一个增加驱动的9014三极管。

另外,protues里的复位按键不起作用(软件里就是这样设计的)。

将在PCB上实现的程序用在开发板上又出现了问题,delay(3)这个延时子程序不合理,出现了闪烁的问题,所以将delay(3)改成了delay(1),这样问题就解决了。

我是将三极管加在了段选上,又加了限流电流,这样做数码管也能点亮。

另一方面,一样的程序用在不同的显示上,现象也是不一样的。

所以,我需要不断地修正定时器的装值。

TH1=(65536-49997)/256; //重装初值TL1=(65536-49997)%256;TH0=(65536-8000)/256;TL0=(65536-8000)%256;经过实际测量,这个数值是最合适的,一个小时一秒不差。

表一:元器件清单时钟程序源码# include <reg51.h># define uchar unsigned char# define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit led=P1^1; //指示灯sbit qiehuan_key=P3^7;//秒表和时钟模式切换按键sbit sp_key=P3^4; //秒表中开始/暂停按键sbit clf_key=P3^5; //秒表中清零按键sbit func_key=P3^1; //时钟换位按键(时、分、秒)sbit add_key=P3^2; //时钟加1按键sbit sub_key=P3^3; //时钟减1按键uchar k1_bit=0; //切换按键标志位ucharshi1,shi2,fen1,fen2,miao1,miao2,fen3,fen4,miao3,miao4,num9,num10;uint num1,num2,num3,num4,num5,num6,num7,num8,num11;void delay(uint xms) //延时函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void init() //中断初始化函数{EA=1; //开总中断TMOD=0X11; //定时器工作方式选择,定时器0和定时器1都选择第1种工作方式TH0=(65536-10000)/256; //定时器0装初值,定时10ms (用于秒表)TL0=(65536-10000)%256;ET0=1; //开定时器0开关TR0=0; //开定时器0小开关TH1=(65536-50000)/256; //定时器1装初值,定时50ms (用于时钟)TL1=(65536-50000)%256;ET1=1; //开定时器1开关TR1=1; //关定时器1小开关}void mode_key() //模式选择键,本程序两种模式,分别是时间显示、秒表。

当K1_bit为0时显示时钟,为1时进入秒表{if(qiehuan_key==0){delay(5);if(qiehuan_key==0){k1_bit++;if(k1_bit==2){k1_bit=0;}while(!qiehuan_key);}}}void display1(uchar shi1,uchar shi2,uchar fen1,uchar fen2,uchar miao1,uchar miao2) //显示时钟函数{shi1=num1/10;shi2=num1%10;fen1=num2/10;fen2=num2%10;miao1=num3/10;miao2=num3%10;P2=0xff;P0=table[shi1]; //第一位P2=0xfe;delay(3);P2=0xff;P0=table[shi2]; //第二位P2=0xfd;delay(3);P2=0xff;P0=0x40; // 第三位P2=0xfb;delay(3);P2=0xff;P0=table[fen1]; //第四位P2=0xf7;delay(3);P2=0xff;P0=table[fen2]; // 第五位P2=0xef;delay(3);P2=0xff;P0=0x40; // 第六位P2=0xdf;delay(3);P2=0xff;P0=table[miao1]; //第七位P2=0xbf;delay(3);P2=0xff;P0=table[miao2]; //第八位P2=0x7f;delay(3);P2=0xff;}void display0(uchar fen3,uchar fen4,uchar miao3,uchar miao4,uchar num9,uchar num10) //显示秒表函数{fen3=num8/10;fen4=num8%10;miao3=num7/10;miao4=num7%10;num9=num6;num10=num5;P2=0xff;P0=table[fen3]; //第一位P2=0xfe;delay(3);P2=0xff;P0=table[fen4]; //第二位P2=0xfd;delay(3);P2=0xff;P0=0x40; // 第三位P2=0xfb;delay(3);P2=0xff;P0=table[miao3]; //第四位P2=0xf7;delay(3);P2=0xff;P0=table[miao4]; // 第五位P2=0xef;delay(3);P2=0xff;P0=0x40; // 第六位P2=0xdf;delay(3);P2=0xff;P0=table[num9]; //第七位P2=0xbf;delay(3);P2=0xff;P0=table[num10]; //第八位P2=0x7f;delay(3);P2=0xff;}void key_miaobiao(){if(k1_bit==1){if(sp_key==0){delay(5);if(sp_key==0){TR0=~TR0;while(!sp_key)display0(fen3,fen4,miao3,miao4,num9,num10);}}if(TR0==0){led=0;if(clf_key==0){delay(5);if(clf_key==0){led=1;while(!clf_key){num5=num6=num7=num8=0; }}}}}}void keyscan() //时钟按键扫描{if(func_key==0){delay(5);if(func_key==0){led=0;num11++;while(!func_key);if(num11==1){TR1=0;}if(num11==2) {TR1=1;}if(num11==3) {TR1=1;}if(num11==4) {num11=0;TR1=1;}}}if(num11!=0){if(add_key==0) {delay(5);if(add_key==0) {while(!add_key); if(num11==1) {num3++;if(num3==60) num3=0;}if(num11==2) {num2++;if(num2==60)num2=0;}if(num11==3) {num1++;if(num1==24) num1=0;}}}if(sub_key==0) {delay(5);if(sub_key==0) {while(!sub_key); if(num11==1){num3--;if(num3==-1) num3=59;}if(num11==2) {num2--;if(num2==-1) num2=59;}if(num11==3) {num1--;if(num1==-1) num1=23;}}}}}void main(){init();led=0;while(1){mode_key();switch(k1_bit) //模式选择{case 0:{display1(shi1,shi2,fen1,fen2,miao1,miao2); //显示时间keyscan();break;}case 1:{display0(fen3,fen4,miao3,miao4,num9,num10); //显示秒表key_miaobiao(); //扫描秒表操作break;}}}}void Time1() interrupt 3 //定时器1函数(时钟){TH1=(65536-49997)/256; //重装初值TL1=(65536-49997)%256;num4++;if(num4==20){num4=0;num3++;if(num3==60) //秒针{num3=0;num2++;if(num2==60) //分针{num2=0;num1++;if(num1==24) //时针num1=0;}}}}void Time0() interrupt 1 //定时器0函数(秒表){TH0=(65536-8000)/256; //重装初值TL0=(65536-8000)%256;num5++;if(num5==10){num5=0;num6++;if(num6==10){num6=0;num7++;if(num7==60){num7=0;num8++;if(num8==60) {num8=0;}}}}}。

相关文档
最新文档