基于89C51的倒计时牌设计课程设计Word文档下载推荐.docx
- 文档编号:3331876
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:31
- 大小:1.38MB
基于89C51的倒计时牌设计课程设计Word文档下载推荐.docx
《基于89C51的倒计时牌设计课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于89C51的倒计时牌设计课程设计Word文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。
日常生活中,我们不可避免的接触到各式各样的倒计时牌,当你开车时红路灯的短暂倒计时,当你玩游戏时游戏时间结束的倒计时…..,而这些不同功能不同含义的倒计时牌引起了我极大的兴趣,学完单片机后,让做出一个属于自己的倒计时牌成为可能。
在智能化产品中,单片机的应用已经越来越广泛,单片机以它体积小、质量轻、耗电省、可靠性高、价格低等优点,开始不断发展,AT89C51单片机是一款非常典型且实用的51单片机,网上资源和参考书比较多,所以我此次采用此型号的单片机作为倒计时牌的控制器件。
•1.2设计思想及基本功能
该倒计时牌采用廉价可靠的LED数码管显示,能够根据使用者的要求,结合实际情况设置不同时间长度的倒计时,在设定的倒计时时间结束时能够自动启动报警装置,并且显示恢复到初始状态。
利用专业的单片机仿真软件Proteus7.8来进行仿真,以验证设计的正确性同时达到降低设计周期的目的。
可设设置倒计时时间的倒计时牌系统具有以下几个基本功能:
•利用8位数码管能够显示日、时、分、秒倒计时。
•通过按键来实现倒计时时间的设定。
•倒计时时间到时,蜂鸣器报警并使LED点亮。
•2总体方案设计
•2.1方案选取
单片机在各种电子产品中的应用已经越来越广泛,很多的电子产品利用单片机所取得的便利得到了人们的好评,针对单片机控制的倒计时牌要求,实现其功能的设计方案有三种:
方案
(一)传统纸质倒计时牌,通过人工手动翻页实现倒记作用。
方案(儿)采用单片机内部的16位定时器,并通过LCD液晶显示屏显示倒计时时间。
方案(三)同样采用单片机内部的16位定时器实现定时,并通过LED数码管显示出倒计时时间。
以上三种方案均能实现简单的倒计时功能,方案
(一)与其他两种方案的主要不同在于倒计时的实现必须有人全程参与,方案
(二)与方案(三)的主要区别在显示模块的选型问题上。
方案
(一)虽然简单容易实现,并不依靠电力。
但全程必须人为参与费时费力且不符合自动控制的思想。
方案
(二)采用单片机设计能够实现基本的自动控制,但采用技术上较为复杂的LCD液晶显示模块,操作上不易实现且LCD液晶显示器价格相对较高。
方案(三)与方案
(二)的区别仅在于显示模块,此方案采用8位数码管显示模块,功能上容易实现、显示清晰而且价格相对较低。
目前小型倒计时牌大多采用这种形式。
在本次设计中我们采用简单易于实现的方案(三)。
在此方案中,使用性能优异的AT89C51单片机,具有体积小、质量轻、功能强大、可靠性较高、价格低等优点。
显示模块我们采用简单的数码管显示,倒计时牌只需要显示0~9个数字,因此LED数码管完全能够胜任且数码管功耗低、工作电流小、价格低廉便于实现等优点。
方案
(二)虽然显示功能相对强大,但LCD液晶显示操作上相对难以实现,而且价格相对较高,更重要的是LCD液晶显示字体较小,远距离上对视觉上的观察有一定的困难。
基于以上原因,本次设计我们采用方案(三)。
下面图2.1a、b所示是方案
(二)显示模块的实物图;
图2.2是方案(三)的显示模块的实物图:
图2.1a方案
(二)LCD1602液晶显示器图2.1b方案
(二)12864液晶显示器
图2.2方案(三)LED数码管实物图
•2.2系统框图
方案(三)的系统框图如图2.5。
图2.4系统框图
•2.3总体方案设计
随着越来越多的不同形式不同功能的倒计时牌的广泛应用,我们的日常生活中随处可见各式各样倒计时牌,本节我们将对基于89C51的倒记牌进行总体方案设计。
传统的纸质倒计时牌由于功能单一,必须有人全程参与等原因已经越来越不能满足人们的需求。
日前,随着单片机在日常生活,消费电子产品的广泛应用,各类电子倒计时产品也数见不鲜。
单片机控制的自动倒计时牌等电子产品给人们的生产生活带来了极大的便利。
基于89C51的倒计时牌系统能够满足一下几种简单的功能:
(1)利用8位数码管能够显示日、时、分、秒倒计时。
(2)通过按键来实现倒计时时间的设定。
(3)倒计时时间到时,蜂鸣器报警并使LED点亮。
基于89C51的倒计时牌系统设计的总体框图如图2.6所示。
图2.6倒计时牌结构框图
•3硬件电路设计
•3.1电源电路设计
本设计是基于Proteus7.8仿真设计,而在Proteus硬件电路中,单片机是不需要额外电源的,电源有系统提供。
但在实际工程中电源电路是构成单片机最小系统的必不可少的组成部分,在此,我们依然给出电源的设计电路。
目前,很多单片机开发板上采用USB供电系统,单片机正常工作电压为5V,因此设计的电源电路主要是提供单片机工作电压。
图3.1是为单片机提供电压的电源电路。
在这个电路中采用了USB,可以输出5V的直流电压以供给单片机。
图3.1电源电路图
•3.2晶振电路
电路中的晶振即石英晶体震荡器,是利用石英晶体(二氧化硅的结晶体)的压电效应制成的一种谐振器件,石英晶体的压电效应:
若在石英晶体的两个电极上加一电场,晶片就会产生机械变形。
反之,若在晶片的两侧施加机械压力,则在晶片相应的方向上将产生电场,这种物理现象称为压电效应。
由于石英谐振器具有体积小、重量轻、可靠性高、频率稳定度高等优点,被应用于家用电器和通信设备中。
石英谐振器因具有极高的频率稳定性,故主要用在要求频率十分稳定的振荡电路中作谐振元件。
图3.2是单片机的晶振电路。
片内电路与片外器件就构成一个时钟产生电路,CPU的所有操作均在时钟脉冲同步下进行。
片内振荡器的振荡频率非常接近晶振频率,一般多在1.2MHz~24MHz之间选取。
C1、C2是反馈电容,其值在20pF~100pF之间选取,典型值为30pF。
本电路选用的电容为22pF,晶振频率为12MHz。
振荡周期=
,机器周期
,指令周期=
。
图3.2单片机晶振电路图
XTAL1接外部晶体的一个引脚,XTAL2接外晶体的另一端。
在单片机内部,接至上述振荡器的反相放大器的输出端。
采用外部振荡器时,对HMOS单片机,该引脚接外部振。
在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振动又会产生交变电场,上述物理现象称为压电效应。
一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。
但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。
这一特定频率就是石英晶体的固有频率,也称谐振频率。
石英晶振起振后要能在XTAL2线上输出一个3V左右的正弦波,以便使MCS-51片内的OSC电路按石英晶振相同频率自激振荡。
通常,OSC的输出时钟频率fOSC为0.5MHz-16MHz,典型值为12MHz或者11.0592MHz。
电容C1和C2可以帮助起振,典型值为20pF-30pF,调节它们可以达到微调fOSC的目的。
•复位电路
复位电路的主要功能是使单片机进行初始化,在初始化的过程中需要在复位引脚上加大于2个机器周期的高电平。
复位后的单片机地址初始化为0000H,然后继续从0000H单元开始执行程序。
在复位电路中提供复位信号,等到系统电源稳定后,再撤销复位信号。
但是为了在复位按键稳定的前提下,电源稳定后还要经一定的延时才撤销复位信号,以防在按键过程中引起的抖动而影响复位。
图3.3所示的复位电路可以实现上述基本功能。
图3.3复位电路图
•键盘电路
键盘在由单片机控制的窗帘自动控制系统中的主要作用是通过按键向单片机输入指令,其中主要包括设定时间功能,是人工控制单片机的主要手段。
在倒计时牌设计中的键盘采用的2个独立键盘键盘。
这3个按键分别为:
K1键设定键主要是用来设定切换时间位设定,即:
时间的天,时、分、秒之间的切换,以及定时器的启动。
K2键,其作用主要是用于时间调整;
复位键主要应用在程序出错以及误操作的时候使单片机复位,从而重新设定如图3.5所示。
图3.5键盘接口电路
•显示电路
显示电路主要是用于显示时间。
采用LED数码管进行显示是因为LED数码管具有以下几个优点:
(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。
(2)发光响应时间极短(<
0.1μs),高频特性好,单色性好,亮度高。
(3)体积小,重量轻,抗冲击性能好。
(1)我们都知道数码管有共阴极和共阳极两种类型,因此在使用上也有所区别,一般共阳极数码管必须外接电阻,共阴极不一定外接电阻。
共阴极数码管的发光二极管阴极必须接低电平,当某个发光二极管的阳极为高电平(一般+5V)时,此二极管点亮;
共阳极数码管的发光二极管并接到高电平,对于需要点亮的发光二极管使其阴极接低电平即可。
显然,要显示某字形就应使次字形的相应字段点亮,实际就是送一个用不同电平组合代表的数据至数码管。
这种装入数码管中显示字形的数据称为字形码。
如图3.6和图3.7分别给出了LED数码管显示原理图和倒计时牌显示电路:
图3.6LED数码管显示原理图
(2)MAX7219串行驱动LED数码管
MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。
该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。
它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。
此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。
MAX7219的外部引脚分配如图3.6所示
图3.6MAX7219的外部引脚分配
各引脚的功能为:
DIN:
串行数据输入端
DOUT:
串行数据输出端,用于级连扩展
LOAD:
装载数据输入
CLK:
串行时钟输入
DIG0~DIG7:
8位LED位选线,从共阴极LED中吸入电流
SEGA~SEGGDP
7段驱动和小数点驱动
ISET:
通过一个10k电阻和Vcc相连,设置段电流
MAX7219有下列几组寄存器:
MAX7219内部的寄存器如图3.7,主要有:
译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。
编程时只有正确操作这些寄存器,MAX7219才可工作。
图3.7MAX7219内部的相关寄存器
分别介绍如下:
(1)译码控制寄存器(X9H)
MAX7219有两种译码方式:
B译码方式和不译码方式。
当选择不译码时,8个数据为分别一一对应7个段和小数点位;
B译码方式是BCD译码,直接送数据就可以显示。
实际应用中可以按位设置选择B译码或是不译码方式。
(2)扫描界限寄存器(XBH)
此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED0~5显示。
(3)亮度控制寄存器(XAH)
共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF。
(4)关断模式寄存器(XCH)
共有两种模式选择,一是关断状态,(最低位D0=0)一是正常工作状态(D0=1)。
(5)显示测试寄存器(XFH)
用于设置LED是测试状态还是正常工作状态,当测试状态时(最低位D0=1)各位显示全亮,正常工作状态(D0=0)。
2读写时序说明
MAX7129是SPI总线驱动方式。
它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
工作时,MAX7219规定一次接收16位数据,在接收的16位数据中:
D15~D12可以与操作无关,可以任意写入,D11~D8决定所选通的内部寄存器地址,D7~D0为待显示数据或是初始化控制字。
在CLK脉冲作用下,DIN的数据以串行方式依次移入内部16位寄存器,然后在一个LOAD上升沿作用下,锁存到内部的寄存器中。
注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。
3.8MAX7219的时序图
3MAX7219驱动电路图
图3.9MAX7219驱动电路图
•MAX7219初始化设置程序示例:
•
INIT:
MOVA,#0FBH
MOVB,#07H
LCALLSEND
MOVA,B
LCALLSEND
SETBP2.1
MOVA,#0F9H
MOVB,#00H
MOVA,#0FAH
MOVB,#0CH
MOVA,#0FCH
MOVB,#01H
SEND:
CLRP2.1
MOVR4,#08H
LP1:
RLCA
MOVP2.0,C
CLRP2.2
NOP
SETBP2.2
DJNZR4,LP1
RET
•蜂鸣器及LED电路
(1)蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。
其驱动电路图如下:
图3.10蜂鸣器的驱动电路
(2)LED驱动电路
LED驱动电路比较简单,其电路图如下:
•图3.11LED的驱动电路
•4系统软件设计
本章节将系统地介绍倒计时牌主程序和各主要功能子程序的设计流程,具体的程序代码见附录。
系统软件设计主要包括单片机初始化程序、显示子程序,时间设置子程序,时间调整子程序、键盘子程序、MAX7219初始化设计等构成。
•主程序软件设计
主程序首先要构成无限大循环,主要完成单片机初始化,中断申请,数码管显示内容初始化,中断响应,数码管显示内容刷新,计时等功能。
主程序的流程图如图4.1所示。
图4.1主程序流程图
主程序流程说明:
主程序主要是完成单片机系统的初始化,这其中包括定时器工作方式、初始值的设定、MAX7219的初始化和LED数码管显示内容的初始化。
设计的硬件电路除了单片机工作必需的最小系统之外还包括显示电路。
在晶振为12MHz的情况下,使定时器1工作方式为方式1,16位计数器。
LED数码管显示内容的初始化就是设置8位LED数码管00000000,并等待倒计时时间的设定。
•键盘程序设计
在操作按键时,无论是按下还是松开,触点在闭合和断开时均会产生抖动,此时逻辑电平是不稳的,如果得不到正确处理,可能会引起单片机对按键命令的错误执行。
但本次设计中键盘的主要是利用单片机外部中断的边沿触发方式(下降沿触发),因此,可以不用进行软件延时去抖。
图4.2是键盘程序设计流程图:
图4.2键盘程序流程图
K1键盘接在单片机P3.2口,K2键盘接在单片机P3.3口。
键盘数目比较少,因此硬件电路也比较简单。
判断闭合键的键号,是利用单片机P3.3口的第二功能,此时单片机P3口就不能作为通用IO口使用。
在确认有键按下后,即可确定具体闭合键的键号:
即当K1键按下时,程序会自动跳转到单片机外部中断0的入口地址,通过相应的软件设计从而使单片机执行相应的功能。
51单片机外部中断0的入口地址位0003H。
同理,当K2键按下时,程序会自动跳转到单片机外部中断1的入口地址,通过相应的软件设计从而使单片机执行相应的功能。
51单片机外部中断1的入口地址位0013H。
•定时程序设计
定时程序的主要作用是在用户设定的时间后能够使单片机自动实现倒计时功能。
定时器50ms定时时间到之后会向单片机申请中断,计数单元中的内容加1,计数内容记到20,则时间即为1秒,秒单元减1,当秒单元计数到00,分单元减1,此时秒单元内容重新装入60,当时分元减至00,时单元减1,以此类推实现倒计时功能。
图4.3是定时程序流程图。
图4.3定时程序流程图
•报警程序设计
在倒计时牌系统设计中,当倒计时时间到的时候往往要使用报警或提醒装置。
此系统中,我们采用蜂鸣器和LED点亮的方式实现报警功能。
蜂鸣器电路与单片机的接口为P1.0。
LED发光二极管电路与单片机的接口为P1.7。
当倒计时结束之后蜂鸣器开始响,同时点亮发光二极管。
倒计时结束之后,刷新LED显示数码管,使数码管显示00000000,并根据用户需求选择等待下一次倒计时开始或倒计时结束。
如下图4.4给出报警程序流程图:
图4.4报警程序流程图
•Proteus仿真
(1)Keil将程序编译连接之后会生成hex文件,此文件可以为Proteus中单片机可执行的机器码,通过双机仿真软件中的单片机模型将hex文件“烧写”进单片机当中去。
然后点击Proteus中的Step进行仿真。
Proteus中红色框代表高电平,蓝色代表低电平。
如图5.1给出倒计时牌初始化图
图5.1倒计时牌初始化图
(2)用鼠标按下K1和K2进行实践的设置,这里我们就把时间设置成20天13时12分26秒,如图5.2倒计时时间设置
图5.2倒计时时间设置
(3)时间设定完毕之后按下K1键启动定时器并开始倒计时,如图5.3a、图5.3b分别给出倒计时过程中的时间显示变化。
图5.3a倒计时时间显示1
图5.3b倒计时时间显示2
(4)为了验证倒计时结束后报警装置的可靠性,我们把时间设置小一点,然后观察报警装置的工作。
如图5.4倒计时结束仿真图我们可以看出倒计时时间到之后LED点亮比,三极管基极高电平说明蜂鸣器已经蜂鸣了。
图5.4倒计时结束仿真图
•总结
为期两个周的单片机系统课程设计就要结束了,在此期间学到了很多东西,进一步的巩固了单片机基础知识。
刚拿到题目的时候心里还在窃喜,因为之前学习单片机的时候做过类似的题目,不过那时做的小工程比较简单,采用的是串口通信工作方式0的60秒倒计时,能够实现倒计时的启停。
虽说有了简单的小工程基础,但在本次倒计时牌设计中还是遇到了不少的问题,也走了不少的弯路。
首先,在显示器的选择上我就遇上了一个大问题。
起初采用的是LCD1602A液晶显示屏,但后来发现LCD液晶显示屏显示的字体太小、显示功能有限。
于是我采用了LCD12864,但是基于Proteus的仿真软件中AMPIRE128X64的资料太少,尤其是在其正确的时序图上查了多的资料,也没明白哪一个的时序图示正确无误的。
最后我想到了LED数码管,虽说其显示功能单一,但完全胜任倒计时牌的显示工作,而且价格低廉、功耗较低,是一个不错的选择。
其次,是在硬件电路的设计中,原本采用的是LED数码管的静态显示,但在实际搭建电路的时候,软件的图纸根本放不下8位数码管,即便使用总线、网络标号电路也略显复杂。
因此,我最终决定采用动态扫描的方式。
在动态扫描中同样出现了不少的问题,原本使用2个8位并行口分别作为位选、段选信号,但方式占用太多的IO口,对以后的扩展不利。
于是,我又想到了之前用过的一个驱动芯片-----MAX7219。
MAX7219虽然功能实现上相对较难,但它极大的节省了51单片机宝贵的IO资源。
最后,软件设计上,编程语言选择问题上又有问题出现了,是选择比较熟悉驾轻就熟的C语言,还是对硬件电路理解比较深的汇编语言呢?
最后选择的汇编语言虽然给我以后的软件设计带来了不小的问题,但通过这一次汇编的实战,我进一步对汇编语言有了更深层次的理解。
领略到汇编语言的魅力之后,以后的软件编程都让我更加倾向于选择汇编语言。
本次倒计时牌的设计,我深深的感触到了:
实践是检验真理的唯一标准!
以前做609秒倒计时的时候,觉得60秒倒计时能做,百天倒计时肯定能做。
但通过这次实战,还是出现了不少的问题。
多实践,多动手,知识才能更趋完善,才能发现自己的不足。
•参考文献
[1]杨家成.单片机原理与应用及C51程序设计.北京:
清华大学出版社,2007
[2]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:
北京希望电子出版社,2004
[3]侯宝玉陈忠平.基于Proteus的51系列单片机设计与仿真.北京:
电子工业出版社,2008
[4]邓兴成.单片机原理与实践指导.北京:
机械工业出版社,2010
[5]张迎新.单片微型计算机原理、应用及接口技术.北京:
国防工业出版社,2004
[6]阎石.数字电子技术基础.北京:
高等教育出版社,2009.
•附录A系统原理图
附录B程序清单
LEDBITP1.7
BUZZERBITP1.0
ORG00H
LJMPMAIN
ORG0003H
LJMPINT_0
ORG000BH
LJMPIT_0
ORG0013H
LJMPINT_1
ORG0100H
MAIN:
LCALLINIT
CLRP1.0
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOVR1,#00H
MOVR2,#00H
MOVR3,#20
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBEA
SETBEX0
SETBIT0
SETBET0
SETBEX1
SETBIT1
LCALLZMZH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 C51 倒计时 设计 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)