单片机课程设计(论文)简易时钟的设计_第1页
单片机课程设计(论文)简易时钟的设计_第2页
单片机课程设计(论文)简易时钟的设计_第3页
单片机课程设计(论文)简易时钟的设计_第4页
单片机课程设计(论文)简易时钟的设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要 单片计算机即单片微型计算机。由ram ,rom,cpu构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于at89s51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用proteus的isis软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。本文介绍了一种利用典型的数字电路来显示秒、分、时的

2、电子时钟装置,与机械式时钟相比具有走时准确、显示直观,无机械传动装置等优点。基于基本逻辑器件的数字钟设计从数字钟的基本原理阐述出发,对数字钟电路进行设计、装调。关键字:单片机;子时钟;键盘控制;led数码管。目录1 设计要求32 硬件设计及描述32.1 确定元器件型号及参数32.1.1 at89s51单片机简介:32.1.2 led数码显示管52.1.3 三极管62.1.4 发光二极管72.1.5 蜂鸣器72.2 硬件电路设计及描述83 软件程序设计93.1 时钟原理93.2 走时功能的设计103.2.1 定时器子程序init_timer103.2.2 中断服务程序to_int103.3 显示

3、部分的设计113.3.1 转换时、分子程序conv113.3.2 扫描显示子程序disp123.4 调整时间部分的设计133.5 喇叭和指示灯等子程序143.5.1 计时单元清0子程序143.5.2 蜂鸣器鸣响声子程序143.5.3 工作指示灯闪烁子程序153.5.4 延时子程序153.6 时钟主程序153.6.1 程序初始化153.6.2 主程序164 参考文献17结束语181 设计要求利用89s51单片机结合数码管显示器设计一个电子小闹钟,由于用led数码管显示新数据,在夜晚或黑暗的场合里也可以使用,具有一定的使用性。要求接通电源后,蜂鸣器连续两次发出响声,同时工作指示灯led闪动,表示程

4、序开始执行,数码管显示“0000”。接着需要设置现在时间:k1为设置现在时间功能键,按一下k1键,发光二极管led停止闪动,表明进入了设置现在时间状态,此时,按k2键为小时调整键,按一次,数值增1;k3键为分钟调整键,按一次,数值增1。设置完成后,要按一下k4键,led恢复闪动,表明设置完成,时钟进入了正常走时状态。2 硬件设计及描述2.1 确定元器件型号及参数2.1.1 at89s51单片机简介: at89s51是一个低功耗,高性能cmos 8位单片机,片内含4k bytes isp(in-system programmable)的可反复擦写1000次的flash只读程序存储器,器件采用at

5、mel公司的高密度、非易失性存储技术制造,兼容标准mcs-51指令系统及80c51引脚结构,芯片内集成了通用8位中央处理器和isp flash存储单元,功能强大的微型计算机的at89s51可为许多嵌入式控制应用系统提供高性价比的解决方案。at89s51具有如下特点:40个引脚,4k bytes flash片内程序存储器,128 bytes的随机存取数据存储器(ram),32个外部双向输入/输出(i/o)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(wdt)电路,片内时钟振荡器。功能特性:兼容mcs-51指令系统32个双向i/o口2个16位可编程定

6、时/计数器全双工uart串行中断口线2个外部中断源中断唤醒省电模式看门狗(wdt)电路灵活的isp字节和分页编程4k可反复擦写(1000次)isp flash rom4.5-5.5v工作电压时钟频率0-33mhz128x8bit内部ram低功耗空闲和省电模式3级加密位软件设置空闲和省电功能双数据at89s51相对于at89c51增加的新功能包括:- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89c51更低!- isp在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。- 最高工作频率为33mhz,大家都知道89c51的极限工作

7、频率是24m,就是说s51具有更高工作频率,从而具有了更快的计算速度。- 具有双工uart串行通道。- 内部集成看门狗计时器,不再需要像89c51那样外接看门狗计时器单元电路。- 双数据指示器。- 电源关闭标识。- 全新的加密算法,这使得对于89s51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89c51等等早期mcs-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89c51还是mcs-51等等),在at89s51上一样可以照常运行,这就是所谓的向下兼容。

8、据从电子市场获得的消息,最直接的是编程器市场,老款不支持at89sxx的编程器将真正、永远被淘汰。第二是仿真器市场,有客户将对at89sxx提出仿真要求。第三是下载电缆线,因为at89sxx支持在线编程,很多客户需要这个功能。第四,出版社、学校可能推出新的教材或技术资料。第五,at89s在目前肯定不能被解密,但迟早仍可以给解密行业带来巨大利润。at89s51/ at89s52在工艺上进行了改进,at89s51/ at89s52采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89cxx与89sxx可以兼容。atmel已经不接受89cxx的定单现在卖的89c51片子全是库存,价格相对与

