单片机实训报告
题 目:_电子时钟设计 姓 名:__侯元星__ 学 号: 0502090229 专 业:_计算机控制0902班 _ 所属系部:_电子工程系_ 指导老师: 陆剑
2011年6月25日
I
前言
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显
数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,同时引入一个内部充电电源在停止外部供电时,仍具有内部计时的功能。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。
本文以对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。
II
目录
第一章 设计任务 ....................................................... 1 1.1设计目的............................................................ 1 1.2设计要求............................................................ 1 第二章 总体设计 ......................................................... 2 2.1 硬件部分........................................................... 2 2.2 电子时钟电路图 .............................................. 5 2.3 电子时钟程序设计 .......................................... 5 第三章 电子时钟调试 ............................................... 19 3.1 软件调试......................................................... 19 3.2硬件调试.......................................................... 20 总结 ............................................................................. 21 参考文献 ..................................................................... 22
III
第一章 设计任务
1.1设计目的
课程设计的主要目的是通过对电子时钟的设计实践,了解单片机系统
控制过程、设计要求、应完成的工作内容和具体设计方法。通过设计也有助于复习、巩固以往所学的知识,达到灵活应用的目的。课程设计应强调能力培养为主,在独立完成设计任务的同时,还要注意其他方面的能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;差于图书资料、产品手册和各种工具书的能力;工程绘图的能力;书写技术报告和编制技术资料的能力。
1.2设计要求
在课程设计中,学生是主体,应充分发挥他们的主动性和创造性。教师的主导作用是引导其掌握完成设计内容的方法。为保证顺利完成设计任务还应做到以下几点:
1、在接受设计任务后,应根据设计要求和应完成的设计内容进度计划,确定各阶段应完成的工作量,妥善安排时间。
2、在方案确定过程中应主动提出问题,以取得指导老师的帮助,同时要广泛讨论,依据充分。在具体设计过程中要多思考,尤其是主要参数,要经过计算论证。
3、说明书要求文字通顺、简练,字迹端正、整洁。 4、应在规定的时间内完成所有的设计任务。
5、如果条件允许,应对自己的设计线路进行实验讨论,考虑进一步改进的可能性。
1
第二章 总体设计
2.1 硬件部分
1、系统设计总框图
单片机 AT89C51 数码动态显示 C语言 图2-1 设计总框图
此次课程设计的的电子钟由单片机AT89C51、时钟电路、动态数码管显示电路组成。运用C语言来控制单片机AT89C51来实现动态数码管显示,并在此基础上综合运用,时间电子钟的设计(包括时钟、秒表、显示)。
2、电路组成及工作原理
本文数字时钟设计原理主要利用AT89C51单片机,由单片
机的P0口控制数码管的位显示, P2口控制数码管的段显示,P3口与按键相接用于时间的校正。整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”计数器的输出,通过四个七段LED显示器显示出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”显示数字进行校对调整。
3、单片机AT89C51
(1) AT89C51简介
单片机是一种集成电路芯片,采用超大规模技术把具有数
2
据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
(2)AT89C51的主要性能参数
与MCS-51产品指令系统完全兼容,4k 字节可重擦写FLASH闪速存储器。1000次擦写周期。全静态操作:0Hz—24MHz。三级加密程序存储器,128×8字节内部RAM32个可编程I/O口线,2个16位定时/计数器6个中断源,可编程串行URAR通道,低功耗空闲和掉电模式。
AT89C51提供以下标准功能:4k 字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。下图为单片机AT89C51各管脚图:
图2-2 单片机AT89C51管脚图
3
4、数码管显示部分
单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位。这种显示器有共阴和共阳两种。发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。我们选用共阳极显示。
一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段) a_g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。
由于共阴极连接需加驱动,故在这里我采用的是共阳极连接。 以共阳极LED为例,如图(b)所示,各LED公共阳极K0接高电平,若向各控制端a,b, ┄,g,dp顺次送入00011110信号,则该显示器显示“⒎”字型。下图为数码管结构图:
图2-3 数码管接线结构图
4
2.2 电子时钟电路图
图2-4 线路连接图
2.3 电子时钟程序设计
1、程序流程图
如图2-5所示:
5
开始 K3=1 N 秒表 Y Y 时钟 K1=1 秒表计时 K2=1 秒表停止计时并显示 复位 结束 图2-4 程序流程图
2、电子时钟C语言源程序:
6
#include \"reg51.h\"
#define uchar unsigned char #define uint unsigned int #define smplay P2 sbit sm1out=P0^0; sbit sm2out=P0^1; sbit sm3out=P0^2; sbit sm4out=P0^3; sbit speak=P0^4; sbit addtime=P3^4; sbit subtime=P3^5; sbit sled1=P1^3; sbit sled2=P1^4;
uchar code tabm[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41 ,0x1F,0x01,0x09};
uchar code tabds[]={0x02,0x9E,0x24,0x0C,0x98,0x48,0x4 0,0x1E,0x00,0x08};
uchar datamd,datamg,datahd,datahg;
uchar ddatamd,ddatamg,ddatahd,ddatahg; uchar gethour,getmin; uchar secdata=0x00; uchar t1num=10; uchar t0num1=10; uchar t0num2=2; uchar fselect=0; bit flagplay; bit flagflash; bit flagspk=0; void dlysys() {
uchar i,j,k;
for(i=0;i<50;i++)
7
for(j=0;j<100;j++) for(k=0;k<100;k++); }
void dlyplay() {
uchar i,j;
for(i=0;i<10;i++) for(j=0;j<100;j++); }
void dlyint() {
uchar i,j;
for(i=0;i<200;i++) for(j=0;j<200;j++); }
void main() {
uchar chgi=0; uchar chkkey=10; P0=P1=P2=P3=0xff; dlysys(); datamd=9; datamg=5; datahd=3; datahg=2; ddatamd=0; ddatamg=0; ddatahd=0; ddatahg=0; flagplay=0; flagflash=0;
EA=EX0=EX1=ET0=ES=IT0=IT1=1;
8
TMOD=0x21; SCON=0x50; TH1=0xe6; TL1=0xe6; TH0=0x3c; TL0=0xb0; TR0=1; TR1=1; sled1=sled2=0; while(1) {
chgi=0;
while(flagplay==0) {
sm1out=sm2out=sm3out=sm4out=1; smplay=tabsm[datamd]; if(fselect==2) sm1out=flagflash; else
sm1out=0; dlyplay();
sm1out=sm2out=sm3out=sm4out=1; smplay=tabsm[datamg]; if(fselect==2) sm2out=flagflash; else
sm2out=0; dlyplay();
sm1out=sm2out=sm3out=sm4out=1; smplay=tabsm[datahd]; if(fselect==1) sm3out=flagflash;
9
else
sm3out=0; dlyplay();
sm1out=sm2out=sm3out=sm4out=1; smplay=tabsm[datahg]; if(fselect==1) sm4out=flagflash; else
sm4out=0; dlyplay();
if(fselect==2) {
TR0=0; chkkey--; if(chkkey==0) {
chkkey=10; if(addtime==0) {
datamd++;
if(datamd==10) {
datamd=0; datamg++; if(datamg==6) datamg=0; }}
if(subtime==0) {
datamd--;
if(datamd==255) {
datamd=9;
10
datamg--;
if(datamg==255) datamg=5; } } }}
if(fselect==1) {
TR0=0; chkkey--; if(chkkey==0) {
chkkey=10; if(addtime==0) {
datahd++;
if((datahg!=2) && (datahd==10)) { datahd=0; datahg++; }
if((datahg==2) && (datahd==4)) { datahd=0; datahg=0; } }
if(subtime==0) {
datahd--;
if(datahd==255) {
datahd=9; datahg--;
if(datahg==255)
11
{ datahg=2; datahd=3; } }} }}
if(flagspk==1) { if((addtime==0)||(subtime==0)) flagspk=0; speak=~speak; } else
speak=1; }
while(flagplay) {
sm1out=sm2out=sm3out=sm4out=1; smplay=tabds[ddatamd]; if(fselect==2) sm1out=flagflash; else
sm1out=0; dlyplay(); sm1out=sm2out=sm3out=sm4out=1; smplay=tabds[ddatamg]; if(fselect==2) sm2out=flagflash; else
sm2out=0; dlyplay(); sm1out=sm2out=sm3out=sm4out=1; smplay=tabds[ddatahd]; if(fselect==1)
12
sm3out=flagflash; else
sm3out=0; dlyplay();
sm1out=sm2out=sm3out=sm4out=1; smplay=tabds[ddatahg]; if(fselect==1) sm4out=flagflash; else
sm4out=0; dlyplay(); if(fselect==2) {
chkkey--; if(chkkey==0) {
chkkey=10 if(addtime==0) {
ddatamd++; if(ddatamd==10) {
ddatamd=0; ddatamg++; if(ddatamg==6) ddatamg=0; } }
if(subtime==0) {
ddatamd--;
if(ddatamd==255)
13
{
ddatamd=9; ddatamg--;
if(ddatamg==255) ddatamg=5; } } } }
if(fselect==1) {
chkkey--; if(chkkey==0) {
chkkey=10; if(addtime==0) {
ddatahd++;
if((ddatahg!=2) && (ddatahd==10)) { ddatahd=0; ddatahg++; }
if((ddatahg==2) && (ddatahd==4)) { ddatahd=0; ddatahg=0; } }
if(subtime==0) {
ddatahd--;
if(ddatahd==255) { ddatahd=9; ddatahg--;
14
if(ddatahg==255) { ddatahg=2; ddatahd=3; }}} }}
if(fselect==0) {
chgi++; if(chgi==255) {
flagplay=0; chgi=0; }}
if(flagspk==1) {
if((addtime==0)||(subtime==0)) flagspk=0;
speak=~speak; } else
speak=1;}}}
void int0zd() interrupt 0 {
if(flagspk==1) flagspk=0; else {
flagplay=~flagplay; fselect=0; dlyint(); IE0=0; }}
void int1zd() interrupt 2
15
{
if(flagspk==1) flagspk=0; else {
fselect++; fselect %= 3; if(fselect!=0) { TMOD=0x11; TH1=0x3c; TL1=0xb0; ET1=1; ES=0; TR1=1;} else {
TMOD=0x21; TH1=0xe6; TL1=0xe6; ET1=0; ES=1; TR1=1; TR0=1; }
dlyint(); IE1=0;}}
void t0zd() interrupt 1 {
TH0=0x3c; TL0=0xb0;
16
t0num1--; if(t0num1==0) {
t0num1=10;
sled1=~sled1 sled2=~sled2; t0num2--; if(t0num2==0) { t0num2=2; secdata++; if(secdata==60) { secdata=0; datamd++; if(datamd==10) { datamd=0; datamg++; if(datamg==6) { datamg=0; datahd++; if((datahg!=2) && (datahd==10)) { datahd=0; datahg++;} if((datahg==2) && (datahd==4)) { datahd=0; datahg=0; } }}
if((ddatahg!=0)||(ddatahd!=0)||(ddatamg!=0)||(ddatamd!=0))
17
{
if((datahg==ddatahg)&&(datahd==ddatahd)&&(datamg==ddatamg)&& (datamd==ddatamd)) flagspk=1; else flagspk=0; }}} }} void t1zd() interrupt 3 {
TH1=0x3c; TL1=0xb0; t1num--; if(t1num==0) {
t1num=10; flagflash=~flagflash; } }
void CKZD() interrupt 4 {
gethour=SBUF; RI=0;
while(RI==0); getmin=SBUF; RI=0;
datahg=(gethour>>4); datahd=(gethour & 0x0f); datamg=(getmin>>4); datamd=(getmin & 0x0f); }
18
第三章 电子时钟调试
3.1 软件调试
软件调试:
本次实训主要在仿真软件Proteus7.5进行调试,仿真电路如图所示:
图3-1 电子时钟仿真电路
19
3.2硬件调试
硬件调试:如图所示:
图3-2 电子时钟硬件电路
20
总结
在设计过程中,通过针对性地查找资料,了解了些电子方面的资料,既增长了自己见识,补充最新的专业知识,又提高了自己的应用能力。
这次对AT89C51有了一个全面的认识,在此基础上结合以前所学的专业知识,从而把我所学的知识贯穿到一起,对电子专业有了一个更全面的认识!
总之这次毕业设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。
在试验中,我们同组人员之间相互合作、默契配合,遇到问题一起加以讨论解决,不同的思路与意见两个人在一起分享讨论,并最终采用得到的最为理想与完善的方案。在这个分享与讨论的过程中,我们锻炼了我们自己的团队协作能力与沟通能力,能够让这次课程设计在跟同事的协作配合下很好地完成,让自己的创作激情与工作热情在默契和谐的团队配合下得以充分的燃烧。
21
参考文献
[1] 华成英,童诗白. 模拟电子技术基础.高等教育出版社,2007
年8月
[2] 李群芳,张士军,黄建. 单片微型计算机.电子工业出版社,2009年2月
[3] 赵辉,刘印华 .PROTEL 99电子线路CAD.北京邮电大学出版
社.2008年1月
[4] 实用单片机电子钟的设计/丁辉、姚庆文 无线电2003年
合订本(下)
[5] 于海生.微型计算机控制技术[M] .清华大学出版社.1999-6 [6] 孙涵芳.MCS-51系列单片机原理及应用[M] .北京航空航天
大学出版社.1996-4
[7] 黄正谨.综合电子设计与实践[M] .东南大学出版社.2002-3 [8] 杨欣等.电子设计从零开始[M] .清华大学出版社.2005-10 [9] 谢嘉奎.电子线路[M] .高等教育出版社.2003-2
[10] 夏路易,石宗义.电路原理图与电路设计教程Protel
99SE[M] .北京希望电子出版社.2002
22
因篇幅问题不能全部显示,请点此查看更多更全内容