公文素材库 首页

单片机数字钟实训说明

时间:2019-05-28 22:13:10 网站:公文素材库

单片机数字钟实训说明

单片机数字钟实训

1实训目的:

通过对单片机程序的设计,基本掌握51单片机开发系统的操作、编程技巧,实现让学生对单片机的了解从感性认识上升为理性认识。2实训内容:

(1)掌握数码管的动态显示方法,定时器的具体应用;(2)手动设定时间,理解中断的具体应用;

*(3)完成程序的设计、调试过程,尝试对程序的创新设计。设计思路

(1)用单片机作主控制器,4位LED显示接口,以用于时钟显示。(2)输出设备分为两个方面,一是由4位数码管组成的时间显示器,位控制信号由P3.4-P3.7输出,段控制信号由P2口输出.

(3)时钟信号的产生可利用单片机芯片内的定时器T0/T1产生定时中断,进行时分秒的计时,并将信号送到显示电路LDE上。

(4)校时信号通过P1.0,P1.1,P1.2控制进入校时设置,并将信号送到电路LED上。

四个数码管,三个按键。一次只能显示四位数,解决的方案是:(1)分配按键:KEY1键为模式选择,每次按下,WAY值加一;(2)选择模式:mode=0,显示时分兼设定分钟;mode=1,显示时分兼设定小时;mode=2,显示秒兼设定秒。

(3)例如要显示时间“12:34:56”显示的情况为“1234”和“-56-”。3实训要求:

布局布线要美观,尽量没有飞线,没有交叉;焊点要求牢固、圆润,没有焊盘脱落。4实训报告:

简述单片机实现的电子钟的原理,画出电路图,简述程序设计思想,画出程序流程图;写出布局布线过程和心得。有何体会。

实训中用到的元器件列表。

地1AF地2地3BEDCRCG地4

地1表示是第一个数码管的接地端:地2表示是第二个数码管的接地端地3表示是第三个数码管的接地端:地4表示是第四个数码管的接地端

电阻318电容2IC11晶振1

参数R1-R3R4R5-R12参数C1,C2参数U1D1X1

数值10k1k470数值30pF数值AT89C52LED-YELLOW12MHz

发光二极管ReferencesValue

ReferencesValue

按键3个RST管脚需要的元件

可以变换电路形式,形成不同的使用效果。变换形式一:

变换形式二:

变换形式三:

扩展阅读:基于单片机的 数字钟实训论文说明书1001130525

桂林电子科技大学实训(论文)说明书

编号:

单片机综合设计

实训(论文)说明书

题目:数字钟

院(系):信息与通信学院

专业:电子信息工程学生姓名:庞美军学号:1001130525指导教师:符强、班立新、孙安青、归发弟

201*年06月18日桂林电子科技大学实训(论文)说明书

摘要

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

现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。

数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中,我们采用LED数码管显示时、分、秒、年、月、日和闹铃,时间以24小时计时方式,年显示为00~99年,根据数码管动态显示原理来进行显示,用11.0592MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间、日历、闹铃的其本功能,还可以实现对他们进行设置和调整。数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。

关键字:

数字电子钟单片机LED显示时钟误差

桂林电子科技大学实训(论文)说明书

Abstract

20century,electronictechnologyhasexperiencedrapidgrowthinitspromotion,modernelectronicproductalmostpermeatedthesocietyeachdomain,apowerfulimpetustothedevelopmentofthesocialproductiveforcesandtheenhancementofsocialinformatization,andatthesametime,makemodernelectricitywhenzichantofurtherimprovethequality,theproductsrenewaloftherhythmismoreandmorequickly.

Themodernlifeofpeoplepaymoreandmoreattentiontouptheconceptoftime,maysaythattimeandmoneywiththehospital.Forthosewho

Tograspthetimeisverystrictandaccuratepeopleorthings,it"snotaccuratetimewillbringverybigtrouble,sotodigitalthecanalistheclockdisplaythanpointertypeclockshowedalotofadvantage.Digitalpipedisplaytimeandreadsimpleandclearseveralfast,timeshowtotheseconds.Andmechanicaldependentonthecrystaloscillator,couldleadtoerrors.