9、s51来说at89c51可以要更高一点。2.1.2 led数码显示管单片机p0端口接有4位共阳极led数码管显示器。数码管的8个引脚依照a、b、c、d、e、f、g、dp顺序依次与p0端口的8个引脚p0.1、p0.2、p0.3、p0.4、p0.5、p0.6、p0.7相连,r是限流电阻。4位led数码管的共阳极引脚分别与v1v4三极管的集电极相连,三极管的基极通过限流电阻分别接在单片机p2端口的p2.0p2.3引脚上。4位数码管显示器分别由4只三极管控制,例如,p2.0输出为低电平时,v4三极管导通,与其相连的共阳极数码管显示器开始工作;p2.0输出为高电平时,v4三极管截止,与其相连的数码管显示

10、器停止工作。led显示屏分为数码显示屏、图文显示屏和视频显示屏,均由led矩阵块组成。led数码显示屏的显示器件为7段码数码管,适于制作时钟屏、利率屏等,显示数字的电子显示屏。 图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、vcd节目以及现场实况。led显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于金融、税务、工商、邮电、体育、广告、厂矿企业、交通运输、教育系统、车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管

11、理和其它公共场所。 2.5m宽茶色和透明磨砂树脂板已由无锡正成企业安装调试成功!大大改善了led的整体效果,有效时间达20年之久,耐高温达150度,低温达-45度led显示屏可以显示变化的数字、文字、图形图像;不仅可以用于室内环境还可以用于室外环境,具有投影仪、电视墙、液晶显示屏无法比拟的优点。 led之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。led的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。 led显示屏性能超群: 发光

12、亮度强 在可视距离内阳光直射屏幕表面时,显示内容清晰可见. 超级灰度控制 具有1024-4096级灰度控制,显示颜色16.7m以上,色彩清晰逼真,立体感强.静态扫描技术 采用静态锁存扫描方式,大功率驱动,充分保证发光亮度. 自动亮度调节 具有自动亮度调节功能,可在不同亮度环境下获得最佳播放效果. 全面采用进口大规模集成电路,可靠性大大提高,便于调试维护. 全天候工作 完全适应户外各种恶劣性环境,防腐,防水,防潮,防雷,抗震整体性能强、性价比高、显示性能好,像素筒可采用p10mm、p16mm等多种规格.先进的数字化视频处理,技术分布式扫描,模块化设计/恒流静态驱动,亮度自动调节,超高亮纯色象素影

13、像画面清晰、无抖动和重影,杜绝失真视频、动画、图表、文字、图片等各种信息显示、联网显示、远程控制。 2.1.3 三极管晶体三极管,是最常用的基本元器件之一,晶体三极管的作用主要是电流放大,他是电子电路的核心元件,现在的大规模集成电路的基本组成部分也就是晶体三极管。 三极管基本机构是在一块半导体基片上制作两个相距很近的pn结,两个pn结把正块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有pnp和npn两种, 从三个区引出相应的电极,分别为基极b发射极e和集电极c。发射区和基区之间的pn结叫发射结,集电区和基区之间的pn结叫集电极。基区很薄,而发射区较厚,杂质浓度大,pnp

14、型三极管发射区发射的是空穴,其移动方向与电流方向一致,故发射极箭头向里;npn型三极管发射区发射的是自由电子,其移动方向与电流方向相反,故发射极箭头向外。发射极箭头向外。发射极箭头指向也是pn结在正向电压下的导通方向。硅晶体三极管和锗晶体三极管都有pnp型和npn型两种类型。 三极管是一种控制元件,三极管的作用非常的大,可以说没有三极管的发明就没有现代信息社会的如此多样化,电子管是他的前身,但是电子管体积大耗电量巨大,现在已经被淘汰。三极管主要用来控制电流的大小,以共发射极接法为例(信号从基极输入,从集电极输出,发射极接地),当基极电压ub有一个微小的变化时,基极电流ib也会随之有一小的变化,

