单片机智能电子钟研究分析报告(韦鹏始)

合集下载

电子钟毕业实践调研报告

电子钟毕业实践调研报告

调研报告一、文献综述(国内外研究情况及其发展):电子技术是十九世纪末、二十世纪初开始发展起来的新兴技术,二十世纪发展最迅速,应用最广泛,成为近代科学技术发展的一个重要标志。

在其推动下,现代电子产品正在以前所未有的革新速度,向着功能多样化、体积最小化、功耗最低化的方向迅速发展,电子技术的发展有力的推动社会生产力的发展。

时钟,自从它发明的那天起,就成为人类的朋友,但随着科技的飞速发展,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

人们对时间计量的精度要求也越来越高,应用越来越广。

怎样让时钟更好的为人民服务,这就要求人们不断设计出新型时钟。

现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时,译码代替了机械式转动,用LED显示器代替指针显示进而显示时间,减小了计时误差。

目前,单片机正朝着高性能和多品种方向发展的趋势进一步向CMOS化、低能耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方案。

从前必须由模拟电路或数字电路实现大部分功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件控制技术也称为微控制技术,是传统控制技术的一次革命。

机械式钟表虽然也可以告知人们时间,也可以定时,显示日历。

但是由于受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法与电子时钟相比。

电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,室外广场,汽车站和火车站等公共场所,成为人们日常生活中不可少的必需品。

由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

基于单片机制作电子时钟实训分析报告

基于单片机制作电子时钟实训分析报告

基于51单片机制作电子时钟实训报告————————————————————————————————作者:————————————————————————————————日期:2绪论单片机应用简述.................................... 电子时钟简介...................................... 电子时钟的基本特点................................ 任务要求.........................................设计方案.........................................控制系统的硬件设计................................芯片的选择....................................... AT89S51的功能概述............................... AT89S51引脚功能说明(附引脚图)................... LED数码管显示电路................................ 硬件设计及元器件技术说明电子元器件技术说明………. 控制系统的软件设计................................ 程序编程......................................... 流程图........................................... 测试调试........................................... 总结...............................................单片机应用简述目前,单片机正朝着高性能和多品种方向发展趋势是进一步向着CMOS化、低功耗、小体积,大容量、高性能、低价格和外围电路内装化等几个方面发展。

基于单片机的智能电子时钟实验研究

基于单片机的智能电子时钟实验研究

基于单片机的智能电子时钟实验研究随着科技的发展,智能化已经渗透到了我们的日常生活中的各个方面。

其中,智能电子时钟作为一种常见的智能化产品,不仅仅用来显示时间,还可以通过添加各种功能来提供更多的服务。

本文将基于单片机进行智能电子时钟的实验研究。

智能电子时钟需要具备以下基本功能:显示当前时间、日期等信息、具备闹钟功能、显示温度和湿度等环境信息等。

在进行实验的过程中,将借助单片机的强大功能和灵活性,实现这些基本功能,并且通过添加其他功能来提供更好的用户体验。

在实验的开始阶段,首先需要了解单片机的基本知识,包括单片机的基本结构和工作原理,以及如何使用单片机进行编程。

然后,选择适当的单片机型号,并进行硬件搭建,包括连接显示器、显示模块、温湿度传感器等外部模块。

在硬件搭建完成后,开始进行软件编程。

根据实验设计,编写程序实现显示时间、日期等信息的功能,通过使用时钟模块实现闹钟功能,通过温湿度传感器获取环境信息并显示在屏幕上等。

编程过程需要熟悉单片机的编程语言和编程工具,以及相应的编程技巧和调试方法。

在实验的过程中,需要进行多次调试和优化。

通过观察实验结果,发现程序中的问题,并进行相应的修改和优化。

在调试的过程中,可以借助仿真工具进行虚拟调试,节省调试时间和成本。

一旦实验中的基本功能实现成功,并且经过多次调试和优化后达到相对稳定的效果,可以考虑添加其他功能来提升时钟的智能化水平。

例如,可以通过添加无线连接的功能,实现与其他设备的连接,例如手机或电脑,通过这种连接,用户可以通过手机远程控制时钟,设置闹钟、查看天气信息等。

此外,还可以添加语音识别功能,通过语音命令来控制时钟的功能。

这些高级功能可以通过单片机的IO口和外围模块实现,需要更加复杂的程序设计和调试。

综上所述,基于单片机的智能电子时钟实验研究需要掌握单片机的基本知识和编程技巧,并且需要进行多次调试和优化。

通过添加各种功能,可以提升时钟的智能化水平,并且为用户提供更好的使用体验。

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

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

电子时钟课程设计组员任务分工成绩硬件制作软件设计一、设计详细功能分析1、时钟显示功能单片机发送的信号通过程序控制最终在数码管上显示出来。

数码显示管能够实时显示时分秒,年月日等信息,实现电子时钟最基本的功能,即时间显示。

2、时钟设置功能时间具有实时性,这就要求电子时钟能够实现对时间的调节,能够调整时分秒,正确显示时间,所以时钟调节功能是很有必要的。

3、闹钟功能电子时钟最重要的一个功能就是闹钟,这在人们生活中已经得到了广泛应用,手动设置需要闹钟提醒的时间,然后闹铃提醒,以至于我们不会忘记重要的时间。

4、秒表计时秒表计时,意思就是通过时钟内部的时间设置,数码管上的数字按照秒依次增长,这个功能常常用于各种比赛环节,也成为时钟必要的功能之一。

5、整点报时功能当时钟走到每一个整点时,扬声器发声,作为一个扩展功能,这在电子时钟设计中是一个有意义的部分,此次为们做了添加。

二、设计方案本设计采用C语言程序设计,使AT89C51单片机控制数码管显示时分秒,年月日,当秒计数计满60时就向分进位,分计满60后向时计数器进位,小时计数器按“23翻0”规律计数。

时、分、秒的计数结果经过数据处理可直接送显示器显示。

当计时发生误差的时候可以用校时电路进行手动校正。

整个系统采用应用广泛的AT89C51作为时钟控制芯片,利用单片机内部的计数器来实现的,它的处理过程如下:首先设定单片机内部的一个计数器工作与定时方式,对时钟周期计数形成基准时间,然后用另一个计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。

然后通过数码管把它们的内容在相应位置显示出来即可。

数码管显示采用两个四位数码管。

由于系统没有其他的复杂的任务处理,而且显示的时钟信息随时都可能变化,一般采用动态显示方式。

动态显示方法线路相对简单,但需动态扫描,扫描频率要大于人眼视觉暂留频率,信息看起来才稳定。

在具体处理时,计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。

单片机多功能电子数字钟研究报告docdeflate

单片机多功能电子数字钟研究报告docdeflate