Adigitalclockisthedigitalcircuittorealize,andpoints,secondsdigitaldisplaytimerdevice.Theprecisionofthedigitalclock,stabilityisfarmorethanoldmechanicalclock.Inthisdesign,weadoptLEDdigitaldisplaytubewhen,minutesandseconds,year,month,dayandalarm,timeto24hourstimerway,theshowforyearsin~99,accordingtotheprincipleofdigitaldynamicdisplaytoshow,with11.0592MHzofcrystalsproduceoscillationpulse,thetimercount.Inthisdesign,thecircuithasashowtime,calendar,thealarmitsthisfunction,alsocanachievethemtosetupandadjust.Adigitalclockisitssmall,thepriceislow,whenthehighprecision,easytouse,thefunctionismuch,facilitateintegrationandtheconsumptionbylove,soithasbeenwidelyused.

Keywords:

DigitalelectricclockmicrocontrollerLEDdisplayclockerror

II桂林电子科技大学实训(论文)说明书

目录

引言..........................................................................................................................................................11概述....................................................................................................................................................21.1设计背景................................................................21.2设计内容................................................................21.3设计要求................................................................22系统各硬件设计..................................................................................................................................2

2.1硬件主控芯片概述及功能介绍.........................................22.1.1主要特性.............................................................22.1.2管脚说明.............................................................32.1.3振荡器特性............................................................42.1.4芯片擦除..............................................................52.2四位七段数码管管脚识别.................................................52.3系统各模块电路设计与论..................................................62.3.1按键电路.............................................................72.3.2数码管显示电路....................................................72.3.3闹铃电路..........................................................8

3系统软件设计..................................................................9

3.1软件设计框图.............................................................................................................................9

3.2主程序.....................................................................10

3.3按键处理程序...........................................................113.4中断初始化............................................................13

4实验测试结果..................................................................................................................................14

4.1仿真调试..............................................................14

4.2性能测试与分析...............................................................................................................155实训总结..........................................................................................................................................15谢辞......................................................................................................................................................17参考文献................................................................................................................................................18附录1...................................................................................................................................................19

附录2......................................................................28附录3.......................................................................29

III桂林电子科技大学实训(论文)说明书

引言

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

在数字钟的设计过程中,虽然整过程看似很复杂困难,但是我却学到了很多东西,为以后的其他课题研究与毕业设计打下了基础。同时我也知道自己在电路制作中的多方不足,在以后的其他制作项目中我会不断的完善自我,努力把自己的动手能力提高一个档次。

桂林电子科技大学实训(论文)说明书

1概述

1.1设计背景

在现今生活中,时间与人们息息相关,人们常说时间比金钱还要珍贵。所以在人们对时间精准不断追求下,数字钟的研发也不断更新。电子数字钟因为其电路简单,具有显示灵活,操作简单的特点,已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。1.2设计内容

本课题是基于单片机设计的数字钟,通过STC89C52单片机读取并控制,在八位数码管上显示相关参数。1.3设计要求

1、八位数码管动态显示

2、实现年、月、日、时、分、秒的显示3、能交替显示时间和日期或自定义选择显示4、时间和日期都可以设定和调整5、实现闹铃设置和闹铃功能

6、设置时间和日期时,动态扫描不受到影响

7、只采用3个独立按键实现所有功

2系统各硬件设计

2.1硬件主控芯片概述及功能介绍

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

2.1.1芯片内部结构图

桂林电子科技大学实训(论文)说明书

图2-1单片机8052的内部结构

图2-2MCS-52系列单片机的内部结构

2.1.2.主要特性

与MCS-51兼容

8K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年

全静态工作:0Hz-35MHz三级程序存储器锁定512字节RAM32可编程I/O线

三个16位定时器/计数器

桂林电子科技大学实训(论文)说明书

5个中断源可编程串行通道

低功耗的闲置和掉电模式片内振荡器和时钟电路2.1.3.管脚说明

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口也可作为STC89C52的一些特殊功能口,如下表所示:口管脚备选功能

P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)

桂林电子科技大学实训(论文)说明书

