单片机电子时钟(LCD显示)综合实验报告

合集下载

单片机电子时钟实验报告

单片机电子时钟实验报告

单片机电子时钟实验报告一、实验任务及要求在焊接的电路板中,4个LED数码管,设计带有闹铃功能的数字时钟,要求:1、在4位数码管上显示当前时间。

显示格式“时时分分”;2、由LED闪动做秒显示;3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。

当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。

二、方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:本方案完全用软件实现数字时钟。

原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现5毫秒定时中断,每产生一次中断,存储器内相应的计数值加1;若计数值达到200,则将其清零,并将方案一:静态显示。

所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8 位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。

显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。

调整参数可以实现较高稳定度的显示。

动态显示节省了I/O 口,降低了能耗。

单片机_电子时钟(LCD显示)课程设计报告

单片机_电子时钟(LCD显示)课程设计报告

课程设计报告课程名称单片机题目电子时钟(LCD显示)学生指导教师年级 2018级专业计算机科学与技术二级学院信息工程学院信息工程学院2020年12 月23 日《单片机》课程设计任务书摘要本设计使用11.0592MHz晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用LCD1602的并行操作方式显示。

通过使用该单片机,实现将时间显示在LCD1602液晶上,并且按秒实时更新。

AT89C51单片机功耗小,电压可选用4~6V电压供电。

通过板子上的按键可随时调节时钟的时、分,按键设计4个有效按键,分别有开始设置键、设置小时键、设置分钟键、确认设置键盘,通过使用中断定时器进行计时,实现时间显示。

针对LCD液晶显示屏,设置了初始化函数,数据传送函数及指令传送函数,进而实现LCD液晶显示屏显示功能。

在每次的按键按下时,LCD液晶显示屏会随之改变,进而实现功能。

关键词:AT89C51 电子时钟数码管按键目录1 概述 (1)1.1方案设计 (1)1.2设计目的 (1)1.3设计内容 (1)2.硬件设计 (1)2.1 元器件 (1)2.2 硬件 (2)3 软件设计 (3)3.1 主设计流程 (3)3.2 初始化流程图 (3)3.3 时间显示主程序 (5)4 调试结果分析 (6)4.1运行结果 (6)4.2仿真分析 (7)5 总结 (8)参考文献 (9)附录 (10)1 概述1.1方案设计(1)单片机选型选用AT89C51单片机,指令简单,易学易懂,外围电路简单,硬件设计方便,IO 口操作简单,成本低,程序烧写简单,对于设计开发非常实用。

(2)显示方案LCD液晶显示器是一种功耗极低的显示器件,它不仅省电,还能显示文字、曲线、图形等大量的信息,易于彩色化,所以采用LCD显示器来显示时间。

(3)计时方案利用AT89C51内部定时/计数器进行中断定时,配合软件延时实现时分秒的计时。

该方案可以节省硬件成本。

(4)按键设计系统采用独立式按键,共设计了四个按键,分别是“当前时间”、“分钟+”、“小时+”,用来设置校时功能,这样可以使电路更简单。

单片机液晶显示实验报告

单片机液晶显示实验报告

单片机液晶显示实验报告篇一:点阵液晶显示实验报告单片机实验课程名称:点阵液晶汉字显示实验授课班级:10自动化三班任课教师:文远熔计划学时:32学时实验组员:张腾耀梁钦赵福亮秦菱蔚郑欢王聪慧摘要本文介绍了PROTEUS与Keil联调开发51系列单片机应用系统的方法以及基于PROTEUS环境下的12864液晶显示的仿真设计。

将Keil C开发的程序用Proteus设计的仿真电路中交互运行调试的方法,设计12864的液晶显示汉字图像。

在基于PROTEUS环境下的12864液晶显示的仿真设计中,使用51芯片控制,然后显示在12864显示屏上,最多可显示4行每行8个汉字,并且可以通过按键随时改变12864显示屏上的内容。

通过Proteus环境下的温度报警器的仿真实验证明,在PROTEUS环境下可以完成单片机系统的硬件设计和软件调试,测试系统的性能,在实际应用中可以降低设计成本,缩短开发周期,提高效率。

关键词:Proteus;仿真;单片机;12864目录第一章绪论1.1实验任务和要求???????????????????????..11.2 基于Proteus的12864显示的研究???????????????.1 . 1.3 实验方案及原理??????????????????????..1第二章点阵液晶汉字显示的硬件部分2.1程序流程图?????????????????????????.2 2.2硬件电路图???????????????????????. 2.3芯片12864的简介?????????????????????第三章点阵液晶汉字显示的软件部分3.1 Keil简介??????????????????????????. 3.2 Proteus简介????????????????????????. 3.3 Proteus与Keil软件联合仿真的建立??????????????.第四章结论4.1实验总结??????????????????????????.附录1:点阵液晶汉字显示的源程序第一章绪论1.1 实验任务和要求用LCD128x64点阵液晶显示器显示指定汉字,最多可以显示4行、8个/行汉字,通过键盘可以随时改变显示的内容。

单片机电子时钟(LCD显示)综合实验报告

单片机电子时钟(LCD显示)综合实验报告

单片机综合实验报告题目:电子时钟(LCD)显示一、实验内容:以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:●使用字符型LCD显示器显示当前时间。

●显示格式为“时时:分分:秒秒”。

●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

●K1—进入设置现在的时间。

●K2—设置小时。

●K3—设置分钟。

●K4—确认完成设置。

程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。

二、实验电路及功能说明1)单片机主控制模块以AT89C51单片机为核心进行一系列控制。

2)时钟显示模块用1602为LCD显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。

测试成功后即可为实验所用,如图:3)时间调整电路用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

K1—进入设置现在的时间。

K2—设置小时。

K3—设置分钟。

K4—确认完成设置。

如图:三、实验程序流程图:主程序:时钟主程序流程子程序:四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。

6MHZ为和现实时间显示相同。

实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。

当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。

增加功能:进入时间设置并选择设置位置后K2键位数字增加功能,K3键为数字减小功能。

根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。