15、受基极电流ib的控制,集电极电流ic会有一个很大的变化,基极电流ib越大,集电极电流ic也越大,反之,基极电流越小,集电极电流也越小,即基极电流控制集电极电流的变化。但是集电极电流的变化比基极电流的变化大得多,这就是三极管的电流放大作用。 刚才说了电流放大是晶体三极管的作用,其实质是三极管能以基极电流微小的变化量来控制集电极电流较大的变化量。这是三极管最基本的和最重要的特性。我们将ic/ib的比值称为晶体三极管的电流放大倍数,用符号“”表示。电流放大倍数对于某一只三极管来说是一个定值,但随着三极管工作时基极电流的变化也会有一定的改变。根据三极管的作用我们分析它可以把微弱的电信号变成一定强度的信

16、号,当然这种转换仍然遵循能量守恒,它只是把电源的能量转换成信号的能量罢了。三极管有一个重要参数就是电流放大系数。当三极管的基极上加一个微小的电流时,在集电极上可以得到一个是注入电流倍的电流,即集电极电流。集电极电流随基极电流的变化而变化,并且基极电流很小的变化可以引起集电极电流很大的变化,这就是三极管的放大作用。三极管的作用还有电子开关,配合其它元件还可以构成振荡器,此外三极管还有稳压的作用。2.1.4 发光二极管发光二极管通常也叫光发射二极管(lightemitting diode,简写为led)是一种可将电能转变为光能的半导体发光器件,属于固态光源。led在20世纪60年代初期问世,当时的

17、led以红色为主,发光效率很低,光通量很小,只能作指示灯和仪表显示器使用。随着管芯材料、结构和封装技术的不断进步,led颜色品种增多,光效大幅度提高,目前的红色led光效已可以到100lm/w,绿色led也可达到 50lm/w,单个led的光通量可达到几十流明。尤其是近年来高光效、高亮度的白光led的开发成功,使得led在照明领域的应用成为可能。自爱迪生发明白炽灯以来的100多年中,电光源照明经历了三个重要发展阶段,这三个阶段中的代表性光源分别为白炽灯、荧光灯和高强度气体放电灯。现在人们普遍认为 led将可望发展成第四代光源,即半导体照明。2.1.5 蜂鸣器1.蜂鸣器的结构原理1压电式蜂鸣器

18、压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.515v直流工作电压),多谐振荡器起振,输出1.52.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。2电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。蜂鸣

19、器驱动电路由于蜂鸣器的工作电流一般比较大,以致于单片机的i/o 口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。 2. 蜂鸣器驱动设计由于这里要介绍两种驱动方式的方法,所以在设计模块系统中将两种驱动方式做到一块,即程序里边不仅介绍了pwm 输出口驱动蜂鸣器的方法,还要介绍i/o 口驱动蜂鸣器的方法。所以,我们将设计如下的一个系统来说明单片机对蜂鸣器的驱动:系统有两个他激蜂鸣器,频率都为2000hz,一个由i/o 口进行控制,另一个由pwm 输出口进行控制;系统还有两个按键,一个按键为port 按键,i/o 口控制的蜂鸣器不鸣叫时按一次按键i/o 口控制的蜂鸣器鸣

20、叫,再按一次停止鸣叫,另一个按键为pwm 按键,pwm 口控制的蜂鸣器不鸣叫时按一次按键pwm输出口控制的蜂鸣器鸣叫,再按一次停止鸣叫。 使用i/o 口定时翻转电平驱动蜂鸣器方式的设置比较简单,只需要对波形分析一下。由于驱动的信号刚好为周期500s,占空比为1/2duty 的方波,只需要每250s 进行一次电平翻转,就可以得到驱动蜂鸣器的方波信号。在程序上,可以使用timer0 来定时,将timer0 的预分频设置为/1,选择timer0 的始终为系统时钟(主振荡器时钟/4),在timer0 的载入/计数寄存器的高4 位和低4 位分别写入00h 和06h,就能将timer0 的中断设置为250

21、s。当需要i/o 口驱动的蜂鸣器鸣叫时,只需要在进入timer0 中断的时候对该 i/o 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将i/o 口的电平设置为低电平即可。不鸣叫时将i/o 口的输出电平设置为低电平是为了防止漏电。2.2 硬件电路设计及描述单片机时钟结构分硬件和软件两部分。其中,硬件部分比较简单,主要单片机、led数码管显示器和按键开关组成,电路设计如图所示。单片机p0端口接有4位共阳极led数码管显示器。数码管的8个引脚依照a、b、c、d、e、f、g、dp顺序依次与p0端口的8个引脚p0.1、p0.2、p0.3、p0.4、p0.5、p0.6、p0.7相连,r是限流电阻。4

