单片机的10秒秒表的设计.docx
- 文档编号:27442631
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:14
- 大小:316.79KB
单片机的10秒秒表的设计.docx
《单片机的10秒秒表的设计.docx》由会员分享,可在线阅读,更多相关《单片机的10秒秒表的设计.docx(14页珍藏版)》请在冰豆网上搜索。
单片机的10秒秒表的设计
前言
当今时代,是一个新技术层出不穷的时代。
在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
单片机的出现是现代科技发展的一个重要的里程碑。
由于单片机的集成度高、功能强,通用性好,特别是它具有体积下、重量轻、能耗低、价格便宜等优点,使单片机迅速得到推广应用,目前已成为测量控制应用系统中的优选机种和新电子产品的关键部件。
1工程叙述
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如按时自动打铃、时间程序自动控制、秒表等。
所有这些,都是以钟表数字化为基础的。
因此,研究电子秒表及扩大其应用,有非常现实的意义。
电子秒表是一种用数字电路技术实现秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
电子秒表从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
电子科技日新月异,人们对现代电子设备的智能化和微型化及其精度提出了更高的要求,而单片机因其具有稳定可靠、体积小、价格低廉等特点,成为设计智能化仪器仪表的首选微控制器,因此本次我没有选用传统的专用的时钟芯片,而是采用了AT89C51芯片,此款单片机可以使用软件对其进行在线编程,其灵活性和可靠性都相对提高。
通过此次课程设计,增强了我们的动手能力,把理论与实践融合在一起。
同时,也进一步加深了对单片机的硬件结构的理解和巩固,编程能力也得到了提高。
在此将秒表制作过程中用到的知识进行了一些总结,希望自己今后能注意。
2系统设计
2.1设计概述与要求
2.1.1设计概述
本系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合晶振电路、复位电路、显示电路、以及一些按键电路等来设计计时器。
其中软件系统采用汇编语言编写程序,包括显示程序、中断、延时程序、按键程序。
并在Keil中调试运行,硬件系统利用proteus强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
2.1.2设计要求
1)利用单片机控制10秒秒表;
2)利用按键开关按下,控制秒表的显示。
2.2方案的选择与论证
2.2.1总体设计方案
方案1:
在方案1中,我们所选用的是软件定时,即用for循环来定时1秒进行显示的变化。
方案2:
在方案2中,采用的是硬件定时,即用单片机内部的定时器T0。
先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时。
2.2.2选择与论证
方案比较:
我们从两方面进行两种方案的比较,第一,由于此次课程设计要求是秒表,则在定时时要求比较精确,所以采用硬件的定时器定时时比较准确的。
第二,由于秒表的定时程序是很小的,在利用软件定时占用的CPU并不是很多,不能显现出来,但真正大程序时会很占用资源的,所以在用定时中断过程中是非常节省资源的。
综合上述两种比较,我们选用了第二种方案。
3系统硬件设计
本系统由控制器模块、复位模块、LED显示模块组成,系统硬件组成框图如图1所示。
系统总体电路原理图如图1所示。
图1系统电路原理图
3.1AT89C51简介
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
它的价格便宜,功能强大,能耗低。
很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。
其芯片引脚图如图2所示。
图2单片机AT89C51引脚
3.2时钟电路
下图3所示为时钟电路原理图,在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图3时钟电路原理图
3.3复位电路
就是在RST端(9脚)外接的一个电路,目的是当单片机上电开始工作时,内部电路从初始状态开始工作,或者在工作中要想人为的让单片机重新从初始状态开始工作。
在时钟工作的情况下,只要AT89C51的复位引脚高电平保持两个机器周期以上的时间,AT89C51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且从地址0000H处开始读入程序代码而执行程序。
3.4显示电路
图4数码管显示电路
图4数码管显示电路
3.5引脚控制
P0.0—P0.7对应两个数码管的A、B、C、D、E、F、G和小数点位;P2.5控制数码管个位的显示,P2.6控制数码管十位;P3.6、P3.7分别接按键。
3.6硬件元件清单
系统元器件清单见下表,系统元件清单
器件
数量
器件
数量
AT89C51单片机
1
电容(10uF)
1
按键开关
1
电容(22pF)
2
数码管
2
电阻(10K)
1
排阻(4.7k)
1
晶振片
1
系统元件清单
4软件设计与仿真
4.1主程序设计
主程序流程图如下图:
4.2仿真软件简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
(1)实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有:
ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
(3)提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB等软件。
(4)具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
Proteus7.5是目前最好的模拟单片机外围器件的工具,可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD、RAM、ROM、键盘、马达、LED、AD/DA、部分SPI器件、部分IIC器件等)。
软件编译采用KEILC51软件,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
4.3软件设计
本程序主要是由主函数程序、按键控制程序、中断程序组成。
一般采用模块化的程序设计方法,它具有明显的优点。
把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块。
有利于程序的设计和调试,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。
各程序模块都要完成一个明确的任务,实现某个具体的功能,如:
延时、按键控制计数和显示等。
4.4系统调试
1)经过对程序的软件编译后,用proteus仿真软件进行仿真按下“开始”按钮之前,可以看到数码管上数字子显示为零。
2)当按下按钮时秒表开始计时秒表开始计时,数码管开始显现数字。
3)当再次按下按钮的时候,数码管不再计时,数字也不再变化。
4)当数码管示数为“99”时,自动清“0”。
4.5仿真结果
总结
本次的课程设计,使关于51系列单片机的,正是我们刚刚学到的51单片机,在平时课程的学习中,我们仅限于理论知识的讲解,即使知识是很扎实的,实际应用并不是这样的。
开始时我也觉得自己的理论知识已经够了,但当我拿到课题时,在脑海里想的是非常好的,但真正编成和控制时,理论和实际结合不到一起,甚至于51芯片的使用我都感觉很迷茫,还是经过搜集大量资料才将理论与实际结合到一起了。
本次课程设计我主要负责编程,这次不仅锻炼了我C语言的知识,更加我们正在学习的51的定时与中断结合在一起,进行了实际的操作,让我的知识掌握得更加牢固。
本次的实际经验之后,让我对单片机定时赋初值有了更新的认识,对程序的循环顺序、结构类型都有了非常深刻的认识,对真正硬件的连接也有了认识,不再将自己的知识局限于自己狭隘的空间中。
通过这次课程设计——10秒秒表,使我又重新开始学习C语言,因为C语言是大一学的,至从学完就再也没用过,所以开始很陌生,我又找了有关资料来了解,才有了一点眉目。
刚开始以为可以用汇编很容易就写出来,因为我们正在学习汇编语言,以为学的很明白了,但是用汇编时才发现原来都不怎么熟练,编了一会程序发现只有一种感觉——举步维艰啊!
还是放弃汇编选择C语言吧!
对于单片机,我们课本学习的是80C51,但是这次做课程设计用的是89C51,这样不仅使我们掌握了80C51,而且对89C51也有了一定的了解了,在课堂上学习的都理论的,跟实际永远有一定的差距,不实践就不会发现问题。
通过这次课程设计使我把课堂上学习的东西都用到了实践中,学习的时候不怎么理解,但是在实践中应用了以后就自然了解了。
参考文献
[1]杨居义,马宁,靳光明等.单片机原理与工程应用.北京:
清华大学出版社,2009
[2]江力.单片机原理与应用技术.北京:
清华大学出版社,2006
[3]刘守义.单片机应用技术.西安:
西安电子科技大学出版社,2002
[4]周润景基于Proteus的AVR单片机设计与仿真北京航空航天大学出版社2007
附录:
程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitK1=P3^7;
uchari,Second_Counts,Key_Flag_Idx;
bitKey_State;
ucharDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延时
voidDelayMS(uintms)
{
uchart;
while(ms--)for(t=0;t<120;t++);
}
//处理按键事件
voidKey_Event_Handle()
{
if(Key_State==0)
{
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
{
case1:
EA=1;ET0=1;TR0=1;break;
case2:
EA=0;ET0=0;TR0=0;break;
case0:
P0=0x3f;P2=0x3f;i=0;Second_Counts=0;
}
}
}
//主程序
voidmain()
{
P0=0x3f;//显示00
P2=0x3f;
i=0;
Second_Counts=0;
Key_Flag_Idx=0;//按键次数(取值0,1,2,3)
Key_State=1;//按键状态
TMOD=0x01;//定时器0方式1
TH0=(65536-50000)/256;//定时器0:
15ms
TL0=(65536-50000)%256;
while
(1)
{
if(Key_State!
=K1)
{
DelayMS(10);
Key_State=K1;
Key_Event_Handle();
}
}
}
//T0中断函数
voidDSY_Refresh()interrupt1
{
TH0=(65536-50000)/256;//恢复定时器0初值
TL0=(65536-50000)%256;
if(++i==2)//50ms*2=0.1s转换状态
{
i=0;
Second_Counts++;
P0=DSY_CODE[Second_Counts/10];
P2=DSY_CODE[Second_Counts%10];
if(Second_Counts==100)Second_Counts=0;//满100(10s)后显示00
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 10 秒表 设计