LCD显示的指针式电子钟

LCD显示的指针式电子钟

信息工程学院课程设计报告书题目: LCD显示的指针式电子钟专业:电子信息的科学与技术班级: 0311410学号: 031141012学生姓名:何标指导教师:高林2014年 5 月 15 日信息工程学院课程设计任务书2014年5月20 日信息工程学院课程设计成绩评定表目录1 任务提出与方案论证 (6)1.1设计要求 (6)1.2原理说明 (6)2 总体设计 (7)3 详细设计 (8)3.1 AT89C51单片机简介 (8)3.2时钟模块设计 (9)3.3 显示模块设计 (10)3.4 设置模块 (10)3.5 振荡电路 (10)3.6 复位设置 (11)4 总结 (12)参考文献 (13)附录仿真电路图 (14)摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

本设计就是应用单片机强大的控制功能制作而成的指针式电子钟,该指针式电子钟实现如下功能:液晶屏模拟表盘与时分秒指针显示当前时钟,K1键用于选择调节对象,K2键用于调整时分秒,在按下K4键时确定调节值,时钟继续运行。

本设计采用的是AT89C51单片机,AT89C51单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时。

芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。

显示器件采用PG12864LCD液晶,12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字。

单片机_实验名称:电子时钟

单片机_实验名称:电子时钟

实验名称:电子时钟20世纪末,电子技术获得飞速发展,在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

数字钟早已成为人们日常生活中的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、娱乐带来了极大的方便。

由于数字集成电路技术的发展以及采用了先进的石英技术,使得数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

尽管目前市场上已经有现成的集成电路芯片出售,价格便宜、使用方便,但是鉴于数字钟电路的基本组成包含了数字电路的主要组成部分,因此进行数字钟的研究,对我们对单片机的学习有着非常重要的意义。

单片机数字时钟具有编程灵活,便于电子钟功能的扩充,精度高等优点,同时还能用电子钟发出各种控制信号,本设计主要用8051单片机配合LED数码显示管、蜂鸣等器件,采用24小时计时方式,最小显示到分钟,通过LED灯的闪烁体现秒的计数,兼有闹钟的作用,以蜂鸣来体现闹钟时间的到达。

关键字:单片机汇编语言数字时钟实验设计一、实验目的1、学会应用8051定时器时间及时处理;2、学习按键扫描电路的应用;3、掌握LED数码管动态显示的设计方法;4、掌握汇编语言的简单编程。

二、实验任务及设计要求设计要求:利用实验平台上的4个LED数码管,设计带有闹铃功能的数字时钟。

1、在4位数码管上显示当前时间,计时格式为“时时分分”2、由LED闪烁做秒显示3、利用按键可以对时间及闹钟进行设置,并可显示闹铃时间。

当闹铃时间到蜂鸣器发出声响,按停止键可使闹铃声停止。

三、工作原理及设计思路1、综述:我们设计的该系统主要分为时钟计时、校时和闹钟三个模块。

利用单片机定时器完成计时功能,定时器1计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理60秒时分钟加1,60分钟时小时加1,小时达到24时,全部清零,重新计时。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基于单片机的电子时钟设计报告(LCD显示)

基于单片机的电子时钟设计报告(LCD显示)

单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。

功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。

2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路硬件设计电路图如下图所示:硬件电路原理图单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

用3个功能键操作来设置当前时间。

功能键K1~K4功能下。

K1—设置小时。

K2—设置分钟。

K3—设置秒。

程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。

2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。

3、参考电路硬件设计电路图如下图所示:硬件电路原理图基于AT89C51单片机的电子时钟设计报告一、设计要求与目的1)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间。

2)、使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

3)、用3个功能键操作来设置当前时间。

4)、熟悉掌握proteus编成软件以及keil软件的使用二、本设计原理本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。

单片机电子时钟实验报告

单片机电子时钟实验报告

单片机电子时钟实验报告一、实验目的:1.了解单片机的基本知识和工作原理;2.掌握单片机的时钟生成方法;3.实现一个基本的电子时钟。

二、实验器材:1.STC89C52单片机开发板;2.LCD1602液晶显示屏;3.外部晶体振荡器;4.面包板、杜邦线等。

三、实验原理:单片机是由一个集成电路芯片组成的微型计算机系统。

它具有高度集成和灵活应用的特点,被广泛应用于各种电子设备中。

STC89C52是一种常见的单片机,具有可编程的特点,可以通过编写程序实现各种功能。

为了实现电子时钟功能,我们需要了解单片机的时钟生成方法。

单片机一般内部包含一个振荡器电路,通过外部晶体振荡器提供的时钟信号来控制单片机的工作速度。

具体实现时钟功能需要通过编写程序生成一个固定频率的脉冲信号,并通过控制液晶显示屏显示当前的时间。

四、实验步骤:1.将STC89C52单片机开发板、液晶显示屏、外部晶体振荡器等连接起来,按照电路图进行布线。

2.编写程序,通过设置定时器,生成1毫秒的定时中断信号。

在中断程序中,获取当前的系统时间,并进行相应的显示。

4.观察液晶显示屏,检查是否显示当前的时间,如正常显示,则实验成功。

五、实验结果与分析:经过实验,我们成功实现了一个简单的电子时钟。

液晶显示屏能够正常显示当前的时间,而且精度较高。

实验过程中,我们对单片机的工作原理和编程方法有了更深入的了解。

六、实验心得与体会:通过这次实验,我掌握了单片机的基本知识和工作原理,并实际编写了一个电子时钟程序。

通过实际操作,我对单片机的应用有了更深入的理解,也提高了动手能力和解决问题的能力。

在今后的学习和工作中,我将继续深入学习单片机的原理和应用,不断提高自己的技术水平。

单片机实验报告 ——LCD1602显示时钟

单片机实验报告 ——LCD1602显示时钟

