当前位置:文档之家› (整理)较为全面的基于PROTEUS仿真51单片机动态数码管课程设计(WORD版)

(整理)较为全面的基于PROTEUS仿真51单片机动态数码管课程设计(WORD版)

单片机课程设计题目动态数码管显示学院机电工程学院专业班级电子信息工程12-1班姓名组员指导教师张、王老师2015 年 5 月30 日课程设计量化评分标准目录一、概述 (1)1. 单片机简介 (1)2. Proteus简介 (2)3. 设计任务与要求 (3)二、硬件设计 (3)1. 单片机最小系统设计 (1)2. 数码管显示部分 (4)3. 数码管驱动部分 (5)三、软件设计 (6)1. 仿真原理图 (6)2. 仿真参数设置 (6)3. 仿真结果 (7)4. 程序流程图 (8)5. 程序代码.................................................... .9四、心得体会............................................... (11)五、参考文献 (12)精品文档一、概述1. 单片机简介如图1.1和图1.2分别为PDI P封装的AT89C52引脚图和实物图图1.1 引脚图图1.2 实物图AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

本课程设计中使用的是PDIP封装的AT89C52单片机。

2.Proteus简介如图1.3为Proteus7.0的工作界面图图1.3Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前比较好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

在学习单片机的过程中Proteus软件可以很好地代替开发板进行仿真实验,可以使学生比较灵活多样化的学习单片机。

3.动态数码管设计任务与要求课程设计功能:单片机采用定时器中断方法,制作一个简易时钟,要求用定时器实现精确定时,使用数码管动态显示,完成时钟的秒走时显示。

本课程设计是利用两位共阴极数码管显示数字59,然后每隔1s顺序-1,减到00时,再循环从59-00.课程设计内容:1.掌握数码管的接口方法;2.掌握数码管动态显示的原理;3.掌握数码管动态显示的方法;4.掌握单片机内部定时器的使用方法;5.数码管动态显示的原理可参阅课本。

二、硬件设计1.单片机最小系统设计如图2.1所示图2.1单片机的最小系统是指使单片机能运行程序、正常工作的最简单电路系统,是保证单片正常启动、开始工作的必须电路,缺一不可。

单片机最小系统一般由单片机、程序存储器、时钟电路和复位电路组成,它是单片机开发板中的核心部分。

时钟电路:其核心部分是晶振,晶振的作用是为系统提供基本的时钟信号。

简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。

这里选用12MHZ晶振,便于产生精确的uS级时歇,方便定时操作。

复位电路:当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行(这里不加也可以)。

2.数码管显示部分如图2.2所示图2.2数码管有共阴极数码管和共阳极数码管两种(这里选用两位共阴极数码管),如图 2.2(b)所示,根据数码管的驱动方式的不同,可以分为静态式和动态式两类,这里只介绍动态方式。

动态显示:将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.数码管驱动部分这里使用74HC573来控制数码管的显示,如图2.3所示74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件。

当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

它是数码管显示时通常是采用段选、片选共用同一组并口的驱动方式。

驱动数码管需要两个信号,一个是段选信号,一个是片选信号。

段选信号是固定的8个(对于普通7段数码管),而片选信号数量是与数码管位数相同的。

对于8位数码管的动态扫描来说,片选信号要8根线,这样仅仅驱动数码管就占用了2组共16个IO口,非常浪费使用573锁存器后,只占用8+2=10个IO口,其中2个用于控制锁存器使能,另外8个输出信号。

先关闭控制片选信号的573芯片的锁存功能,然后单片机输出片选信号,随后开启锁存,此时无论573的输入端如何变化,输出端都是不变的,也就是原来输入的信号被锁住了。

然后,再关闭控制段选的573的锁存功能,输出段选信号,再锁存,这样就巧妙的实现了数据线的复用,让一组IO口既输出段选又输出片选三、软件设计1.仿真原理图如图3.1所示图3.1由51单片机P0口接上拉电阻通过锁存器74HC573控制共阴极数码管段选,P1口控制数码管位选,P2^1控制74HC573使能端。

2.仿真参数设置如下列表格3.2所示表3.2两位共阴极数码管动态扫描显示实验电路元器件及参数值3.仿真结果如图3.3图3.3经过多次试验,调试后现象正常,实现功能为:数码管从59秒开始-1,减到0后,重新开始从59循环-1.4.程序流程图5.程序代码#include<AT89X51.H>#define uint unsigned int#define uchar unsigned charsbit LE=P2^0; //定义使能端uchar num,shi,ge,t0;bit flag;uchar code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void display();void delay(uint z) //延时函数{uint i,j;for(i=z;i>0;i--)for(j=50;j>0;j--);}void main(){num=60;TMOD=0x01;TH0=(65536-50000)/256;//定时器赋初值TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){if(flag==1){flag=0;num--;if(num==-1){num=59;}shi=num/10;ge=num%10;}display();}}void timer0() interrupt 1{uchar t0;TH0=(65536-50000)/256;//定时器重装初值TL0=(65536-50000)%256;t0++;if(t0==20){t0=0;flag=1;}}void display()//显示函数{LE=0;P0=table[shi];LE=1;LE=0;P1=0x7f;LE=1;delay(10);P0=0x00; //消隐(至关重要,否则会显示乱码)LE=0;P0=table[ge];LE=1;LE=0;P1=0xbf;LE=1;delay(10);P0=0x00; //消隐(至关重要,否则会显示乱码)}四、心得体会通过这次课程设计,我真的学到了很多,接触到了平时难以接触或者常常忽视的东西。

老师给定设计课题后,我就开始准备了,从搜集资料到画出动态数码管显示的Proteus仿真图也不过一天时间,原以为一切都会顺利的进展,可是在我写了一个简短的调试程序验证仿真图能否正常进行是却发现由AT89C52单片机P0控制的锁存器74HC573不起作用,怎么都无法驱动数码管的段选,虽然自己之前也接触过单片机,但是由于一直以现成的开发箱或开发版作为学习和练习用,只知道关心怎么编辑程序,却忽视了对硬件的求知,因此,怎么都找不到为什么P0口不能驱动74HC573,后来我终于查到是因为P0需要接上拉电阻才能有足够的电流驱动锁存器,这时才想起其实这一点老师上课时也讲过,而这次正好体现出了我的不足,未能将理论知识与实践及时准确的结合起来学习,相信在以后的学习中我一定会注意这一点的。

在编辑好程序后,我在用Proteus仿真之前用拥有相同性质和原理的开发箱检验过,结果正常,可是在我用Proteus进行仿真时,发现延时较长数码管会一个一个数码管的显示,情况不正常;缩短延时时间后,数码管却显示的是乱码,围绕这个问题我调试了好几天原理图,程序都换过,可就是行不通,后来通过查阅资料才知道原来软件仿真与硬件试验是有一定差别的,这里一定要进行延时,消隐才可以,终于经过一个多星期的奋战顺利完成了本次课程设计。

相关主题