P3.5T1(记时器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:来自反向振荡器的输出。

桂林电子科技大学实训(论文)说明书

2.1.4.振荡器特性

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.1.5.芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,STC89C52设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。2.2四位七段数码管管脚识别

内部的四个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有四个数码管,所以它有四个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。

桂林电子科技大学实训(论文)说明书

A-11B-7C-4D-2E-1F-10G-5DP-3DIG1-12DIG2-9DIG3-8DIG4-6

1至12脚分别为:edhcg1b23fa4。管脚的数法:有字面向自己,左下脚为第一脚,逆时针数。

2.3系统各模块电路设计与论证

方案:基于STC89C52单片机来制作电子时钟,其最大的好处就是可最大的调整时钟使其的准确度更高。所以根据课题要求为了得到更好的最确度所以决定选择该方案作为本设计的方案。,由于51单片机的驱动能力不足以驱动八位共阳数码管,因此利用9012PNP三极管进行简单的驱动,避免电路的设计复杂,从而简化编程的步骤,并把计时结果通过数码管显示出来

桂林电子科技大学实训(论文)说明书

2.3.1按键电路

图二按键电路

按键电路相对简单,该系统选用单片机的P1口作为按键输入端口,按键按下的有效电瓶为低电平,4个按键与一端IO口连接另一端直接接到地GND。2.3.2数码管显示电路

数码管显示电路选用单片机的P0口作为段码输出,P2口的四位作为位码的控制端,由于89C52系列单片机的P0口是COMS漏极设计具有吸收大电流作用,该端口无法输出有效高电平,故在P0口要添加上拉电阻,图中J0是1K的8段排阻,此外由于P0口驱动能力不足以驱动八位数码管,采用三极管9012作为驱动器件,由于9012为PNP型,故采用共阳数码管时,低低电平点亮。再者采用上电复位方式设计系统的复位方式,设计原则RC时间常数大于10毫秒。

桂林电子科技大学实训(论文)说明书

图三数码管显示电路

2.3.3闹铃电路

闹铃电路比较简单,采用9012PNP三级管驱动蜂鸣器,单片机P1.4管脚连接三极管的基极,当P1.4输出低电平时,三极管导通,从而驱动蜂鸣器发出声音。

图四闹铃电路

桂林电子科技大学实训(论文)说明书

3系统软件设计

3.1软件设计框图初始化定时计数器数码管显示当前时钟值图五主程序流程图

堆栈返调整时间时单元清0,24小时Y天单元清开定时器分单元清0,60分YN天加赋时钟初值中断Y秒单元清0,60秒到YN时加N分加N秒加1清显示缓冲区恢复初值,开始定时中简要说明:

(1)实现24小时制电子钟,8位数码管显示,显示时分秒;实现年月日日期显示;实现定时闹铃。

(2)显示格式:23-59-45;年月日显示格式12-06-18;闹铃格式20-01-00(3)通过四只按键来调整时间、日期和闹铃

(4)每按一次S1~S4按键,蜂鸣器响一声,如果蜂鸣器响三声,表明闹铃打开(5)P1.3接调整确认键S4,确认后返回时间显示

(6)P1.2接按键S3,P1.1接按键S2,P1.0接按键S1

(7)时间的调整:按S1进入时间调整模式,按S2小时加1,S3为分加1,按S4为调整确认

(8)闹铃的调整:按S2为闹铃显示和调整模式,再按S2为小时加1,S3为分加1,按S4为调整确认

(9)闹铃的开/关:当闹铃设定按确认键S4键蜂鸣器响三声表示闹铃开启,否

桂林电子科技大学实训(论文)说明书

则闹铃处于关闭状态

(10)日历的调整:按S3键,进入日历的显示和调整模式,再按S3为年加一,按S2为月加一,按S1为日加一,按S4为调整确认

3.2主程序

/********以下是主函数********/voidmain(void){

P0=0xff;P2=0xff;

timer_init();//调定时器T0、T1初始化函数while(1){

if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0))//若K1键按下时,只进行时钟调整,使闹铃设置功能失效{

Delay_ms(10);//延时10ms去抖

if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0)){

while(!K1);//等待K1键释放beep();//蜂鸣器响一声K1_FLAG=1;//K1键标志位置1,以便进行时钟调整}}

if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0))//若按下K2键时,只进行闹铃调整,使走时调整失效{

Delay_ms(10);

if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0)){

while(!K2);//等待K2键释放beep();K2_FLAG=1;//K2键标志位置1,以便进行闹铃调整}}

if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0))//若按下K3键时,只进行日历调整,使走时调整失效{

Delay_ms(10);

if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0)){

while(!K3);//等待K3键释放

桂林电子科技大学实训(论文)说明书

beep();K3_FLAG=1;//K3键标志位置1,以便进行日历调整}}

if(K1_FLAG==1)

KeyProcess1();//若K1_FLAG为1,则进行走时调整if(K3_FLAG==1){

KeyProcess2();//若K3_FLAG为1,则进行日历调整continue;}

//year(yeal,mon,day);//调日历转换函数

if(K2_FLAG==1)//若K2_FLAG为1,则进行闹铃调整{AlarmSet();continue;}

AlarmCheck();//调闹铃检查函数conv(hour,min,sec);//调走时转换函数}}

3.3按键处理程序

/********以下是按键处理函数,用来对时钟进行设置********/voidKeyProcess1(){

//TR1=0;//若按下K1键,则定时器T1关闭,时钟暂停if(K2==0)//若按下K2键{

Delay_ms(10);//延时去抖if(K2==0){

while(!K2);//等待K2键释放beep();

hour++;//小时调整if(hour==24){

hour=0;}}}