XXXX学院实验报告Experimentation Report of Taiyuan Normal University系部计算机年级大三课程单片机原理与接口技术姓名同组者日期学号项目 LCD1602显示时钟一、实验目的1、了解单片机顺序执行的特点;2、掌握C语言的编写和keilc51的使用;3、熟悉DS1302芯片的工作过程二、实验仪器硬件资源:单片机开发板笔记本电脑 DS1302芯片;软件资源:软件 Keil uVision5;三、实验原理1、流程图2、连接图四、实验结果将LCD屏连接到单片机上,点击编译运行,LCD屏上显示时间:2013-01-01 2 12-00-38。

在DS1302.c文件里修改uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01,0x02, 0x13};为uchar TIME[7] = {0x14, 0x11, 0x19, 0x28, 0x11,0x04, 0x19};点击编译运行按钮,LCD屏幕显示2019-11-28 4 19-11-14。

四、实验代码及分析//主函数void main(){Ds1302Init(); //初始化DS1302LcdInit(); //初始化LCDwhile(1){Ds1302ReadTime(); //DS1302读时间LcdDisplay(); //LCD显示时间}}//初始化DS1302void Ds1302Init(){uchar n;Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能for (n=0; n<7; n++) //写入7个字节的时钟信号:分秒时日月周年{Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);}Ds1302Write(0x8E,0x80); //打开写保护功能}//读取时钟信息void Ds1302ReadTime(){uchar n;for (n=0; n<7; n++) //读取7个字节的时钟信号:分秒时日月周年{TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);}}//---DS1302写入和读取时分秒的地址命令---////---秒分时日月周年最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。

单片机实验报告(电子时钟)

单片机实验报告(电子时钟)

一、课程设计的内容和要求:1了解单片机的种类,掌握单片机的工作原理;2 掌握利用单片机进行系统设计的方法;3掌握利用protel进行原理图设计和PCB设计的方法;4学会进行单片机硬件调试和软件调试;5 了解单片机系统整个设计开发流程。

二、设计装置功能1、用单片机实现设计要求(1)实现功能:①正常的24小时制的电子表功能显示(时/分/秒)。

②任意时间(时/分/秒)闹钟时刻的设置并在设定时刻响铃。

(2)所使用器件:STC 89C52RC单片机1个、2位共阳极数码管3个、蜂鸣器1个、74LS138一片、74LS47一片、74HC04一片、电阻、电容及其他辅助电子元件。

(3)显示时间与闹钟时刻的设置:单片机的人机操作部分由六个按钮组成。

从电子钟电路板上(从左到右)分别是:①单片机复位键②闹钟开关③小时位累加键④分钟位累加键⑤秒钟位累加键⑥闹钟/时间显示切换键按键说明:复位键——把3个2位数码管显示数字全部清零。

闹钟开关键——按下键,闹钟开关模式切换。

时针位累加键——按下键,则实现时针位的累加00-23(累加循环)。

分针位累加键——按下键,则实现分针位的累加00-59(累加循环)。

秒针位累加键——按下键,则实现秒针位的累加00-59(累加循环)。

闹钟/时间显示切换键——按下键,能够实现数码管闹钟和时间两种显示功能的切换。

三、设计问题分析面对的问题主要是两方面:一个是软件的设计,也就是实现计时定时的控制功能的程序编辑,在电脑上模拟需要实现的功能;另一个是硬件的设计,需要我们自己购买器件、设计并焊接电路板。

而更为重要的一步是将软件、硬件相结合,做好电路后,我们试着把程序写入芯片测试,然而没有获得应该有的显示,接着我们多次检查电路,修改程序,在不断调试中终于实现正确显示。

四、设计思路本次设计的系统以动态显示显示时分秒模块,它能显示正确的时间,而且所显示时间与北京时间相同,基本做到同步,显示清晰明亮,可读性强。

系统主程序开始后,首先是对系统环境初始化,设置好时分秒后系统开始运行;然后可打开闹钟,预设响铃的时刻,计时系统到该时刻后自动响设定铃声。

单片机 电子时钟实验报告

单片机 电子时钟实验报告

电子时钟设计实验报告姓名:学号:班级:指导老师:一、实验基本要求利用定时计数器,设计一个电子时钟,使用前面使用过的显示子程序。

从左到右依次显示时分秒。

有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送显示缓冲区。

另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。

进而要求:1.加入时间调整程序,使用两个或三个按钮,调节当前的时间。

类似平常使用的电子表。

可以让正在调整的位闪烁显示。

2.可以加入一个闹钟钟设置,当所定的时间到时,产生断续的蜂鸣声。

可以加入日历的功能。

二、最终实现的功能1、日历(年、月、日)显示与数值的修改2、时钟(时分秒)显示及数值的修改3、闹钟设定及数值的修改、到时响铃4、秒表计时及秒表重置三、设计核心思想程序设计中设置定时器0作为基本时钟,中断每50ms进入一次,每20次中断即1秒,秒加一,在中断服务程序中执行60秒进位、60分进位。

通过独立式键盘,进行各项数值调整、定时器开启和暂停以及重置。

各个功能在分立的子函数中实现,在主函数中进行调用,结构清晰。

四、设计亮点1、按键功能通过“按下时间的长短”丰富在按键消抖结束后,再次判断按键按下的同时,记录按下时间的长短。

短按实现数值的修改、计时暂停及启动,长按实现模式的切换和重置。

2、闹铃设置为一段音乐通过查阅网上资料,将蜂鸣器的响声富有变化,从而实现一段有旋律的音乐。

3、函数独立设计的程序中包含以下函数模块:延时、初始化、时间(日历、闹钟)显示、键盘扫描、秒表显示、定时器0中断函数(时钟)、定时器1中断(秒表)、音乐、闹钟及主函数。

4、各功能的实现采用模块化处理模式1:时钟显示;模式2:日历显示;模式3:秒表显示;模式4:闹钟显示。

五、实验中的问题总结LED数码管显示部分小结:(1)要设置段选(P2.6)和位选(P2.7)。

(2)段选和位选需按照书上讲的逻辑编写。

虽然P0口作为段选,P2口作为位选,但是程序设计中位选时要将值赋给P0口(打开位选→赋位选→关闭位选)。

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

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