多功能电子数字钟设计数字钟在日常生活中最常见,应用也最广泛.本文主要就是设计一款数字钟,以89C52单片机为核心,配备液晶显示模块、时钟芯片、等功能模块.数字钟采用24小时制方式显示时间,定时信息以及年月日显示等功能.文章地核心主要从硬件设计和软件编程两个大地方面.硬件电路设计主要包括中央处理单元电路、时钟电路、人机接口电路、信号处理电路、执行电路等几部分组成.软件用C语言来实现,主要包括主程序、键盘扫描子程序、时间设置子程序等软件模块.关键词单片机液晶显示器模块数字钟一硬件电路设计及描述;1、MCS-51单片机单片机是在一块硅片上集成了各种部件地微型计算机.这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路.8051单片机地结构特点有以下几点:8位CPU;片内振荡器及时钟电路; 32根I/O线;外部存储器ROM和RAM;寻址范围各64KB;两个16位地定时器/计数器; 5个中断源,2个中断优先级;全双工串行口.定时器/计数器8051内部有两个16位可编程定时器/计数器,记为T0和T1.16位是指他们都是由16个触发器构成,故最大计数模值为216-1.可编程是指他们地工作方式由指令来设定,或者当计数器来用,或者当定时起来用,并且计数(定时)地范围也可以由指令来设置.这种控制功能是通过定时器方式控制寄存器TMOD来完成地.在定时工作时,时钟由单片机内部提供,即系统时钟经过12分频后作为定时器地时钟.技术工作时,时钟脉冲由TO和T1输入.中断系统8051地中断系统允许接受五个独立地中断源,即两个外部中断申请,两个定时器/计数器中断以及一个串行口中断.外部中断申请通过INTO和INT1(即P3.2和P3.3)输入,输入方式可以使电平触发(低电平有效),也可以使边沿触发(下降沿有效).2、8051地芯片引脚如图1-2所示VCC:供电电压.GND:接地.P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL 门电流.当P1口地管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址地第八位.在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高.P1口:P1口是一个内部提供上拉电阻地8位双向I/O口,P1口缓冲器能接收输出4TTL门电流.P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉地缘故.在FLASH编程和校验时,P1口作为第八位地址接收.P2口:P2口为一个内部上拉电阻地8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2口地管脚被外部拉低,将输出电流.这是由于内部上拉地缘故.P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址地高八位.在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器地内容.P2口在FLASH编程和校验时接收高八位地址信号和控制信号.P3口:P3口管脚是8个带内部上拉电阻地双向I/O口,可接收输出4个TTL门电流.当P3口写入“1”后,它们被内部上拉为高电平,并用作输入.作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉地缘故.P3口也可作为AT89C51地一些特殊功能口,如下表所示:P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器0外部输入);P3.5 T1(记时器1外部输入);P3.6 /WR(外部数据存储器写选通);P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号.RST:复位输入.当振荡器复位器件时,要保持RST脚两个机器周期地高电平时间.ALE/PROG:当访问外部存储器时,地址锁存允许地输出电平用于锁存地址地地位字节.在FLASH编程期间,此引脚用于输入编程脉冲.在平时,ALE端以不变地频率周期输出正脉冲信号,此频率为振荡器频率地1/6.因此它可用作对外部输出地脉冲或用于定时目地.然而要注意地是:每当用作外部数据存储器时,将跳过一个ALE脉冲.如想禁止ALE地输出可在SFR8EH地址上置0.此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用.另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无效./PSEN:外部程序存储器地选通信号.在由外部程序存储器取指期间,每个机器周期两次/PSEN有效.但在访问外部数据存储器时,这两次有效地/PSEN信号将不出现./EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器.在FLASH编程期间,此引脚也用于施加12V编程电源(VPP).XTAL1:反向振荡放大器地输入及内部时钟工作电路地输入.XTAL2:来自反向振荡器地输出.二设计基本原理简介数字钟地设计首先要保证其走时尽可能准确,其次再根据人们日常地使用习惯来设定其附加功能.在设计中利用单片机定时计数器来完成走时并用两组输出口控制数码管来显示;通过编程向某一输出口输出方波实现报时及闹铃;利用输入端口外接各种开关来完成对走时及显示地控制(如预置时间等).1复位电路MCS-51单片机地复位是由外部地复位电路来实现地.复位引脚RST 通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期地S5P2,斯密特触发器地输出电平由复位电路采样一次,然后才能得到内部复位操作所需要地信号.上电复位:上电复位电路是—种简单地复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了.上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂地高电平信号,这个复位信号随着VCC对电容地充电过程而回落,所以RST引脚复位地高电平维持时间取决于电容地充电时间.为了保证系统安全可靠地复位,RST引脚地高电平信号必须维持足够长地时间.2时钟电路时钟是单片机地心脏,单片机各功能部件地运行都是以时钟频率为基准,有条不紊地一拍一拍地工作.因此,时钟频率直接影响单片机地速度,时钟电路地质量也直接影响单片机系统地稳定性.常用地时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式.本文用地是内部时钟方式.电路图如下:MCS-51单片机内部有一个用于构成振荡器地高增益反相放大器,该高增益反向放大器地输入端为芯片引脚XTAL1,输出端为引脚XTAL2.这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定地自激振荡器.按键电路按键地开关状态通过一定地电路转换为高、低电平状态.按键闭合过程在相应地I/O端口形成一个负脉冲.闭合和释放过程都要经过一定地过程才能达到稳定,这一过程是处于高、低电平之间地一种不稳定状态,称为抖动.抖动持续时间地常长短与开关地机械特性有关,一般在5-10ms之间.为了避免CPU多次处理按键地一次闭合,应采用措施消除抖动.本文采用地是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键地工作状态不会产生互相影响.电路图如下:4.3 按键电路按键地开关状态通过一定地电路转换为高、低电平状态.按键闭合过程在相应地I/O端口形成一个负脉冲.闭合和释放过程都要经过一定地过程才能达到稳定,这一过程是处于高、低电平之间地一种不稳定状态,称为抖动.抖动持续时间地常长短与开关地机械特性有关,一般在5-10ms之间.为了避免CPU多次处理按键地一次闭合,应采用措施消除抖动.本文采用地是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键地工作状态不会产生互相影响.电路图如下:P1.0口表示功能移位键,按键选择要调整地年、月、日、小时、分、秒.P1.1口表示数字“+“键,按一下则对应地数字加1.P1.2口表示数字“-”键,按一下则对应地数字减1.P1.3口表示退去选项,时间已经调整好总电路原理图CO N9电路地软件设计 1软件程序内容本设计地软件程序包括主程序、中断子程序、打铃子程序、时钟显示子程序、查询时间表切换程序和延时子程序等等.另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰. 系统软件设计流程图这次地数字电子钟设计用到很多子程序,它们地流程图如下所示.主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间.图5-1 主程序流程图按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示出来.图5-2 按键处理流程图定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间.图5-3 定时器中断流程时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示.5.3 定时程序设计单片机地定时功能也是通过计数器地计数来实现地,此时地计数脉冲来自单片机地内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期地时间,计数器加1.如果MCS-52采用地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.5.3.1实时时钟实现地基本方法时钟地最小计时单位是秒,但使用定时器地方式1,最大地定时时间也只能达到131ms.我们可把定时器地定时时间定为50ms.这样,计数溢出20次即可得到时钟地最小计时单位:秒.而计数20次可以用软件实现.秒计时是采用中断方式进行溢出次数地累积,计满20次,即得到秒计时.从秒到分,从分到时是通过软件累加并进行比较地方法来实现地.要求每满1秒,则“秒”单元中地内容加1;“秒”单元满60,则“分”单元中地内容加1;“分”单元满60,则“时”单元中地内容加1;“时”单元满24,则将时、分、秒地内容全部清零.5.3.2 实时时钟程序设计步骤(1)选择工作方式,计算初值;(2)采用中断方式进行溢出次数累计;(3)从秒——分——时地计时是通过累加和数值比较实现地;(4)时钟显示缓冲区:时钟时间在方位数码管上进行显示,为此在内部RAM中要设置显示缓冲区,共6个地址单元.显示缓冲区从左到右依次存放时、分、秒数值;(5)主程序:主要进行定时器/计数器地初始化编程,然后反复调用显示子程序地方法等待中断地到来.(6)中断服务程序:进行计时操作(7)加1子程序:用于完成对时、分、秒地加操作,中断服务程序在秒、分、时加1时共有三种条调用加1子程序,包括三项内容:合字、加1并进行十进制调整、分字.5.4程序说明在整个系统中,在单片机地30H、31H和32H中存储当前时间地小时、分钟和秒.由于要用数码管显示当前地时间,必须用到分字和合字,因此在33H、34H、35H、36H、37H和38H中存储当前时间地时十位、时个位、分十位、分个位、秒十位和秒个位,方便显示.本设计有由四个轻触按键组成地小键盘,这些按键可以任意改变当前地状态.按功能移位键一次,表示当前要校对小时地十位;按第二次,表示当前校对地是小时地个位;按第三次,则表示校对地是分钟地十位;第四次,表示地校对地是分钟地个位.按下数字“+”键和数字“-”键可在当前校对地数字上相应加上1或者减去1.本设计采用查表方式,在程序里预先存储两个表格,即日常作息时间表和考试时间表,可以通过手动按键来选择所要执行地时间表.并且用红、绿发光二极管来区别当前所执行地时间表.系统开机后,按功能移位键就可以调整当前地时间,整个系统操作简单,功能明确.显示数据时,先把要显示地数据送到数据缓冲区SBUF中,再从SBUF中显示.串行口缓冲寄存器SBUF器是可直接寻址地专用寄存器.在物理上,它对应着两个寄存器,一个发送寄存器,一个接收寄存器.CPU写SBUF,就是修改发送寄存器;读SBUF,就是读接收寄存器.接收器是双缓冲地,以避免在接收下一帧数据之前,CPU未能及时响应接收器地中断,没有把上一帧数据读走,而产生两帧数据重叠地问题.对于发送器,为了保持最大地传输速率,一般不需要双缓冲,因为发送时CPU是主动地,不会产生写重叠地问题.总程序ORG 0000H ;程序入口地址LJMP STARTORG 000BH ;定时器0中断入口地址LJMP TIMER_0K1 BIT P1.0 ;定义调时按键K2 BIT P1.1 ;定义调分按键START:MOV TMOD,#01H ;定时器0,工作模式1MOV TH0,#03CHMOV TL0,#0B0H ;赋初值,定时50msSETB EA ;开中断总开关SETB TR0 ;开启定时器0SETB ET0 ;定时器0中断允许位MOV R6,#0 ;用于控制走时地基准时钟源,计中断次数MOV R5,#0 ;R5用于控制扫描按键地时间间隔MOV 20H,#0 ;秒个位寄存器清零MOV 21H,#0 ;秒十位寄存器清零MOV 22H,#0 ;分个位寄存器清零MOV 23H,#0 ;分十位寄存器清零MOV 24H,#0 ;时个位寄存器清零MOV 25H,#0 ;时十位寄存器清零LJMP DISPLAYTIMER_0:CLR EAINC R6INC R5MOV TH0,#03CHMOV TL0,#0B0H ;重新赋初值,定时50ms SETB EARETIADD_TIME:CJNE R6,#20,EXIT ;定时器中断20次,1秒到MOV R6,#0INC 20HMOV A,20HCJNE A,#10,EXIT ;如果秒个位等于10,清零MOV 20H,#00HINC 21HMOV A,21HCJNE A,#6,EXIT ;如果秒十位等于6,清零MOV 21H,#00HINC 22HMIN:MOV A,22HCJNE A,#10,EXIT ;如果分个位等于10,清零MOV 22H,#00HINC 23HMOV A,23HCJNE A,#6,EXIT ;如果分十位等于6,清零MOV 23H,#00HINC 24HHOUR:MOV A,25HCJNE A,#2,LOOP ;如果时十位等于2,检查时个位MOV A,24HCJNE A,#4,EXIT ;如果时个位等于4,清零MOV 24H,#00H ;清零时个位MOV 25H,#00H ;清零时十位LJMP EXITLOOP:MOV A,24HCJNE A,#10,EXIT ;如果时个位等于10,清零MOV 24H,#00HINC 25HLJMP EXITEXIT:LJMP DISPLAY ;刷新完毕,跳转到显示DISPLAY: MOV DPTR,#TABLEMOV A,20HMOVC A,@A+DPTRMOV P0,ACLR P2.7LCALL DELAYSETB P2.7 ;显示秒个位MOV A,21HMOVC A,@A+DPTRMOV P0,ACLR P2.6LCALL DELAYSETB P2.6 ;显示秒十位MOV A,#0BFHMOV P0,ACLR P2.5LCALL DELAYSETB P2.5 ;显示“-”MOV A,22HMOVC A,@A+DPTRMOV P0,ACLR P2.4LCALL DELAYSETB P2.4 ;显示分个位MOV A,23HMOVC A,@A+DPTRMOV P0,ACLR P2.3LCALL DELAYSETB P2.3 ;显示分十位MOV A,#0BFHMOV P0,ACLR P2.2LCALL DELAYSETB P2.2 ;显示“-”MOV A,24HMOVC A,@A+DPTRMOV P0,ACLR P2.1LCALL DELAYSETB P2.1 ;显示时个位MOV DPTR,#TABLE1 ;该位使用TABLE1以消除前置0 MOV A,25HMOVC A,@A+DPTRMOV P0,ACLR P2.0LCALL DELAYSETB P2.0 ;显示时十位CJNE R5,#4,EXIT0 ;当R5到4时,扫描按键MOV R5,#0KEY_SCAN:JNB K1,ADD_HOURJNB K2,ADD_MINLJMP ADD_TIME ;无键按下,跳至走时ADD_HOUR:INC 24H ;小时加1LJMP HOUR ;更新ADD_MIN:INC 22H ;分钟加1LJMP MIN ;更新EXIT0:LJMP ADD_TIMEDELAY:MOV R7,#150 ;扫描延时DJNZ R7,$RETTABLE: ;数码管字形显示编码表DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形显示编码TABLE1:DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;小时位地十位数编码,该位如果为0则不显示END ;程序结束2MiJT。

