单片机课程设计
课程设计(论文)
题 目名 称 基于单片机的自动打铃系统
2010年 6月 28 日
单片机课程设计
摘 要
本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用ATC51单片机的扩展芯片和6个PNP三极管做驱动,由三块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。设计采用AT98C51单片机,使用5V电源供电,并且在按键的作用下可以进行调时,调分,复位功能。计时数据的更新在计算机C语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。
关键词:ATC51; 数码管 ; LED
单片机课程设计
目 录
引 言„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 第一章 设计简介及方案论述„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1 作息时间控制钟系统概述„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1
1.2 本设计任务和主要内容„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1
第二章 系统硬件电路设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1单片机总体设计思路„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2
2.2各功能模块程序实现原理分析„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2.21七段式数码管驱动模块„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2.22蜂鸣器驱动模块„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2.23按钮控制模块„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„3
2.3系统主要硬件电路„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„5
2.31七段式数码管驱动模块的硬件设计„„„„„„„„„„„„„„„„„„„„„„„„„6 2.32蜂鸣器驱动模块的硬件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„7
第三章 系统软件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
3.1 系统软件设计的主要内容„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
单片机课程设计
3.2 系统软件设计的流程图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
第四章 系统调试与测试结果分析„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
4.1 系统调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
4.11硬件调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 4.12软件调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 4.13硬件软件联机„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 4.2仿真结果„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
第五章 附录及参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„12 5.1汇编程序清单„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„12 5.2器材仪表„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„34 5.3参考资料„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„34
单片机课程设计
引 言
本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效的方法就是理论与实践并重,本文用ATC51单片机设计的一个自动打铃系统。
1
单片机课程设计
第一章 设计简介及方案论述
1.1作息时间控制钟系统概述:
本设计是一个具有报时功能的作息时间控制钟。它利用C51单片机的2Hz时基计时,进行年历计算,并用的蜂鸣器驱动模块将它报出来;在进行时间计算,分每加一时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。由七段显示驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成,四个按键用于报时及校正时间。现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。本设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。
1.2本设计任务和主要内容:
(1)设计任务
用可编程器件为主体,设计并制作一台自动打铃系统。要求完成的作品必须固化软件,测试检查时上电即可工作,不允再用计算机下载。实现能够显示当前的时间,同时能够在规定的时间点控制打铃装置打出预期的铃声。另外增设四个按钮,通过分配以实现对时间的调整,包括对时钟、分钟的增加和减少,秒钟的清零;以及强制打铃和关闭打铃。 (2)主要内容
1、基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。
2、能设置当前时间(含上、下午,时,分) 3、能实现基本打铃功能,规定:
上午6:00起床铃:打铃5秒、停2秒、再打铃5秒。 下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。 铃声可用小喇叭播放,凡是用到铃声功能的均按此处理。
1
单片机课程设计
第二章 系统主要硬件电路设计
2.1单片机总体设计思路
(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘,LCD或LED的显示屏;
(2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;
(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。
2.2各功能模块程序实现原理分析
七段式数码管按钮控制ATC51铃声装置 图2-1
模块组成框图如图2-1所示,该模块由蜂鸣器驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成。且三部分都通过ATC51来实现。 2.21七段式数码管驱动模块
采用动态扫描方式,通过一组单片机端口驱动并联在一起的LED发光管的一端(共阴或共阳端),LED发光管的另一脚接通用I/O口,控制其亮灭。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。 2.22蜂鸣器驱动模块
2
单片机课程设计
采用压电式蜂鸣器,压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 2.23按钮控制模块
四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。
2.3ATC51单片机性能介绍
ATC51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的ATC51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 引脚说明:
VCC:供电电压。
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”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写
3
单片机课程设计
时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为ATC51的一些特殊功能口,如下表所示: 口管脚 备选功能
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口同时为闪烁编程和编程校验接收一些控制信号。C51各部分引脚图如下:
P1.0 1 40 Vcc P1.1 2 39 P0.0 P1.2 3 38 P0.1 P1.3 4 37 P0.2 P1.4 5 36 P0.3 P1.5 6 35 P0.4 P1.6 7 34 P0.5 P1.7 8 33 P0.6 RST/Vpd 9 32 P0.7 RXD P3.0 10 31 EA/Vpp TXD P3.1 11 30 ALE/-P INT0 P3.2 12 29 PSEN INT1 P3.3 13 28 P2.7 T0 P3.4 14 27 P2.6 T1 P3.5 15 26 P2.5 WR P3.6 16 25 P2.4 RD P3.7 17 24 P2.3 X2 18 23 P2.2 X1 19 22 P2.1 GND 20 21 P2.0
图2-2 C51引脚图
4
单片机课程设计
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。为使该模块化自动打铃系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。硬件电路包括七段式数码管驱动模块、蜂鸣器驱动模块、按钮控制模块等三大模块。
2.3系统主要硬件电路
系统主要硬件电路作为驱动整个打铃系统的电路又分为七段数码显示电路和蜂鸣器驱动电路。
由显示七段数码显示电路和蜂鸣器驱动电路组成的系统硬件主要电路如下:
图2-3:系统主要硬件电路
5
单片机课程设计
该系统通过按钮控制(系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮;调整选择键SET_KEY:P1.0通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1按一次使选中位加1;减少键DEC_KEY:P1.2按一次使选中位减1;如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁)ATC51的计时和定时,在七段数码管上显示出来(实现24小时制电子钟,8位数码管显示,显示时分秒),再通过蜂鸣器 (BEEP:P3.7)来实现打铃。 2.31七段式数码管驱动模块的硬件设计
LED数码管显示器内部有七个条形发光二极管和一个小圆点发光二极管组成,其结果图如下所示:
A
B C D E F G
com
图2-4:七段数码显示管
因而它的控制原理和发光二极管的控制原理是相同的。根据各管接线的形式,可分成共阴极型和共阳极型。其八个接口对应的字形如下表:
表一:数码管字型码表
显示字形 dp 0 0 0 0 0 0 0 0 0 0 0 0 g 0 0 1 1 1 1 1 0 1 1 1 1 f 1 0 0 0 1 1 1 0 1 1 1 1 e 1 0 1 0 0 0 1 0 1 0 1 1 d 1 0 1 1 0 1 1 0 1 1 0 1 c 1 1 0 1 1 1 1 1 1 1 1 1 b 1 1 1 1 1 0 0 1 1 1 1 0 6
a 1 0 1 1 0 1 1 1 1 1 1 0 共阴极字型码 0x3F 0x06 0x5B 0x4F 0x66 0x6D 0x7D 0x07 0x7F 0x6F 0x77 0x7C 共阳极字型码 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 0x88 0x83 0 1 2 3 4 5 6 7 8 9 A B
单片机课程设计
C D E F 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 1 1 0x39 0x5E 0x79 0x71 0xC6 0xA1 0x86 0x8E 3.2.3蜂鸣器驱动模块的硬件设计
本设计中的蜂鸣器驱动模块用到了蜂鸣器(SPEAKER)、三极管、100欧姆的电阻。将蜂鸣器的一段接地,另一端接三极管的发射极,三极管的基极通过100欧姆的电阻接在三极管的P3.7引脚,三极管的集电极接+5V的电源。其电路图如下图所示:
图2-5:蜂鸣器驱动电路图
7
单片机课程设计
第三章 系统软件设计
软件是该LED显示屏控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。
3.1系统软件设计的主要内容
系统软件设计由三个模块编程组成:蜂鸣器打铃编程,七段显示管显示编程,按键编程。
3.2主程序流程设计
主程序初始化,并打开中断,然后执行中断服务程序。实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:23-59-59(小时十位如果为0则不显示) 到预定时间启动蜂鸣器模拟打铃,蜂鸣器BEEP:P3.7打铃方式分起床、熄灯铃和上、下课铃两种系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮 调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁增加键ADD_KEY:P1.1;按一次使选中位加1减少键DEC_KEY;P1.2;按一次使选中位减1,如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁。 主程序流程设计图:
8
单片机课程设计
开始初始化是否正常走时?YN打铃时间比较打铃判断,执行显示按键检测N有键按下吗?Y获取键值按键处理
图3.1
如图所示主程序开始初始化后,就跳转到中断服务程序,如正常走时,则往下进行打铃时间的比较,继续向下执行对打铃的判断程序;如不正常走时,则直接转到显示程序。这以后,继续执行按键的检测,若有键按下,则取值打铃;反之,则返回到中断服务程序的开始继续执行。
主程序清单见附录。
9
单片机课程设计
第四节 系统调试与测试结果分析
4.1系统调试
根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:LED驱动模块的调试,数据存储模块的调试,PC机通信模块的调试等,最后将各模块组合后进行整体测试。 4.11硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。 4.12软件调试
软件调试采用单片机仿真器WAVE6000L及微机,将编好的程序进行调试,主要是检查语法错误。 4.13硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
4.2仿真结果
此系统的仿真效果很好,能实现设计要求和目的所规定的内容。下面是两幅仿真结果图:
RP1RESPACK-81234567L1L2L3L4C130PFU1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617L1L2L3L4L5L6L7L8C330PFR110k9RSTC210uF293031PSENALEEAS1S2S1S2S3S4R3R4R5R610k10k10k10k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51R2100Q1BU208S3S4LS1SPEAKER
图4-1
10
L5L6L7L8
单片机课程设计
RP1RESPACK-81234567L1L2L3L4C130PFU1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617L1L2L3L4L5L6L7L8C330PFR110k9RSTC210uF293031PSENALEEAS1S2S1S2S3S4R3R4R5R610k10k10k10k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51R2100Q1BU208S3S4LS1SPEAKER 图4-2
L5L6L7L8
11
单片机课程设计
附录:
5.1汇编程序清单:
BEEP EQU P3.7 ;定义蜂鸣器(电铃)控制信号输出口
ORG
0000H ;程序入口地址
LJMP START
ORG 000BH ;定时器0中断入口地址 LJMP TIMER_0 ORG 0100H
;/*****程序开始,初始化*****/
START:
SETB BEEP ;关闭蜂鸣器(电铃)
SETB 48H ;使用一个bit位用于调时闪烁标志
SETB 47H ;使用一个bit位用于产生脉冲用于调时快进时基 CLR CLR
45H ;关闭响铃方式1标志 44H ;关闭响铃方式2标志
MOV R1,#0 ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒 MOV 20H,#00H ;用于控制秒基准时钟源的产生 MOV 21H,#00H ;清零秒寄存器 MOV 22H,#00H ;清零分寄存器 MOV 23H,#00H ;清零时寄存器
MOV 24H,#00H ;用于控制调时闪烁的基准时钟的产生 MOV R2,#00H ;强制打铃标志 MOV R3,#00H ;强制打铃时长标志
MOV IP,#02H ;IP,IE初始化 MOV IE,#82H
MOV TMOD,#01H ;设定定时器0工作方式1 MOV TH0,#3CH
MOV TL0,#0B0H ;赋定时初值,定时50ms SETB TR0 ;启动定时器0 MOV SP,#40H ;重设堆栈指针
12
单片机课程设计
;/*****主程序*****/
MAIN:
CJNE R1,#00H,MAIN1 ;是否为正常走时状态 LCALL BIJIAO1 ;调用起床、熄灯打铃比较子程序 LCALL BIJIAO2 ;调用上、下课打铃比较子程序 LCALL DALING1 ;调用响铃方式1执行子程序 LCALL DALING2 ;调用响铃方式2执行子程序 LCALL DALING3
MAIN1:
LCALL DISPLAY ;调用显示子程序 LCALL KEY_SCAN ;调用按键检测子程序 JZ MAIN ;无键按下则返回重新循环 LCALL SET_KEY ;调用选择键处理子程序
JB 46H,MAIN ;如果已进行长按调整(调时快进),则不再执行下面的单步调整 LCALL ADD_KEY ;调用增加键处理子程序 LCALL DEC_KEY ;调用减少键处理子程序
LCALL DALING_KEY ;处理强制打铃/强制关闭铃声键 LJMP MAIN ;重新循环
;/*****定时中断服务程序*****/
TIMER_0:
PUSH ACC PUSH PSW ;保护现场 MOV TH0,#3CH
MOV TL0,#0B0H ;重新赋定时初值 CPL 47H ;产生脉冲用于调时快进时基 INC 24H
MOV A,24H
CJNE A,#10,ADD_TIME ;产生0.5秒基准时钟,用于调时闪烁 CPL 48H
;取反调时闪烁标志位
13
单片机课程设计
MOV 24H,#00H
ADD_TIME:
INC 20H MOV A,20H
CJNE A,#20,RETI1 ;产生1秒基准时钟 MOV 20H,#00H
;一秒钟时间到,清零20H
CJNE R2,#01H,ADD_M INC R3
ADD_M:
MOV A,21H ADD A,#01H DA A
;作十进制调整
MOV 21H,A
CJNE A,#60H,RETI1 MOV 21H,#00H MOV A,22H ADD A,#01H DA A MOV 22H,A
CJNE A,#60H,RETI1 MOV 22H,#00H MOV A,23H
;一分钟到
;一小时到
ADD A,#01H DA A MOV 23H,A CJNE A,#24H,RETI1
MOV 23H,#00H ;到24点,清零小时
RETI1:
POP PSW POP ACC ;恢复现场
14
单片机课程设计
RETI ;中断返回
;/*****显示处理*****/
DISPLAY:
MOV A,21H ;秒
ANL A,#0FH
MOV 2FH,A ;转换出秒个位,存入2FH
MOV A,21H
ANL A,#0F0H SWAP A
MOV 2EH,A ;转换出秒十位,存入2EH
JB 46H,MIN
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为3,闪烁秒位待调整
CJNE R1,#3,MIN JB 48H,MIN
MOV 2FH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2EH,#0AH
MIN:
MOV A,22H ;分
ANL A,#0FH
MOV 2DH,A ;转换出分个位,存入2DH
MOV A,22H
ANL A,#0F0H SWAP A
MOV 2CH,A ;转换出分十位,存入2CH
JB 46H,HOUR
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为2,闪烁分位待调整
CJNE R1,#2,HOUR JB 48H,HOUR
MOV 2DH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2CH,#0AH
HOUR:
MOV A,23H ;时
ANL A,#0FH
15
单片机课程设计
MOV 2BH,A ;转换出时个位,存入2BH
MOV A,23H
ANL A,#0F0H SWAP A
MOV 2AH,A ;转换出时十位,存入2AH
JB 46H,DISP
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为1,闪烁时位待调整
CJNE R1,#1,DISP
JB 48H,DISP
MOV 2BH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2AH,#0AH ;/*****数码管动态扫描显示*****/
DISP:
MOV DPTR,#TABLE MOV A,2FH MOVC A,@A+DPTR MOV P0,A CLR P2.7 LCALL DELAY SETB P2.7 ;显示秒个位
MOV A,2EH
MOVC A,@A+DPTR MOV P0,A CLR P2.6 LCALL DELAY SETB P2.6 ;显示秒十位
MOV A,#40H
MOV P0,A CLR P2.5 LCALL DELAY SETB P2.5 ;显示“-”
MOV A,2DH
16
单片机课程设计
MOVC A,@A+DPTR MOV P0,A CLR P2.4 LCALL DELAY SETB P2.4 ;显示分个位
MOV A,2CH
MOVC A,@A+DPTR MOV P0,A CLR P2.3 LCALL DELAY SETB P2.3 ;显示分十位
MOV A,#40H
MOV P0,A CLR P2.2 LCALL DELAY SETB P2.2 ;显示“-”
MOV A,2BH
MOVC A,@A+DPTR MOV P0,A CLR P2.1 LCALL DELAY SETB P2.1 ;显示时个位
MOV DPTR,#TABLE1 ;该位使用TABLE1以消除前置0
MOV A,2AH
MOVC A,@A+DPTR MOV P0,A CLR P2.0 LCALL DELAY SETB P2.0 ;显示时十位
RET
17
单片机课程设计
;/*****按键检测子程序*****/
KEY_SCAN:
CLR 46H ;关闭长按调整(调时快进)标志
MOV P1,#0FFH MOV A,P1
;将P1口设置成输入状态
CPL A
ANL A,#0FH ;P1口低4位连接4个按键,只判断该4位
JZ EXIT_KEY
;无键按下则返回 ;延时去抖动
LCALL DELAY
MOV A,P1 ;重新判断
CPL A
ANL A,#0FH
JZ EXIT_KEY ;键盘去抖动
MOV R5,A
;临时将键值存入R5
;用于控制调时快进速度
MOV R4,#00H
;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进
LOOP: ;进入长按处理
LCALL DISPLAY ;使长按时显示正常
MOV A,P1
CPL A ANL A,#0FH JB 47H,LOOP1
INC R4 ;调时快进间隔时间基准加1 LOOP1:
CJNE R1,#03H,LOOP2 ;如果调秒时长按,则不处理
LJMP LOOP3
LOOP2:
CJNE R4,#99H,LOOP3
MOV R4,#70H SETB 46H
;确认用户长按后,重新设定起始值,加快调时快进速度
;长按调整(调时快进)标志
18
单片机课程设计
LCALL ADD_KEY
LCALL DEC_KEY LOOP3:
JNZ LOOP ;等待键释放
MOV A,R5 RET
;输出键值
EXIT_KEY: RET
;/*****延时子程序*****/
DELAY: MOV R7,#150 DJNZ R7,$ RET
;/*****选择键处理子程序*****/
SET_KEY:
CJNE R5,#01H,EXIT ;选择键键值
INC R1
;调整选择功能标志加一
SETB BEEP
CJNE R1,#4,EXIT MOV R1,#0
MOV 24H,#00H ;调时闪烁基准清零
RET
;/*****增加键处理子程序*****/
ADD_KEY:
CJNE R5,#02H,EXIT ;增加键键值
CJNE R1,#01H,NEXT1 ;选择键功能标志为1,调时,否则跳出 MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
19
单片机课程设计
CJNE A,#24H,EXIT MOV 23H,#00H NEXT1:
CJNE R1,#02H,NEXT2 ;选择键功能标志为2,调分,否则跳出
MOV A,22H
ADD A,#01H DA A MOV 22H,A CJNE A,#60H,EXIT MOV 22H,#00H NEXT2:
CJNE R1,#03H,EXIT ;选择键功能标志为3,调秒,否则跳出
MOV 21H,#00H RET
;/*****减少键处理子程序*****/
;如增加键按下直接清零秒
DEC_KEY:
CJNE R5,#04H,EXIT ;减少键键值
CJNE R1,#01H,NEXT3 ;选择键功能标志为1,调时,否则跳出 MOV A,23H
ADD A,#99H DA A MOV 23H,A CJNE A,#99H,EXIT MOV 23H,#23H NEXT3:
CJNE R1,#02H,NEXT4 ;选择键功能标志为2,调分,否则跳出
MOV A,22H
ADD A,#99H
DA A
MOV 22H,A
20
单片机课程设计
CJNE A,#99H,EXIT MOV 22H,#59H NEXT4:
CJNE R1,#03H,EXIT ;选择键功能标志为3,调秒,否则跳出
MOV 21H,#00H
;如较少键按下直接清零秒
RET
;/*****强制响铃键处理子程序*****/
DALING_KEY:
CJNE R5,#08H,EXIT ;选择键键值
JNB 45H,LP1 CLR 45H
;判断是否正在响铃
RET LP1:
JNB 44H,LP2 CLR 44H RET LP2:
MOV R2,#01H RET
;/*****万用返回程序*****/
EXIT: RET
;/*****数码管字形编码表*****/
TABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;字形显示编码 TABLE1:
DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;小时位的十位数编
码,该位如果为0则不显示
;/*****打铃时间对比程序(起床、熄灯)*****/
BIJIAO1:
21
单片机课程设计
MOV A,23H CJNE A,#00H,B0 MOV A,22H
CJNE A,#01H,B0 ;6:00到
SETB 45H ;开启响铃方式1
RET
B0: MOV A,23H CJNE A,#22H,EXIT_1 MOV A,22H
CJNE A,#30H,EXIT_1 ;22:30到
SETB 45H ;开启响铃方式1
RET
EXIT_1: CLR 45H RET
;/*****打铃时间对比程序(上、下课)*****/
BIJIAO2: MOV A,23H CJNE A,#07H,B1 MOV A,22H
CJNE A,#30H,B1 ;7:30 SETB 44H ;开启响铃方式2
RET
B1: MOV A,23H CJNE A,#08H,B2 MOV A,22H
CJNE A,#20H,B2 ;8:20 SETB 44H RET
B2: MOV A,23H CJNE A,#08H,B3
22
单片机课程设计
MOV A,22H
CJNE A,#30H,B3 ;8:30 SETB 44H RET
B3: MOV A,23H CJNE A,#09H,B4 MOV A,22H
CJNE A,#20H,B4 ;9:20 SETB 44H RET
B4: MOV A,23H CJNE A,#09H,B5 MOV A,22H
CJNE A,#40H,B5 ;9:40 SETB 44H RET
B5: MOV A,23H CJNE A,#10H,B6 MOV A,22H
CJNE A,#30H,B6 ;10:30 SETB 44H RET
B6: MOV A,23H CJNE A,#10H,B7 MOV A,22H
CJNE A,#40H,B7 ;10:40 SETB 44H RET
B7: MOV A,23H CJNE A,#11H,EXIT_2 MOV A,22H
23
单片机课程设计
CJNE A,#30H,EXIT_2 ;11:30 SETB 44H RET EXIT_2: CLR 44H RET
;/*****响铃方式1程序(响5秒停2秒再响5秒)*****/
DALING1:
JNB 45H,EXIT_DALING
MOV A,21H ;响铃起始时间由秒实时控制
CJNE A,#05H,L1
RET L1: JNC L2 CPL BEEP LCALL DELAY1 RET L2:
MOV A,21H CJNE A,#07H,L3 CPL BEEP LCALL DELAY1 RET L3: JNC L4 SETB BEEP LCALL DELAY1 RET L4:
MOV A,21H CJNE A,#12H,L5
24
单片机课程设计
SETB BEEP LCALL DELAY1 RET L5:
JNC EXIT_DALING CPL BEEP LCALL DELAY1 RET
;/*****响铃方式2程序(响5秒)*****/
DALING2:
JNB 44H,EXIT_DALING
MOV A,21H ;响铃起始时间由秒实时控制
CJNE A,#05H,L6
SETB BEEP RET L6:
JNC EXIT_DALING CPL BEEP LCALL DELAY1 RET
;/*****响铃方式3程序*****/
DALING3:
CJNE R2,#01H,EXIT_DALING CJNE R3,#05H,DL3 MOV R2,#00H MOV R3,#00H SETB BEEP RET DL3: CPL BEEP LCALL DELAY1
25
单片机课程设计
RET EXIT_DALING: RET
DELAY1:MOV R6,#10 ;短延时子程序
X1:MOV R7,#80
X2:DJNZ R7,X2 DJNZ R6,X1 RET END ;程序结束
5.2器材仪表:
仪器:单片机仿真器或程序固化设置 一台;PC机一台;万用表一块;
主要元器件:C51一片,键盘或按键一套,显示屏LCD或LED一块,喇叭一个。
5.3参考资料:
《单片机原理及接口技术》 李朝青 北京航空航天大学出版社 2005年第三版 《模拟电子技术基础》 胡宴如、耿苏燕 高等教育出版社 2004年第一版 《数字电子技术基础》张克农 高等教育出版社 2003年第一版
《单片机课程设计指导》北京航空航天大学出版社,楼然苗等2007年7月 《单片机实验与实践教程》北京航空航天大学出版社,何立民等2004年7月
26
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务