单片机原理与应用课程名称:单片机原理与应用设计题目:LCD电子钟院系:电子信息工程学院班级:自动化0706设计者:全宏宇指导教师:一,设计目标LCD显示电子钟的基本功能1,实现时钟功能;2,实现闹铃功能;3,实现秒表功能;4,具有一定的计时精度。

LCD显示电子钟的基本要求1,掌握单片机开发编程设计的基本流程;2,了解Keil及Proteus软件的基本使用;3,了解LCD的基本使用;4,学习单片机硬件制作。

二,具体实现1,软件平台1)Keil编程Keil 的开发工具的使用的基本过程:○1创建C 或汇编语言的源程序;○2编译或汇编源文件;○3纠正源文件中的错误;○4从编译器和汇编器连接目标文件;○5测试连接的应用程序。

2)Proteus仿真Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

在编译方面,它也支持IAR,Keil,PLAB等多种编译器。

2,硬件开发平台JD51开发板的基本资料○1 LED 电路,8 只独立LED 发光管,可做指示或各种闪烁效果用。

○2数码管电路,4只共阳一体8 段数码显示管,可实现各种数据显示,如计数、时钟等。

○3蜂鸣器电路,可用于设计各种提示音、演奏音乐等。

○4键盘电路,学习按键控制相关编程。

○5 LCD 显示电路,编程控制LCD 显示。

○6串口电路,学习编程实现JD51 和PC 或其他符合该通信协议的电路之间的通信。

○7红外电路,通过选配的红外遥控器,学习红外解码并可实现红外遥控JD51。

○8温度模块电路,采用一线式温度传感器实现温度的采集并可显示在数码管或者LCD 上,通过温度数据处理便可实现温度控制器功能。

○9除了以上提到的可编程电路本学习板还有一些常用的不可编程电路,包括电源电路、复位电路、晶振电路等。

本次LCD电子钟实验用到其中的蜂鸣器,按键,LCD显示接口。

3,总体设计1)基本资源的使用本次实验采用了89C52型单片机,1602LCD液晶显示屏,蜂鸣器。

制作一个采用LCD1602显示的电子钟

制作一个采用LCD1602显示的电子钟

计算机科学与工程系实验报告实验题目:制作一个采用LCD1602显示的电子钟班级:姓名:学号:日期:一、实验目的掌握单片机使用定时器/计数器控制字符型液晶显示器LCD1602的设计与软件编程二、实验要求在LCD上显示当前的时间。

显示格式为“时时:分分:秒秒”。

设有4个功能键k1~k4,功能如下:(1)k1——进入时间修改。

(2)k2——修改小时,按一下k2,当前小时增1。

(3)k3——修改分钟,按一下k3,当前分钟增1。

(4)k4——确认修改完成,电子钟按修改后的时间运行显示。

三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:1、实现当按下K1之后,使中断T0停止计数2、实现当按下K2之后,使小时加一3、实现当按下K3之后,使分钟加一4、实现当按下K4之后,使中断T0恢复计数源程序:#include<reg51.h>#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#define uchar unsigned char#define uint unsigned intsbit lcdrs = P2^0;sbit lcdrw = P2^1;sbit lcden = P2^2;void delay(uint z)//延时函数,此处使用晶振为11.0592MHz {uint x,y;for(x=z;x>0;x--){for(y=110;y>0;y--){;}}}void write_com(uchar com) //写入指令数据到lcd{lcdrw=0;lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //写入字符显示数据到lcd{lcdrw=0;lcdrs=1;P3=date;delay(5);lcden=1;delay(5);lcden=0;}void init1602()//1602液晶初始化设定{lcdrw=0;lcden=0;write_com(0x3C);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*void write_string(uchar *pp,uint n)//采用指针的方法输入字符,n为字符数目{int i;for(i=0;i<n;i++)write_data(pp[i]);}*/void write_sfm(uchar add,uchar date)//向指定地址写入数据{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}#endif#define uchar unsigned char#define uint unsigned intsbit Key1 = P1^0;sbit Key2 = P1^1;sbit Key3 = P1^2;sbit Key4 = P1^3;uchar int_time;//定义中断次数计数变量uchar second;//秒计数变量uchar minute;//分钟计数变量uchar hour;//小时计数变量uchar code date[]=" H.I.T. CHINA ";//LCD第1行显示的内容uchar code time[]=" TIME 23:59:55 ";//LCD第2行显示的内容uchar second=55,minute=59,hour=23;void clock_init(){uchar i,j;for(i=0;i<16;i++){write_data(date[i]);}write_com(0x80+0x40);for(j=0;j<16;j++){write_data(time[j]);}}void clock_write( uint s, uint m, uint h){write_sfm(0x47,h);write_sfm(0x4a,m);write_sfm(0x4d,s);}void Keyscan1(){if(Key1==0) {delay(10);if(Key1==0) while(!Key1); TR0=0;}if(Key4==0) {delay(10);if(Key4==0) while(!Key4); TR0=1;}if(Key3==0){delay(10);if(Key3==0)while(!Key3);minute++;if(minute==60)minute=0;} if(Key2==0){delay(10);if(Key2==0)while(!Key2);hour++;if(hour==24)hour=0;}}void main(){init1602();//LCD初始化clock_init();//时钟初始化TMOD=0x01;//设置定时器T0为方式1定时EA=1; // 总中断开ET0=1; // 允许T0中断TH0=(65536-46483)/256;//给T0装初值TL0=(65536-46483)%256;TR0=1;int_time=0;//中断次数、秒、分、时单元清0second=55;minute=59;hour=23;while(1){clock_write(second ,minute, hour);Keyscan1();}}void T0_interserve(void) interrupt 1 using 1 //T0中断服务子程序{int_time++;//中断次数加1if(int_time==20) //若中断次数计满20次{int_time=0; //中断次数变量清0second++;//秒计数变量加1}if(second==60)//若计满60s{second=0; //秒计数变量清0minute ++;//分计数变量加1}if(minute==60)//若计满60分{minute=0;//分计数变量清0hour ++;//小时计数变量加1}if(hour==24){hour=0;//小时计数计满24,将小时计数变量清0 }TH0=(65536-46083)/256;//定时器T0重新赋值TL0=(65536-46083)%256;}五、仿真运行效果展示仿真初始状态按下k1键,进入修改模式六、实验小结通过本次实验,我掌握了LCD1602编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。