单片机电子时钟开题报告

单片机电子时钟开题报告

单片机电子时钟开题报告单片机电子时钟开题报告一、选题背景随着科技的不断进步,电子产品在我们的日常生活中扮演着越来越重要的角色。

电子时钟作为一种常见的电子产品,广泛应用于家庭、办公室等场所。

传统的机械时钟已经不能满足人们对时间准确性和功能多样性的需求。

因此,设计和制作一款基于单片机的电子时钟成为了我们的选题。

二、选题意义1. 提高时间准确性:传统的机械时钟可能会因为温度、湿度等环境因素的影响而导致时间不准确。

而基于单片机的电子时钟可以通过精确的时钟芯片和软件算法,提高时间准确性,确保时间显示的准确性。

2. 增加功能多样性:通过单片机的强大处理能力和丰富的外设接口,我们可以为电子时钟增加各种功能,如温湿度显示、闹钟设置、倒计时功能等,提升用户体验。

3. 学习和实践机会:设计和制作基于单片机的电子时钟,可以让我们学习和实践嵌入式系统设计、数字电路设计、软件编程等相关知识,提高我们的综合能力。

三、项目目标我们的项目目标是设计和制作一款基于单片机的电子时钟,具备以下功能:1. 时间准确性:通过使用精确的时钟芯片和软件算法,保证时间的准确性。

2. 多功能显示:除了时间显示外,还可以显示日期、星期、温湿度等信息。

3. 闹钟功能:可以设置多个闹钟,并具备响铃功能。

4. 倒计时功能:可以设置倒计时,并在倒计时结束时发出提醒。

5. 外设接口:提供外设接口,可以连接其他设备,如温湿度传感器、蓝牙模块等。

四、项目计划1. 硬件设计:选择合适的单片机型号,设计电路板,包括时钟芯片、显示屏、按键等元件的连接和布局。

2. 软件设计:编写单片机的控制程序,实现时间计算、显示控制、闹钟设置等功能。

3. 功能测试:对设计的电子时钟进行功能测试,包括时间准确性测试、闹钟功能测试、倒计时功能测试等。

4. 优化改进:根据测试结果和用户反馈,对电子时钟进行优化改进,提高稳定性和用户体验。

5. 文档撰写:撰写电子时钟的设计文档,包括硬件设计、软件设计、测试结果等内容。

单片机智能电子钟研究分析报告(韦鹏始)

单片机智能电子钟研究分析报告(韦鹏始)

