单片机AT89C51实现LED秒表设计

0 下载量 123 浏览量 更新于2024-06-24 收藏 753KB DOC 举报
"这篇大学论文讨论了如何使用单片机AT89C51设计一个00秒到99秒的电子秒表。设计中涉及到了数码管显示、按键控制以及定时器和中断的运用。" 这篇论文的核心知识点主要集中在以下几个方面: 1. AT89C51单片机: AT89C51是一款广泛应用的8位微控制器,由美国Atmel公司生产。它内置4KB的EPROM存储器,支持4个8位并行I/O端口,拥有两个16位定时/计数器,适合于各种控制和数据处理任务。在这篇论文中,它是构建秒表的基础,负责计时和控制数码管显示。 2. 数码管显示: 数码管是一种常见的显示设备,通常用于显示数字和简单字符。在秒表设计中,它被用来显示00到99的计时数值。通常,数码管分为七段和八段,通过驱动电路控制每个段的亮灭来显示不同的数字。 3. 定时器: 单片机中的定时器是秒表设计的关键,它可以设定周期性的中断,以实现每秒加一的计时功能。AT89C51有两个16位定时器/计数器,可以配置为不同模式,如方式0、方式1、方式2和方式3,以满足不同计时需求。 4. 外部中断: 设计中提到的“开始”和“复位”键通过外部中断与单片机交互。外部中断允许单片机响应外部事件,如按键按下,从而控制秒表的启动和重置。 5. 接口技术: 单片机与数码管、按键之间的通信需要接口技术,这涉及到I/O端口的配置、信号电平的转换和数据传输协议。 6. 模块化程序设计: 为了提高代码的可读性和可维护性,程序设计通常采用模块化的方法,将各个功能如计时、显示、按键处理等封装成独立的函数或模块。 7. PROTEUS仿真软件: PROTEUS是电子设计自动化(EDA)软件,可以进行单片机程序的仿真和硬件电路的虚拟原型设计,是单片机项目开发的重要辅助工具。在本设计中,学生可能使用PROTEUS来验证和调试程序。 8. 程序编写与调试: 学生需要编写和调试C语言或汇编语言的程序,以实现秒表的各项功能,包括初始化单片机、设置定时器、处理中断、控制数码管显示以及响应按键输入。 9. 计时器和中断编程: 设计者需要掌握如何配置和编程单片机的定时器,以实现精确的计时功能。同时,还需要编写中断服务子程序,确保在定时器溢出或外部中断发生时能正确执行相应的操作。 通过这次课程设计,学生不仅深化了对AT89C51单片机的理解,还锻炼了实际操作和问题解决能力,同时熟悉了相关软硬件结合的应用。
2023-02-27 上传
一、设计任务 (一)基本任务: 1. 应用AT89S51单片机设计单片机实现数字秒表(LED显示0--59秒)电路; 2. 选用2位LED数码显示,实时显示两位秒表,采用按键式实现秒表的走、停和清零。 3. 硬件设计:根据设计的任务选定合适的单片机,根据控制对象设计接口电路。设计的单 元电路必须有工作原理,器件的作用,分析和计算过程; 4. 软件设计:根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调 试并打印程序清单; 5.原理图设计:根据所确定的设计电路,利用Protel或Proteus等有关工具软件绘制 电路原理图、PCB板图、提供元器件清单; 二、设计原理 应用AT89S51单片机设计单片机实现数字秒表(LED显示秒)电路; 选用2位LED数码显示秒表,采用按键式实现 软时钟是利用单片机内部的定时器/计数器来实现的,它的处理过程如下:首先设定 单片机内部的一个定时器/计数器工作于定时方式,对机器周期计数形成基准时间(250 um),然后用系统中断(对250um计数4000次),合计延时一秒钟秒计59清零。然后通过 数码管把它们的内容在相应位置显示出来即可。 在具体处理时,定时器/计数器采用中断方式工作,对时钟的形成在中断服务程序中 实现。在主程序中只需对定时器/计数器初始化、调用显示子程序和控制子程序。 三、方案与论证 模块一:定时器中断服务子程序;可以调用中断来调用子程序。 模块二:主函数的设置 模块二:延时程序;可以有效的利用人们的暂留效应。 模块三:控制LED管的数字的加运算秒表开始加计数 四、设计内容 (一)系统框图和设计原理图 设计框图: 设计原理图: (二)软件设计流程图 五、总结 通过本次设计,对单片机的独立按键,LED的动态显示有了进一步的认识,并能基本掌握 和运用。 六、参考文献 《单片机实验指导书》 刘强 段纯爽主编 附录:设计源程序 #include<regx51.h> #define KEY P1_7 #define CON P2 #define DATA P0 #define unchar unsigned char #define unint unsigned int unchar second=0; unint count=4000; /*51实验箱共阳极笔段码(0123456789)*/ //unchar code table[]={0x84,0xf5,0x46,0x54,0x35,0x1c,0x0c,0xd5,0x04,0x14}; /*标准共阴极笔段码(0123456789)*/ unchar code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39, 0x5e,0x79,0x71};//共阴极笔段码(标准) void delay(); void display(); void tmr0_int() interrupt 1 { count--; if(!count) { second++; count=4000; } } void main() { TMOD=0X02;//定时器0工作在方式2 TH0=0X06; TL0=0X06;//定时器0计数初值 IE=0X82;//开总中断和定时器0中断 TR0=1; while(1) { display(); } } void delay() { unchar a,b; for(a=4;a>0;a--) for(b=248;b>0;b--); } void display() { if(second>59) { second=0; } if(second>9) { CON=0XFE; DATA=table[second/10]; delay(); CON=0XFF; CON=0XFD; DATA=table[second%10]; delay(); CON=0XFF; } else { CON=0XFD; DATA=table[second%10]; } } ----------------------- 基于单片机的电子秒表设计全文共6页,当前为第1页。 基于单片机的电子秒表设计全文共6页,当前为第2页。 基于单片机的电子秒表设计全文共6页,当前为第3页。 基于单片机的电子秒表设计全文共6页,当前为第4页。 基于单片机的电子秒表设计全文共6页,当前为第5页。 基于单片机的电子秒表设计全文共6页,当前为第6页。