单片机综合实验报告51电子时钟

单片机综合实验报告51电子时钟

一、实验内容:设计一个数字时钟,显示范围为00:00:00~23:59:59。

通过5个开关进行控制,其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关K2用于切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过蜂鸣器发声作为闹铃。

选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能。

二、实验电路及功能说明1602显示器电路(不需接线)电子音响电路按键说明:按键键名功能说明K1切换键进入设定状态K2 校时依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,直到退出设置状态K3 加1键调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字三、实验程序流程图:四、实验结果分析定时程序设计:单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。

如果MCS-51采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。

这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。

MCS-51单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。

定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。

TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.当定时器/计数器工作于方式1,为16位的计数器。

本设计师单片机多功能定时器,所以MCS-51内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。

单片机_ 电子时钟实验报告[1]

单片机_ 电子时钟实验报告[1]

单片机_ 电子时钟实验报告[1]
本次实验是使用单片机设计的电子时钟,它可以实现24小时的时间显示。

本次实验
的实现过程中,使用到了微处理器核心处理器8051,它具有运算能力强、指令结构简单等优点,是单片机的经典之作。

实验的完成过程中,首先需要安装实验所需的部件。

具体包括:微处理器核心处理器8051、七段数码管、5V电源模块和按键模块。

接下来需要连接电子组件,经过排序,电路原理图为:电池供电。

通过805单片机的定时,实现对时钟的运行。

接着就可以进行编程。

此处使用的编程语言是C语言。

在编程的过程中,首先要设定
主函数,确定程序的执行流程。

接着将要实现的功能分解为若干个子函数,完成编程工作。

接下来,编写完代码后,就可以验证本次实验。

实际运行时,将电子组件按照设计的
电路原理图进行对接,按指定的代码运行,程序会自动运行,最后显示出现电子时钟的数
字显示。

以上就是本次实验的全部过程。

在本次实验中,我们所学到的主要的内容是:微处理
器的基础和指令;使用C语言编写程序;电子时钟的设计原理;实现电子时钟的电路原理图。

整个实验过程锻炼了我们的动手能力,为我们今后接触更复杂的设计工作打下了基础。

单片机电子时钟实验报告

单片机电子时钟实验报告

单⽚机电⼦时钟实验报告郑州轻⼯业学院单⽚机实验报告实验名称:姓名:院(系):专业班级:学号:指导教师:陈晓雷、王⼩瑞成绩:时间:年⽉⽇⾄年⽉⽇实验电⼦时钟(定时器、中断综合实验)⼀、实验⽬的熟悉MCS-51定时器,中断初始化编程⽅法,了解定时器的应⽤,时钟程序的设计与调试技巧。

⼆、实验内容按照STC单⽚机实验板电路,或者⾃⼰设计电路原理图,编写程序,基本要求:⽤定时器产⽣0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显⽰。

扩展要求:可键盘调整时间、万年历、定时报警等。

三、程序框图1定时中断四、实验步骤连续运⾏程序,在键盘上输⼊时间初值,执⾏,数码管上实时显⽰时间值。

五、思考题1.电⼦钟⾛时精度和程序中哪些常数有关?2.修改程序使定时器⼯作⽅式改变,调节有关参数,进⼀步提⾼精度。

