单片机课程设计(论文)-电子秒表.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电子秒表 摘 要:本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成电子秒表的硬件电路的。电子秒表电路主要由AT89S52单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现八位数码显示和多次计时,能通过控制电路能控制时间的暂停、开始和清零,能够多次存储时间,并查询显示计时时间的顺序。 关键字:AT89S52 数码管 最小系统 1 方案设计 1.1系统分析 设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。设计框图如图一所示; 1.2系统方案 方案一:利用AT89S52单片机设计数显定时器和定时器。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。利用74HC573锁存器和按键作为控制电路,通过位选和段选来实现数码管的显示。 2 硬件设计 2.1 控制芯片的介绍 AT89S52(与AT89S51相同)单片机的外型如图四所示。 单片机可分为通用型和专用型,种类繁多。这里我们主要介绍AT89S52单片机是属于典型代表的MCS-51系列单片机,它是一种能处理8位数据的通用型单片机。以Atmel公司生产的具有CMOS工艺、低功耗、高性能的AT89S52为例,介绍单片机的工作原理、控制程序的编写及开发应用。AT89S52是一个高性能CMOS 8位单片机,芯片内集成了通用8位中央处理器片内含k Bytes的可反复擦写1000次的Flash只读程序存储器(ROM), ISP(In-system programmable)功能。 AT89S52内部有128 bytes的随机存取数据存储器(RAM), 5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。兼容标准MCS-51指令系统及80C51引脚结构 图四 AT89S52有40个引脚,32个外部双向输入/输出(I/O)口该芯片还具有PDIP、TQFP和PLCC三种封装形式,以适应不同产品的需求。89S51不仅象89C51支持并行写入,支持ISP在线可编程写入串行写入速度快、稳定性好,同时需要VPP烧写高压要4~5V即可。2.5 控制电路设计 控制电路主要由三个独立的按键组成,我们可以用按键来控制计时的开始、暂停、清零、倒计时、锁存和查询。所有按键的一端接地,另一端与单片机的P1口的几个引脚相连。 3 软件设计 3.1程序设计思路 在硬件的基础上,可以通过软件完成电子秒表的设计。我先用了矩阵键盘上的四个独立按键作为控制键。用一个键去控制计数的开始、暂停和清零;用一个键作计时的保存按键;用一个按键作查询按键,最后一个键用作60秒倒计时,用按键扫描的方法判断按键是否按下。用动态显示的方法扫描秒表的计数,显示所计下的数。用定时中断作为计数的基础。保存所计数的方法是:将所计数先放入数组内,再经过查询的方法将数组中的数一个一个显示出来。 3.2 源程序 #includereg52.h #define uint unsigned int #define uchar unsigned char uchar dot,sec,min,num,key_t,i,j,t,b; sbit dula=P2^2; sbit wela=P2^3; sbit key3=P1^1; sbit key4=P1^2; sbit key5=P1^4; sbit K=P1^3; uchar table1[3]; uchar table2[3]; uchar table3[3]; uchar k[3]; bit flag; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; void display(uchar,uchar,uchar); void delay(uint z); void init(); void key_to(); void keycan3(); void keycan4(); void keycan5(); void main() { init();//初始化子程序 while(1) { if(K != 1) // 有键按下 { delay(10); // 延时10ms去抖 if(K != 1) // 确定是有键按下 { while(K != 1); //

文档评论(0)

jingpinku + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档