单片机秒表.docx
- 文档编号:8905404
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:15
- 大小:132.86KB
单片机秒表.docx
《单片机秒表.docx》由会员分享,可在线阅读,更多相关《单片机秒表.docx(15页珍藏版)》请在冰豆网上搜索。
单片机秒表
单片机秒表的课程设计
摘要本课程设计是在单片机最小系统的基础上增加数码管显示电路和键盘控制电路来完成00~99秒的电子秒表硬件电路。
电子秒表电路主要由AT89C51单片机最小系统电路、2位一体八段共阳数码管动态显示电路和键盘控制电路组成,它能实现两位数码显示和多次计时,能通过键盘控制电路能控制时间的开始和暂停,能够实现复位功能和计数加一功能。
关键字AT89C51单片机;两位数码管动态显示电路;键盘控制电路
1.设计要求
1.1设计功能
用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。
另设计一个“开始”按键和一个“复位”按键。
再增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)。
1.2按键说明
(1)按“开始”按键,开始计数,数码管显示从00开始每秒自动加一;
(2)按“复位”按键,系统清零,数码管显示00;
(3)按“暂停”按键,系统暂停计数,数码管显示当时的计数;
(4)按“快加”按键,系统每10ms快速加一,即数码显示管在原先的计数上快速加一。
2.设计过程
2.1方案设计
方案一:
采用分立元件门电路和集成块电路设计数显定时器
此方案可分为五个功能模块:
秒脉冲发生器、计数器、译码显示电路、时序控制电路。
秒脉冲发生器:
555振荡器振荡周期T=0.693(
+2
)C=0.72,频率f=1.39Hz;计数器和控制电路是系统的主要部分,计数器是用可加(减)的计数方法,它是十进制计数的方式,选用74LS192,计时器完成计时功能;控制电路具有直接控制计数器的启动计数、暂停/连续计数、查询所计数、译码显示电路显示等功能。
设计框图如下图所示
图一
方案二:
采用AT89C51单片机设计数显定时器和定时器。
本方案采用AT89C51单片机系统来实现。
单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。
单片机系统可控制数码管显示秒表的值,并能用键盘输入暂停,并可实现报捷。
同时AT89C51芯片(内部含有8KB的EEPROM),不需要外扩展存储器,可使系统整体结构更为简单。
设计框图如下图所示
图二
方案论证:
方案一是电子式,时间走的很准时,也能达到“快加”键的功能,显示时间是现代式的数码管显示,但要做好是有很大的难度的,线非常之多,元件分散、多,容易把线接错。
综合考虑,我们采用了方案二以AT89C51芯片为中心控制系统,可实现显示、键盘控制、“快加一”等功能,大大提高了系统的智能化,也使得系统所测结果精度大大提高。
2.2器件选择
2.2.1AT89C51单片机
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51单片机的外型如图三所示。
图三AT89C51引脚图
AT89C51有40个引脚,32个外部双向输入/输出(I/O)口。
该芯片还具有PDIP40、TQFP44和PLCC44三种封装形式,以适应不同产品的需求。
AT89C51还提供以下标准功能:
4k 字节Flash 闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
2.2.2二位一体八段共阳数码管
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
由于二位一体数码管内部管脚相连,外部只有10个管脚,对于电路的连接有了很大的简化。
2.3系统电路设计
在本秒表系统中,AT89C51单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
键盘和LED显示起输入信息和显示信息的作用,本系统中共有四个独立按键分别作为秒表的“开始”“复位”“暂停”和“快加”按键,通过程序的控制,使按键控制数码管上数字的走动,从而起到秒表的效果。
系统硬件结构图如下图所示
图4系统硬件结构框
2.3.1电源电路
电源电路是系统最基本的部分,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7805提供+5V的稳定电压。
2.3.2晶体振荡电路
AT89C51单片机内部的振荡电路是一个高增益反相放大器,引线X1和X2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。
这里,我们选用AT89C51单片机11.0592MHZ的内部振荡方式,电路如下:
电容器
,
起稳定振荡频率,快速起振的作用,
和
可在20-100pf之间取,这里取20pf,接线时要使晶体振荡器X1尽可能接近单片机。
具体晶振振荡电路如图5所示
图5晶体振荡电路
2.3.3复位电路
本系统采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段高电平时间。
当单片机已在运行之中时,按下复位键也能使用使RST持续一段时间的高电平,从而实现上电加开关复位的操作。
这不仅能使单片机复位,而且还能使单片机的外围芯片也同时复位。
当程序出现错误时,可以随时使电路复位。
具体复位电路图6所示
图6复位电路
2.3.4显示电路
显示电路既可以选用液晶显示器,也可以选用数码管显示,我们采用的是二位一体共阳八段数码管显示电路。
用2个共阳极LED显示,LED是八段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。
在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。
在设计中,我们采用LED动态显示,用P0口驱动显示。
由于P0口的输出级是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平。
数码管显示电路电路图如图7所示
图7显示电路
2.3.5键盘电路
在按键电路中,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。
键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,用部分P3口做开关,P3.3为开始停止,P3.4为清零,用外部中断INT1开始,另外用软件法消除抖动。
键盘电路如图8所示
图8键盘电路
2.3.6硬件主电路
用AltiumDesignerSummer09画出其硬件主电路图如图9所示
图9硬件主电路图
2.4软件设计
此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。
其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图10所示:
图10软件流程图
3.结果分析
1)按下“开始”键K1时,数码管从00开始加一显示至99;按下“暂停”键K2时,数码管示数暂停显示;按下“复位”键K3时,数码管示数清零至00;按下“快加”键K4时,数码管示数快速加一。
2)数码管可以从00~99正常的显示,期间并无乱码的出现,说明软件程序编写的很正确。
4.设计总结
4.1设计中出现的问题和相应的解决方案。
问题:
LED显示时出现数字的错误
原因:
在将2位一体数码管2进制数换算成16进制数时,由于疏忽,将数字9的16进制数显示错误。
解决方法:
在认真检查重新换算后,秒表可以从00~99正常显示了。
4.2心得体会
在电路设计初期,我们对于如何设计“电子秒表”有点困惑,不了解这个秒表的要求与实现方法,为了让自己心里有个底,我们先在图书馆找了相关书籍,并且在网上查了一些“秒表”的制作实例,在资料查询、分析并请教同学后,我们发现直接用AT89C51和二位一体八段共阳数码管设计最简单。
确定了用什么器件后,我们查了AT89C51的相关知识,它们的引脚图和各引脚的功能,以及其相关控制字,尤其是2位一体八段共阳数码管的控制字及其初始化和显示编程。
查清楚了个器件的功能后,我们开始设计电路图,电路虽然很简单,但最难的是软件编程部分。
通过这次课设更大程度上锻炼了我的团队合作精神和领导能力。
对我以后的学习生活有很大的帮助,它加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解,使我们掌握定时器、外部中断的设置和编程原理,让我们能够将单片机软硬件结合起来,对程序进行编辑,校验。
最终通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、复位,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义
5.参考文献
[1]郭天祥编著.51单片机C语言教程-入门、提高、开发、拓展全攻略.电子工业出版社.2010.05
[2]刘刚编著.ProtelDXP2004SP2原理图与PCB设计.电子工业出版社.2009.07
[3]孙育才编著.MCS-51系列单片微型计算机及其应用.东南大学出版社.2009.12
[4]石明江,顾亚雄,张禾,.单片机原理与应用课程教学改革与实践[J].计算机教育,2011,
[5]丁峻岭主编.C语言程序设计.中国铁道出版社.2009.12
附:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P2^3;
sbitkey2=P2^2;
sbitkey3=P2^1;
sbitkey4=P2^0;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelayms(uint);
voiddisplay(uchar,uchar);
voidkeyscan();
ucharnum1,num2,shi,ge;
uintnum;
voidmain()
{TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
while
(1)
{keyscan();
shi=num/10;
ge=num-shi*10;
dula=1;
P0=0x80;
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
display(shi,ge);
}
}
voiddisplay(ucharshi,ucharge)//数码管显示子函数
{dula=1;//打开段选
P0=table[shi];
dula=0;//关闭断选
P0=0xff;
wela=1;//打开位选
P0=0xfd;
wela=0;
delayms(5);
dula=1;//打开段选
P0=table[ge];
dula=0;//关闭断选
P0=0xff;
wela=1;//打开位选
P0=0xfb;
wela=0;//关闭位选
delayms(5);//延时
}
voiddelayms(uintxms)//延时子函数
{uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidkeyscan()//按键子函数
{if(key1==0)//清零
{delayms(10);
if(key1==0)
{while(!
key1)//等待按下
{TR0=0;//定时器TR0关闭
TR1=1;//定时器TR1打开
num=0;//送数据num=0
TR1=0;//定时器TR1关闭
}
}
}
if(key2==0)//暂停和开始
{delayms(10);
if(key2==0)
{while(!
key2);
TR0=0;
TR1=~TR1;
}
}
if(key3==0)
{delayms(10);
if(key3==0)
{while(!
key3);
TR0=0;
TR1=1;
num=600;
TR1=0;
}
}
if(key4==0)//实现计数器的倒数功能
{delayms(10);
if(key4==0)
{while(!
key4);
TR1=0;
TR0=1;
}
}
}
voidT0_time()interrupt1
{TH0=(65536-45872)/256;//重装初值
TL0=(65536-45872)%256;
num2++;
if(num2==2)//如果到了2次,说明0.1秒的时间到
{num2=0;
num1++;
if(num1==10)
num1=0;
if(num==0)
num=600;
num--;
}
}
voidT1_time()interrupt3
{TH1=(65536-45872)/256;//重装初值
TL1=(65536-45872)%256;
num2++;
if(num2==2)
{num2=0;
num1++;
if(num1==10)
num1=0;
num++;
if(num==600)
num=0;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 秒表