22、位led数码管的共阳极引脚分别与v1v4三极管的集电极相连,三极管的基极通过限流电阻分别接在单片机p2端口的p2.0p2.3引脚上。4位数码管显示器分别由4只三极管控制,例如,p2.0输出为低电平时,v4三极管导通,与其相连的共阳极数码管显示器开始工作;p2.0输出为高电平时,v4三极管截止,与其相连的数码管显示器停止工作。3 软件程序设计3.1 时钟原理时钟一般是由走时、显示和调整时间3项基本功能组成,这些功能在单片机时钟里主要由软件设计体现出来。其中,走时部分利用单片机里的定时/计数器产生的中断。例如,设置定时器t0工作在模式0状态下,设置每隔5ms中断一次,中断200次正好是1s。中断服

23、务程序里记载着中断的次数,中断200次为1秒,60秒为1分,60分为1小时,24小时为1天。时钟的显示是使用4位led数码管,其软件设计原理是:由中断产生的秒、分、小时数据,经转换子程序转换成适应led数码管显示的数据,并通过单片机的输出功能输入到数码管显示器,再通过显示器扫描程序,显示出时钟的走时时间。调整时钟时间是利用了单片机的输入功能,把按键开关作为单片机的输入信号,通过检测被按下的开关,从而执行赋予该开关调整时间功能。因此,在设计程序时把单片机时钟功能分解为走时、显示和调整时间3个主要部分,每一部分的功能通过编写相应的子程序来完成,然后再通过主程序调用子程序,使这3部分有机地连在一起,

24、完成单片机的时钟设计。 3.2 走时功能的设计3.2.1 定时器子程序init_timer定时器子程序init-timer的作用是每隔5ms产生一次中断信号,它是时钟标准时间的来源和保证。下面是定时子程序init-trmer:init-timer: ;定时器t0初始化 mov tmod,#00000000b ;设置定时器t0工作模式为0mov tl0,#(8192-5000)mod 32 ;加载低于字节计数初值mov th0,#(8192-5000)/32 ;加载高字节计数初值mov ie#10000010b ;启用定时器t0中断setb tr0 ;启动定时器t0开始计时ret ;子程序返回定

25、时器t0设置为工作模式0状态,定时器每隔5ms中断一次,在晶振频率为12mhz时,此时5ms的初值为5000,但实际程序还要做其他运算,使得时间偏长,因此此值需经实验做些调整。3.2.2 中断服务程序to_int中断服务程序to_int的作用是重置定时器t0初始值,记录中断次数,并输出秒、分和小时。其中,deda存放5ms计数值,sec存放秒钟变量,min存放分钟变量,hour存放小时变量。中断服务程序to_int如下:to_int: ;中断服务程序push acc ;将a值压栈,现场保护mov tl0,#(8912-4150)mod 32 ;低位重置t0初值mov th0,#(8192-41

26、50)/32 ;高位重置t0初值inc deda ;加1cjne a,#200,tt1 ;mov deda,#0 ;是否1s到了cpl wled ;计数值清0inc sec ;led灯亮灭变换mov a, sec ;秒计数加1cjne a, #60,tt1inc min ;分计数加1mov sec, #0 ;秒计数清0mov a, min cjne a, #60,tt1 ;是否1h到了inc hour ;小时计时加1mov min, #0 ;分计数清0mov a, hourcjne a,#24,tt1 ;是否24h到了mov sec, #0 ;秒钟变量清0mov min, #0 ;分钟变量清0

27、mov hour, #0 ;小时变量清0tt1:pop acc ;出栈,现场恢复reti ;t0中断服务程序返回程序中秒、分和小时的输出语句在结构上相同,由递增指令inc记录数,并通过比较条件转移cjne来实现对输出的判断。例如,比较累加器a中存入的秒数小于60时,秒数值继续递增。当增到等于60时,程序向下运行,使分数加1,同时秒计数清0,即从头开始计秒数。3.3 显示部分的设计单片机时钟实现显示功能的子程序有:转换时、分子程序conv和扫描显示子程序disp。先通过转换时、分子程序conv,把由中断服务程序中产生的分、小时数据转换成适应led数码管显示的数据,即进行十进制计时处理,并存入数码

