单片机电子时钟实验报告

合集下载

单片机电子时钟实验报告

单片机电子时钟实验报告

电子时钟预备知识:数码管:内部接线C语言程序:一、电子时钟(一)设计目的通过电子时钟综合设计,使学生学会利用8051定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。

思考按键消除抖动、LED动态显示与静态显示的特点,从而提高学生解决实际问题的能力。

(二)设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1.在4位数码管上显示当前时间。

显示格式“时时分分”2.由LED闪动做秒显示。

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

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

(三)我采用的是TB-22766板子,单片机类型是STC89C52RC(四)软件设计思想:采用语言:C语言,主要中断:内部T0中断为唯一的中断,主程序大体分为两部分:无按键被按下时的显示,有按键被按下时,输入定时时间或者书输入当前时间,然后的显示软件,最后是一个蜂鸣器的控制程序。

前面是三个子程序:两个按键扫描和一个延时小程序。

N具体的C语言程序:/*---------------------------------------------------------------------------------------------------------------------=======================================基于JD51开发板的电子闹钟程序=======================================************************************程序功能说明********************************************************************* ***1、基础功能为计时,并显示当前时间。

单片机设计数字钟实验报告

单片机设计数字钟实验报告

单片机实验报告——数字钟设计班级:学号:姓名:时间:一.实验目的1、进一步熟悉C的语法知识和keil环境;2、熟练掌握一些常用算法;3、熟悉keil的编写、下载、调试过程;4、了解单片机的工作原理和电路图;5、熟悉单片机的外围电路功能模块、LED灯、数码管模块以及键盘;6、熟练焊接技术。

二.实验器件三.数字钟设计原理数字钟实际是对标准频率计数的电路,由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的时间信号必须做到准确稳定。

通常使用石英晶体振荡电路构成数字钟。

数字钟电子钟由以下几部分组成:按键开关部分,振荡电路部分,89c51单片机控制器,4位数码管显示部分,7407数码管驱动部分。

按键开关振荡电路89C51单片机控制器4位数码管显示7407列驱动四.流程图主程序流程图如图2.3所示,定时器T0中断服务程序流程图如2.4所示。

返回五.51单片机系统的硬件连接1、STC单片机最小系统硬件电路图如下2、硬件电路的设计该电路采用AT89C51单片机最小化应用,采用共阴7段LED数码管显示器,P2.4~P2.7口作为列扫描输出,P0口输出段码数据,P1.2,P1.1口接2个按钮开关,用于调时及功能误差,采用12Mhz晶振,可提高秒计时的精确度。

六.程序设计HOUR EQU 3AH ;赋值伪指令MIN EQU 3BHSEC EQU 3CHBUFF EQU 3DHORG 0000HAJMP MAINORG 000BH ;主程序入口AJMP PTF0ORG 0033H ;跳转到标号PTF0执行;**************************************************************;主程序MAIN: MOV HOUR, #00H ;时,分,秒,标记清零MOV MIN, #00HMOV SEC, #00HMOV BUFF, #00HMOV SP, #0EFH ;设堆栈指针MOV TH0, #0ECH ;定时器赋初值MOV TL0, #78HMOV 40H, #100 ;设循环次数MOV 41H, #2MOV TMOD , #1 ;写TMODMOV IP, #2 ;写IPMOV IE, #82HMOV R5,#0;开中断SETB TR0 ;启动定时器PTF0: SETB P1.2MOV TH0, #0ECHMOV TL0, #78HINC R5MOV R6,BUFFCJNE R6,#00H,BBMOV DPTR,#TAB1LJMP LOOP0BB:MOV DPTR,#TABLOOP0: CJNE R5,#1,LOOP1ACALL LOP0AJMP JKLOOP1:CJNE R5,#2,LOOP2ACALL LOP1AJMP JKLOOP2:CJNE R5,#3,LOOP3ACALL LOP2AJMP JKLOOP3:ACALL LOP3MOV R5,#0JK: DJNZ 40H, PTFORXRL BUFF, #0FFHMOV 40H, #100JNB P1.1, JFJNB P1.2, JSMOV R7, 41HCJNE R7, #1, AAAA: DJNZ 41H, PTFORMOV 41H,#2MOV A, SEC ;秒加1ADD A, #1DA AMOV SEC, ACJNE A, #60H, PTFORMOV SEC, #0 ;秒清零JF: MOV A, MIN ;分加1ADD A, #1DA AMOV MIN, ACJNE A, #60H,PTFORMOV MIN, #0 ; 分清零ACALL LEDJS: MOV A,HOURADD A,#1DA AMOV HOUR,A ;时加1CJNE A, #24H,PTFOR ;时加到24时否?是,清零MOV HOUR, #0PTFOR:RETILOP0: MOV A, MIN ;显示分钟的个位ANL A, #0FHMOVC A, @A+DPTRMOV P0,AMOV P2,#0F0HCLR P2.4CLR P0.4RETLOP1:MOV A, MIN ;显示分钟的十位SWAP AANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.5CLR P0.4RETLOP2: MOV A, HOUR ;显示时钟的个位ANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.6RETLOP3:MOV A, HOUR ;显示时钟的十位SWAP AANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.7CLR P0.4RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;不带小数点的字型码TAB1:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点的字型码END七.系统调试及结果分析硬件调试硬件电路板中器件连接好后,先用万用表测试电路中有无虚焊短接之处,测试无误后,将板子通电,进行静态调试。

单片机时钟显示实训报告

单片机时钟显示实训报告

一、实训背景随着科技的不断发展,单片机技术得到了广泛应用。

单片机具有体积小、成本低、功能强大等特点,因此在电子设备中得到了广泛的应用。

本实训旨在通过设计一个基于单片机的时钟显示系统,让学生了解单片机的原理、编程方法和接口电路设计,提高学生的实践能力和创新意识。

二、实训目的1. 掌握单片机的原理和编程方法;2. 熟悉单片机的接口电路设计;3. 学会使用LCD液晶显示器和按键进行人机交互;4. 提高学生的实践能力和创新意识。

三、实训内容1. 硬件设计(1)硬件组成:本实训采用AT89C51单片机作为核心控制单元,使用LCD1602液晶显示器进行时间显示,并使用DS1302实时时钟芯片提供准确的时间。

(2)电路设计:① AT89C51单片机电路:包括电源电路、晶振电路、复位电路等;② DS1302实时时钟芯片电路:包括电源电路、时钟晶振电路、数据通信电路等;③ LCD1602液晶显示器电路:包括电源电路、数据通信电路等;④ 键盘电路:包括按键输入电路和单片机接口电路。

2. 软件设计(1)软件组成:本实训的软件设计包括主程序、按键扫描程序、时间显示程序和DS1302时钟读取程序。

(2)程序设计:① 主程序:负责系统初始化、按键扫描、时间显示和DS1302时钟读取等功能;② 按键扫描程序:负责检测按键是否被按下,并根据按键输入进行相应操作;③ 时间显示程序:负责将DS1302实时时钟芯片读取的时间显示在LCD1602液晶显示器上;④ DS1302时钟读取程序:负责从DS1302实时时钟芯片读取当前时间。

3. 系统调试(1)硬件调试:连接好硬件电路,检查各个模块的连接是否正确,并进行必要的调试;(2)软件调试:使用Proteus软件进行仿真调试,确保程序能够正常运行。

四、实训过程1. 硬件制作(1)根据电路原理图,焊接好各个模块的电路板;(2)将各个模块连接到单片机上,并检查连接是否正确。

2. 软件编写(1)使用Keil C51软件编写程序;(2)将编写好的程序烧录到单片机中。

单片机电子时钟实训报告

单片机电子时钟实训报告

单片机实训报告题目:_电子时钟设计姓名:__侯元星__学号: 0502090229专业:_计算机控制0902班_所属系部:_电子工程系_指导老师:陆剑2011年6月25日前言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次毕业设计通过对它的学习、应用,以A T89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。

本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,同时引入一个内部充电电源在停止外部供电时,仍具有内部计时的功能。

该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。

本文以对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。

目录第一章设计任务 (1)1.1设计目的 (1)1.2设计要求 (1)第二章总体设计 (2)2.1 硬件部分 (2)2.2 电子时钟电路图 (5)2.3 电子时钟程序设计 (5)第三章电子时钟调试 (19)3.1 软件调试 (19)3.2硬件调试 (20)总结 (21)参考文献 (22)第一章设计任务1.1设计目的课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统控制过程、设计要求、应完成的工作内容和具体设计方法。

单片机电子时钟(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键为数字减小功能。

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

多功能电子时钟实训报告

多功能电子时钟实训报告

一、实训目的本次实训旨在通过学习单片机技术,设计并实现一个基于单片机的多功能电子时钟系统。

通过实训,使学生掌握以下知识和技能: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. 系统稳定性通过仿真和实际测试,系统稳定运行,满足设计要求。

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

单片机实训报告课程名称:单片微型计算机原理与接口技术实验项目:电子时钟实验班级: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. 单片机数字钟硬件设计(1)选用AT89C51单片机作为核心控制单元,具有丰富的片上资源,方便编程和调试。

(2)采用LCD1602液晶显示屏,显示时间、日期等信息。

(3)使用DS1302实时时钟芯片,实现时间的存储和更新。

(4)选用按键作为输入设备,实现时间的调整和设置。

(5)选用蜂鸣器作为报警设备,实现定时报警功能。

2. 单片机数字钟软件设计(1)编写主程序,实现系统初始化、时间显示、按键扫描、时间调整等功能。

(2)编写中断服务程序,实现DS1302时钟芯片的读写、按键消抖等功能。

(3)编写子程序,实现时间的计算、格式化、显示等功能。

3. 单片机数字钟调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

三、实习过程1. 硬件设计(1)根据设计要求,绘制电路原理图。

(2)购买所需元器件,进行焊接。

(3)组装电路板,连接各个模块。

2. 软件设计(1)编写程序,采用C语言进行编程。

(2)使用Keil软件进行编译、烧录。

(3)在仿真软件Proteus中进行仿真,验证程序的正确性。

3. 调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

四、实习总结1. 通过本次实习,我们掌握了单片机的编程、调试、硬件连接等方面的知识。

2. 学会了使用LCD1602液晶显示屏、DS1302实时时钟芯片、按键等元器件。

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

一、课程设计的内容和要求: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 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. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验任务及要求在焊接的电路板中,4个LED数码管,设计带有闹铃功能的数字时钟,要求:1、在4位数码管上显示当前时间;显示格式“时时分分”;2、由LED闪动做秒显示;3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间;当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止;二、方案论证与比较数字时钟方案数字时钟是本设计的最主要的部分;根据需要,可利用两种方案实现;方案一:本方案采用Dallas公司的专用时钟芯片DS12887A;该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单;为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池;当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统;而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间;方案二:本方案完全用软件实现数字时钟;原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息;利用定时器与软件结合实现5毫秒定时中断,每产生一次中断,存储器内相应的计数值加1;若计数值达到200,则将其清零,并将方案一:静态显示;所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止;该方式每一位都需要一个8 位输出口控制;静态显示时较小的电流能获得较高的亮度,且字符不闪烁;但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费;方案二:动态显示;所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次;利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁;显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关;调整参数可以实现较高稳定度的显示;动态显示节省了I/O口,降低了能耗;从节省I/O口和降低能耗出发,本设计采用方案二;三、各个部分的分析1显示电路:通过4个LED显示屏显示分钟和小时两个两联的LED显示器,通过与单片机P1接口连接实现显示功能;而实现4个LED 灯动态显示,靠的是位选电路2位选电路四位共阳LED数码管,其标号分别为HourH,HourL,MinL,MinH,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作;虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示;P0口作为输出口控制8个发光二极管的亮灭,控制数码管的显示;因此,可以实现4个LED在我们看来同时亮,显示时间;3)闹铃部分:使用蜂鸣器实现闹钟功能其中,buzzer端口接到单片机的输出;端口连接在最后介绍4)开关部分:使用了5个开关控制整个电路的启动,修改时间,设置闹钟,关闭电路等功能为查询方式典型电路;其中Setbutton为复位开关,swtich为转换模式开关,即工作模式和调时间模式,Increase为调时间模式中控制时间变化的按钮,STRAT和STOP分别为开启和结束按钮,这5个开关分别接到端口,以控制其输入;5)串转并电路为了进一步节省I/O口,有添加了一个额外的串转并电路由以上电路,我们将扩展到7个I/O口,我们采用的是74HC595芯片,管脚图如下:7复位电路整体电路图如下:四、软件设计由于汇编语言繁琐,我们采用的是C语言编程,源程序及注释如下:include <>include <>//时分define TYPE unsigned chardefine HOUR 0define MIN 1//显示状态define NORMAL 0define BELLTIME 1define SETTING_N 2define SETTING_C 3//闪烁显示define NoMask 0define MaskHour 1define MaskMin 2define MaskAll 3define uchar unsigned chardefine uint unsigned int//Bit Definition//数码管sbit HourH = P1^3; //低电平,数码管使能sbit HourL = P1^4;sbit MinH = P1^5;sbit MinL = P1^6;//蜂鸣器sbit Buzzer = P1^7; //低电平,蜂鸣器响//键盘sbit SetButton = P2^0;//按键定义,设置正常,定时显示切换键,时位分位转换键,增加键sbit Switch =P2^1;sbit Increase = P2^2;sbit Start = P2^3;sbit Stop = P2^4;//LEDsbit SecLed = P2^5; //秒显示,低电平点亮sbit ClockStartLED = P2^6; //闹钟定闹开始//74HC595 输入管脚定义sbit SH_CP = P1^0;sbit DS = P1^1;sbit ST_CP = P1^2;//Function Definitionvoid delay5msvoid;void Clock;void Display;void Set;void Ring;void StopRing;void ShowANumuchar i;void StartRing;void delaykeyvoid;void MaskShowuchar Num,TYPE t;//Variable Definition//正常时间uchar hour=8;uchar min=0;uchar sec=0;uint count=0;//闹钟定时uchar mp=1;uchar st=0;uchar cHour=8;uchar cMin=0;//模式标示uchar displayMode=NORMAL;uchar currentSelect=HOUR;//数码管数字显示编码uchar H1;uchar H2;uchar M1;uchar M2;uchar temp;uchar codeDSY_CODE={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //闪烁显示uchar MaskType=NoMask;uint blinkcount=0;//音乐uchar p=0;uchar temp=0;uchar jiepai=0;uchar yindiao=0;uchar Pai1_4=20;uchar jpLength=0;//音调数组unsigned char code music={0xFF,0xFF,0xF8,0x89,0xf9,0x59,0xfa,0x13,0xfa,0x68,0xfb,0x04,0xfb,0x90,0x fc,0x0c,0xfc,0x44,0xfc,0xad,0xfd,0x0a,0xfd,0x34,0xfd,0X82,0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1,0xfe,0xe4,0xff,0x03,0xff,0x11};//音乐编码unsigned char code Mmusic={////音阶测试//1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,//9,4,10,4,11,4,12,4,13,4,14,4,15,4,//16,4,17,4,18,4,19,4,20,4,21,4,22,4,//两只老虎1,4,2,4,3,4,1,8,1,4,2,4,3,4,1,8,3,2,4,8,5,5,3,2,4,8,5,5,5,5,6,2,5,5,4,4,3,4,1,8,5,5,6,2,5,5,4,4,3,4,1,8,3,4,1,4,2,8,3,4,1,4,2,8 ,0xff,0x00//结束标记};void main{//设置T0,T1TMOD = 0x11;TH0 = 0x0EC;TL0 = 0x78;TH1 = 0x0F0;TL1 = 0x60;ET0=1;ET1=1;EA=1;TR0=1;//设置定时器的优先级PT0=1; //5ms标准时钟设为高优先级,保证计时的准确性PT1=0;//顺序执行主循环while1{//设置何时开启T1定时器ifdisplayMode=NORMAL||mp==0 TR1=1;else{TR1=0;MaskType=NoMask;}//方法并行Display;Display;Set;StartRing;Ring;StopRing;}}void Clock interrupt 1{TH0 = 0x0EC;TL0 = 0x78;count++;ifmp==0{//控制音乐节拍ifjpLength--<=0{jiepai=Mmusic2p+1;jpLength=Pai1_4jiepai; //控制每个音调持续多少个1/4节拍p++;ifMmusic2p+1==0x00p=0; //重放//控制屏幕随乐曲闪烁ifMaskType==NoMaskMaskType=MaskAll;elseMaskType=NoMask;}}ifcount%100==0//控制秒灯闪烁,每秒闪一次{SecLed=~SecLed;}}void MaskClock interrupt 3{ifmp==0 //生成音调频率方波{yindiao=Mmusic2p;TH1=music2yindiao;TL1=music2yindiao+1;Buzzer=~Buzzer;}else //响铃时,屏蔽闪烁显示的功能{ifdisplayMode==BELLTIME||displayMode==SETTING_C {TH1 = 0x0F0;TL1 = 0x60;}else{TH1 = 0x0F8;TL1 = 0x30;}blinkcount++;ifblinkcount>=100{blinkcount=0;ifdisplayMode==BELLTIME{ifMaskType==NoMaskMaskType=MaskAll;elseMaskType=NoMask;}else ifdisplayMode==SETTING_C||displayMode==SETTING_N {ifcurrentSelect==HOUR{ifMaskType==NoMaskMaskType=MaskHour;elseMaskType=NoMask;}ifcurrentSelect==MIN{ifMaskType==NoMaskMaskType=MaskMin;elseMaskType=NoMask;}}}}}void StartRing{ifStart==0{ClockStartLED=0;st=1;Start=1;}}void Ring{ifst==1&&cHour==hour&&cMin==min {//Buzzer=0;mp=0;}}void StopRing{ifStop==0{Buzzer=1;mp=1;p=0;ClockStartLED=1;st=0;MaskType=NoMask;}}void Display{//分析COUNT,合成HOUR,MIN ifcount>=200{count=count-200;sec++;ifsec==60{sec=0;min++;ifmin==60{min=0;hour++;ifhour==25{hour=0;}}}}//显示时间ifdisplayMode==NORMAL||displayMode==SETTING_N {HourH=1;HourL=1;MinH=1;MinL=1;H1=hour/10;H2=hour%10;M1=min/10;M2=min%10;MaskShowH1,HOUR;HourH=0;delay5ms;HourH=1;MaskShowH2,HOUR;HourL=0;delay5ms;HourL=1;MaskShowM1,MIN;MinH=0;delay5ms;MinH=1;MaskShowM2,MIN;MinL=0;delay5ms;MinL=1;}ifdisplayMode==BELLTIME||displayMode==SETTING_C{H1=cHour/10;H2=cHour%10;M1=cMin/10;M2=cMin%10;MaskShowH1,HOUR;HourH=0;delay5ms;HourH=1;MaskShowH2,HOUR;HourL=0;delay5ms;HourL=1;MaskShowM1,MIN;MinH=0;delay5ms;MinH=1;MaskShowM2,MIN;MinL=0;delay5ms;MinL=1; }}void MaskShowuchar Num,TYPE t {ifMaskType==MaskHour{ift==HOURShowANum10;elseShowANumNum;}else ifMaskType==MaskMin{ift==MINShowANum10;elseShowANumNum;}else ifMaskType==MaskAll{ShowANum10;}elseShowANumNum; }void ShowANumuchar Num{uchar i;temp=DSY_CODENum;//串行输入74HC595fori=0;i<8;i++{temp<<=1;DS=CY;SH_CP=1;_nop_;nop_;SH_CP=0;}//传送至存储寄存器,出现在输出端ST_CP=0;_nop_;ST_CP=1;_nop_;ST_CP=0;}void Set{//响铃时,显示模式锁定在正常,停闹后解除ifmp==0{displayMode=NORMAL;}//显示转换键作用注:响铃时,屏蔽显示转换ifmp=0&&SetButton==0{delaykey;ifSetButton==0{displayMode++;ifdisplayMode>=4displayMode=0;}}//设置模式下,时分转换键作用ifSwitch==0&&displayMode==SETTING_C||displayMode==SETTING_ N{delaykey;ifSwitch==0currentSelect=currentSelect;}//设置模式下,数值增加键作用ifIncrease==0&&displayMode==SETTING_C {delaykey;ifIncrease==0{ifcurrentSelect==HOUR{cHour++;ifcHour>=25cHour=0;}else{cMin++;ifcMin>=60cMin=0;}}}ifIncrease==0&&displayMode==SETTING_N {delaykey;ifIncrease==0{ifcurrentSelect==HOUR{hour++;ifhour>=25hour=0;}else{min++;ifmin>=60min=0;}}}}void delay5msvoid //精确延时5毫秒{unsigned char a,b;forb=19;b>0;b--fora=130;a>0;a--;}void delaykeyvoid //按键去抖延时{unsigned char a,b;forb=173;b>0;b--fora=143;a>0;a--;}五、总结本次实验,我主要负责分配任务和部分程序的编写;在这次实验中,特别是在编程方面和电路设计方面,为了做这个电子时钟,我们组把单片机的书读了许多遍,包括单片机结构原理、指令、定时器、中断、子程序调用、LED显示等等,同时也自学了许多知识,包括如何用C语言来编写单片机程序,当然在编程和调试过程中遇到了许多困难;整个实验下来,得到许多课堂上体验不到的知识和快乐,扩展了思路,提高了能力,可以说,经过这次实验,我们对单片机才算真正有了一个深刻的认识;以下便是我们组所焊接的单片机,作为成果展示;。

相关文档
最新文档