目录摘要 (I)1 Proteus简介 (1)2 主要相关硬件介绍 (2)2.1 AT89C52简介 (2)2.2 四位数码管 (4)2.3 74LS139芯片介绍 (5)3 设计原理 (5)4 电路设计 (6)4.1 电路框图设计 (6)4.2 电路模块介绍 (7)4.2.1 控制电路 (7)4.2.2 译码电路 (7)4.2.3 数码管显示电路 (7)4.3 仿真电路图 (8)5 设计代码 (8)6 仿真图 (12)7 仿真结果分析 (14)8 实物图 (14)9 心得体会 (15)参考文献 (16)摘要现在单片机的运用越来越宽泛,大到导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理,小到广泛使用的各种智能IC卡、各种计时和计数器等等。
本次课设我们要设计一个能显示计时状态和结果的秒表,它是基于定时器/计数器设计一个简单的秒表。
本次设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现四位LED显示,显示时间为0~99.99秒,计时精度为0.01秒,能正确地进行计时,并显示计时状态和结果。
其中软件系统采用汇编或者C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键词:秒表,AT89C51,proteus,C语言1 Proteus简介Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、A VR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Proteus软件具有其它EDA工具软件(例:multisim)的功能。
这些功能是:1.原理布图2.PCB自动或人工布线3.SPICE电路仿真4.互动的电路仿真5.仿真处理器及其外围电路Proteus拥有丰富的资源,它体现在:1.Proteus可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
2.Proteus可提供的仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用。
3.除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。
这些都尽可能减少了仪器对测量结果的影响。
4.Proteus可提供的调试手段Proteus提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
Proteus不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。
前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
课程设计、毕业设计是学生走向就业的重要实践环节。
由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。
它具有设计灵活,结果、过程的统一的特点。
可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。
相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。
2 主要相关硬件介绍2.1 AT89C52简介AT89C52是一个低电压,高性能CMOS 8位单片机,片含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
AT89C52单片机参数如下:1、兼容MCS51指令系统2、8kB可反复擦写(大于1000次)Flash ROM;3、32个双向I/O口;4、256x8bit部RAM;5、3个16位可编程定时/计数器中断;6、时钟频率0-24MHz;7、2个串行中断,可编程UART串行通道;8、2个外部中断源,共8个中断源;9、2个读写中断口线,3级加密位;10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
AT89C52工作原理与A T89C51单片机工作原理类似,AT89C52为8 位通用微处理器,采用工业标准的C51核,在部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能,详细端口分布见图2-1图2-1 AT89C52端口图2.2 四位数码管四位数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图2-2所示。
通过控制各个LED的亮灭来显示数字。
图2-2 四位数码管2.3 74LS139芯片介绍74LS139 为两个2线-4 线译码器,共有54/74S139和54/74LS139 两种线路结构型式,当选通端(G1)为低电平,可将地址端(A、B)的二进制编码在一个对应的输出端以低电平译出。
若将选通端(G1)作为数据输入端时,139 还可作数据分配器。
具体的端口图见图2-3.图2-3 74LS139引脚图3 设计原理利用AT89S52单片机的定时器,使其能精确计时。
利用中断系统使其实现启动、暂停以及复位清零的功能,P0口输出段码数据,P2.0~P2.2连上译码器作为位选,P3.2和P3.3接口的两个按钮分别实现启动/暂停和复位功能。
计时器采用T0中断实现,定时溢出中断周期为1ms ,当溢出中断后向CPU 发出溢出中断请求,每发出10次中断请求就对10ms 位(即最后一位)加一,达到100次就对100ms 位加一,以此类推,直到99.99s 为止。
再看按键的处理。
两个按键采用中断的方法,设置外部中断0和外部中断1位脉冲边沿触发方式,这样一来每当按键按下时便会触发中断,从而实现启动/暂停和复位。
开始键和暂停键使用了外部中断,所以需要连到单片机的P3.2和P3.3引脚上,这两个I/O 口的第二功能是单片机的外部中断0端口和外部中断1端口。
显示电路由四位数码管组成,采用动态显示方式,因此有8位段控制和4位位控制,8位段接控制接P0口,P0.0~P0.7分别控制数码管的a b c d e f g dp 显示,位控制接在P2.0和P2.1两个口,在通过一个2—4译码器实现位控制。
4 电路设计4.1 电路框图设计图4-1 电路设计框图4.2 电路模块介绍4.2.1 控制电路图4-2控制模块本次课设设计了两个按钮,一个为开始和暂时按钮,另外一个为复位按钮,当按下按钮时,会根据程序中的相应中断程序来实现相关功能。
4.2.2 译码电路图4-3 2-4译码电路2-4译码电路通过74LS139芯片来实现译码功能,其中A口接单片机P2.0口,B口接P2.1口,E口接地,Y0~Y3口接数码管的1234口,2-4译码电路实现了对数码的位选功能。
4.2.3 数码管显示电路图4-4 数码管显示电路本次显示使用的数码管为八段数码管,共有8八二极管显示单元,其中一个为小数点了,A、B、C、D、E、F、G、DP口接单片机上的P0.0~P0.7口,来进行段选,1~4口接上文的译码电路。
完成对秒表记时的显示。
4.3 仿真电路图图4-2 仿真电路5 设计代码#include<reg52.h>unsigned int data table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示码值unsigned int i,j,k,l,count;char sw=0;void delay(unisigned int z) //延时程序{unsigned int x,y;for(x=z;x!=0;x--)for(y=110;y!=0;y--);}void main(){TMOD=0x01; //设置定时器为模式1 TH0=(65536-1000)/256; //给定时器赋定时初值TL0=(65536-1000)%256;EA=1; //开中断EX0=1;//打开外部中断0中断EX1=1;//打开外部中断1中断ET0=1;//打开T0中断IT0=1; //设置外部中断位脉冲边沿触发方式IT1=1; //跳变沿触发方式INT1上电平从从高到低的负跳变有效while(1) // 数码显示{P2=0x03;P0=table[i];delay(1);P2=0x02;P0=table[j];delay(1);P2=0x01;P0=(table[k]+0x80);delay(1);P2=0x00;P0=table[l];delay(1);};}void ex0() interrupt 0 //外部中断0 {sw=!sw; //设置复位TR0=sw;}void ex1() interrupt 2 //外部中断0 {l=k=j=i=0;}void timer0() interrupt 1 //定时器T0溢出中断{TH0=(65536-1000)/256; //重装计数初值TL0=(65536-1000)%256;count++; //溢出中断次数加一if(count==10){count=0;i++; //溢出10次,0.01s位加一if(i==10){i=0; //0.01s位到10了,清零,0.1s位加一j++;if(j==10){j=0; //0.1s位到10了,清零,1s位加一k++;if(k==10){k=0; //1s位到10了,清零,10s位加一l++;}}}}}6 仿真图图6-1 开始记时图6-2 暂停记时图6-3 复位7 仿真结果分析通过以上的分析,我们可知所设计的秒表计时器,可实现记时功能,既可以进行启动记时,也可以通过同一个按键来实现暂停,并能通过复位清零键来使秒表记时器复位,以实现重新记时,在记时到99秒时,秒表会自动清零,需要重新按开始键才可以。