单片机课程秒表设计模板.docx
《单片机课程秒表设计模板.docx》由会员分享,可在线阅读,更多相关《单片机课程秒表设计模板.docx(17页珍藏版)》请在冰豆网上搜索。
单片机课程秒表设计模板
北华航天工业学院
课程设计报告
设计课题:
单片机秒表设计
专业班级:
B09212
学生姓名:
岑鉴峰
指导教师:
胡辉
设计时间:
2012/4/10-2012/5/10
北华航天工业学院电子工程系
单片机原理及应用课程设计任务书
姓名:
岑鉴峰
专业:
电子信息工程
班级:
B09212
指导教师:
胡辉
职称:
副教授
课程设计题目:
单片机秒表设计
已知技术参数和设计要求:
5位LED,秒计数显示,精确到0.01秒,按键要求:
复位按键,暂停,开始,最大值,清零,每到60秒蜂鸣一次.
所需仪器设备:
计算机一台,万用表一台,示波器一台,电烙铁一把.
成果验收形式:
软件调试,硬件实现.
参考文献:
【1】胡辉编著.单片机原理与应用
【2】刘刚编著.ProtelDXP2004SP2原理图与PCB设计.电子工业出版社.2009.07
【3】丁峻岭主编.C语言程序设计.中国铁道出版社.2009.12
时间
安排
2012/4/10-2012/5/10
指导教师:
胡辉教研室主任:
2012年5月27日
注:
本表下发学生一份,指导教师一份,栏目不够时请另附页。
课程设计任务书装订于设计计算说明书(或论文)封面之后,目录页之前。
内容摘要
单片机在检测和控制系统中得到广泛的应用,计数则是系统常需要计数、控制和保持的一个量。
本文从硬件和软件两方面介绍了AT89C2052单片机秒表设计的设计,对硬件原理图和程序框图作了简洁的描述。
本设计利用单片机的定时器/计数器定时和计数的原理,通过proteus仿真软件来模拟实现的。
模拟利用AT89S52单片机、LED数码管以及软件来控制秒表的计数以及计数的开启/暂停/继续与复位。
本设计主要完成具备基本功能的电子秒表的理论和实践设计,其中开启、停止按键的使用方法与传统的机械计时器相同,即按一下开启按键,启动计时器开始计时,按一下停止按键计时终止。
而复位按键可以在任何情况下使用,即使在计时过程中,只要按一下复位按键,计时应立即终止,并对计时器清零。
关键词:
单片机AT89C2052;单片机秒表;计数;保持,电子秒表,单片机,定时中断,
目录
一概述………………………………………………………………1
二方案设计与论证……………………………………………………………2
三单元电路设计与参数计算…………………………………………………3
3.1.从机部分电源设计……………………………………………………13
3.1.1开关电源介绍………………………………………………………14
3.1.2TOPSwitch系列芯片工作原理……………………………………15
3.1.3开关电源的电路设计……………………………………………16
四总原理图及元器件清单
五安装与调试
(一般分静态调试与动态调试两大内容)
六性能测试与分析
(要围绕设计要求中的各项指标进行)
七结论
八心得体会
九参考文献
一、概述
已知技术参数和设计要求:
5位LED,秒计数显示,精确到0.01秒,按键要求:
复位按键,暂停,开始,最大值,清零,每到60秒蜂鸣一次.
二、方案设计与论证
本设计分为时钟电路、按钮电路、显示电路和单片机四大部分,
这些模块中单片机占主控地位。
其模块电路如图2-1所示
如图2-1
三、单元电路设计与参数计算
ATMEL公司的89系列单片机以其卓越的性能、完善的兼容性、快捷便利的电擦写操作,低廉的价格、超强的加密功能,完全替代87C51/62和8751/52,低电压、低电源、低功耗,有DIP、PLCC、QFP封装,是当今世界上性能最好、价格最低、最受欢迎的八位单片机[3]。
AT89S52单片机采用40引脚的双列直插封装方式。
图1.2为引脚排列图,40条引脚说明如下:
主电源引脚Vss和Vcc①Vss接地②Vcc正常操作时为+5伏电源
外接晶振引脚XTAL1和XTAL2
①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采用外部振荡器时,此引脚接地。
②XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采用外部振荡器时,此引脚接外部振荡源。
。
。
(1)时钟电路
如图3-1
时钟电路如图3-1所示,时钟电路的晶振频率越高,系统的时钟频率越高,单片机的运行速度也就越快。
晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中的电容C1、C2选择为33pF左右。
该电容的的大少会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
(2)、蜂鸣电路
(3)、按键电路
有四个按键,分别实现开始、暂停、复位,清零功图3-2b所示
图3-2b
(4)显示电路
数码管实际上是由二极管构成发光二级管正常工作时,其两端正向压降约为1.6v,正向电流约为10mA,为了使数码管达到一定的亮度而又不至于由于电流过大而损坏,我们使用三极管S8550作为数码管的驱动,同时在P0口和P2口上串上470欧姆的电阻。
此处使用四位一体共阳极数码管,由于驱动电路决定了此处采用共阳极代码来编写显示程序,具体电路如图3-5所示
图3-5
(5)复位电路
设计采用上电且开关复位电路,如图所示上电后,由于电容充电,使RST持续一段高电平时间。
当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。
四、总原理图及元器件清单
1.总原理图
2.元件清单
元件序号
型号
主要参数
数量
备注
电阻
Res
10k/1k/200
3/10/1个
锁存器
74LS573
2个
单片机
AT89C52
1个
按键
Button
5个
晶振
CRYSTAL
1个
电容
Monores3N3
33pF/22uF
2/1个
蜂鸣器
SPEAKEY
1个
LED
7SEG-MPX4-CA-Blue
共阳
2个
五、安装与调试
PCB图
PCB图设计时,首先要使元器件尽量少,这样既可以节约材料,又可以是布线更加短,减少干扰,同时还应注意尽量减少线路之间的寄生电容和电感,
布线时需要将线宽设置得比较宽,这样可以提高腐蚀电路板时的成功率,焊盘大小也要设置的比较大,这样在腐蚀环节和焊接环节比较容易成功。
不易出现短线的现象和焊盘剥离的现象。
双面布线时芯片和针脚多的元件需将焊接点置于底层,这样才能比较方便的焊接。
制作电路板PCB图见附录2。
本电子钟的设计用的Proteus仿真软件设计电路并仿真。
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
因为pretues仿真软件中所有的情况都是基于理想条件,与实际电路的工作存在很大的差别,所以我们必需考虑到实际情况应接入驱动限流等电路,它才能被实际所应用。
首先打开已经做好的proteusDSN文件,双击图中的AT89S52芯片,就弹出一个窗口,在ProgramFile项中通过路径选择在WAVE中生成的HEX文件,双击选中后确定,这样仿真图中的AT89S52芯片就已经夺取了本设计中的HEX文件。
单击“三角形按钮”进行仿真。
通过对仿真结果的观察来对程序进行修改,最终使程序到达设计要求。
按照之前设计好的数字电子秒表原理图,详细计算系统中各个元件的参数,选择相应器件,制作实际电路板。
由于考虑到电路板大小的问题及元件之间连线的方便,在焊接元器件前必须考虑元件的布局然后进行实际操作。
制作好的电路板可以用万用表(200欧姆档)的红、黑表笔测试电路板的每条走线,当其电阻非常小时,证明走线没有断开,当其电阻很大时,证明该条走线断了,应该重新走线,使电路板在电气上得到正确地连接。
选用万用表的20K欧姆档,检测电路中是否存在短路。
因为系统采用的是共阴极数码管作为显示电路,必须确保数码管的公共端接的是低电平。
(1)晶振电路的测试
在单片机正常运行的必要条件是单片机系统的时钟稳定正常。
实际中,因为各种原因导致系统时钟不正常而出现系统无法正常运行的情况时有,因此系统时钟是否振是通电检查的首要环节。
在系统通电的状况下,用万用表的直流电压档(20V),分别测量XTAL1和XTAL2引脚的电压,看是否正常,在调试过程中,测得电压XTAL1引脚应为2.05V,XTAT2应为2.15V。
(2)复位电路的测试
复位不正常也会导致系统不能工作。
如果复位引脚始终为高电平,系统将始终处于复位状态;如果始终为低电平,不能产生复位所需的高电平信号脉冲,则系统也可能无法正常工作。
单片机正常工作时,RST复位引脚应为0V,按下复位按键时,复位引脚为高电平5V左右。
(3)显示电路的测试
显示电路是数字电子秒表正常运行最直观的观察窗口,我们可以通过观察显示电路的显示结果观察系统能否正常运行。
当显示电路按照电路图焊接好后,用万用表的测二极管档位,将黑表笔接共阴数码管的公共段,然后将红表笔接数码管的各段,当数码管的段能正常显示,说明各点焊接正常。
5.3程序仿真与结果
我是在Keil软件里编写程序并编译通过才能被硬件电路所应用。
Keil的功能比较强大但还是有一定的缺点。
在编译过程中只能检查出所编写的语法错误,因此只能一步一步的在硬件电路里仿真来达到设计所要求的功能。
经仿真修改和完善均已达到设计要求.“P.”显示,电子钟准备状态与电子钟自动运行状态的仿真如下图所示。
(1).“P.”显示如图5-1所示。
图5-1“P”显示图
(2).数字式秒表准备状态仿真的显示
(3).数字式秒表运行状态的仿真
附录二
程序清单
#include//52系列单片机头文件
#defineucharunsignedchar//宏定义
#defineuintunsignedint
sbitkey1=P1^0;//申明四个按键
sbitkey2=P1^1;
sbitkey3=P1^2;
//sbitkey4=P1^3;
sbitfeng=P3^1;
//bitaa=1;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//含有0~9的数字数组
voiddelayms(uint);//声明延时函数
voiddisplay(uchar,uchar,uchar);//声明显示函数
voidkeyscan();//声明按键函数
ucharnum1,num2,maoshi,maoge,bai,shi,ge;//变量声明
uintnum;
voiddisplay(ucharbai,ucharshi,ucharge)//数码管显示子函数
{
bai=num/100;//百位
shi=(num-100*bai)/10;//十位
ge=num-100*bai-shi*10;
P0=table[bai];
P2=0x01;
delayms(5);
P0=table[shi];
P2=0x02;//送位选数据
delayms(5);//延时
P0=0xbf;
P2=0x04;//送位选数据
delayms(5);
P0=0xbf;
P2=0x08;//送位选数据
delayms(5);
P0=table[ge];
P2=0x10;
delayms(5);
}
voidmain()//主函数入口
{
TMOD=0x11;//设置TO,T1定时器
TH0=(65536-50000)/256;//装初值12M晶振定时50ms数为50000
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开启定时器T0中断
ET1=1;//开启定时器T1中断
while
(1)//程序停在这里等待中断的发生,这个大循环也是实现数据显示的主体循环
{
while(!
feng)
{
delayms(10);
feng=1;
}
keyscan();
display();
}
}
voiddelayms(uintxms)//延时子函数
{
uinti,j;
for(i=xms;i>0;i--)//i=xms即延时约xms毫秒
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;//每次按下,TR1的状态时相反的
}
}
if(key3==0)//使计数器显示为60.0
{
delayms(10);
if(key3==0)
{
while(!
key3);
TR0=0;
TR1=1;
num=600;
TR1=0;
}
}
}
voidT0_time()interrupt1//定时器T0,中断序号为1
{
TH0=(65536-50000)/256;//重装初值
TL0=(65536-50000)%256;
num2++;
if(num2==2)//如果到了2次,说明0.1秒的时间到
{
num2=0;//然后把num2清零重新再计2次
num1++;
if(num1==10)
num1=0;
if(num==0)//当num自减为0时,重新为60.0,再开始倒计时
num=600;
num--;//num逐渐自减
}
}
voidT1_time()interrupt3//定时器T1,中断序号为3
{
TH1=(65536-50000)/256;//重装初值
TL1=(65536-50000)%256;
num2++;
if(num2==2)//如果到了2次,说明0.1秒的时间到
{
num2=0;//然后把num2清零重新再计2次
num1++;
if(num1==10)
num1=0;
num++;//num逐渐自加
if(num==600)//这个数用来送给数码管显示的,到了60.0后归零
{
feng=1;
delayms(1000);
feng=0;
num=0;
}
}
}
六、性能测试与分析
可以发现数字式秒表计数的时间比我们的标准时间要慢,而且相比较的时间越长时差越大。
经过分其主要原因与硬件和软件都有关。
软件原因:
我们从外部中断请求有效到转向中断区入口地址所需的机器周期数来计算中断时间,51系列单片机最短响应时间为3个机器周期。
在一般情况下中断响应时间通常无需考虑,但在精确定时的应用场合需知道中断响应时间,以保证定时的精确控制。
硬件原因:
单片机的时钟信号是由外部的振荡电路所提供,在芯片的外部通过接XATL1与XATL2这两个引角跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
因为电子原件没有我们所设计的那么理想(电容的容量,振晶的输出频率)所以会造成我们的时间准确。
针对这样的问题我们就能只能从上述两个方面入手去解决。
软件方面我们可以通过计算设计子程序去减少响应的时差。
硬件部分我们可以采用一些稳定措施,精确度比较高的电子元件去完善,但是在最后调试出的还是有误差但我尽可能的减少差误差接近理想
七、结论
根据本设计原理和思路,进行软件设计喝硬件设计,可以实现基本指标:
5位LED,秒计数显示,精确到0.01秒,按键要求:
复位按键,暂停,开始,最大值,清零,每到60秒蜂鸣一次.基于单片机可以实现设计的基本功能。
八、心得体会
通过对数字式秒表的设计与制作,我们把理论与实际相结合。
加深了我对理论知识的理解,也增强了动手能力。
在电路设计过程中,我学会了自己收集信息和处理信息的能力,为以后的学习和制作奠定了一定的基础,数字式秒表看似简单,但当我自己着手设计与制作的时候才发现困难重重的。
在元器件采购过程中发现的问题更大,在电路计算中我们根本没有考虑到元器件的型号和性能参数,然而在实物购买时我们就不得不开始考虑其型号和性能参数,这也是理论与实际的差别。
还有,某种型号的电阻和电容的是根本就没有买的,这样我们不得不考虑改变设计电路中的参数,或者采用电路的等效方式来解决。
在制作PCB时,发现一定要有细心、耐心和恒心才能做好事情,首先是线的布局上既要美观又要实用和走线简单,兼顾到方方面面去考虑是很需要的。
比如在做PCB板时,因为缺乏经验把板上的线画得太细了,焊盘太细导致后面的腐蚀环节稍微有点失误将使电路板出现断线,打孔后无焊盘等问题,把PCB板浸在三氯化铁里浸得太久可能导致PCB板上的铜几乎全都溶解了。
双面布线时必须做到两面完全对齐,否则板子有可能无法使用,还有在有芯片的电路布线时不能将从芯片引脚引出的线布在两面,否则将无法完成焊接任务。
从刚刚接触单片机开始,此设计是我迄今为止,编写的最大的一个程序,在调试过程中,我学会了怎样去根据实验现象分析问题,解决问题。
它不仅加强了我们解决问题的能力,同时也锻炼了我们的逻辑思维能力。
此次设计,使我学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,使我们在实际动手能力方面得到了较大的提高。
九、参考文献
[1]胡宴如.高频电子线路[M].高教出版社.2001.9:
12-19
[2]卢屹数字锁相环的参数设计及其应用[J]通信技术2001,(9):
12-15
电子工程系单片机原理及应用课程设计
成绩评定表
专业:
电子信息工程班级:
B09212学号:
20094021211姓名:
岑鉴峰
课题名称
设计任务与要求
指导教师评语
建议成绩:
指导教师:
课程小组评定
评定成绩:
课程负责人:
年月日