if(K3==0)//若按下K3键{

桂林电子科技大学实训(论文)说明书

Delay_ms(10);if(K3==0){

while(!K3);//等待K3键释放beep();min++;//分钟调整if(min==60){

min=0;}}}

if(K4==0)//若按下K4键{

Delay_ms(10);if(K4==0){

while(!K4);//等待K4键释放beep();

//TR1=1;//调整完毕后,时钟恢复走时K1_FLAG=0;//将K1键按下标志位清0}}}

/********以下是按键处理函数,用来对日历进行设置********/voidKeyProcess2(){

year(yeal,mon,day);//调日历铃转换函数

if((K3==0)&&(K3_FLAG==1))//若K3键按下后(K3_FLAG为1),再按下K3键{

Delay_ms(10);//延时去抖if((K3==0)&&(K3_FLAG==1)){

while(!K3);//等待K3键释放beep();

yeal++;//年调整if(yeal==99){yeal=0;}}}

if((K2==0)&&(K3_FLAG==1))//若按下K3键后(K3_FLAG为1),再按下K2键{

桂林电子科技大学实训(论文)说明书

Delay_ms(10);

if((K2==0)&&(K3_FLAG==1)){

while(!K2);//等待K2键释放beep();mon++;//月调整if(mon==13){mon=1;}}}

if((K1==0)&&(K3_FLAG==1))//若按下K3键后(K3_FLAG为1),再按下K1键{

Delay_ms(10);

if((K1==0)&&(K3_FLAG==1)){

while(!K1);//等待K1键释放beep();day++;//日调整if(day==32){day=1;}}}

if(K4==0)//若按下K4键{

Delay_ms(10);if(K4==0){

while(!K4);//等待K4键释放beep();K3_FLAG=0;//将K3键按下标志位清0

conv(hour,min,sec);//日历设置完成后,调走时转换函数,显示走时时钟}}}

3.4中断初始化

/********以下是定时器T0中断函数,用于数码管的动态扫描********/voidtimer0()interrupt1{

TH0=0xf8;TL0=0xcc;//重装计数初值,定时时间为2msDisplay();//调显示函数

/*********以下是定时器T0/T1初始化函数********/voidtimer_init()

桂林电子科技大学实训(论文)说明书

{TMOD=0x11;//定时器0,1工作模式1,16位定时方式TH0=0xf8;TL0=0xcc;//装定时器T0计数初值,定时时间为2msTH1=0xdc;TL1=0x00;//装定时器T1计数初值,定时时间为10msEA=1;ET0=1;ET1=1;//开总中断和定时器T0、T1中断TR0=1;TR1=1;//启动定时器T0、T1}

4实验测试结果

4.1仿真调试

软件仿真:我们在进行硬件制作前我们都对我们的制作进行了软件仿真,本次我用了proteus7.2进行了软件的仿真仿真图如下图,根据仿真图的显示结果我的电路设计已经达到了课题的要求。

显示当前时间:23点15分57秒

当前日期:201*年6月18日

当前闹铃:11点59分

桂林电子科技大学实训(论文)说明书

4.2性能测试与分析

本设计是基于MCS的时钟设计,用2个四位一体的共阳数码管做为显示器,它时实显示时间值;设计中有4个按键,按S1进入时间调整模式,按S2小时加1,S3为分加1,按S4为调整确认,按S2为闹铃显示和调整模式,再按S2为小时加1,S3为分加1,按S4为调整确认,当闹铃设定按确认键S4键蜂鸣器响三声表示闹铃开启,否则闹铃处于关闭状态,按S3键,进入日历的显示和调整模式,再按S3为年加一,按S2为月加一,按S1为日加一,按S4为调整确认,这样的结果与设计要求基本相符,本设计成功。

在电路调试过程中,我遇到一相对棘手的难题,一是数码管反复切换显示的程序编写,针对这个问题,我反复阅了各种书籍和自己的程序,虚心向同学请教,发现自己的系统的各功能的调转方面存在着逻辑判断错误;

按键和蜂鸣器的检测,利用输出引脚附带的电源和地对电路进行测量,测量结果和理论设计完全符合,这样所有各个功能子电路均能正常工作,可以下载程序进行系统工作了。

经过三天三夜不断的艰苦奋斗,我设计的数字钟系统电路所有功能模块据正常工作,单片机STC89C52也能正常读取数据,数码管正常显示数值,指示灯工作正常,按键输入键值能被单片机正常读取。整个系统运行理想,基本实现了课题的设计目的,达到了各项要求。

5实训总结

本次实训我所做的是STC89C52数字钟设计,从设计电路、连接电路到调测电路到最后的电路设计完成,都对我所学的知识进行了进行了综合系统的运用,提高了我整体的设计能力。设计是我们将来必需的技能,这次实习恰恰给我们提供了一个很好的平台,为以后的学习工作工作奠定了良好的基础。

首先,通过本次实训,使我系统综合运用所学知识。通过查阅资料,向老师请教,与同学讨论之后,我一步步地进行编写程序,修改参数,校正电路,使我对STC89C52数字钟设计的整个过程有了很好的掌握。并且通过帮助其他人寻找程序的问题,也让我对其他的设计有了较好的了解和掌握,其中对定时器/计数器运用也比较熟悉。同时,通过STC89C52数字钟设计,掌握了定时/计数初值的计算和中断的使用,并且设置时间和日期时,动态扫描不受影响,用四个按键实现所有功能的调整,对设计进行了创新。

其次,通过本次实训,使得我在困难中成长。在本次实训中我遇到了很多困难,但是在同学们的共同讨论下,让我有机会在困难中艰难前行,解决问题,这样让我收获很大,同时更让我明白,只有在问题中去寻找答案,去思考,这样才会学到更多,自身反而得不到提高。在实训中,通过运用以前老师所讲的理论知

桂林电子科技大学实训(论文)说明书

识以及图书馆的资料,总体而言,我的思路比较清晰,知道自己应该如何去一步一步完成,最终也让我比较早的完成了程序的编写与电路的设计,并且通过电路仿真完成了设计,最后通过反复的电路测试实现了设计功能。

再次,在本次实训中,进一步提高自己硬件的分析能力。在电路调测的过程中,具有很大的难度,通过反复的测试,对每一个线路点进行检测,我最终找出了问题的所在及很好地解决了问题。这使得我检测电路,调测电路的能力有了很大的提高。

最后,经过本次实训,使我明白合作的愉快和进步。实训使我再一次的复习了上课所学的知识使理论联系了实际,巩固并深化了对课本基本知识的认识和理解,使理论得以升华。这也让我更进一步的了解了单片机编程的应用。在完成设计论文的时候我参考了很多资料,通过老师和同学的帮助,我也学会了其他电路的设计方法。通过此次实验,使我收获很大,同时也使我获得了许多经验和教训:

(1)在设计电路时,设计思路要很清晰,逐个击破,才能较快较成功地完成整个电路的设计;

(2)在焊接电路板时,不能出现虚焊漏悍,才能使电路板美观好看,并且实现功能好,为调测板子节省了时间;

(3)在调测电路板时,要耐心仔细,不能忽视每一个细节,保证整体功能的实现情况下,才可以较好地对电路进行更好的创新设计;

从这次实习中,我认识到了亲身实践是我们大学生活很有用也很充实的一步,通过实习能学到在课堂上学不到的很多东西。在课堂上我们仅仅知道该怎么去做,但没有亲自实践,只能是靠想象,所以有很多东西都难以理解。我发现很多知识都是以前在课本上学过的,当时印象并不怎么深刻,但是,一经实习,似乎都能很容易理解其原理,并能对其有更深的记忆。在实训的过程中,我发现了自己的许多不足之处。例如对电路检测错误判断还不是很确定,检测时有时候也不是很仔细。这使得我认识到,今后要加强自己的学习,不断接触更深层次的知识,把知识综合运用起来,了解知识并应用知识,不断地提高自己的动手能力,真正做到理论与实践的相结合!

桂林电子科技大学实训(论文)说明书

谢辞

在符强老师、班立新老师、孙安青老师、归发弟老师的耐心指导下及同学的帮助下使我顺利的完成了本次的课题实训内容。开始老师指导我们课题方案设计,在选题以及研究设计方法上给予的悉心指导,使我尽快理清思路,通过请教老师以及查找资料使我较快的完成了对软件的编程及调试和顺利完成了论文写作。整个实训内容都是在老师悉心指导下完成的,老师严谨的治学作风、求实的工作态度使我受益匪浅,更重要的是从老师身上学到了对待任何事情的那种精益求精和一丝不苟的精神和态度。在本次实训中,我遇到了很多难题,然而这些难题让我不断的学习,在困难中进步,本次实训同学们帮了我很多忙,通过同学之间的相互帮助,我更加顺利地完成了本次实训,在此感谢我的同学朋友们!在此我要感谢指导教师对我的教导,感谢学校给我们提供实训的机会!

桂林电子科技大学实训(论文)说明书

参考文献

[1]李军《51系列单片机高级实例开发指南》北京航空航天大学出版社[2]孙涵芳《MCS51/96系列单片机原理及应用》北京航空航天大学出版社[3]王幸之《AT89系列单片机原理与接口技术》北京航空航天大学出版社[4]欧阳斌林《单片机原理及应用》中国水利水电出版社[5]潭浩强《C程序设计》北京航空航天出版社[6]付晓光《单片机原理与实用技术》清华大学出版社[7]邹寿彬[8]许熙文19

清华大学出版社高等教育出版社

《电子技术基础》《电路基础》桂林电子科技大学实训(论文)说明书

附录1

#include

#defineucharunsignedchar#defineuintunsignedint

ucharhour=23,min=59,sec=45;//定义小时、分钟和秒变量ucharcount_10ms;//定义10ms计数器sbitK1=P1^0;//定义K1键sbitK2=P1^1;//定义K2键sbitK3=P1^2;//定义K3键sbitK4=P1^3;//定义K4键sbitBEEP=P1^4;//定义蜂鸣器

bitK1_FLAG=0;//定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。

bitK2_FLAG=0;//定义按键标志位,当按下K2键时,该位置1,K2键未按下时,该位为0。

bitK3_FLAG=0;//定义按键标志位,当按下K3键时,该位置1,K3键未按下时,该位为0。

ucharcodebit_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选表,用来选择哪一只数码管进行显示ucharcodeseg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf};

//0~F、熄灭符和字符"-"的显示码(字形码)uchardisp_buf[8];//定义显示缓冲单元

bitalarm=0;//设置闹铃标志位,为1,闹铃功能打开;为0,闹铃功能关闭

ucharhour_a=20,min_a=01;//闹铃小时、分钟缓冲区ucharyeal=12,mon=6,day=18;//定义年、月和日变量uchardays_sum(){

uchara;

switch(mon)//判断这月有多少天{

case1:a=31;break;case3:a=31;break;case5:a=31;break;case7:a=31;break;case8:a=31;break;case10:a=31;break;case12:a=31;break;case4:a=30;break;case6:a=30;break;

桂林电子科技大学实训(论文)说明书

case9:a=30;break;case11:a=30;break;

case2:if(yeal%4==0)a=29;elsea=28;break;//是润年二月加一天}

returna;}

/********以下是延时函数********/voidDelay_ms(uintxms){

uinti,j;

for(i=xms;i>0;i--)//i=xms即延时约xms毫秒for(j=110;j>0;j--);}

/*********以下是蜂鸣器响一声函数********/voidbeep(){

BEEP=0;//蜂鸣器响Delay_ms(100);

BEEP=1;//关闭蜂鸣器Delay_ms(100);}

/********以下是闹铃转换函数,负责将闹铃数据转换为适合数码管显示的数据********/

voidconv_a(ucharin1,in2)//形参in1、in2接收实参hour_a、min_a传来的数据{

disp_buf[0]=in1/10;//闹铃小时十位disp_buf[1]=in1%10;//闹铃小时个位disp_buf[3]=in2/10;//闹铃分钟十位disp_buf[4]=in2%10;//闹铃分钟个位disp_buf[6]=0;//闹铃秒十位disp_buf[7]=0;//闹铃秒个位disp_buf[2]=17;//第3只数码管显示"-"(在seg_data表的第17位)

disp_buf[5]=17;//第6只数码管显示"-"}

/********以下是时钟转换函数,负责将时钟数据转换为适合数码管显示的数据********/

voidconv(ucharin1,in2,in3)//形参in1、in2、in3接收实参hour、min、sec传来的数据{

disp_buf[0]=in1/10;//小时十位disp_buf[1]=in1%10;//小时个位disp_buf[3]=in2/10;//分钟十位

桂林电子科技大学实训(论文)说明书

disp_buf[4]=in2%10;//分钟个位disp_buf[6]=in3/10;//秒十位disp_buf[7]=in3%10;//秒个位disp_buf[2]=17;//第3只数码管显示"-"(在seg_data表的第17位)

disp_buf[5]=17;//第6只数码管显示"-"}

/********以下是日历转换函数,负责将日历数据转换为适合数码管显示的数据********/

voidyear(ucharin1,in2,in3)//形参in1、in2、in3接收实参yeal、mon、day传来的数据{

disp_buf[0]=in1/10;//年十位disp_buf[1]=in1%10;//年个位disp_buf[3]=in2/10;//月十位disp_buf[4]=in2%10;//月个位disp_buf[6]=in3/10;//日十位disp_buf[7]=in3%10;//日个位disp_buf[2]=17;//第3只数码管显示"-"(在seg_data表的第17位)

disp_buf[5]=17;//第6只数码管显示"-"}

/********以下是闹铃检查函数********/voidAlarmCheck(){

if(alarm)//若闹铃标志位为1{

if((hour==hour_a)&&(min==min_a))//若走时的小时、分钟与闹铃的小时、分钟相等,则执行{

while(K4){beep();}//未按下K4键,闹铃始终响while(!K4);//等待K4键释放alarm=0;//闹铃标志位清0}}}

/********以下是闹铃设置函数********/voidAlarmSet(){

conv_a(hour_a,min_a);//调闹铃转换函数

if((K2==0)&&(K2_FLAG==1))//若K2键按下后(K2_FLAG为1),再按下K2键{

Delay_ms(10);//延时去抖

桂林电子科技大学实训(论文)说明书

if((K2==0)&&(K2_FLAG==1)){

while(!K2);//等待K2键释放beep();

hour_a++;//小时调整if(hour_a==24){hour_a=0;}}}

if((K3==0)&&(K2_FLAG==1))//若按下K2键后(K2_FLAG为1),再按下K3键{

Delay_ms(10);

if((K3==0)&&(K2_FLAG==1)){

while(!K3);//等待K3键释放beep();min_a++;//分钟调整if(min_a==60){min_a=0;}}}

if((K4==0)&&(K2_FLAG==1))//若按下K2键后(K2_FLAG为1),再按下K4键{

Delay_ms(10);

if((K4==0)&&(K2_FLAG==1)){

while(!K4);//等待K4键释放

alarm=~alarm;//闹铃标志位取反,使K4键具有打开和关闭闹铃的功能K2_FLAG=0;//闹铃调整后将K2_FLAG清0

if(alarm==1){beep();beep();beep();}//若闹铃开启(闹铃标志位为1),则响三声

elsebeep();//否则,若闹铃关闭(闹铃标志位为0),则响一声

conv(hour,min,sec);//闹铃设置完成后,调走时转换函数,显示走时时钟}}}

/********以下是显示函数********/voidDisplay(){

uchartmp;//定义显示暂存staticuchardisp_sel=0;//显示位选计数器,显示程序通过它得知现正显

桂林电子科技大学实训(论文)说明书

示哪个数码管,初始值为0

tmp=bit_tab[disp_sel];//根据当前的位选计数值决定显示哪只数码管

P2=tmp;//送P2控制被选取的数码管点亮

tmp=disp_buf[disp_sel];//根据当前的位选计数值查的数字的显示码

tmp=seg_data[tmp];//取显示码

P0=tmp;//送到P0口显示出相应的数字

disp_sel++;//位选计数值加1,指向下一个数码管if(disp_sel==8)

disp_sel=0;//如果8个数码管显示了一遍,则让其回0,重新再扫描}

/********以下是定时器T0中断函数,用于数码管的动态扫描********/voidtimer0()interrupt1{

TH0=0xf8;TL0=0xcc;//重装计数初值,定时时间为2msDisplay();//调显示函数}

/********以下是定时器T1中断函数,用于产生用于产生秒,分钟,小时和天,月,年信号********/

voidtimer1()interrupt3{

uchara;

TH1=0xdc;TL0=0x00;//重装计数初值,定时时间为10mscount_10ms++;//10ms计数器加1if(count_10ms>=100){

count_10ms=0;//计数100次后恰好为1s,此时10ms计数器清0

sec++;//秒加1if(sec==60){

sec=0;

min++;//若到60秒,分钟加1if(min==60){

min=0;

hour++;//若到60分钟,小时加1if(hour==24){

hour=0;day++;//大于24时DAY加一时等于0}

桂林电子科技大学实训(论文)说明书

a=days_sum();

//判断闰年的公式yeal%400||(yeal%4&&yeal%100!=0)if(day>a)//大于这月的天数月加一DAY等于1{day=1;mon++;}

if(mon>12)//月大于12年加一月等于1{

mon=1;yeal++;

if(yeal>99)yeal=0;//固定从201*~2099年之间调整

}}}}}

/********以下是按键处理函数,用来对时钟进行设置********/voidKeyProcess1(){

//TR1=0;//若按下K1键,则定时器T1关闭,时钟暂停if(K2==0)//若按下K2键{

Delay_ms(10);//延时去抖if(K2==0){

while(!K2);//等待K2键释放beep();

hour++;//小时调整if(hour==24){

hour=0;}}}

if(K3==0)//若按下K3键{

Delay_ms(10);if(K3==0){

while(!K3);//等待K3键释放beep();min++;//分钟调整if(min==60){

桂林电子科技大学实训(论文)说明书

min=0;}}}

if(K4==0)//若按下K4键{

Delay_ms(10);if(K4==0){

while(!K4);//等待K4键释放beep();

//TR1=1;//调整完毕后,时钟恢复走时K1_FLAG=0;//将K1键按下标志位清0}}}

/********以下是按键处理函数,用来对日历进行设置********/voidKeyProcess2(){

year(yeal,mon,day);//调日历铃转换函数

if((K3==0)&&(K3_FLAG==1))//若K3键按下后(K3_FLAG为1),再按下K3键{

Delay_ms(10);//延时去抖if((K3==0)&&(K3_FLAG==1)){

while(!K3);//等待K3键释放beep();

yeal++;//年调整if(yeal==99){yeal=0;}}}

if((K2==0)&&(K3_FLAG==1))//若按下K3键后(K3_FLAG为1),再按下K2键{

Delay_ms(10);

if((K2==0)&&(K3_FLAG==1)){

while(!K2);//等待K2键释放beep();mon++;//月调整if(mon==13){mon=1;}}

桂林电子科技大学实训(论文)说明书

}

if((K1==0)&&(K3_FLAG==1))//若按下K3键后(K3_FLAG为1),再按下K1键{

Delay_ms(10);

if((K1==0)&&(K3_FLAG==1)){

while(!K1);//等待K1键释放beep();day++;//日调整if(day==32){day=1;}}}

if(K4==0)//若按下K4键{

Delay_ms(10);if(K4==0){

while(!K4);//等待K4键释放beep();K3_FLAG=0;//将K3键按下标志位清0

conv(hour,min,sec);//日历设置完成后,调走时转换函数,显示走时时钟}}}

/*********以下是定时器T0/T1初始化函数********/voidtimer_init()

{TMOD=0x11;//定时器0,1工作模式1,16位定时方式TH0=0xf8;TL0=0xcc;//装定时器T0计数初值,定时时间为2msTH1=0xdc;TL1=0x00;//装定时器T1计数初值,定时时间为10msEA=1;ET0=1;ET1=1;//开总中断和定时器T0、T1中断TR0=1;TR1=1;//启动定时器T0、T1}

/********以下是主函数********/voidmain(void){

P0=0xff;P2=0xff;

timer_init();//调定时器T0、T1初始化函数while(1){

if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0))//若K1键按下时,只进行时钟调整,使闹铃设置功能失效

桂林电子科技大学实训(论文)说明书

{

Delay_ms(10);//延时10ms去抖

if((K1==0)&&(K2_FLAG==0)&&(K3_FLAG==0)){

while(!K1);//等待K1键释放beep();//蜂鸣器响一声K1_FLAG=1;//K1键标志位置1,以便进行时钟调整}}

if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0))//若按下K2键时,只进行闹铃调整,使走时调整失效{

Delay_ms(10);

if((K2==0)&&(K1_FLAG==0)&&(K3_FLAG==0)){

while(!K2);//等待K2键释放beep();K2_FLAG=1;//K2键标志位置1,以便进行闹铃调整}}

if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0))//若按下K3键时,只进行日历调整,使走时调整失效{

Delay_ms(10);

if((K3==0)&&(K1_FLAG==0)&&(K2_FLAG==0)){

while(!K3);//等待K3键释放beep();K3_FLAG=1;//K3键标志位置1,以便进行日历调整}}

if(K1_FLAG==1)

KeyProcess1();//若K1_FLAG为1,则进行走时调整if(K3_FLAG==1){

KeyProcess2();//若K3_FLAG为1,则进行日历调整continue;}

//year(yeal,mon,day);//调日历转换函数

if(K2_FLAG==1)//若K2_FLAG为1,则进行闹铃调整{AlarmSet();continue;}

桂林电子科技大学实训(论文)说明书

AlarmCheck();//调闹铃检查函数conv(hour,min,sec);//调走时转换函数}}

附录2

桂林电子科技大学实训(论文)说明书

附录三

友情提示:本文中关于《单片机数字钟实训说明》给出的范例仅供您参考拓展思维使用,单片机数字钟实训说明:该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


单片机数字钟实训说明
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/626145.html
相关阅读
最近更新
推荐专题