用LED数码管显示的秒表设计.docx
《用LED数码管显示的秒表设计.docx》由会员分享,可在线阅读,更多相关《用LED数码管显示的秒表设计.docx(20页珍藏版)》请在冰豆网上搜索。
用LED数码管显示的秒表设计
单片机课程设计说明书
用LED数码管显示的秒表设计
专业
电气工程及其自动化
学生姓名
刘宁
班级
B电气081
学号
0810601114
指导教师
张兰红
完成日期
2011年6月26日
1、概述
21世纪是一个电子技术和电子元件有更大发展的世纪。
回顾百年来电子技术和电子工业发展的成就,举世瞩目。
作为一个电气专业的大学生,我们不但要有扎实的基础知识、课本知识,还应该有较强的动手能力。
现实也要求我们既精通电子技术理论,更要掌握电子电路设计、实验研究和调试技术。
课程设计就是一个理论联系实际的机会。
本次设计主要完成具备基本功能的电子秒表的理论设计,电子秒表是重要的记时工具,广泛运用于各行各业中。
作为一种测量工具,电子秒表相对其它一般的记时工具具有便捷、准确、可比性高等优点,不仅可以提高精确度,而且可以大大减轻操作人员的负担,降低错误率。
在设计中应用到数码管,数码管主要用于楼体墙面,广告招牌、高档的DISCO、酒吧、夜总会、会所的门头广告牌等。
特别适合应用于广告牌背景、立交桥、河、湖护栏、建筑物轮廓等大型动感光带之中,可产生彩虹般绚丽的效果。
用护栏管装饰建筑物的轮廓,可以起到突出美彩亮化建筑物的效果。
事实证明,它已经成为照明产品中的一只奇葩,绽放在动感都市。
2、课题方案设计
2.1系统总体设计要求
用AT89C52设计一个2位LED数码显示“秒表”,显示时间为00~59秒,每秒自动加一。
另设计一个“开始”按键和一个“复位”按键,一个“暂停”按键。
接上电源后从00开始计时,至59后再回到00,继续循环。
2.2系统模块结构论证
1.单片机模块选择
方案一:
选用飞思卡尔单片机,飞思卡尔单片机功能强大,但是价格相对要高,而且对此不熟悉。
方案二:
采用STC89系列单片机,其架构简单,相对熟悉,价格便宜,对设计功能已经足够。
焊接也是比较容易。
因此,选择方案二。
2.电源模块选择
方案一:
采用交流220V/50HZ电源转换为直流5V电源作为电源模块。
该方案实施简单,电路搭建方便,可作为单片机开发常备电源使用。
方案二:
采用干电池串并联到5V作为电源模块。
该方案实施简单,无需搭建电路,但相对方案不够稳定,电池消耗快,带负载后电压降过高,可能无法使系统稳定持续运行。
方案三:
采用USB接口电源,该方案简单方便,可以直接和电脑的USB接口相连。
电脑的USB接口属于接口电源,要并联耦合电容进行缓冲。
因此,选择的是方案三。
3.显示模块选择:
方案一:
采用8段LED数码管作为显示模块核心。
方案二:
采用LCD液晶显示器作为显示模块核心。
LED数码管节能环保,显示直观。
因此选择方案一。
4.驱动模块选择:
方案一:
用与非门逻辑电路作为驱动电路主要元件。
方案二:
用PNP型三极管作为驱动电路主要元件。
与非门逻辑电路相对来说较为复杂,PNP三极管只有三个端口且价格也很便宜,因此选择方案二。
3、系统硬件设计
3.1总体设计
利用单片机定时器/计数器中断设计秒表,从而实现秒的计时。
用两个数码管来显示秒表数据。
增加一个清零按钮,计时结束后可以清零。
通过采用proteus仿真软件来模拟实现。
模拟利用AT89C52单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位。
两位数码管用来显示数据,一位数码管显示个位1~9,满十进一后显示十位的数码管的数字加一,并且个位显示清零重新从零计数。
计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。
、
软硬件设计是设计中不可缺少的,为了满足功能和指标的要求,资源分配如下:
晶振采用11.0592MZ的外部晶振频率
内存分配:
P0口与数码管个位和十位数据输入端相连,控制其段选信号,输出1~9不同字型。
P3口的P3.1、P3.2分别与秒表个位和十位数码管位选连接,控制秒表的计数以及计数的开启/暂停/继续与复位清零。
本设计包含有单片机最小系统模块、复位模块、放大器模块、LED数码管显示模块。
其中最小系统模块由STC89C52、电阻、电容和晶振电路等主要硬件组成。
复位模块由二极管、电阻和复位开关组成。
放大器模块由PNP三极管、电阻组成。
LED数码管显示模块由两位八段数码管组成。
3.2单片机运行的最小系统
最小系统模块由STC89C52、电阻、电容和晶振电路等主要硬件组成。
3.2.152单片机最小系统电路介绍
1.52单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,52单片机最小系统容值越大需要的复位时间越短。
2.52单片机最小系统晶振Y1也可以采用11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,52单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。
3.52单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好
4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
计数值N乘以机器周期Tcy就是定时时间t。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。
由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。
当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2ms。
标识符号地址寄存器名称
P30B0HI/O口3寄存器
PCON87H电源控制及波特率选择寄存器
SCON98H串行口控制寄存器
SBUF99H串行数据缓冲寄存器
TCON88H定时控制寄存器
TMOD89H定时器方式选择寄存器
TL08AH定时器0低8位
TH08CH定时器0高8位
TL18BH定时器1低8位
TH18DH定时器1高8位
图3-189c52系列单片机管脚图
89C52管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.2.2单片机的振荡电路与复位电路
1.振荡电路
采用内部时钟方式时,如图所示。
片内的高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。
振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.2~12MHz之间任选,电容C1、C2可在5~30pF之间选择,电容的大小对振荡频率有微小的影响,可起频率微调作用。
本电路选用的是内部振荡器方式,。
选用内部振荡器比选用外部时钟电路简单并且易于实现。
最重要的是此电路易于调试,而且精度高。
2.复位电路图3-2振荡电路
复位电路可分为上电复位和外部复位两种方式。
通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。
MCS—52单片机在时钟电路工作以后,在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作(一般复位正脉冲宽度大于10ms)。
复位分为上电复位和外部复位两种方式。
图3-3复位电路
(a)上电复位电路(b)上电/外部复位电路
上电复位是在单片机接通电源时,对单片机的复位。
上电复位电路如图(a)所示。
在上电瞬间RST/VPD端与VCC电位相同,随着电容上电压的逐渐上升,RST/VPD端电位逐渐下降。
上电复位所需的最短时间是振荡器振荡建立时间加2个机器周期。
复位电路的阻容参数通常由实验调整。
图(a)参考电路中,电路参数C取22uF,R取1Kq,可在RST/VPD端提供足够的高电平脉冲,使单片机能够可靠地上电自动复位。
图(b)为既可进行上电自动复位,也可外部手动复位的电路示意图,R1可取200q左右。
当需要外部复位时,按下复位按钮即可达到复位目的。
本文采用的是上电/外部复位电路,如图(b)所示。
上电/外部复位电路比上电复位电路在应用上更加直观、方便、易于实现及切换。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.3数码管介绍
图3-4七段数码管引脚图
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)数码管的8个显示笔划"a,b,c,d,e,f,g,dp";按能显示多少个“8”可分为1位、2位、4位等等数码管;
发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
3.4驱动电路
本设计中采用两个PNP三极管对电流进行放大,进而来驱动两位八段数码管。
图3-5驱动电路
4、软硬件联调及调试结果
4.1软硬件调试中出现的问题及解决措施
1、在一开始时,只是搞好了最小系统,可出现了有点时候连接到电脑上指示灯亮,有的时候不亮,第一反应就是哪里虚焊了,于是就一点一点对比,一点一点找,可检查了好多遍都没检查出虚焊。
去请教会的同学,说可能是电容有问题,建议更换一下电容,于是就去找了一个同样的电容换上,再次连接电脑,试了好多次果真是电容的问题。
2、设计焊接好之后就去调试,却发现数码管显示的太暗了,在黑暗的时候还可以勉强看清,可到了有光亮的地方就分辨不清了,而这些是在仿真图上体现不出来的。
上网查了一下,最终总结出是驱动电流太小了,要加一个放大电路。
可参考书上的放大电路大多是非门控制,可元器件都是在网上买好了,而且时间也不允许,怎么办呢?
和同学想了想,突然想起以前学习模拟电子时学习过的PNP三极管也是具有放大电流的作用,而且我们领的元器件里有三极管,有些同学用不到三极管,可以借过来用一下,于是就设计了一个放大电路重新焊接,再次连接下载运行时就可以很清楚的看清显示的结果。
3、在运行时发现我的秒表走的有点慢,五秒过去了只显示到四,那就是程序的问题了,再反过来检查程序,再经过一番计算,修改了一些延时参数,最终可以准确的以秒运行。
4.2实物图
4.3调试结果
5、结束语
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从理论到实践,可以说是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机C语言掌握得不好……通过这次课程设计后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程和硬件设计问题,最后在张兰红老师的辛勤指导下,终于迎刃而解。
同时,在张青青、叶相如那里我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献
[1]穆兰,单片微型计算机原理与接口技术[M].北京机械工业出版社
[2]张毅刚,等.MSC-51单片机应用设计[M].哈尔滨工业大学出版社
[3]蒋智勇,等.单片微型计算机原理与应用[M].沈阳辽宁科技出版社
[4]何利民.单片机应用文集
(1)[M].北京航空航天大学出版社
[5]徐惠民、安德宁.单片微型计算机原理接口与应用.北京邮电大学出版社
[6]向继文,廖立新.基于AT89S51的电子钟系统设计[J].电子工业出版
附录
附录1:
基于单片机的秒表设计原理图
附录2:
基于单片机的秒表设计PCB图
附录3:
proteus仿真图
附录4:
基于单片机的秒表设计C语言程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitkaishi=P1^0;
sbitzanting=P1^1;
sbitdp=P0^0;
sbitw1=P2^6;
sbitw2=P2^7;
uchartemp1,temp2,temp3,aa,miaoshi,miaoge,fenshi,fenge,shishi,shige;
ucharcodetable[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xfd};
voiddisplay(ucharfenshi,ucharfenge,ucharmiaoshi,ucharmiaoge);
voiddelay(uintz);
voidinit();
voidmain()
{
init();
while
(1)
{
if(aa==16)
{
aa=0;
temp1++;
if(temp1==59)
{
temp1=0;
temp2++;
}
if(temp2==59)
{
temp2=0;
temp3++;
}
if(zanting==0)
{
while(zanting==0)
{
TR0=0;
display(fenshi,fenge,miaoshi,miaoge);
}
}
if(zanting!
=0)
{
TR0=1;
}
miaoshi=temp1/10;
miaoge=temp1%10;
fenshi=temp2/10;
fenge=temp2%10;
}
display(fenshi,fenge,miaoshi,miaoge);
}
}
voiddelay(uintz)
{
ucharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharfenshi,ucharfenge,ucharmiaoshi,ucharmiaoge)
{
w1=0;
P0=table[miaoshi];
delay
(2);
w1=1;
w2=0;
P0=table[miaoge];
delay
(2);
w2=1;
}
voidinit()
{
temp1=00;
temp2=00;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
附录5:
基于单片机的秒表设计元器件目录表
元件名称
规格
数量
备注
AT89C52单片机
一块
附底座
晶振
12MHZ
一块
两位八段数码管
共阳
一块
按钮开关
三个
极性电容
10uf
一支
瓷片电容
30pf
两个
电阻
10kΩ、470Ω
一个、三个
发光二极管
一个
PNP三极管
二个