电子技术课程设计Word文档下载推荐.docx
《电子技术课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子技术课程设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
![电子技术课程设计Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/24/43ebc1d2-bd0c-4ccd-b971-68fb9ec013f2/43ebc1d2-bd0c-4ccd-b971-68fb9ec013f21.gif)
西南大学工程技术学院07级
(2)班电子科学与技术重庆北碚400716
1引言
随着电子技术的迅猛发展,数字电路应用广泛,电子技术深入各个领域。
通过数字时钟这一电子技术课程设计来让我们熟悉理论知识与实践相结合的综合训练,从而达到对我们运用能力进行检查和综合素质的培养。
1.1课程设计要求与目的
1.1.1基本设计要求与原则
本次课程设计的题目是数字电子时钟与简易水温控制系统。
我们小组选择的是数字电子时钟。
基本要求:
1、能够根据设计任务和指标要求,综合运用电子技术课程中所学到的理论知识与实践技能独立完成一个设计课题。
2、根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。
要求通过独立思考、深入钻研课程设计中所遇到的问题,培养自己分析、解决问题的能力。
3、进一步熟悉常用电子器件的类型和特性,掌握合理选用的原则。
4、学会电子电路的安装与调试技能,掌握常用仪器设备的正确使用方法。
利用“观察、判断、实验、再判断”的基本方法,解决实验中出现的问题。
5、1、2班独立设立小组,每小组2个成员。
起止时间为:
2010年10月28号开始至2010年11月12日结束。
基本原则:
1,小组团队设计不能从网上下载,自己动手编排电路,流程图,编写程序。
2,电路图必须采用PROTEL软件绘制,用multisim或者proteus软件仿真,并提交程序及结果、课程论文电子版。
(有违以上原则,取消课程成绩)
1.1.2设计的基本目的
1.课程设计是教学中必不可少的重要环节,通过课程设计巩固、深化和扩展学生的理论知识与初步的专业技能,提高综合运用知识的能力,逐步增强实际工程训练的能力。
2.注重培养学生正确的设计思想,掌握课程设计的主要内容、步骤和方法。
3.培养学生获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力。
4.提高学生运用所学的理论知识和技能解决实际问题的能力及其基本工程素质。
5.在知识传授与能力和素质培养的关系上,树立注重素质教育,融传授知识、培养能力与提高素质为一体。
在理论与实践的关系上,树立理论联系实际,提高综合能力为目的。
1.2设计构思
1.2.1电子时钟简介
1957年,ventura发明了世界上第一个电子表,从而奠定了电子钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于点偏激的一种计时工具,采用延时程序残生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分进一,满二十四小时清零。
从而达到计时的功能,是人民日常生活不可缺少的工具。
1.2.2时钟的功能
本次设计的时钟,以AT89C51单片机芯片为中心的控制电路。
单片机控制电路省去很多复杂电路,使得电路得到简化。
用C语言程序来控制时钟显示,更加简化了时钟的设计。
由于单片机和C语言的控制能力较强,使得时钟的功能有所提高。
通过调整时间,秒表,时钟暂停,返回时钟五个按键可以完成两个成套的功能:
时钟调整、秒表。
表1详细元件列表
器件名称
单片机芯片
八位共阳数码管
电容
电阻
欧姆电阻
数目
1
5
8
规格
AT89C51
7SED
104
10k
560
100
2电路设计
电路构思也比较简单,用框架来描述分三个部分。
每个部分的详细设计用流程图来展现。
2.1总体设计框架
此设计原理图如图所示,包括三个部分:
单片机,键盘,显示电路。
图1总体构思
2.1.1总体设计思路
设计的电路有三个模块组成:
单片机控制电路,显示电路和校正电路。
整个设计是由单片机为中心,单片机实现时钟的运行,进制,循环,中断,初始化等等。
软件程序从开始执行,先通过初始化各个寄存器,时钟正常运行,经过扫描按键来决定是否设定参数来执行相应功能的程序,进而在数码管上显示。
2.1.2总体流程图
图2总体流程
2.2部分设计细节
1.单片机发送的信号通过程序控制最终在数码管上显示出来。
通过寄存器里存储的数据通过P2和P3端口来达到显示在数码管上的效果。
2.单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
单片机自带的晶振电路使得单片机有很稳定的脉冲信号输出。
3.为使时钟走时与标准时间一致,校时电路时必不可少的,按键输入的数据存入寄存器后与时钟正常的时间数据相加来调节时间,键盘用来校正数码管上显示的。
2.2.1各部分计思路及电路图
图3电路图
设计采用C语言程序编程,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计数满60后向时计数器进位,小时计数器按“23到0”规律计数,从0到23循环。
时、分、秒的计数结果经过数据处理可以直接送显示器里显示。
当计时发生误差时可以校时电路进行校正。
设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。
(1)各个控制键的功能:
可对时钟时、分进行校准调节(只可累计加1);
加时1、加分1键实在校准时间时对小时数或分钟数调节而设置的;
按下秒切换键就进入秒表模式,同时秒表开始计时,按下秒表暂停,复位键就暂停、归零,如果要从新对秒表计时则可以按秒表开始、复位;
(2)AT89C51单片机,通过编写程序对数码显示进行控制。
(3)八个7段数码管显示时钟和秒表信号。
3时钟各功能分析及图解
3.1时钟运行图
图4
图5
仿真运行开始后,时间显示00-00-00并开始像复位时钟一样一秒跳动一次的运行。
如图所示一样,调分键按一次,分钟数个位数值增加一。
调时键按一次,小时数个位数值增加一,暂停按键可以让时钟暂停下来,返回时钟是用于进入秒表状态后或暂停后返回时钟界面用的。
(图4)
简单操作就是:
启动仿真,时钟运行,用调时、调分键校正时间,暂停键用于调秒或秒表,暂停过后想回到时钟界面就点击返回时钟按键。
(如图5)
3.2秒表运行图
图6
当秒表按键被按下后,八位共阳极数码管上显示的是00-00-00,并且最小的跑秒是0.01秒,最后两位(7、8)数字进位不再是60而是100,数码管的4、5的进位是60进1,1、2位则是到60后又返回00的无进位循环。
按键操作:
当按动秒表键时,数码管从00-00-00开始计数,六秒后为00-06-48(图6)。
这时你按下暂停键时,时间就会一直显示这个时间。
返回时钟键有复位的功能,当你按下后,会回到时钟界面,回到你按秒表时的时间。
当你再按秒表时又会重复上面的步骤。
如(图7)
该数字钟是用一片AT89C51单片机通过编程区去驱动8为数码管显示来实现的。
通过5个开关控制,分别为调分、调时、秒表、暂停、返回时钟,控制键分别对应P1.0到P1.4端口。
AT89C51通过P2口和P3口区控制数码管的显示,P2口接数码管的a-g端面试控制输出编码。
P3口接数码管的1-8端,是控制动态扫描输出。
图7
4电路控制C语言程序
根据实验调试后的最终程序如下:
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
#definedelay_ime3/*宏定义*/
uchark,dat[]={0,0,0,0,0,0,0,0};
uinttcount,t,u;
uchardat1[]={0,0,0,0,0,0,0,0};
uchardat2[]={0,0,0,0,0,0,0,0};
uchardis_bit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
ucharcodeSEG7[11]={0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/
0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/0xBF,/*-*/
};
/*数字显示数组*/
sbittminute=P1^0;
sbitthour=P1^1;
sbitmiaobiao1=P1^2;
sbitmiaobiao2=P1^3;
sbitmiaobiao3=P1^4;
/*端口定义*/
ucharms=0;
ucharflag=0;
ucharsec=0;
ucharminit=0;
structtime{ucharsecond;
ucharminute;
ucharhour;
}time1;
ucharn,i;
voidinit();
//****************************************************
voiddelay(n)
{
while(n--)
{
for(i=120;
i>
0;
i--);
}
}/*延时子程序*/
voidmodify(void)
EA=0;
if(thour==0)
if(flag==0)
{
dat1[6]++;
time1.hour++;
delay(280);
if(dat1[6]>
9)
{
dat1[6]=0;
dat1[7]++;
}
else
if((dat1[7]>
1)&
&
(dat1[6]>
3))
{
dat1[7]=0;
dat1[6]=0;
}
}
//数码管3、4位(分钟位输出)
if(tminute==0)
dat1[3]++;
time1.minute++;
//minute计数存储
//按键扫描延迟
if(dat[3]>
=9)
{
dat1[4]++;
dat1[3]=0;
if(dat1[4]>
5)
dat1[4]=0;
if(miaobiao1==0)
{//秒表按键设定
TR0=0;
ET0=0;
TR1=0;
ET1=0;
flag=1;
dat[0]=0;
dat[1]=0;
dat[2]=0xbf;
dat[3]=0;
dat[4]=0;
dat[5]=0xbf;
dat[6]=0;
dat[7]=0;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
if(miaobiao2==0)
{//暂停按键设定
if(miaobiao3==0)//返回按键设定
ms=0;
sec=0;
minit=0;
EA=1;
}/*按键扫描*/
voidinit(void)
TMOD=0x11;
TH0=0xDB;
TL0=0xFF;
TH1=0xDB;
TL1=0xFF;
ET0=1;
ET1=1;
TR0=1;
tcount=0;
ms=0;
sec=0;
minit=0;
}/*初始化*/
voidtest(void)
for(k=0;
k<
8;
k++)
P3=dis_bit[k];
P2=SEG7[dat[k]];
delay
(1);
P3=0X00;
}/*数字显示*/
voidmain()
init();
delay(10);
while
(1)
modify();
test();
}/*主函数*/
voiddiplay()interrupt1
ET0=0;
TR0=0;
TL0=0xff;
tcount++;
//秒时间
if(tcount==100)
time1.second++;
tcount=0;
dat1[0]=(time1.second)%10;
//dat1显示输出
dat1[1]=(time1.second)/10;
//分进位循环
if(time1.second==60)
dat1[0]=0;
//second显示存储清零
dat1[1]=0;
time1.second=0;
//second计数存储清零
time1.minute++;
dat1[3]=(time1.minute)%10;
//second个位显示
dat1[4]=(time1.minute)/10;
//时进位循环
if(time1.minute==60)
dat1[3]=0;
//minute显示存储清零
dat1[4]=0;
time1.minute=0;
//minute计数存储清零
time1.hour++;
dat1[6]=time1.hour%10;
//hour个位显示
dat1[7]=time1.hour/10;
//
if(time1.hour>
23)
dat1[6]=0;
//hour显示存储清零
dat1[7]=0;
time1.hour=0;
//hour计数存储清零
dat[5]=10;
dat[2]=10;
dat[0]=dat1[0];
dat[1]=dat1[1];
dat[3]=dat1[3];
dat[4]=dat1[4];
dat[6]=dat1[6];
dat[7]=dat1[7];
flag=0;
P0=0x01;
ET0=1;
}
//跑秒
voidtime_2(void)interrupt3
TR1=1;
ms++;
dat2[0]=ms%10;
dat2[1]=ms/10;
if(ms>
=100)//跑秒进制100
sec++;
dat2[3]=sec%10;
dat2[4]=sec/10;
if(sec>
=60)
sec=0;
minit++;
dat2[6]=minit%10;
dat2[7]=minit/10;
dat[0]=dat2[0];
dat[1]=dat2[1];
dat[3]=dat2[3];
dat[4]=dat2[4];
dat[6]=dat2[6];
dat[7]=dat2[7];
5程序调试过程及相关问题
5.1调试中已解决问题
在调试过程中出现过几个问题。
(1)仿真时,元器件选错了:
八位共阳极数码管选成了八位共阴极数码管,结果导入程序后出现的数字不是阿拉伯数字,而是反码。
后来在调试程序的过程中,很长一段时间内没发现程序的问题反过头来找到了是元器件的选择错误问题。
(2)时钟按键调整过后,在秒针没有进位(没走满一分钟)时钟显示是正确的,没有任何延迟问题,数字显示正确。
但是一旦秒钟走满60后显示的数字就出现问题,调分、调时按键校正的时间根本没有加上去,时钟按照调节前显示的时间在运行和显示。
(3)使用秒表功能时,当键入复位功能键时出现了反码,最后我们的解决方法是将秒表复位键同返回时钟键设置成同一按键,有效地解决了秒表复位问题,也简化了按键数量,节省了开支!
(4)开始编写的程序,用的汇编语言编写的,写得很杂乱没有章法,在时钟调试中出现了问题后不能及时,准确的找到问题的所在,不但暴露出汇编语言学习得不扎实,还暴露出自己在书写程序时,缺少一种系统,规范的方法。
5.2相关分析
出现以上问题后,经过调试、请教同学、查资料等多种途径基本都能解决问题。
在组员的相互配合下,在同学的探讨帮助下,共同解决了以下问题。
解决方案:
(1)换用了共阳极7段数码管解决了原件配备问题。
(2)这是由于数码管的计数存储和显示存储的问题,在计数存储的数据里已经计算好并把时钟走的时间和按键校正的时间相加,但是显示存储没相加导致了这个问题。
解决办法:
把寄存器里的数据与按键校正的数据做加法后再放进数码管里显示出来,添加的语句为:
time1.minute++。
(3)这是由于按键多余造成,经过按键整合2键合1很好的解决了这个问题。
(4)由于用汇编有很大的难处,后来程序用C语言编写,规范的按括号与括号相对,多加注解的方法,在调试中减轻了很大困难,为以后的编程找到了有效的书写模板。
5.3方案存在的问题
虽说解决了上面的一些问题,但是最重要的,最困难的问题不是解决过的,而是还没解决的。
以下三个问题是本次设计依然存在的问题,提出来希望能进一步得到解决。
(1)在秒表复位的电路中,结果是正确的,但是在你运行秒表程序又返回时钟界面后,再进入秒表,上面显示的数字不是00-00-00而是上次按返回时钟键的秒表时间。
但是并不是说没复位,因为在1秒钟后秒表又进入正常的开始运行,时间也是与按秒表后的时间一样,在这个过程当中有个延迟,秒表要1秒钟时间去消化上次的数据。
这个问题不知道怎么去解决,程序中延迟,中断部分都没什么问题,复位时要1秒钟的延迟来进入下次秒表运行的原因是?
(2)在当初设定单独复位键时出现了一个代码问题,同样的代码0xBF程序中设定为/*-*/出现了不是横线也不是数字的符号,不是反码,怎么修改数码管输出的代码数据都没用,最后只好不设定单独复位键。
(3)最后一个问题,时钟运行时,按秒表键,再按返回时钟键后秒表跑的时间不能加到时钟里,中间丢失了一段时间,经过探讨这是由于单片机只有一个处理器不能同时处理两个问题,所以这个是暂时无法解决的问题。
5.4调试心得体会
经过近一个星期的单片机电子时钟课程设计,我们组已基本完成课程要求。
功能上达到了:
时钟的显示,秒表显示,调时功能,秒表暂停及复位功能。
精确度完全满足日常生活需要。
跑秒功能功能能实现平时精确计时功能功能。
硬件条件适合扩充闹钟、整点报时等功能。
由于时间,人员,专业技术等一系列限制条件,软件或者硬件都有一定程度的缺陷,例如没能加入闹钟和正点报时功能,还有使用秒表暂停功能时时钟功能停止运行。
但我想在以后的课程设计当中可以解决这个难题。
在本次课程设计过程中,我们遇到了许许多多的问题,几乎是没有那次能一次通过,但就是凭借这样一次次程序编写调试在调试让我懂得了要想编写一个相当水平的程序我们还有很长的路要走,编写程序不仅仅要的是专业知识,细心专注更是一个编程人员不可或缺的品质。
所以我想我们以后就有了新的目标,俗话说新生活从选定目标开始,我对此深信不疑。
更不用说要做出一个好的产品。
通过这次理论与实践的紧密配合而诞生出的产品我和我的组员都有一股由衷的成就感,虽然它,没有特别之处,甚至是普普通通,但它的的确确承载了我们心情的汗水,我也深刻认识到理论知识非常