基于单片机的自动打铃系统_课程设计
课程设计(论文)
题 目 名 称 基于单片机的自动打铃系统 课 程 名 称 电视机原理与技术 学 生 姓 名 学 号 2009100190 系 、专 业 09电子信息工程 指 导 教 师
2012年12月12日
摘 要
本次设计中的LED 数码管电子时钟电路采用24小时制记时方式, 本次设计采用AT89C51单片机的扩展芯片和6个PNP 三极管做驱动,由三块LED 数码管构成的显示系统,与传统的基于8/16位普通单片机的LED 显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED 数码管稳定显示。设计采用AT98C51单片机,使用5V 电源供电,并且在按键的作用下可以进行调时,调分,复位功能。计时数据的更新在计算机C 语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。
关键词:AT89C51; 数码管 ; 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
第三章 系统调试与测试结果分析„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
4.1 系统调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
4.11硬件调试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 4.12硬件软件联机„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 4.2仿真结果„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
第四章 附录及参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„12 4.1软件程序清单„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„12 4.2参考资料„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„34
引 言
本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效的方法就是理论与实践并重,本文用AT89C51单片机设计的一个自动打铃系统。
第一章 设计简介及方案论述
1.1作息时间控制钟系统概述:
本设计是一个具有报时功能的作息时间控制钟。它利用89C51单片机的2Hz 时基计时,进行年历计算,并用的蜂鸣器驱动模块将它报出来;在进行时间计算,分每加一时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。由七段显示驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成,四个按键用于报时及校正时间。现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。本设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。
1.2本设计任务和主要内容:
(1) 设计任务
用可编程器件为主体,设计并制作一台自动打铃系统。要求完成的作品必须固化软件,测试检查时上电即可工作,不允再用计算机下载。实现能够显示当前的时间,同时能够在规定的时间点控制打铃装置打出预期的铃声。另外增设四个按钮,通过分配以实现对时间的调整,包括对时钟、分钟的增加和减少,秒钟的清零;以及强制打铃和关闭打铃。 (2)主要内容
1、基本计时和显示功能(用12小时制显示) 。包括上下午标志,时、分的数字显示,秒信号指示。
2、能设置当前时间(含上、下午,时,分) 3、能实现基本打铃功能,规定:
上午6:00起床铃:打铃5秒、停2秒、再打铃5秒。 下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。 铃声可用小喇叭播放,凡是用到铃声功能的均按此处理。
第二章 系统主要硬件电路设计
2.1单片机总体设计思路
(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘,LCD 或LED 的显示屏;
(2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;
(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能; (4)设计打铃执行机构,完成自动打铃功能。
2.2各功能模块程序实现原理分析
图2-1
模块组成框图如图2-1所示,该模块由蜂鸣器驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成。且三部分都通过AT89C51来实现。 2.21七段式数码管驱动模块
采用动态扫描方式,通过一组单片机端口驱动并联在一起的LED 发光管的一端(共阴或共阳端) ,LED 发光管的另一脚接通用I/O口,控制其亮灭。该方法能驱动较多的LED ,控制方式较灵活,而且节省单片机的资源。 2.22蜂鸣器驱动模块
采用压电式蜂鸣器,压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15V 直流工作电压),多谐振荡器起振, 输出1.5~2.5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。 2.23按钮控制模块
四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。
2.3AT89C51单片机性能介绍
AT89C51是一种带4K 字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 引脚说明:
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”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写
时,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口同时为闪烁编程和编程校验接收一些控制信号。89C51各部分引脚图如下:
.0
图2-2 89C51引脚图
RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE 只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。为使该模块化自动打铃系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。硬件电路包括七段式数码管驱动模块、蜂鸣器驱动模块、按钮控制模块等三大模块。
2.3系统主要硬件电路
系统主要硬件电路作为驱动整个打铃系统的电路又分为七段数码显示电路和蜂鸣器驱动电路。
由显示七段数码显示电路和蜂鸣器驱动电路组成的系统硬件主要电路如下:
图2-3:系统主要硬件电路
该系统通过按钮控制(系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮;调整选择键SET_KEY:P1.0通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1按一次使选中位加1;减少键DEC_KEY:P1.2按一次使选中位减1;如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁)AT89C51的计时和定时,在七段数码管上显示出来(实现24小时制电子钟,8位数码管显示,显示时分秒),再通过蜂鸣器 (BEEP:P3.7) 来实现打铃。 2.31七段式数码管驱动模块的硬件设计
LED 数码管显示器内部有七个条形发光二极管和一个小圆点发光二极管组成,其结果图如下所示:
A
B C D E F G
com
图2-4:七段数码显示管
因而它的控制原理和发光二极管的控制原理是相同的。根据各管接线的形式,可分成共阴极型和共阳极型。其八个接口对应的字形如下表:
表一:数码管字型码表
3.2.3蜂鸣器驱动模块的硬件设计
本设计中的蜂鸣器驱动模块用到了蜂鸣器(SPEAKER )、三极管、100欧姆的电阻。将蜂鸣器的一段接地,另一端接三极管的发射极,三极管的基极通过100欧姆的电阻接在三极管的P3.7引脚,三极管的集电极接+5V的电源。其电路图如下图所示:
图2-5:蜂鸣器驱动电路图
第三节 系统调试与测试结果分析
3.1系统调试
根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:LED 驱动模块的调试,数据存储模块的调试,PC 机通信模块的调试等,最后将各模块组合后进行整体测试。 3.11硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。 3.12硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
3.2仿真结果
此系统的仿真效果很好,能实现设计要求和目的所规定的内容。下面是两幅仿真结果图:
图4-1
图4-2
附录:
4.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 ; 重设堆栈指针 ;/*****主程序*****/
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
; 取反调时闪烁标志位
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