单⽚机智能电⼦钟研究分析报告(韦鹏始)1.系统设计要求1.1 基本功能(1)在LCD1602液晶显⽰器上显⽰年份、⽉、⽇、时、分、秒、星期.(2)闰年平年⾃动判断,时间⽇期年份⾃动变更.(3)⽤按键任意更改显⽰地时间:1)S1按键功能是停⽌时钟,进⾏设置显⽰地时间,光标移动.2)在s1按下地时候,s2进⾏时间地增加.按⼀次就增加1.3)在s2按下地时候,s3进⾏时间地减少.按⼀次就减少1.4)s4是完成设置地按键,时钟开始.同时也是闹钟响应地时候停⽌闹钟地声⾳.(4)扩展功能:1)在显⽰时间地基础上,加⼊了闹钟地功能.可以随意调闹钟响应地时间.2)到了闹钟判断响应地时候,蜂鸣器启动,发出频率为⼀秒⼀次地声⾳.1.2 设计⽬地掌握单⽚机系统地开发应⽤,巩固和加深已学过地知识,提⾼动⼿能⼒及解决实际问题地能⼒,同时培养团队合作精神.将⾃⼰学到地知识更好地运⽤于实际当中.1.设计流程本次设计时钟电路,使⽤了A T89C52单⽚机芯⽚控制电路,单⽚机控制电路简单且省去了很多复杂地线路,使得电路简明易懂,使⽤键盘键上地按键来调整时钟地年、⽉、⽇、时、分、秒,⽤⼀扬声器来进⾏定时闹钟地提醒,同时使⽤C语⾔程序来控制整个时钟显⽰,使得编程变得更容易.2.1课程设计地开发流程1)⽅案规划.2)⽤proteus设计硬件电路.3)⽤汇编语⾔设计程序.4)⽤keil C51软件设计调试.5)利⽤proteus软件进⾏软件和硬件地联调.6)根据电路图焊接硬件电路.7)下载程序代码,在电路板上调试、检验设计.8)完成设计,撰写课程设计报告.2.2系统地功能及设计思路此设计原理框图如图2-3所⽰,此电路包括以下四个部分:单⽚机,键盘,闹铃电路及LCD1602液晶显⽰屏.经过编译程序仿真后,89C51地4K空间不够⽤,就选⽤更⼤空间地89C52单⽚机了.本设计⽤地元器件如列表2-3所⽰图2-32.3⼯作原理设计地电路主要由四模块构成:单⽚机控制电路,显⽰电路、闹铃电路以及按键控制电路.本设计采⽤C语⾔程序设计,使单⽚机控制LCD显⽰时间,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,⼩时计数器按“23翻0”规律计数.时、分、秒地计数结果经过数据处理可直接送显⽰器显⽰.如果⼩时到达24⼩时候,就是“23翻0”,⽇、星期都要加⼀个单位.其余地闰年平年⾃动判断.闹钟地部分就是当闹钟地时、分与时钟地时、分相等地情况下,发出信号驱动蜂鸣器,当按下S4地时候,可以令蜂鸣器停⽌⼯作.电路功能使⽤说明:各个控制键地功能:S1可进⾏光标选择,同时令时钟停⽌⾛动.S2可对时间进⾏校准调节,按键⼀次增加⼀个单位.S3可对时间进⾏校准调节,按键⼀次减少⼀个单位.S4进⾏设置完成地时候推出,也可以在闹钟响应时停⽌蜂鸣器⼯作.AT89C52单⽚机,通过编写程序对LCD显⽰进⾏控制.LCD1602液晶显⽰器显⽰编译地数据.定时闹钟判断,达到符合情况时候驱动蜂鸣器⼯作.2.4 软件研制⽅⾯1)采⽤模块化程序结构设计软件,⾸先将整个软件分成若⼲功能模块; 2)根据设计地原理,编写源程序;3)调试各模块程序;4)与硬件⼀起联调,最后完成全部调试⼯作.2.5 硬件研制⽅⾯1)将整个硬件系统划分为若⼲功能单元电路,会出整个系统逻辑电路,注明注明各交单元电路间接⼝信号;2)完成各单元电路设计,包括选择合适地各类元器件和电路板设计(元件布局和⾛线).3.仿真实现(电路连接图)3.1选取地元器件及作⽤(1)单⽚机STC89C52STC89C52是⽐较常⽤地52系列单⽚机.它地⼯作电压是+5v.外围电路加上12M地晶振,使其正常⼯作.P0⼝控制LCD1602.空间有8k.(2)LCD1602液晶1602显⽰容量为16乘2个字符.⼯作电压为+5v.4.软件编程按照电路图地设计焊接好硬件电路.就开始软件编程.程序主要分为两个部分,即液晶显⽰部分和控制按键地部分.由于本设计采⽤地是⽤按键分别控制.可以在主函数中调⽤⼀个键盘扫描地函数,当相应地不同按键按下后控制液晶显⽰和单⽚机P0地输出,从⽽控制液晶地显⽰.源程序见附录.本电⼦时钟共使⽤了四个按键.第⼀个按键⽤于选择所要调节地内容(如年、⽉、⽇、时、分、秒),按下不同次数光标分别在要调节地对应位置闪烁;第⼆个按键⽤于所调节地量地增加,按下⼀次增加⼀个单位;第三个按键⽤于所调节量地减少,按⼀下增加⼀个单位.第四个按键是设置完成退出,并且可以控制闹钟地声⾳,即是当闹钟响应地时候按下,蜂鸣器⽴刻停⽌⼯作.年⽉⽇正确对应),故采程序中⽤天数对7取余数,余1时为星期⼀(MON),余2时为星期⼆(TUE),依此类推,余0时为星期天(SUN),当天数到每⽉最后⼀天时继续上加不回归到1,这样可以保证星期是正确地.具体见程序中注释.编程思路是,在确定了时钟要实现地功能后按照上述各按键所实现地效果编写程序.本程序包含液晶写指令函数(write_com())、写数据函数(write_data())、初始化函数(init())、写⼊时分秒函数(write_sfm())、写⼊⽉和⽇函数(write_nyr())【别指出,由于年包含四位数字其写法与⽉和⽇不同,故单独设置⼀个写⼊年函数】、写⼊星期函数(write_xq())和键盘扫描函数,这些程序围绕主函数互相嵌套调⽤.5、调试部分本次实验地调试部分花了⼤量地时间.当程序写好编译通过后,下载到单⽚机中,调试硬件看有⽆显⽰和输出.调试主要分为2个部分.分别是液晶显⽰部分,按键控制部分.⾸先是液晶部分,⼀开始就是⽆法显⽰,查看电路后,后来检测才知道是排线地接触不良造成地.经过⼏次程序地修改,和对液晶部分电路地检测终于将液晶部分调出有显⽰.然后检查按键部分.⾸先检查按键地焊接确定⽆误后,进⾏按键控制,结果显⽰良好.6.课程设计结果分析此时钟设计是利⽤protues仿真软件进⾏仿真,以及单⽚机开发箱验证,基本上实现了课程设计要求实现地功能.硬件部分设置了地4个按键.当按键S1按下时,进⼊光标显⽰状态,计数器停⽌⼯作,时钟也停⽌,进⼊设置时间地状态.在S1按下地情况,按键S2按下时,对应光标地数据随着S2按键地按下地次数⽽变化,具体是按键⼀次就是增加⼀个单位.在S1按下地情况,按键S3按下时,对应光标地数据随着S3按键地按下地次数⽽变化,具体是按键⼀次就是少⼀个单位.在增加和减少设置地选项中也加⼊了闰年平年地判断,更利于设置.S4按下地时候,推出设置状态,计数器⼯作,开始计时.同时,在闹钟响应地时候按下S4按键就是令蜂鸣器停⽌⼯作.调试阶段,出现⼀些问题.⽐如,实际⼩时显⽰到29才归零,分钟显⽰到60才进⼀……经过软件调试,以上问题均⼀⼀排除,结果达到预期⽬标.但时间有限,部分扩展功能不能及时实现,⽐如⾳乐闹铃,开启闹钟及关闭闹钟功能等等7.个⼈⼼得以及总结之前做设计地不是这个设计,那个设计失败,我感到很受打击,因为⾃⼰地理论知识⽤不了实际当中,学不会⽤.所以⾃⼰决定是简单地开始做起来,就是选择了电⼦时钟.从最开始地计数开始,利⽤单⽚机内部地计数功能,更能准确计数时间.但是我还是不会⾃⼰很顺利地编程,所以⾃⼰去图书馆借了课程设计地资料回来⾃⼰研究.不懂地地⽅就问同学,⼀步⼀步慢慢来,结合书本地资料我成功了编好程序.我之前选择地是数码管显⽰地,但是在焊接地电路板地时候我遇到了极⼤地困难,因为我⽤到地是6位地数码管,⽽市场只有4位⼀下地,我买回来2位和4位地扩展成6位,按照⽹上和书本地资料我焊接好,⽤单⽚机开发箱来验证,悲哀地是居然每⼀个数码管变化都是⼀样地,后来询问了刘⽼师,结果还是⼀样不能显⽰,最终选择了⽤LCD1602液晶显⽰器来显⽰时间数据了.那个数码管地以后再研究了.可是,那个液晶显⽰器地编程就完全变了,不同于数码管地引脚⼀样,然后查了很多地资料,经过⽆数次在单⽚机开发显⽰原理,才掌握了他⼯作地原理,然后⼀步⼀步来⾃⼰修改书本地程序,达到⾃⼰显⽰地结果.修改地过程还是很困难地,多地同学地指导,让我少⾛了很多地弯路.到了最后⼀步了,焊接电路板,这个倒是不难,因为是之前地⼏个课程设计都是焊接电路板地,经过⼏次地焊接经验,⾃⼰对焊接有⼀定地掌握了,所以焊机地很顺利.最后还是显⽰不了,经过⼤家地研究,终于指导那是排线地接触不良导致地.这次地设计真地是感悟很多,所有地事情都不是很容易就完成地,必须经过⼀定地磨练才可以.就是⽐如焊接地⼯艺吧,有经验了就焊接地快和好.拥有了知识,也不⼀定⽤于实际当中,⾃⼰如果不去实践地话,可能真地⼀辈都不会了解,别把所有地事情都看地那么简单,从⼩事做起事=是最踏实地.这次是C语⾔编程地,尽管⾃⼰对C语⾔有很深地接触,但真正让⾃⼰顺利地编写地程序地话,那可不是⼩事⼀桩,有⼀定地累积才是霸道!在焊接电路板地时候,应该很好地了解元器件地功能和特性,不然地话⾃⼰就很折腾,显⽰不出来地时候就是很⿇烦地,搞不好就要重新焊接⼀次了.这次设计最⼤地收获当然就是了解到了单⽚机地应⽤,如何应⽤,可以应⽤到哪些⽅⾯.8.参考⽂献1)单⽚机原理及其接⼝技术(第三版) 北京航空航天⼤学出版社2)单⽚机应⽤系统开发实例导航⼈民邮电出版社3)单⽚机课程设计辅导书4)模拟电⼦技术基础童诗⽩著5)数字电⼦技术基础阎⽯著#include#define uchar unsigned char#define uint unsigned intsbit RS = P2^6;sbit RW = P2^5;sbit E = P2^7;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;sbit s4=P1^3;sbit speaker=P2^0;uchar code table[]=" 2099-12-31 MON"; uchar code table1[]="23:58:50 23:59"; uchar num,count,shi=23,fen=58,miao=50; uchar yue=12,ri=31;uint nian=2099;uchar s1num,xq;char Nshi=23,Nfen=59,clock;/////////////////延时函数/////////////////////////////////void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}////////////////LCD写⼊指令与数据///////////////////////// void write_com(uchar com){RS=0;RW=0;P0=com;delay(5);E=0;delay(5);}void write_data(uchar date){RS=1;RW=0;P0=date;delay(5);E=0;delay(5);E=1;}///////////////////数据初始化///////////////////////////////////// void init()//初始化{delay(15);write_com(0x38); //display mode不监察忙信号write_com(0x08); //display modewrite_com(0x01); //display mode显⽰清屏write_com(0x06); //显⽰光标移动位置write_com(0x0c); //显⽰开及光标设置write_com(0x01); //显⽰清屏write_com(0x80);write_com(0x02);for(num=0;num<15;num++){write_data(table[num]);delay(20);}write_com(0x80+0x41);for(num=0;num<15;num++){write_data(table1[num]);delay(20);}EA=1;ET0=1;TR0=1;TH0=(65536-50000)/256;//赋值初值12MHz晶振TL0=(65536-50000)%256;}///////////////写⼊时、分、秒、⽇、⽉等数据////////////////////////////void write_sfm(uchar add,uchar date)//写⼊时分秒{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//地址指向第⼆⾏,在第⼆⾏写write_data(0x30+shi);//write_data(0x30+ge);}void write_nyr(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);}void write_nian(uchar add,uint year)//写⼊年{uint qian,bai,shi,ge;qian=year/1000;// 2413/1000=2(得到千位)bai=(year%1000)/100;//(2413%1000)=413 413/100=4 (得到百位)shi=((year%1000)%100)/10;// 413%100=13 13/10=1(得到⼗位)ge=(((year%1000)%100))%10;//13%10=3 (得到个位)write_com(0x80+add);//地址指向第⼀⾏write_data(0x30+qian);//写数据write_data(0x30+shi);write_data(0x30+ge);}//////////////////////写⼊星期数据////////////////////////////void write_xq1(uchar add)//星期⼀{write_com(0x80+add);//第⼀⾏write_data(0x40+0x0d);//查询液晶地字符⼿册可知MON(星期⼀)write_data(0x40+0x0f);//这三个英⽂字符对应地⼆进制码write_data(0x40+0x0e);//}void write_xq2(uchar add)//星期⼆{write_com(0x80+add);write_data(0x54);write_data(0x55);write_data(0x45);}void write_xq3(uchar add)//星期三{write_com(0x80+add);write_data(0x50+4);write_data(0x40+8);write_data(0x50+5);}void write_xq4(uchar add)//星期四{write_com(0x80+add);write_data(0x57);write_data(0x45);write_data(0x4e);}void write_xq5(uchar add)//星期五{write_com(0x80+add);write_data(0x46);write_data(0x52);write_data(0x49);void write_xq6(uchar add)//星期六{write_com(0x80+add);write_data(0x53);write_data(0x41);write_data(0x54);}void write_xq7(uchar add)//星期⽇{write_com(0x80+add);write_data(0x53);write_data(0x55);write_data(0x4e);}void write_naozhong(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//地址指向第⼆⾏,在第⼆⾏写write_data(0x30+shi);//write_data(0x30+ge);}//////////////////按键设置////////////////////////////////////////按键1设置,光标设置//////void keyscan()//按键控制函数{if(s1==0)//按键1{delay(5);//按下消抖if(s1==0){s1num++;//s1num1是按键1地标志变量,表⽰按键1按下地次数while(!s1);//按键弹起时消抖if(s1num==1){write_com(0x80+0x40+8);//按键1按下时,光标显⽰位置第⼆⾏12位write_com(0x0f);//光标在秒个位闪烁,调秒}if(s1num==2){write_com(0x80+0x40+5);//按键1按下第⼆次,光标在分个位闪烁,调分}if(s1num==3){write_com(0x80+0x40+2);//按键1按下第三次,光标在时位闪烁,调时}if(s1num==4){write_com(0x80+4);//按键1按下第四次,光标在年位闪烁,调年}if(s1num==5){write_com(0x80+7);//按键1按下第五次,光标在⽉个位闪烁,调⽉}if(s1num==6){write_com(0x80+10);//按键1按下第六次,光标在⽇个位闪烁,调⽇}if(s1num==7){write_com(0x80+12); //按键1按下第七次,光标在星期个位闪烁,调星期}if(s1num==8){write_com(0x80+0x40+12);}if(s1num==9){write_com(0x80+0x40+15);if(s1num==10){s1num=0;//重新回到开始地位置write_com(0x0c); //光标按下第七次,光标回到秒个位,TR0=1;////////////////时间开始⾛.}}}//////////////////////按键2设置,增加/////////////////if(s1num!=0)//按键按下执⾏以下操作,按键2地设置{if(s2==0)//按键2地作⽤为按下时使想要调整地时分秒,年⽉⽇等数值增加{delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(7,miao);//刷新屏幕,将新地秒地值显⽰出来,其中秒地位置为0X80+0X40+8,从此位置开始写新地秒值write_com(0x80+0x40+8);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(4,fen);//刷新屏幕,将新地分地值显⽰出来,其中分地位置为0X80+0X40+5,从此位置开始写新地分值write_com(0x80+0x40+5);}if(s1num==3)shi++;if(shi==24){shi=0;write_sfm(1,shi);write_com(0x80+0x40+2);//刷新屏幕,将新地时地值显⽰出来,其中时地位置为0X80+0X40+2,从此位置开始写新地时值? }}if(s1num==4){nian++;write_nian(1,nian);//刷新屏幕,将新地年地值显⽰出来,其中年地位置为0X80+4,从此位置开始写新地年值write_com(0x80+4);}if(s1num==5){yue++;if(yue==13)yue=1;write_nyr(6,yue);//刷新屏幕,将新地⽉地值显⽰出来,其中⽉地位置为0X80+7,从此位置开始写新地⽉值write_com(0x80+7);}if(s1num==6){ri++;if(yue==2&&(nian%4==0)&&ri==29)ri=1; //闰年2⽉天数计算if(yue==2&&(nian%4!=0)&&ri==30)ri=1; //平年2⽉if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;//4,6,9,11⽉计算else if(ri==32)ri=1;//1,3,5,7,8,10,12⽉天数计算write_nyr(9,ri);//刷新屏幕,将新地⽇地值显⽰出来,其中⽇地位置为0X80+10,从此位置开始写新地⽇值write_com(0x80+10);}if(s1num==7)if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq4(12);if(xq%7==3)write_xq3(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);write_com(0x80+12);}if(s1num==8){Nshi++;if(Nshi==24)Nshi=0;write_naozhong(11,Nshi); write_com(0x80+0x40+11); }if(s1num==9){Nfen++;if(Nfen==60)Nfen=0;write_naozhong(14,Nfen); write_com(0x80+0x40+14); }}////////////////////按键3地设置,减少//////////////////// if(s1num!=0)//按键按下执⾏以下操作,按键3地设置{if(s3==0)//按键3地作⽤是按下时使想要调整地时分秒,年⽉⽇等数值减少{delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1){miao=59;}write_sfm(7,miao);write_com(0x80+0x40+8);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(4,fen);write_com(0x80+0x40+5);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(1,shi);write_com(0x80+0x40+2);{nian--;write_nian(1,nian);write_com(0x80+4);}if(s1num==5){yue--;if(yue==0)yue=12;write_nyr(6,yue);write_com(0x80+7);}if(s1num==6){ri--;if(yue==2&&(nian%4==0)&&ri==0)ri=28; if(yue==2&&(nian%4!=0)&&ri==0)ri=29; if((yue==4||yue==6||yue==9||yue==11)&&ri==0)ri=30;else if(ri==0)ri=31;write_nyr(9,ri);write_com(0x80+10);}if(s1num==8){Nshi--;if(Nshi<0)Nshi=23;write_naozhong(11,Nshi);write_com(0x80+0x40+11);}if(s1num==9){Nfen--;Nfen=59;write_naozhong(14,Nfen);write_com(0x80+0x40+14);}}}}}//////////////////按键4地设置,退出////////////////// if(s4==0) {delay(5);if(s4==0){while(!s4);if(s1num<=9&&s1num!=0){s1num=0;TR0=1;write_com(0x0c);}if(Nshi==shi&&Nfen==fen)/////停⽌闹钟{clock=0;speaker=1;}}}}void alarm(){if(Nfen!=fen)clock=1;if(clock==1){if(count==0) //设置蜂鸣器响地拼率为⼀秒⼀次,0为响speaker=0;if(count==10)speaker=1;}}}////////////////////主函数/////////////////////////void main(){init();while(1){alarm();keyscan();if(count==20)//定时器计满值进⼊中断20次,时长20*50000=1秒{count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;ri++;xq++;if(yue==2&&(nian%4==0)&&ri==29)//闰年2⽉天数计算yue++;}if(yue==2&&(nian%4!=0)&&ri==30)//平年2⽉{ri=1;yue++;}if((yue==4||yue==6||yue==9||yue==11)&&ri==31)//4,6,9,11⽉计算{ri=1;yue++;}if(ri==32)//1,3,5,7,8,10,12⽉天数计算。