3.设计⼀个倒计时时钟,如何来修改程序?六、参考程序0030 758160 CHK00: MOV SP,#60H0033 1204A5 LCALL LEDP0036 900081 MOV DPTR,#CLOCK0039 A882 MOV R0,DPL003B A983 MOV R1,DPH003D 90000B MOV DPTR,#000BH0040 7402 MOV A,#02H0042 F0 MOVX @DPTR,A0043 A3 INC DPTR0044 E9 MOV A,R120045 F0 MOVX @DPTR,A0046 A3 INC DPTR0047 E8 MOV A,R00048 F0 MOVX @DPTR,A0049 120DF0 CHK0: LCALL LCK0 ;键扫,显⽰⼦程序004C 120068 LCALL PTDS0 ;显⽰缓冲区放数⼦程序004F 758901 MOV TMOD,#01H0052 43A882 ORL IE,#82H0055 758AB7 MOV TL0,#0B7H0058 758C3C MOV TH0,#3CH ;定时中断初始化005B 752300 MOV 23H,#00H005E D28C SETB TR0 ;开定时0060 120425 LOO5: LCALL DIS ;显⽰0063 120068 LCALL PTDS00066 80F8 SJMP LOO50068 7879 PTDS0: MOV R0,#79H006A E522 MOV A,22H006C 1177 ACALL PTDS006E E521 MOV A,21H0070 1177 ACALL PTDS0072 E520 MOV A,20H0074 1177 ACALL PTDS0076 22 RET0077 F9 PTDS: MOV R1,A ;拆送显⽰缓冲区0078 117C ACALL PTDS1007A E9 MOV A,R1007B C4 SWAP A007C 540F PTDS1: ANL A,#0FH007E F6 MOV @R0,A007F 08 INC R00080 22 RET0081 758AB7 CLOCK: MOV TL0,#0B7H0084 758C3C MOV TH0,#3CH ;恢复初值0087 C0D0 PUSH PSW0089 C0E0 PUSH ACC008B D2D3 SETB 0D3H ;保护008D 0523 INC 23H ;0.1秒加1008F E523 MOV A,23H0091 B40A27 CJNE A,#0AH,DONE ;1秒到吗?0094 752300 MOV 23H,#00H ;清0.1秒单元0097 E522 MOV A,22H0099 04 INC A ;秒加1009A D4 DA A009B F522 MOV 22H,A ;⼗进制调整009D B4601B CJNE A,#60H,DONE ;60秒到吗?00A0 752200 MOV 22H,#00H ;秒单元清零00A3 E521 MOV A,21H00A5 04 INC A300A6 D4 DA A ;分加1,⼗进制调整00A7 F521 MOV 21H,A00A9 B4600F CJNE A,#60H,DONE ;60分到吗?00AC 752100 MOV 21H,#00H ;分单元清零00AF E520 MOV A,20H00B1 04 INC A00B2 D4 DA A ;时加1,⼗进制调整00B3 F520 MOV 20H,A00B5 B42403 CJNE A,#24H,DONE ;24⼩时到吗?00B8 752000 MOV 20H,#00H ;时单元清零00BB D0E0 DONE: POP ACC ;退栈00BD D0D0 POP PSW00BF 32 RET1ORG 0D59H0D59 D2D4 SSEE: SETB RS1 ;换⼯作区0D58 7D05 MOV R5,#05H0D5D 753020 SSE2: MOV 30H,#20H0D60 75317E MOV 31H,#7EH0D63 7F06 MOV R7,#06H0D65 79DD SSE1: MOV R1,#0DDH0D67 E530 MOV A,30H0D69 F3 MOVX @R1,A ;字位送⼊0D6A A831 MOV R0,31H0D6C E6 MOV A,@R00D6D 900D85 MOV DPTR,#0DDFFH0D70 93 MOVC A,@A+DPTR ;取字形代码0D71 79DC MOV R1,#0DCH0D73 F3 MOVX @R1,A ;字形送⼊0D74 E530 MOV A,30H ;右移0D76 03 RR A0D77 F530 MOV 30H,A0D79 1531 DEC 31H0D7B 74FF MOV A,#0FFH0D7D F3 MOVX @R1,A ;关显⽰0D7E DFE5 DJNZ R7,SSE1 ;6位显⽰完了吗?0D80 DDDB DJNZ R5,SSE2 ;5次显⽰完了吗?0D82 C2D4 CLR RS10D84 22 RET0D85 C0F9A4 ODFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H 0D88 B09992, DB 0F8H,80H,90H0D8B 82F8800D8E 900D8F 8883C6 DB 88H,83H,0C6H,0A1H,86H0D92 A1868E DB 8EH,0FFH,0CH,89H,0DEH0D95 FF0C890D98 DE4ORG 038EH038E FC X3: MOV R4,A038F 7850 MOV R0,#50H 0391 E6 MOV A,@R00392 F9 MOV R1,A0393 EC MOV A,R40395 E4 CLR A0396 D083 POP DPH0398 D082 POP DPL039A 93 MOVC A,@A+DPTR 039B A3 INC DPTR039C B5010A CJNE A,01H,X30 039F 19 DEC R103A0 E4 CLR A03A1 93 MOVC A,@A+DPTR 03A2 F6 X31: MOV @R0,A 03A3 A3 INC DPTR03A4 C082 PUSH DPL03A6 C083 PUSH DPH03A8 22 RET03A9 19 X30: DEC R103AA E9 MOV A,R103AB 80F5 SJMP X31;--------------------------------------03AD 7E50 X2: MOV R6,#50H03AF 71D1 X0: ACALL XLE03B1 30E51C JNB ACC.5,XX003B4 DEF9 DJNZ R6,X003B6 7E20 MOV R6,#20H03B8 7850 MOV R0,#50H03BA E6 MOV A,@R003BB F8 MOV R0,A03BC E6 MOV A,@R003BD FF MOV R7,A03BE 7410 MOV A,#10H03C0 F6 MOV @R0,A03C1 71D1 X1: ACALL XLE03C3 30E506 JNB ACC.5,XX103C6 DEF9 DJNZ R6,X103C8 EF MOV A,R703C9 F6 MOV @R0,A03CA 80E1 SJMP X203CC FE XX1: MOV R6,A03CE F6 MOV @R0,A03CF EE MOV A,R603D0 22 XX0: RET03D1 9125 XLE: ACALL DIS 03D3 9164 ACALL KEY03D5 FC MOV R4,A503D6 7948 MOV R1,#48H03D8 E7 MOV A,@R103D9 FA MOV R2,A03DA 09 INC R103DB E7 MOV A,@R103DC FB MOV R3,A03DD EC MOV A,R403DE 6B XRL A,R303DF AB04 MOV R3,04H03E1 AC02 MOV R4,02H03E3 6004 JZ X1003E5 7A88 MOV R2,#88H03E7 7C88 MOV R4,#88H03E9 1C X10: DEC R403EA EC MOV A,R403EB 6482 XRL A,#82H03ED 600F JZ X1103EF EC MOV A,R403F0 640E XRL A,#0EH03F2 600A JZ X1103F4 EC MOV A,R403F5 6005 JZ X1203F7 7C02 MOV R4,#20H03F9 1A DEC R203FA 8006 SJMP X1303FC 7C0F X12: MOV R4,#0FH 03FE AA04 X11: M OV R2,04H0400 AC03 MOV R4,03H0402 7948 X13: MOV R1,#48H0404 EA MOV A,R20405 F7 MOV @R1,A0406 09 INC R10407 EB MOV A,R30408 F7 MOV @R1,A0409 EC MOV A,R4040A 20E507 JB ACC.5,X113040D 20E404 JB ACC.4,X1130410 900415 MOV DPTR,#LS30413 93 MOVC A,@A+DPTR0414 22 X113: RET0415 070408 LS3: D B 07H,04H,08H,05H,09H,06H,0AH 0418 050906 041B 0A041C 0B0100 DB 0BH,01H,00H,02H,0FH,03H,0EH041F 020F030422 0E0423 0C0D DB 0CH,0DH0425 C083 DIS: PUSH DPH0427 C082 PUSH DPL0429 D2D4 SETB RS1042B 787E MOV R0,#7EH6042D 7A20 MOV R2,#20H042F 7B00 MOV R3,#00H0431 90044F MOV DPTR,#LS00434 E6 LS2: M OV A,@R00435 93 MOVC A,@A+APTR0436 79DC MOV R1,#0DCH0438 F3 MOVX @R1,A0439 EA MOV A,R2043A 09 INC R1043B F3 MOVX @R1,A043C DBFE LS1: DJNZ R3,LS1043E C3 CLR C043F 13 RRC A0440 FA MOV R2,A0441 18 DEC R00442 70F0 JNZ LS20444 F2 MOVX @R0,A0445 18 DEC R00446 F4 CPL A0447 F2 MOVX @R0,A0448 C2D4 CLR RS1044A D082 POP DPL044C D083 POP DPH044E 22 RET044F C0F9A4 LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H0452 B099920455 82F880 DB 82H,0F8H,80H,90H,88H,83H,0C6H 0458 908883045B C6045C A1868E DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH 045F FF0C89 0462 7FBF0464 D2D4 KEY: SETB RS10466 7AFE MOV R2,#0FEH0468 7B08 MOV R3,#08H046A 7800 MOV R0,#00H046C 79DD LP1: MOV R1,#0DDH046E EA MOV A,R2046F F3 MOVX @R1,A0470 23 RL A0471 FA MOV R2,A0472 09 INC R10473 E3 MOVX A,@R10474 F4 CPL A0475 540F ANL A,#0FH0477 700E JNZ LP00479 08 INC R0047A DBF0 DJNZ R3,LP1047C 7420 XP33: MOV A,#20H047E FA XP3: MOV R2,A047F E4 CLR A70480 79DD MOV R1,#0DDH 0482 F3 MOVX @R1,A0483 EA MOV A,R20484 C2D4 CLR RS10486 22 RET0487 F4 LP0: C PL A0488 20E004 JB ACC.0,XP0048B 7400 MOV A,#00H048D 8013 SJMP LPP048F 20E104 XP0: JB ACC.1,XP1 0492 7408 MOV A,#08H 0494 800C SJMP LPP0496 20E204 XP1: JB ACC.2,XP2 0499 7410 MOV A,#10H 049B 8005 SJMP LPP049D 20E3DC XP2: JB ACC.3,XP33 04A0 7418 MOV A,#18H 04A2 28 LPP: ADD A,R004A3 80D9 SJMP XP3;---------------------------------------04A5 75507E LEDP: MOV 50H,#7EH 04A8 7410 MOV A,#10H 04AA 7879 MOV R0,#79H04AC F6 LEDS: MOV @R0,A04AD 08 INC R004AE B87EFB CJNE R0,#7EH,LEDS 04B1 04 INC A04B2 F6 MOV @R0,A04B3 7420 MOV A,#20H04B5 F548 MOV 48H,A04B7 F549 MOV 49H,A04B9 22 RETEND8。