28、管显示内存中(事先设置的存放显示器数据单元)。再经扫描显示子程序disp,便能在led数码管上显示出时间。3.3.1 转换时、分子程序conv转换、时分子程序conv的作用是将中断服务程序中产生的分、小时数据,转换成适应led数码管显示数据。通过执行div指令进行十进制计时处理,并将处理后的数据分别存入数码管显示内存buf、buf+1、buf+2、buf+3内。其中buf、buf+1存放小时;buf+2、buf+3存放分钟,与数码管显示器u1、u2、和u3、u4相对应。下面是转换、分子程序conv。conv: mov a, hour ;开始转换小时数据 mov b, #10 ;16进制换成10

29、进制 div ab ;ab,商存a,余数存b mov dptr, #table ;查表转换 movc a, a+dptr mov buf, amov a, bmovc a, a+dptrmov buf+1, amov a, minmov b, #10 ;开始转换分钟数据div ab ;16进制换成10进制mov dptr,#table ;ab,商存a,余数存bmovc a, +dptr ;查表转换mov buf+2, amov a, bmovc a, a+dptrmov buf+3, arettable:db 0c0h,0f9h,0a4h,0b0h ;字型数据编码表db 99h,92h,82h

30、,0f8hdb 80h,90h,88h,83hdb 0c6h,0a1h,86h,8eh转换时、分子程序conv由3部分组成,第110行换小时数据;第1119行转换分钟数据,这两部分语句结构基本相同;第2226行是字母型数据编码表。3.3.2 扫描显示子程序disp显示器扫描子程序disp的作用是动态显示送入4位led数码管的时间数据。所谓动态显示是指一位一位轮流点亮led数码管,每一位停留4ms左右,利用人的视觉暂留消除闪烁现象。下面是显示管扫描子程序。disp:mov r0, #buf mov r2, #4 ;指向显示器显示缓冲区起始地址mov acc, #11110111b ;加载扫描信号

31、初值11110111bs1: push accmov a,r0 ;取出显示器数据mov p0, a ;由p0送出一位显示器数据pop accmov p2, acc ;由p2送出扫描输出信号mov r5, #2 ;延迟acall delay改变扫描码 ex:xxxx1011rr a ;a向右移动一位inc r0 ;显示器显示缓冲区地址加1djnz r2, s1 ;循环判断是否继续执行ret扫描显示子程序disp由以下部分组成。(1) 加载扫描初始值部分。第1行4行语句将显示器缓冲区起始地址buf,即存入十位上小时数的地址,送入寄存器r0;将扫描信号初值11110111b送入累加器acc;扫描循环

32、执次数,送入寄存器r2.(2) 输出1位字符。第5行12行语句是输出1位字符的过程。第7行语句从地址buf里取出显示器数据。第8行语句将取出的显示器数据送入p0输出。数码管的导通还是关闭是由扫描信号初值11110111b控制的,该扫描信号低4位数值控制着4位数码管是否导通,0对应的数码管为导通,1对应的数码管为不显示,此控制信号由第10行语句使p2端口送出,所以此时只有u1数码管导通,显示十位上的小时数。第11行、12行语句使显示的时间延时4ms,以便使显示的字符稳定。(3) 进行下一位扫描第1416行语句是进行下一位扫描的转变过程。第14行语句将显示器显示缓冲区地址加1,即从buf+1单元地

33、址处取数据,此数据是个位小时数,左数第2行位数码管导通,所以第13行语句改变了扫描码,将0向右移一位,保证了左数第2位u2数码管导通显示字符,其他数码管都不显示。 就这样循环执行4次完成显示器扫描一遍的任务,实际上数码管是在轮流显示,每一时刻只是一个数码管亮。3.4 调整时间部分的设计 set_time是调整时钟时间子程序。当单片机时钟每次重新启用时,都需要重新设置目前时钟的时间,其程序如下。set_time: ;调整目前时间子程序 clr tr0 ;定时器暂停 mov sec, #0 ;秒钟变量清0l0: acall scan ;调用扫描显示子程序;判定是否按k2键jb k2, l1 ;未按

34、下k2键,则继续扫描jnb k2, $ ;按下,则等待开放;小时调整inc hour ;小时计数加1mov a, hourcjne a, #24, l11 ;是否24h到了mov hour, #0 ;小时变量清0l11:acall conv ;转换显示数据acall scan ;扫描显示器jmp l0 ;使程序跳转到l0处执行;判断是否按k3键 l1:jb k3, l2 ;未按下k3键,则继续扫描jnb k3, $ ;按下,则等待开放;分钟调整inc min ;分钟计数加1mov a, mincjne a, #60, l21 ;是否60min到了mov min, #0 ;分钟变量清0l21:a