单片机实验电子钟报告

单片机实验电子钟报告

实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉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、使用定时器方式二, 重新编写程序。

单片机完整电子时钟设计报告总结计划

单片机完整电子时钟设计报告总结计划

目一.作品介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2二.片机系原理及工作原理描绘⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2三.程中遇到的及解决方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4四.数据及差剖析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4五.⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5六.程序模框⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5七.程序清⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7单片机的个性化电子钟设计报告一.作品简介该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,4位LED数码显示,分别显示“小时:分钟”。

该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能准时闹铃1分钟。

使用方法:开机后显示日期,学号,时钟在00:00:00起开始计时。

1)长按进入调分状态:分单元闪耀,按加1,按减1.再长按进入时调整状态,时单元闪耀,加减调整同调分.按长按退出调整状态。

(2)按进入设定闹时状态:12:00:,可进行分设定,按分加1,再按为时调整,准时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。

(3)按下进入秒表状态 :再按秒表又启动 ,按暂停,再按秒表清零,按退出秒表回到时钟状态。

二.单片机系统原理图及工作原理描绘(1)总原理图如原理图所示,硬件系统主要由单片机最小应用系统、 LED数码管显示模块构成。

(2)各个模块说明1.单片机最小系统AT89S52是一款特别合适单片机初学者学习的单片机,它完整兼容传统的8051,8031的指令系统,他的运转速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。

AT89S52拥有以下标准功能:8k字节Flash,256字节RAM,32位I/O 口线,看门狗准时器,2个数据指针,三个16位准时器/计数器,一个6向量2级中断构造,全双工串行口,片内晶振实时钟电路。

单片机电子钟实验报告

单片机电子钟实验报告

单片机电子钟实验报告单片机电子钟实验报告引言:单片机是一种集成电路,具有微处理器的功能。

它广泛应用于各种电子设备中,包括电子钟。

在这个实验中,我们通过使用单片机和其他电子元件,成功地制作了一台电子钟。

本报告将详细介绍我们的实验过程、结果和总结。

实验目的:我们的实验目的是设计和制作一台精确可靠的电子钟。

通过这个实验,我们希望了解单片机的基本原理和应用,同时提高我们的电路设计和焊接能力。

实验步骤:1. 准备工作:我们首先收集了所需的材料和工具,包括单片机、晶振、电容、电阻、显示器等。

然后,我们仔细阅读了单片机的技术规格和电路图。

2. 电路设计:根据单片机的技术规格和电路图,我们开始设计电路。

我们确定了电源电压、电路连接方式和元件数值。

然后,我们使用仿真软件验证了我们的设计。

3. 焊接电路板:在确认电路设计无误后,我们开始焊接电路板。

我们小心翼翼地将元件焊接到电路板上,并确保焊接点牢固可靠。

焊接完成后,我们使用万用表对焊接点进行了测试。

4. 编程:接下来,我们使用C语言编写了单片机的程序。

我们根据电路的功能需求,编写了显示时间、闹钟设置、闹钟响铃等功能的代码。

然后,我们使用编程器将程序烧录到单片机中。

5. 调试:在完成编程后,我们对电路进行了调试。

我们逐一测试了各个功能,确保电子钟的正常运行。

我们检查了显示、闹钟和时间设置等功能,并进行了一系列的测试。

实验结果:经过我们的不懈努力,我们成功地制作了一台功能完善的电子钟。

它能够精确显示时间,并具备闹钟功能。

在我们的测试中,电子钟的运行稳定,显示清晰可见。

实验总结:通过这个实验,我们深入了解了单片机的工作原理和应用。

我们学会了电路设计、焊接和编程等技能。

通过实际操作,我们提高了自己的动手能力和问题解决能力。

然而,我们也遇到了一些挑战。

在焊接电路板时,我们需要小心操作,以避免短路或焊接不牢固。

在编程过程中,我们需要仔细调试,以确保程序的正确性。

在未来的学习中,我们将进一步探索单片机的应用领域,并不断提高自己的技术水平。

智能数字钟中期报告

智能数字钟中期报告

************本科毕业设计(论文)中期报告毕业设计(论文)题目:基于单片机的智能电子钟专业:电子信息工程学生信息:学号:姓名:班级:指导教师信息:姓名: 教师号:职称:报告提交日期:中期报告内容:(一)阶段设计成果单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。

由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。

使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。

该数字时钟具有以下特点:(1)显示年、月、日、星期等日历相关信息。

通过按键设置年月日和星期,以及定时闹钟。

(2)掉电后时钟芯片正常运行,重新上电后不用校正时钟。

(3)(4)实时温度显示。

图1 系统原理及组成框图本设计数字时钟主要采用STC89C52作为微处理器,完成电子时钟年、月、日、时、分、秒的显示及环境温度测量等功能的基础上完成定时闹钟的功能。

由于DS12887时钟芯片内含一个锂电池,所以断电情况可以运行十年以上不丢失数据,重新上电后不用校正时钟。

硬件电路包括单片机最小系统电路、DS12887实时时钟芯片电路模块、LCD1602液晶显示模块、按键模块、DS18B20温度传感器模块、蜂鸣器报警电路模块;软件部分主要通过c程序的编程实现对时钟芯片进行时间数据的读和写,然后通过液晶显示程序将时间显示出来,通过按键操作实现功能的转换和屏幕的切换。

设计中结合硬件、软件的分步调试,达到要求的控制效果。

单片机数字闹钟设计报告

单片机数字闹钟设计报告

单片机数字闹钟/电子表设计报告一、设计意义随着生活水平的提高,人们越来越追求人性化的事物,传统的时钟已不能满足人们的需求。

现代的数字钟不仅需要模拟电子技术,而且需要数字电路技术和单片机技术,增加了数字显示等的功能。

单片机电子钟表电路可以由单片机模块、实时时钟电路模块、人机接口模块、报警模块等部分组成,硬件电路简单稳定,并可以利用软件编程减小电磁干扰和其他环境干扰的影响,减小因元器件精度不够引起的误差等优点,与机械式时钟相比具有更高的准确性和直观性,电路简单,使用寿命长,应用范围广,被广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品。

由于数字集成电路的发展和石英晶体振荡器的广泛应用,数字钟表的精度远远超过老式机械钟表,给人们生产生活带来了极大的方便。

另一方面,由于单片机技术的使用,大大扩展了钟表原先的功能,可以提供定时自动报警、按时自动打铃、时间程序自动控制及各种定时电气的自动启用功能等。

因此,研究数字钟表及扩大其应用,有着非常现实的意义。

二、本设计功能描述1、采用STC89C52单片机作为主控芯片,实现数字钟表主控功能。

2、采用液晶屏显示当前年、月、日、时、分、秒,闹铃时间及状态等信息。

3、采用六键键盘设定时间初始值,具体方法是按时间设定键依次进入年、月、日、时、分、秒设定状态,然后通过向上、向下键修改设定值。

正在设定的变量以闪烁状态突出显示。

4、采用六键键盘设定闹铃时间,具体方法是按闹铃设定键依次进入时、分设定状态,然后通过向上、向下键修改设定值。

正在设定的变量以闪烁状态突出显示。

5、采用 DS1302 实时时钟芯片完成后台计时功能,要求具有后备电源,即使主电源掉电时间仍然保持运行。

6、可设定闹铃使能,具体方法是按闹铃使能键,按一次打开,再按一次关闭。

闹铃使能关闭时不报警。

7、当闹铃使能打开,且当前时间到达闹铃设置时间,则蜂鸣器和LED 红灯同时报警,如不按取消键,报警时间为 1 分钟。

基于51单片机的电子闹钟可行性研究报告

基于51单片机的电子闹钟可行性研究报告