电子时钟实验报告

电子时钟实验报告

单片机原理及应用设计报告题目电子时钟的设计专业物理学院部物理与电子工程学院学号-----------姓名-----------指导教师-----------答辩时间二0一二年五月工作时间:2012年5月基于单片机的电子时钟系统的设计指导教师:---学生:---关键词:单片机;电子时钟;键盘控制器;目录第一章总体设计2第二章系统硬件设计32.1 硬件电路32.1.1 单片机最小系统52.1.2 键盘电路62.1.3 显示电路7第三章系统软件设计73.1主程序流程图73.2 主要子程序的流程图9第四章系统仿真10第五章综合调试与问题的解决115.1 硬件调试115.2 软件调试问题及解决11结论12参考文献12附录13第一章 总体设计1.1 设计要求电子时钟的计时X 围00时00分00秒至23时59分59秒,由按键来调节时钟时间,时分秒都可以调整。

1.2 设计思路根据设计的要求可确定如下的设计思路:利用AT89C52系统单片机,LCD 液晶显示器,键盘等一些辅助元件来生成时钟电路已达到设计要求,然后通过编写相应的程序来实现对时钟的调试和控制。

1.3 电路的设计方案随着单片机技术的飞速发展,通过单片机对控制对象的控制日益成为今后自动控制领域的一个发展方向 。

采用MCS--52单片机来对时间进行控制,不仅具有控时方便,组太简单和灵和性大等优点,而且可以大幅度的提高控制时间的技术指标。

从而可以大大提高产品的质量和数量,因此单片机对时间的控制问题是一个工业生产上经常会遇到的问题。

经过设计和元器件的功能,设计要求和设计思路,确定相应的设计方案,该电路有多部分组成,如控制键盘的输入电路,单片机的时钟电路,LCD 液晶显示时间电路等。

所以根据上述条件作出相应的实时时钟电路总的框图,然后开始设计内部驱动程序,是各种芯片按照相应的程序实现特定的功能,之后按照程序的设计,将相应的管脚连接调试,看是够能实现特定的功能。

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

单片机综合实验报告题目:电子时钟(LCD)显示一、实验内容:以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:●使用字符型LCD显示器显示当前时间。

●显示格式为“时时:分分:秒秒”。

●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

●K1—进入设置现在的时间。

●K2—设置小时。

●K3—设置分钟。

●K4—确认完成设置。

程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。

二、实验电路及功能说明1)单片机主控制模块以AT89C51单片机为核心进行一系列控制。

2)时钟显示模块用1602为LCD显示模块,把对应的引脚和最小系统上的引脚相连,连接后用初始化程序对其进行简单的功能测试。

测试成功后即可为实验所用,如图:3)时间调整电路用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。

功能键K1~K4功能如下。

K1—进入设置现在的时间。

K2—设置小时。

K3—设置分钟。

K4—确认完成设置。

如图:三、实验程序流程图:主程序:时钟主程序流程子程序:四、实验结果分析实验结果及分析:单片机的晶振可以根据要求设定。

6MHZ为和现实时间显示相同。

实验采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。

当烧入程序后开始运行,根据初始值设定可以观察到显示的时间,这里为了更明显观察显示数据变化把起始值设为23:59:50 运行后显示,K1为进入现在设置时间,当按下K1后显示,和实验要求相比较,实现了按下K1进入现在时间设置,按下K4确认完成时间设置的功能;不同之处: 当进入时间设置时在按下K1设置小时,再次按下K1是设置分钟。

增加功能:进入时间设置并选择设置位置后K2键位数字增加功能,K3键为数字减小功能。