35、call conv ;转换显示数据acall scan ;扫描显示器jmp l0 ;使程序跳转到l0处执行;判断是否按k4键l2:jb k4,l0 ;未按下k4键,则继续扫描jinb k4,$ ;按下,则等待放开来acall bz ;蜂鸣器鸣响一声;设置完成acall led_bl ;led闪动setb tr0 ;启动定时器ret ;子程序返回当按下设置时间功能键k1后,程序便进入调整时间自程序set_time中运行,该子程序课分4部分。 (1)完成设置时间前的准备工作。第15行语句完成设置时间前的准备工作,包括暂停定时器工作;将秒钟清0和调用扫描显示器子程序。 (2)小时调整。第717行语句

36、为小时调整部分。 (3)分钟调整。第1930行语句为分钟调整部分。 (4)设置完成处理。第3239行语句为设置完成处理部分。 第二、三、四部分语句结构基本相同,首先通过第7、8、20、21、33、34行语句判断是否有按键,若无按键则继续扫描下一键,若有按键则执行相应的处理程序。 其中,k2键是小时调整键,k3键是分钟调整键,k4键为设置完成键。当设置时间完成后,按k4键通过第38行语句启动定时器开始工作,第39行语句是子程序返回。3.5 喇叭和指示灯等子程序除了上面主要子程序外,还有喇叭和指示灯等其他子程序。3.5.1 计时单元清0子程序init: ;计时单元清0mov deda, #0 ;5

37、ms计数值清0mov sec, #0 ;秒钟变量清0mov min, #0 ;分钟变量清0mov hour, #0 ;小时变量清0ret ;子程序返回3.5.2 蜂鸣器鸣响声子程序bz: mov r6, #250b1: acall dex ;调短暂延时子程序 cpl spk ;位反向输出 djnz r6,b1 ;控制响声长度 mov r5, #50 acall delay ;调延时子程序 ret ;子程序返回第3行语句是调用dex短暂延时子程序,该短暂延时的时间决定蜂鸣器响声的频率。延时短,则频率高;延时长,则频率低。第5行语句决定蜂鸣器响声长短。第7行语句调用delay延时子程序,该延时时间

38、决定连续两次响声之间的间隔时间大小。 3.5.3 工作指示灯闪烁子程序led_bl: mov r4, #6 ;闪烁次数le1: cpl wled ;位反向输出 mov r5, #25 acall delay ;延时50ms djnz r4, le1 ret ;子程序返回第2行语句是赋予闪烁次数,即每调用一次改子程序,工作指示灯闪烁6次。第3行语句位反向输出,即原来截止,现在导通;原来导通,现在截止。第4行语句通过对r5赋值来调节delay的延时时间,其延时时间为50ms。第5行语句调用delay延时子程序使工作灯亮(或灭)后停一段时间。3.5.4 延时子程序调用该延时子程序之前,要对r5赋值。

39、 delay mov r6,#10d1: mov r7,#100 djnz r7,$ djnz r6,d1 djnz r5, delay ;总延时r5 ret ;子程序返回3.5.5 蜂鸣器短暂延时子程序dex: mov r7, #180de1: nop djnz r7, de1 ret ;子程序返回3.6 时钟主程序主程序通过调用子程序,将各部分功能有机地组合到一起,完成单片机时钟的总体设计要求,主程序前要对程序进行初始化。3.6.1 程序初始化主程序前要对程序进行初始化,主要完成定义计时单元、定义引脚、定义中断服务程序入口地址等。(1) 定义存放计时单元地址。 buf equ 30h ;3

40、0-33h连续4字节存放显示器数据 hour equ 34 ;存放小时变量 min equ 35h ;存放分钟变量 sec equ 36h ;存放秒钟变量 deda equ 37h ;存放5ms计数值(2)按键输入引脚定义。 k1 equ p2.4 ;按键k1引脚定义k2 equ p2.5 ;按键k2引脚定义k3 equ p2.6 ;按键k3引脚定义k4 equ p2.7 ;按键k4引脚定义(3) 蜂鸣器和指示灯引脚定义。spk equ p3.4 ;蜂鸣器控制信号wled equ p1.0 ;工作指示灯引脚定义(4) 程序开始执行地址org 0h ;程序代码由地址0开始执行jmp mainorg 0bh 设置定时器0中断地址jmp to_int3.6.2 主程序主程序通过调用子程序,将各部分功能有机地组合到一起,并不断循环扫描k1k4功能键。在此主程序里只有k1键赋予了设置目前时间的功能,而其他k2k

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论