51核心电子闹钟可行性研究报告一、市场分析:(一)市场前景:闹钟是生活的必需品,有一定的市场需求。

但随着手机、MP3等带有闹钟功能的小型电子产品的普及,闹钟的整体市场在逐渐减小。

不过由于生活习惯的原因,市场需求在短期内不会有剧烈变化,闹钟产品仍有盈利的空间。

(二)市场竞争:当前闹钟的市场价格差异较大,从不足十元到数百元甚至上千元。

现占据大部分市场的为价格低廉的国产闹钟,多为指针式的电子闹钟,不过新式的液晶和发光LED式的闹钟所占的市场份额也在逐渐增大。

而占据着余下市场份额的为价格为数十元到数百元以上的高档闹钟,以其造型美观大方,设计新颖独特等特点吸引着对外观和功能有较高要求的用户。

(三)市场定位:闹钟市场技术成熟、门槛较低,而且中低档成品利润不高,生产成本较低但技术含量较低或功能丰富高成本高的闹钟不具有优势,所以本产品定位为设计奇特、功能丰富并且价格低廉的产品,以争取一定的市场优势。

根据产品特点,受众为工薪阶层与学生群体中新奇产品爱好者。

二、现有条件分析:(一)技术水平:(1)具备一定应用单片机的经验(2)曾用单片机读写时钟芯片的经验(3)了解LED数码管和LCD液晶显示屏使用(4)有能力设计其他单片机外设(二)研究和开发条件:具备PC平台上的单片机程序开发软件、仿真调试软件,具备实际调试所需的51开发版,能在校图书馆查阅相关书籍。

(三)财务状况:有能力购买到所需元器件。

三、项目分析:(一)项目实施目标、主要内容、技术方案和重点解决问题:本项目目标是在制造一款电子闹钟,为争取一定的市场优势,本项目致力克服市面上电子闹钟大多功能单一的弊端,在产品中加入了一些新的特点实现基础功能:24小时制计时和显示定时闹铃附加功能:1.响铃后有猜数字游戏,猜中后方可取消闹铃2.显示当前气温此项目采用分步实现制作方案,先实现基础功能,然后加入附加功能的模块进行调试。

产品的基础功能已能实现,所以重点解决附加功能的问题:1.温度传感器的使用2.小游戏的实现(二)主要技术经济指标:1、平均功耗小于50mW2、系统掉电后数据不丢失,并能继续计时30分钟以上3、计时误差<1秒/天(三)项目完成期限:六月初(四)项目预算与资金来源:(单位:元)总计:<35元资金来源:无四、效益分析:(一)盈利预测:产品的一大问题为外观,由于美化外观会使成本增加,不美化外观又十分影响销售,在这种两难状况下,利润空间很小。

基于单片机的数字钟设计开题报告

基于单片机的数字钟设计开题报告
单片机的主要类型有8051系列、AVR系列、PIC系列等,其中8051系列单 片机是最常用的类型之一。
数字钟设计原理
数字钟是一种以数字方式显 示时间的计时装置,它由石 英晶体振荡器提供稳定的计
时基准。
数字钟的设计原理主要是利 用计数器对石英晶体振荡器 的输出信号进行计数,从而 得到时间信息,并通过显示
技术路线
技术调研
了解单片机、数字钟等相关技术,确定合适的技术方案。
方案选择
根据需求和技术调研,选择合适的单片机型号和外围器件,制定系统设计方案。
开发环境搭建
配置开发环境,包括单片机开发工具、编程语言等。
系统实现
按照系统设计方案,逐步实现数字钟的各项功能。
04
预期目标与成果
预期目标
完成数字钟的硬件电路设 计
培养创新人才
本课题的研究需要具备扎实的理论基础和实践能力,通过本课题的研究,可以培养学生的创新思维和实 践能力,提高其综合素质和就业竞争力。
02
相关技术综述
单片机技术介绍
单片机是一种集成电路芯片,它集成了中央处理器、随机存储器、只读存 储器、输入输出接口等计算机的基本组成部分。
单片机具有体积小、功耗低、功能强、可靠性高等优点,广泛应用于智能 仪表、智能家居、智能控制等领域。
分析实现数字钟所需的关键技术,如 时钟信号的获取与处理、时间的显示 方式等。
研究方法
文献综述
查阅相关文献,了解数字钟设计的最新研究 动态和发展趋势。
实验设计
根据需求分析,设计实验方案,包括硬件电 路设计和软件编程。
实验实施
根据实验设计,搭建硬件平台,编写并调试 软件程序。
结果分析
对实验结果进行分析,评估数字钟的性能和 功能,并提出改进方案。

智能电子钟开题报告

智能电子钟开题报告

智能电子钟开题报告智能电子钟开题报告一、引言随着科技的不断发展,智能设备已经成为我们日常生活中不可或缺的一部分。

智能手机、智能家居等产品已经深入到我们的生活中的方方面面。

而在这个智能时代,智能电子钟也逐渐受到人们的关注和喜爱。

本报告将以智能电子钟为主题,探讨其发展趋势、功能特点以及市场前景。

二、发展趋势1. 智能化趋势随着人们对生活品质的要求不断提高,传统的电子钟已经无法满足人们的需求。

智能电子钟通过融合智能技术,可以实现更多的功能,如语音控制、远程控制等。

这种智能化趋势将会使智能电子钟在市场上获得更大的竞争优势。

2. 多功能化趋势除了基本的时间显示功能,智能电子钟还可以通过连接互联网实现更多的功能。

例如,它可以与手机同步,显示手机的来电、短信等信息;还可以作为音乐播放器、闹钟、温度计等多种功能的集成设备。

这种多功能化趋势将使智能电子钟成为人们生活中不可或缺的一部分。

三、功能特点1. 语音控制智能电子钟可以通过语音控制实现更加便捷的操作。

用户可以通过语音指令调整时间、设置闹钟等功能,避免了繁琐的按键操作。

这种语音控制的特点使得智能电子钟更加人性化,方便了用户的使用。

2. 远程控制智能电子钟可以通过连接互联网实现远程控制。

用户可以通过手机等设备远程操作智能电子钟,如调整时间、设置闹钟等功能。

这种远程控制的特点使得用户可以随时随地控制智能电子钟,提高了使用的灵活性。

3. 个性化定制智能电子钟可以根据用户的需求进行个性化定制。

用户可以根据自己的喜好选择不同的显示界面、音乐等,使得智能电子钟更加符合个人的审美和需求。

这种个性化定制的特点使得智能电子钟成为一种独特的装饰品,增加了用户的使用体验。

四、市场前景智能电子钟作为智能家居的一部分,具有广阔的市场前景。

随着人们对智能家居的需求不断增加,智能电子钟作为其中的重要组成部分,将会受到更多人的关注和追捧。

同时,智能电子钟的功能特点和个性化定制也将吸引更多用户的选择。

单片机电子钟实习实训报告

单片机电子钟实习实训报告

单片机电子钟实习实训报告一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

为了更好地了解和掌握单片机原理及应用,提高我们的动手能力,学校组织了一次单片机电子钟实习实训。

本次实习实训的目标是设计并制作一个基于单片机的电子钟,实现小时、分钟和秒的显示,同时具备校时功能。

二、实习实训内容1. 了解单片机的基本原理和工作原理,熟悉单片机的编程环境和编程语言。

2. 学习电子钟的设计原理,掌握电子钟的显示方式、时间计算方法和校时功能实现方法。

3. 设计并制作电子钟的硬件电路,包括单片机、显示模块、按键模块等。

4. 编写电子钟的程序代码,实现小时、分钟和秒的显示,以及校时功能。

5. 进行电路仿真和实际制作,调试并优化电路性能。

三、实习实训过程1. 理论学习和准备:在实习实训开始前,我们学习了单片机的基本原理、编程环境和编程语言,了解了电子钟的设计原理和实现方法。

2. 硬件设计:根据设计要求,我们设计了一个简单的电子钟硬件电路,包括单片机、LCD显示模块、按键模块等。

其中,单片机作为核心控制器,负责时间计算和显示控制;LCD显示模块用于显示时间;按键模块用于实现校时功能。

3. 程序编写:根据硬件设计,我们编写了一个简单的电子钟程序,实现了小时、分钟和秒的显示,以及校时功能。

程序采用C语言编写,利用单片机的定时器进行时间计算,通过I/O口控制LCD显示模块和按键模块。

4. 电路仿真和实际制作:在完成程序编写后,我们使用Proteus软件对电路进行了仿真,验证了电路设计的正确性和可靠性。

随后,我们根据仿真结果实际制作了电子钟电路,并进行了调试和优化。

四、实习实训成果通过本次实习实训,我们成功地设计并制作了一个基于单片机的电子钟,实现了小时、分钟和秒的显示,以及校时功能。

在实习过程中,我们不仅学习了单片机原理和电子钟设计方法,还提高了动手实践能力,为以后的学习和工作打下了坚实的基础。

五、总结本次单片机电子钟实习实训让我们深刻体会到了理论与实践相结合的重要性。

单片机-电子时钟实验报告

单片机-电子时钟实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

方案二:动态显示。

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

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

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

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

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

从节省I/O口和降低能耗出发,本设计采用方案二。

单片机电子钟项目总结

单片机电子钟项目总结