根据仿真结果能够确定编程正确,基本实现了所有功能,而且有所改进。

五、心得体会每次做单片机实验都会有不同的等收获,而这次的实验让我感觉收获更大。

这次的实验让我巩固了以往所学,而且锻炼了自己发现问题解决问题的能力。

在编程过程,发现自己对C语言很生疏,很多技巧和函数运用都不会,通过参考资料和询问同学终于让我完成了程序,并实现了程序的功能。

这不仅提高了自己动手能力,也培养了自己的思考能力。

这次在编程过程中学到了很多新东西,特别是LCD 的显示,在设定的显示字符后,正确编译后显示各种设定值,LCD显示16位字符,在最初编程时编译正确但是LCD上的显示字符有缺失,显示不完整,经过不断调试发现空格同样占据字符,只有所有字符不超过16位且位置正确时才能完整正确显示。

时间的显示需要每一个显示的位子有定义,而且要给“:”留下特定位子。

同时编程时发现还可以显示其他如日期。

但本实验不需要且很难完成最终没实现。

在仿真过程中发现许多模型不知道名称,最后搜索了一份Proteus 元件库,里边有很多元件模型的名称。

最后搭建成功了仿真模型,并且运行成功。

在这里要感谢老师在以往实验过程中不厌其烦的帮助自己解决所遇到的问题和传授一些知识和小窍门。

让我对单片机有机会加深了解,体会到了单片机的强大,学到了很多,感谢。

六、程序清单#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit K1 =P1^0; //选择调整小时,分钟sbit K2 =P1^1; //增加sbit K3 =P1^2; //减小sbit K4 =P1^3;sbit SPK=P3^0;sbit RS =P2^0;sbit RW =P2^1;sbit E =P2^2;uchar code Str1[] =" Current Time "; //一下两个字符串的串长均为16uchar code Str2[] =" Set New Time";uchar HMS_String[]=" 00:00:00 ";//带显示的时间串bit Settime=0; //是否修改时间bit Change_H_or_M =1;//1表示修改时.0表示修改分uchar MilliSecond,Hour =23,Minute=59, Second =50; //延时函数void DelayMS(uint x){uchar i;while(x--)for(i=0;i<120;i++);}//LCD忙状态检测bit LCD_Busy_Check(){bit result;RS = 0;RW = 1;E = 1;DelayNOP();result = (bit)(P0 & 0x80);E = 0;return result;} //写LCD命令void LCD_Write_Command(uchar cmd){while(LCD_Busy_Check());//判断LCD是否忙碌RS = 0;RW = 0;E = 0;_nop_();_nop_();P0 = cmd; DelayNOP();E = 1;DelayNOP();E = 0; } //设置LCD显示位置void LCD_Set_Pos(uchar pos){LCD_Write_Command(pos | 0x80);}//写LCD数据void LCD_Write_Data(uchar dat){while(LCD_Busy_Check());//判断LCD是否忙碌RS = 1;RW = 0;E = 0; P0 = dat; DelayNOP(); E = 1;DelayNOP();E = 0;} //LCD初始化void LCD_Initialize(){LCD_Write_Command(0x38);DelayMS(1);LCD_Write_Command(0x0c);DelayMS(1);LCD_Write_Command(0x06);DelayMS(1);LCD_Write_Command(0x01);DelayMS(1);}// 显示函数,在LCD指定的行上显示字符串void Display_String(uchar*str,uchar LineNo){uchar k;LCD_Set_Pos(LineNo);for(k=0;k<16;k++) LCD_Write_Data(str[k]);}//时分秒显示void Display_HMS(uchar h,m,s){if(Settime) HMS_String[3] = '>';//显示修改标志else HMS_String[3] = ' '; //不显示修改标志HMS_String[4] = h/10 + '0'; //时十位HMS_String[5] = h/10 + '0';HMS_String[5] = h%10 + '0'; //时个位HMS_String[5] = h%10 + '0';HMS_String[7] = m/10 + '0'; //分HMS_String[8] = m/10 + '0';HMS_String[8] = m%10 + '0'; //分HMS_String[8] = m%10 + '0';HMS_String[10]= s/10 + '0'; //秒HMS_String[11]= s/10 + '0';HMS_String[11]= s%10 + '0'; //秒HMS_String[11]= s%10 + '0';Display_String(HMS_String,0x40);}//设置时间void Change_Time(){Settime=0;if(K1==0) //按下k1键即进入修改状态{TR0 = 0;Display_String(Str2,0x00); //第一行提示修改时间Settime = 1;}while (Settime){if(K1 == 0) //确定调整小时还是分钟{while(K1 == 0)Change_H_or_M = !Change_H_or_M; }else if(K2 == 0) //增加{while(K2 == 0);if(Change_H_or_M==1){if(++Hour == 24) Hour = 0;}else{if(++Minute == 60) Minute = 0;}}else if(K3 == 0) //减少{while(K3 == 0);if(Change_H_or_M == 1){if(--Hour == 0xff) Hour = 23;}else{if(--Minute == 0xff) Minute = 59;}else if(K4 == 0) //确定{while(K4 == 0);Display_String(Str1,0x00); //第一行还原显示str1 Settime = 0;TR0 = 1;}Display_HMS(Hour,Minute,Second);} //外层While在这里结束}//定时器0中断void Time0() interrupt 1{TH0 = (65536 -50000)/256;TL0 = (65536 -50000)%256; //重新装入50MS定时if(++MilliSecond == 20) //50*20=1s{MilliSecond = 0;if(++Second == 60)Second = 0;if(++Minute == 60){Minute = 0;if(++Hour == 24){Hour = 0;Minute = 0;Second = 0; }}}}}//主函数void main(){TMOD = 0x01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;IE = 0x82;SPK = 0;LCD_Initialize();Display_String(Str1,0x00); //第一行显示TR0 = 1;P1 = 0xFF;while(1){Display_HMS(Hour,Minute,Second); //第二行显示时分秒DelayMS(500);Change_Time(); //显示过程中允许修改时间}}。

相关文档
最新文档