软件编程
编程环境:Keil uVision
编程语言:C语言
程序结构:主程序、子程序、 中断程序
功能实现:时间显示、闹钟 设置、定时器控制
调试与测试
硬件调试:检查电路板、 元器件、连接线等硬件是 否正常工作
软件调试:检查程序代码、 算法、逻辑等是否正确
功能测试:检查电子钟的 功能是否满足设计要求
性能测试:检查电子钟的 性能指标是否达到设计要 求
未来改进方向与展望
提高单片机 的性能和稳 定性
优化电子钟 的界面和操 作体验
增加电子钟 的功能和扩 展性
提高电子钟 的准确性和 可靠性
降低电子钟 的成本和生 产难度
提高电子钟 的市场竞争 力和品牌影 响力
感谢观看
汇报人:
单片机应用:实现了电子钟的功能,提高了准确性和稳定性 创新设计:采用了独特的外观设计和人机交互界面,提高了用户体验 节能环保:采用了低功耗设计,降低了能源消耗 成本控制:通过优化设计和生产工艺,降低了生产成本,提高了市场竞争力
05
项目问题与解决方案
遇到的问题及原因分析
硬件问题:如单片机、时钟芯片等硬件故障,导致电子钟无法正常工作 软件问题:如程序编写错误、算法不合理等,导致电子钟功能异常 设计问题:如电路设计不合理、结构设计不合理等,导致电子钟性能不佳 环境问题:如温度、湿度、电磁干扰等环境因素,导致电子钟工作不稳定
培养团队合作能 力,提高解决问 题的能力
提高创新能力, 为实际应用提供 参考和借鉴
03
项目实施过程
硬件设计
单片机选择:根 据项目需求选择 合适的单片机型 号
电路设计:设计 电子钟的电路图, 包括电源、时钟、 显示等部分
元器件选择:根 据电路设计选择 合适的元器件, 如电阻、电容、 晶体管等
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.系统设计要求1.1 基本功能(1)在LCD1602液晶显示器上显示年份、月、日、时、分、秒、星期.(2)闰年平年自动判断,时间日期年份自动变更.(3)用按键任意更改显示地时间:1)S1按键功能是停止时钟,进行设置显示地时间,光标移动.2)在s1按下地时候,s2进行时间地增加.按一次就增加1.3)在s2按下地时候,s3进行时间地减少.按一次就减少1.4)s4是完成设置地按键,时钟开始.同时也是闹钟响应地时候停止闹钟地声音.(4)扩展功能:1)在显示时间地基础上,加入了闹钟地功能.可以随意调闹钟响应地时间.2)到了闹钟判断响应地时候,蜂鸣器启动,发出频率为一秒一次地声音.1.2 设计目地掌握单片机系统地开发应用,巩固和加深已学过地知识,提高动手能力及解决实际问题地能力,同时培养团队合作精神.将自己学到地知识更好地运用于实际当中.1.设计流程本次设计时钟电路,使用了A T89C52单片机芯片控制电路,单片机控制电路简单且省去了很多复杂地线路,使得电路简明易懂,使用键盘键上地按键来调整时钟地年、月、日、时、分、秒,用一扬声器来进行定时闹钟地提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易.2.1课程设计地开发流程1)方案规划.2)用proteus设计硬件电路.3)用汇编语言设计程序.4)用keil C51软件设计调试.5)利用proteus软件进行软件和硬件地联调.6)根据电路图焊接硬件电路.7)下载程序代码,在电路板上调试、检验设计.8)完成设计,撰写课程设计报告.2.2系统地功能及设计思路此设计原理框图如图2-3所示,此电路包括以下四个部分:单片机,键盘,闹铃电路及LCD1602液晶显示屏.经过编译程序仿真后,89C51地4K空间不够用,就选用更大空间地89C52单片机了.本设计用地元器件如列表2-3所示图2-3表2-32.3工作原理设计地电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以及按键控制电路.本设计采用C语言程序设计,使单片机控制LCD显示时间,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数.时、分、秒地计数结果经过数据处理可直接送显示器显示.如果小时到达24小时候,就是“23翻0”,日、星期都要加一个单位.其余地闰年平年自动判断.闹钟地部分就是当闹钟地时、分与时钟地时、分相等地情况下,发出信号驱动蜂鸣器,当按下S4地时候,可以令蜂鸣器停止工作.电路功能使用说明:各个控制键地功能:S1可进行光标选择,同时令时钟停止走动.S2可对时间进行校准调节,按键一次增加一个单位.S3可对时间进行校准调节,按键一次减少一个单位.S4进行设置完成地时候推出,也可以在闹钟响应时停止蜂鸣器工作.AT89C52单片机,通过编写程序对LCD显示进行控制.LCD1602液晶显示器显示编译地数据.定时闹钟判断,达到符合情况时候驱动蜂鸣器工作.2.4 软件研制方面1)采用模块化程序结构设计软件,首先将整个软件分成若干功能模块; 2)根据设计地原理,编写源程序;3)调试各模块程序;4)与硬件一起联调,最后完成全部调试工作.2.5 硬件研制方面1)将整个硬件系统划分为若干功能单元电路,会出整个系统逻辑电路,注明注明各交单元电路间接口信号;2)完成各单元电路设计,包括选择合适地各类元器件和电路板设计(元件布局和走线).3.仿真实现(电路连接图)3.1选取地元器件及作用(1)单片机STC89C52STC89C52是比较常用地52系列单片机.它地工作电压是+5v.外围电路加上12M地晶振,使其正常工作.P0口控制LCD1602.空间有8k.(2)LCD1602液晶1602显示容量为16乘2个字符.工作电压为+5v.4.软件编程按照电路图地设计焊接好硬件电路.就开始软件编程.程序主要分为两个部分,即液晶显示部分和控制按键地部分.由于本设计采用地是用按键分别控制.可以在主函数中调用一个键盘扫描地函数,当相应地不同按键按下后控制液晶显示和单片机P0地输出,从而控制液晶地显示.源程序见附录.本电子时钟共使用了四个按键.第一个按键用于选择所要调节地内容(如年、月、日、时、分、秒),按下不同次数光标分别在要调节地对应位置闪烁;第二个按键用于所调节地量地增加,按下一次增加一个单位;第三个按键用于所调节量地减少,按一下增加一个单位.第四个按键是设置完成退出,并且可以控制闹钟地声音,即是当闹钟响应地时候按下,蜂鸣器立刻停止工作.该电子时钟实现地功能是液晶正常显示时分秒,年月日和星期.不仅可以用按键调节时分秒,还可以调节年月日,并且要保证星期和年月日相对应.在这里需要指出地是由于条件限制(除非有时钟芯片实现万年历),不可能保证星期与年月日正确对应),故采程序中用天数对7取余数,余1时为星期一(MON),余2时为星期二(TUE),依此类推,余0时为星期天(SUN),当天数到每月最后一天时继续上加不回归到1,这样可以保证星期是正确地.具体见程序中注释.编程思路是,在确定了时钟要实现地功能后按照上述各按键所实现地效果编写程序.本程序包含液晶写指令函数(write_com())、写数据函数(write_data())、初始化函数(init())、写入时分秒函数(write_sfm())、写入月和日函数(write_nyr())【别指出,由于年包含四位数字其写法与月和日不同,故单独设置一个写入年函数】、写入星期函数(write_xq())和键盘扫描函数,这些程序围绕主函数互相嵌套调用.5、调试部分本次实验地调试部分花了大量地时间.当程序写好编译通过后,下载到单片机中,调试硬件看有无显示和输出.调试主要分为2个部分.分别是液晶显示部分,按键控制部分.首先是液晶部分,一开始就是无法显示,查看电路后,后来检测才知道是排线地接触不良造成地.经过几次程序地修改,和对液晶部分电路地检测终于将液晶部分调出有显示.然后检查按键部分.首先检查按键地焊接确定无误后,进行按键控制,结果显示良好.6.课程设计结果分析此时钟设计是利用protues仿真软件进行仿真,以及单片机开发箱验证,基本上实现了课程设计要求实现地功能.硬件部分设置了地4个按键.当按键S1按下时,进入光标显示状态,计数器停止工作,时钟也停止,进入设置时间地状态.在S1按下地情况,按键S2按下时,对应光标地数据随着S2按键地按下地次数而变化,具体是按键一次就是增加一个单位.在S1按下地情况,按键S3按下时,对应光标地数据随着S3按键地按下地次数而变化,具体是按键一次就是少一个单位.在增加和减少设置地选项中也加入了闰年平年地判断,更利于设置.S4按下地时候,推出设置状态,计数器工作,开始计时.同时,在闹钟响应地时候按下S4按键就是令蜂鸣器停止工作.调试阶段,出现一些问题.比如,实际小时显示到29才归零,分钟显示到60才进一……经过软件调试,以上问题均一一排除,结果达到预期目标.但时间有限,部分扩展功能不能及时实现,比如音乐闹铃,开启闹钟及关闭闹钟功能等等7.个人心得以及总结之前做设计地不是这个设计,那个设计失败,我感到很受打击,因为自己地理论知识用不了实际当中,学不会用.所以自己决定是简单地开始做起来,就是选择了电子时钟.从最开始地计数开始,利用单片机内部地计数功能,更能准确计数时间.但是我还是不会自己很顺利地编程,所以自己去图书馆借了课程设计地资料回来自己研究.不懂地地方就问同学,一步一步慢慢来,结合书本地资料我成功了编好程序.我之前选择地是数码管显示地,但是在焊接地电路板地时候我遇到了极大地困难,因为我用到地是6位地数码管,而市场只有4位一下地,我买回来2位和4位地扩展成6位,按照网上和书本地资料我焊接好,用单片机开发箱来验证,悲哀地是居然每一个数码管变化都是一样地,后来询问了刘老师,结果还是一样不能显示,最终选择了用LCD1602液晶显示器来显示时间数据了.那个数码管地以后再研究了.可是,那个液晶显示器地编程就完全变了,不同于数码管地引脚一样,然后查了很多地资料,经过无数次在单片机开发显示原理,才掌握了他工作地原理,然后一步一步来自己修改书本地程序,达到自己显示地结果.修改地过程还是很困难地,多地同学地指导,让我少走了很多地弯路.到了最后一步了,焊接电路板,这个倒是不难,因为是之前地几个课程设计都是焊接电路板地,经过几次地焊接经验,自己对焊接有一定地掌握了,所以焊机地很顺利.最后还是显示不了,经过大家地研究,终于指导那是排线地接触不良导致地.这次地设计真地是感悟很多,所有地事情都不是很容易就完成地,必须经过一定地磨练才可以.就是比如焊接地工艺吧,有经验了就焊接地快和好.拥有了知识,也不一定用于实际当中,自己如果不去实践地话,可能真地一辈都不会了解,别把所有地事情都看地那么简单,从小事做起事=是最踏实地.这次是C语言编程地,尽管自己对C语言有很深地接触,但真正让自己顺利地编写地程序地话,那可不是小事一桩,有一定地累积才是霸道!在焊接电路板地时候,应该很好地了解元器件地功能和特性,不然地话自己就很折腾,显示不出来地时候就是很麻烦地,搞不好就要重新焊接一次了.这次设计最大地收获当然就是了解到了单片机地应用,如何应用,可以应用到哪些方面.8.参考文献1)单片机原理及其接口技术(第三版) 北京航空航天大学出版社2)单片机应用系统开发实例导航人民邮电出版社3)单片机课程设计辅导书4)模拟电子技术基础童诗白著5)数字电子技术基础阎石著6)以及网上地一些相关地资料附录1源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit RS = P2^6;sbit RW = P2^5;sbit E = P2^7;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;sbit s4=P1^3;sbit speaker=P2^0;uchar code table[]=" 2099-12-31 MON";uchar code table1[]="23:58:50 23:59";uchar num,count,shi=23,fen=58,miao=50;uchar yue=12,ri=31;uint nian=2099;uchar s1num,xq;char Nshi=23,Nfen=59,clock;/////////////////延时函数/////////////////////////////////void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}////////////////LCD写入指令与数据/////////////////////////void write_com(uchar com){RS=0;RW=0;P0=com;delay(5);E=0;delay(5);E=1;}void write_data(uchar date){RS=1;RW=0;P0=date;delay(5);E=0;delay(5);E=1;}///////////////////数据初始化/////////////////////////////////////void init()//初始化{delay(15);write_com(0x38); //display mode不监察忙信号write_com(0x08); //display modewrite_com(0x01); //display mode显示清屏write_com(0x06); //显示光标移动位置write_com(0x0c); //显示开及光标设置write_com(0x01); //显示清屏write_com(0x80);write_com(0x02);for(num=0;num<15;num++){write_data(table[num]);delay(20);}write_com(0x80+0x41);for(num=0;num<15;num++){write_data(table1[num]);delay(20);}TMOD=0x01;//t016位计数器EA=1;ET0=1;TR0=1;TH0=(65536-50000)/256;//赋值初值12MHz晶振TL0=(65536-50000)%256;}///////////////写入时、分、秒、日、月等数据////////////////////////////void write_sfm(uchar add,uchar date)//写入时分秒{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//地址指向第二行,在第二行写write_data(0x30+shi);//write_data(0x30+ge);}void write_nyr(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);}void write_nian(uchar add,uint year)//写入年{uint qian,bai,shi,ge;qian=year/1000;// 2413/1000=2(得到千位)bai=(year%1000)/100;//(2413%1000)=413 413/100=4 (得到百位)shi=((year%1000)%100)/10;// 413%100=13 13/10=1(得到十位)ge=(((year%1000)%100))%10;//13%10=3 (得到个位)write_com(0x80+add);//地址指向第一行write_data(0x30+qian);//写数据write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);}//////////////////////写入星期数据////////////////////////////void write_xq1(uchar add)//星期一{write_com(0x80+add);//第一行write_data(0x40+0x0d);//查询液晶地字符手册可知MON(星期一)write_data(0x40+0x0f);//这三个英文字符对应地二进制码write_data(0x40+0x0e);//}void write_xq2(uchar add)//星期二{write_com(0x80+add);write_data(0x54);write_data(0x55);write_data(0x45);}void write_xq3(uchar add)//星期三{write_com(0x80+add);write_data(0x50+4);write_data(0x40+8);write_data(0x50+5);}void write_xq4(uchar add)//星期四{write_com(0x80+add);write_data(0x57);write_data(0x45);write_data(0x4e);}void write_xq5(uchar add)//星期五{write_com(0x80+add);write_data(0x46);write_data(0x52);write_data(0x49);}void write_xq6(uchar add)//星期六{write_com(0x80+add);write_data(0x53);write_data(0x41);write_data(0x54);}void write_xq7(uchar add)//星期日{write_com(0x80+add);write_data(0x53);write_data(0x55);write_data(0x4e);}void write_naozhong(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//地址指向第二行,在第二行写write_data(0x30+shi);//write_data(0x30+ge);}//////////////////按键设置////////////////////////////////////////按键1设置,光标设置//////void keyscan()//按键控制函数{if(s1==0)//按键1{delay(5);//按下消抖if(s1==0){s1num++;//s1num1是按键1地标志变量,表示按键1按下地次数while(!s1);//按键弹起时消抖if(s1num==1){TR0=0;//时间停止走write_com(0x80+0x40+8);//按键1按下时,光标显示位置第二行12位write_com(0x0f);//光标在秒个位闪烁,调秒}if(s1num==2){write_com(0x80+0x40+5);//按键1按下第二次,光标在分个位闪烁,调分}if(s1num==3){write_com(0x80+0x40+2);//按键1按下第三次,光标在时位闪烁,调时}if(s1num==4){write_com(0x80+4);//按键1按下第四次,光标在年位闪烁,调年}if(s1num==5){write_com(0x80+7);//按键1按下第五次,光标在月个位闪烁,调月}if(s1num==6){write_com(0x80+10);//按键1按下第六次,光标在日个位闪烁,调日}if(s1num==7){write_com(0x80+12); //按键1按下第七次,光标在星期个位闪烁,调星期}if(s1num==8){write_com(0x80+0x40+12);}if(s1num==9){write_com(0x80+0x40+15);}if(s1num==10){s1num=0;//重新回到开始地位置write_com(0x0c); //光标按下第七次,光标回到秒个位,TR0=1;////////////////时间开始走.}}}//////////////////////按键2设置,增加/////////////////if(s1num!=0)//按键按下执行以下操作,按键2地设置{if(s2==0)//按键2地作用为按下时使想要调整地时分秒,年月日等数值增加{delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(7,miao);//刷新屏幕,将新地秒地值显示出来,其中秒地位置为0X80+0X40+8,从此位置开始写新地秒值write_com(0x80+0x40+8);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(4,fen);//刷新屏幕,将新地分地值显示出来,其中分地位置为0X80+0X40+5,从此位置开始写新地分值write_com(0x80+0x40+5);}if(s1num==3){shi++;if(shi==24){shi=0;write_sfm(1,shi);write_com(0x80+0x40+2);//刷新屏幕,将新地时地值显示出来,其中时地位置为0X80+0X40+2,从此位置开始写新地时值?}}if(s1num==4){nian++;write_nian(1,nian);//刷新屏幕,将新地年地值显示出来,其中年地位置为0X80+4,从此位置开始写新地年值write_com(0x80+4);}if(s1num==5){yue++;if(yue==13)yue=1;write_nyr(6,yue);//刷新屏幕,将新地月地值显示出来,其中月地位置为0X80+7,从此位置开始写新地月值write_com(0x80+7);}if(s1num==6){ri++;if(yue==2&&(nian%4==0)&&ri==29)ri=1; //闰年2月天数计算if(yue==2&&(nian%4!=0)&&ri==30)ri=1; //平年2月if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;//4,6,9,11月计算else if(ri==32)ri=1;//1,3,5,7,8,10,12月天数计算write_nyr(9,ri);//刷新屏幕,将新地日地值显示出来,其中日地位置为0X80+10,从此位置开始写新地日值write_com(0x80+10);}if(s1num==7){xq++;if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq4(12);if(xq%7==3)write_xq3(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);write_com(0x80+12);}if(s1num==8){Nshi++;if(Nshi==24)Nshi=0;write_naozhong(11,Nshi);write_com(0x80+0x40+11);}if(s1num==9){Nfen++;if(Nfen==60)Nfen=0;write_naozhong(14,Nfen);write_com(0x80+0x40+14);}}}}////////////////////按键3地设置,减少//////////////////// if(s1num!=0)//按键按下执行以下操作,按键3地设置{if(s3==0)//按键3地作用是按下时使想要调整地时分秒,年月日等数值减少{delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1){miao=59;}write_sfm(7,miao);write_com(0x80+0x40+8);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(4,fen);write_com(0x80+0x40+5);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(1,shi);write_com(0x80+0x40+2);}if(s1num==4){nian--;write_nian(1,nian);write_com(0x80+4);}if(s1num==5){yue--;if(yue==0)yue=12;write_nyr(6,yue);write_com(0x80+7);}if(s1num==6){ri--;if(yue==2&&(nian%4==0)&&ri==0)ri=28; if(yue==2&&(nian%4!=0)&&ri==0)ri=29;if((yue==4||yue==6||yue==9||yue==11)&&ri==0)ri=30;else if(ri==0)ri=31;write_nyr(9,ri);write_com(0x80+10);}if(s1num==8){Nshi--;if(Nshi<0)Nshi=23;write_naozhong(11,Nshi);write_com(0x80+0x40+11);}if(s1num==9){Nfen--;if(Nfen<0){Nfen=59;write_naozhong(14,Nfen);write_com(0x80+0x40+14);}}}}}//////////////////按键4地设置,退出////////////////// if(s4==0){delay(5);if(s4==0){while(!s4);if(s1num<=9&&s1num!=0){s1num=0;TR0=1;write_com(0x0c);}if(Nshi==shi&&Nfen==fen)/////停止闹钟{clock=0;speaker=1;}}}}void alarm(){if(Nfen!=fen)clock=1;if(clock==1){if(Nshi==shi&&Nfen==fen){if(count==0) //设置蜂鸣器响地拼率为一秒一次,0为响speaker=0;if(count==10)speaker=1;}}}////////////////////主函数/////////////////////////void main(){init();while(1){alarm();keyscan();if(count==20)//定时器计满值进入中断20次,时长20*50000=1秒{count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;ri++;xq++;if(yue==2&&(nian%4==0)&&ri==29)//闰年2月天数计算{ri=1;yue++;}if(yue==2&&(nian%4!=0)&&ri==30)//平年2月{ri=1;yue++;}if((yue==4||yue==6||yue==9||yue==11)&&ri==31)//4,6,9,11月计算{ri=1;yue++;}if(ri==32)//1,3,5,7,8,10,12月天数计算{ri=1;yue++;}if(yue==13){yue=1;nian++;write_nian(1,nian);write_com(0x80+1);}write_nyr(6,yue);write_com(0x80+6);write_nyr(9,ri);write_com(0x80+9);if(xq%7==0)write_xq1(12);if(xq%7==1)write_xq2(12);if(xq%7==2)write_xq4(12);if(xq%7==3)write_xq3(12);if(xq%7==4)write_xq5(12);if(xq%7==5)write_xq6(12);if(xq%7==6)write_xq7(12);write_com(0x80+12);}write_sfm(1,shi);}write_sfm(4,fen);}write_sfm(7,miao);}}}////////////////中断函数//////////////////////////////////void timer0() interrupt 1 //中断函数{TH0=(65536-50000)/256;//赋初值TL0=(65536-50000)%256;count++;}附录2实物图正面背面版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.ORjBn。

相关文档
最新文档