单片机设计报告Word格式文档下载.docx
《单片机设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机设计报告Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
1.3.2数码管显示电路6
1.3.3按键电路6
1.4流程图7
二、仿真设计8
2.1LED数码管显示8
2.2按键识别10
2.3蜂鸣器部分11
2.4电子万年历的仿真11
3.1器件清单12
3.2焊接的实物图及描述12
3.3焊接中遇到的问题13
四、单片机程序的下载13
五、测试结果分析及电路的不足14
5.1测试结果分析14
5.2测试结论14
5.3电路的不足与改进15
六、设计总结15
参考文献16
一、
设计概述
1.1设计目标
在学习了单片机课程后,加深了我们对理论知识的理解,学习理论知识在实际中的应用,培养动手能力和解决实际问题的经验。
学会STC89C51的引脚及其功能,熟悉protues软件仿真和keil软件调试程序;
通过实验提高对单片机的认识;
通过实验提高焊接、布局、电路检查能力;
通过实验提高软件调试能力;
进一步熟悉和掌握单片机的结构和工作原理;
通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法;
通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术;
通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发单片机应用系统的全过程。
1.2设计要求
本设计是电子万年历。
具备三个功能:
能显示年月日及时分秒信息,具有可调整日期和时间和定时功能。
我选用的是单片机(80C52)来实现电子万年历的功能。
该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒信息,且精确度经调试一天的误差在2S内。
该电子万年历使用12MHZ晶振与单片机80C52相连接,通过软件编程的方法实现了以24小时为一个周期同时显示小时,分钟和秒的要求。
利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。
同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
1.3功能模块
1.3.1单片机电路
1>STC89C51系列单片机的引脚及其功能介绍:
图1-1DIP封装图
STC89C51系列单片机的DIP封装引脚图。
其中有2条为电源引脚,2条外接晶体引脚,4条控制引脚,32条I/O引脚。
下面分别介绍这些引脚的功能。
1.电源引脚
Vss(20脚):
接地,0V参考点。
Vcc(40脚):
电源,提供掉电、空闲、正常工作电压。
2.外接晶体引脚
XTAL1(19脚):
接外部晶体的一端,振荡反向放大器的输入端和内部时钟电路输入端。
XTAL2(18脚):
接外部晶体的另一端,振荡反向放大器的输出端。
3.控制引脚
RST(9脚):
复位端。
当晶体在运行时,只要此引脚上出现2个机器周期高电平即可复位,内部有扩散电阻连接到Vss,仅需要外接一个电容到Vcc即可实现上电复位。
ALE(30脚):
地址锁存使能。
在访问外部存储器时,输出脉冲锁存地址的低字节,在正常情况下,ALE输出信号恒定为1/6振荡频率。
并可用作外部时钟或定时,注意每次访问外部数据时,一个ALE脉冲将被忽略。
PSEN(29脚):
程序存储使能。
读外部程序存储。
当从外部读取程序时,PSEN每个机器周期被激活两次,在访问外部数据存储器时PSEN无效,访问内部程序存储器时PSEN无效。
EA/Vpp(31脚):
外部寻址使能/编程电压。
在访问整个外部程序存储器EA必须外部置低。
如果EA为高时,将执行内部程序。
当RST释放后EA脚的值被锁存,任何时序的改变都将无效。
该引脚在对FLASH编程时用于输入编程电压(Vpp)。
4.输入输出引脚
P0口(P0.0—P0.7,32—39脚):
是双向8位三态I/O口。
可向其写入1使其状态为悬浮,用作高阻输入。
P0口也可以在访问外部程序存储器时作地址的低字节,在访问外部数据存储器时用作数据总线,此时通过内部强上拉传送1。
P1口(P1.0—P1.7,1—8脚):
是带内部上拉的双向I/O口。
向P1口写入1时,P1口被内部上拉为高电平,可用作输入口;
当作为输入脚时,被外部拉低的P1口会因为内部上拉而输出电流。
P2口(P2.0—P2.7,21—28脚):
向P2口写入1时,P2口被内部上拉为高电平,可用作输入口;
当作为输入脚时,被外部拉低的P2口会因为内部上拉而输出电流。
在访问外部程序存储器和外部数据时分别作为地址高位字节和16位地址,此时通过内部强上拉传送1。
当使用8位寻址方式访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容。
P3口(P3.0—P3.7,10—17脚):
向P3口
写入1时,P3口被内部上拉为高电平,可用作输入口;
当作为输入脚时,被外部拉低的P3口会因为内部上拉而输出电流。
表1.1P3口的第二功能
口线
第二功能
类型
名称
P3.0
RxD
I
串行输入口
P3.1
TxD
O
串行输出口
P3.2
INT0
外部中断0
P3.3
INT1
外部中断1
P3.4
T0
定时器0外部中断
P3.5
T1
定时器1外部中断
P3.6
WR
外部数存储器写
P3.7
RD
外部数存储器读
2>时钟电路
时钟系统是单片机的核心,在本次设计中,包括中央处理器在内的所有单片
机都是时钟系统所提供的节拍工作的。
时钟电路由外界谐振器的时钟振荡器、时钟发生器以及关断控制信号等组成。
时钟振荡器是单片机的振荡源,时钟发生器对振荡器的输出信号进行二分频。
CPU的时钟振荡信号有两个来源:
一是采用内部振荡器,此时需要在XTAL1和XTAL2脚之间连接一只频率范围为0-33MHZ的晶体振荡或陶瓷振荡器即两只30uf的电容。
二是采用外部振荡,此时应将外部振荡器的输出信号接至XTAL1脚,XTAL2脚浮空。
利用单片机内部的定时功能来实现时钟的走时,通过编程实现每50ms产生一次中断,中断20次后,秒单元加1,秒单元加到60时,跳回0再继续加,同时分单元加1。
以此类推,实现秒、分、时、年的走时。
本次设计中采用的是内部振荡器,频率为12MHZ的晶体振荡器及30uf的瓷片电容。
如下图所示:
图1.2时钟电路
3>复位电路
复位是指在规定的条件下,单片机自动将CPU及与程序运行相关的主要功能部件、I/O口等设置为确定初始状态的过程。
如果电路参数不符合规定的条件或干扰导致单片机不能正确的复位,系统将无法进行正常的工作。
因此,复位电路除了要符合厂家规定的参数外,还要滤除可能的干扰。
AT89C51单片机内部有一个由施密特触发器等组成的复位电路。
复位信号是从其第9脚,即RST脚输入的。
AT89C51单片机规定,当其处于正常工作状态,且振荡器稳定工作后,在RST端有从高电平到低电平,且高电平时间大于两个机器周期的复位信号时,CPU将完成对系统的复位。
有两点需要主要:
一、复位信号是高电平有效,二、高电平的保持时间必须大于两个机器周期,可见高电平的保持时间与振荡频率有关。
本次设计中采用上电复位电路,上电复位是指在系统上电时,RST端自动产生复位所需要的信号将单片机复位。
本次上电复位电路如图所示。
上电时,RST端高电平的维持时间取决于R和C的值。
钥匙单片机可靠的复位,设计中使其维持的时间足够长。
图1.3复位电路
1.3.2数码管显示电路
采用动态扫描方式:
这种工作方式是分时轮流选通数码管的公共端,使得各个数码管轮流导通。
当所有数码管轮流显示一遍以后,软件控制循环,使每位显示器分时显示。
这种方式不但能提高数码管的发光效率,并且由于各个数码管的字段线是并联使用的,因而大大简化了硬件电路。
本次设计中的具体连接如下图所示:
图1.4显示电路
该电路中采用了8段数码管显示年月日时分秒及定时信息。
数码管采用共阴极接法,把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通发光,而输入低电平的则不发光。
单片机的P2口控制选通哪段数码管,例如当P2=0x7f时,表示选通第一个数码管。
它导通并显示相应内容。
P0口用于控制选通的数码管上显示的内容,由于该数码管由7个发光二极管组成,也称为七段LED显示器。
通过7个发光二极管亮暗的不同组合,可以显示0-9的数字,另外还有一个dp端控制是否显示小数点。
其中用到了8个上拉电阻作动态扫描的驱动。
1.3.3按键电路
采用独立式按键电路:
每个键独立占有一个I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式,但当按键较多时占用单片机的I/O数目较多,本系统只需要四个键。
如果按键采用中断的话,可以使单片机工作更加灵活、效率更高。
该系统用到了一个定时器T0中断和外部INT0中断。
电路图如下所示:
图1.5按键电路
该电路中由程序中的定义的变量:
sbitp1_0=P1^0;
sbitp1_1=P1^1;
sbitp1_2=P1^2;
sbitp1_3=P1^3;
sbitp1_4=P1^4,可知,四个按键分别和单片机P1口连接。
通过程序分析,可以知道它们分别其的作用如下:
按键1是使数码管切换显示年月日时分秒的,按键2起修改时间状态及定时的作用,按键3是使数码管移位修改,按键4是在按键2起作用的前提下,使年月日时分秒增加。
由于要求该万年历具有定时功能,因此在设计电路时用到了一个蜂鸣器电路,如上所示。
当通过按键定时时间到,蜂鸣器就响了。
其中用了一个三极管其音频放大作用。
按键时采用中断方式,电路采用的是外部中断INT0。
用到了一个74LS21芯片,它为双四输入与门。
其逻辑图如下所示:
图1.674LS21芯片逻辑电路图
四个按键作为该芯片的输入信号,输出信号传送到INT0上,从而产生按键的外部中断,转而相应中断服务程序,实现相应的功能。
1.4流程图
以上通过对该设计的模块话分析,可以画出相应的流程图。
通过流程图可以清晰地看出该系统所要实现的功能,及个部件所起到的作用。
流程图如下图所示:
图1-7总流程图
二、仿真设计
2.1LED数码管显示
本设计主要功能的实现是通过数码管的显示来表现出来的,仿真事,数码管上显示的是程序中初始设置的时分秒信息:
hour=23;
minute=59;
second=0。
仿真图如下所示:
图2-1初始显示的时分秒
当按下按键1时,显示模式变为显示年月日,由初始设置的年月日信息:
year=2010;
month=5;
day=20,可得出数码管上显示的内容。
图2-2键1按一下显示初始年月日
当按下按键2时,比如显示模式是年月日,则表示可以修改年月日,此时按按键3一下,则LEN数码管移位一下,由修改年信息变为修改月信息,再按按键3一下,由修改月信息变为修改日信息,按按键4一下,则可以使年或月或日信息加1。
但是,年、月、日不能无限制地增加,程序里设计了如下一些代码:
{for(i=0;
i<
10;
i++);
if(p1_2==0)//移位;
{if(yw%3==0)year++;
//调整对应位的数值;
if(yw%3==1)month++;
if(yw%3==2)day++;
}
if(year>
=2050)year=0;
//年份小于2500;
if(month>
12)month=1;
//月份小于12;
switch(month)//日期限制
{
case4:
case6:
case9:
case11:
if(day>
30)day=1;
break;
//4,6,9,11月30天;
case2:
{if(leap(year))//闰年2月29天;
while(day>
29)day=1;
else
28)day=1;
//非闰年28天;
}break;
default:
31)day=1;
//1,3,5,7,8,10,12月31天;
}
}
说明年最多能加到2500年,加到则自动清零。
月加到12时,再循环从1月开始加。
日进行修改时,涉及的知识就比较多了,此时要判断此时数码管上显示的年份是不是闰年,若是则该年2月份为29天,若不是则为28天。
若为闰年,则为1、3、5、7、8、10、12月时,日加到31时,再循环从1开始加;
为4、6、9、11月时,日加到30时,循环从1开始加;
为2月时,加到29时,循环从1开始加。
若为非闰年,则为2月时,加到28时,循环从1开始加;
其余月份与闰年的相同。
由于修改日期和时间后,数码管上显示的内容是变化的,所以仅举一例来表示该显示器上的内容发生了变化。
以下是通过按键修改过后的显示图:
图2-3修改后显示的日期信息
图2.4修改后显示的时间信息
2.2按键识别
本设计中用到了四个按键,它们的作用也在前面介绍过了。
它们起到什么样的作用,主要是通过代码来实现的。
程序中定义了mode,td,yw三个状态变量,它们的改变是通过按键来改变的。
if(p1_3==0){mode++;
td=0;
}
if(p1_1==0)yw++;
//移位;
if(p1_0==0)td++;
//修改调整时间状态;
if(mode%2==0)//调整日期;
{if(td%2==1)
{for(i=0;
……
以上一段程序是按键实现的调时功能的代码,本设计还要求具有定时功能,相应的代码段如下:
if(td%3==1)//调整时间;
{ET1=0;
//时钟中断;
for(i=0;
if(p1_2==0)
{
if(yw%3==0)hour++;
if(yw%3==1)minute++;
if(yw%3==2)second++;
}
if(hour>
23)hour=0;
if(minute>
59)minute=0;
if(second>
59)second=0;
else//定时状态;
{ET1=1;
if(td%3==2)
{for(i=0;
if(p1_2==0)//定时;
{if(yw%3==0)h++;
if(yw%3==1)m++;
if(yw%3==2)s++;
if(h>
23)h=0;
if(m>
59)m=0;
if(s>
59)s=0;
}
通过分析代码,可以更清楚地了解个按键的功能及它们是如何实现的。
由于按键是自己操作的,不能通过截图演示出来,所以次部分不再截图。
2.3蜂鸣器部分
通过按键2和4定时,当定时时间到,蜂鸣器响。
主要通过一下代码控制:
voidfengming()//蜂鸣器;
{
intm,n;
for(m=0;
m<
=100;
m++)
{p1_4=!
p1_4;
for(n=0;
n<
380;
n++);
电路设计中主要用了一个喇叭来仿真,通过实际操作,比如定时5S,5S到,则喇叭响一段时间,后停止。
程序里的两段延时代码主要是来控制喇叭响多长时间的。
2.4电子万年历的仿真
以上是分模块介绍万年历各个组成部分的仿真,完整的仿真电路图如下所示:
图2-5万年历仿真电路图
三、实物焊接
3.1器件清单
主控器AT89C51一片、四输入与门74LS21芯片一片、芯片底座两个、30uf电容两个、10uf、50v的电容一个、12MHZ时钟晶体一片、500欧姆电阻八个、10千欧姆电阻一个、4位一体共阴极数码管两段、三极管一个、按钮四个、喇叭一个、万能电路板一个、电源底座一个、电源一个、导线若干。
3.2焊接的实物图及描述
通过分析仿真软件里面的电路图,以及一个星期的排线、连接、焊接操作,我们小组成功地作出了电子实物图。
图3-1万年历电子实物图
本设计实物图是我们小组焊接成功并且能够实现要求的功能后照的图片,大致布局就是这样子的。
根据仿真软件protues里画出的电路图,我们进行了合理的器件布局,总体上感觉还比较合理,但是由于背面的连线太多,看起来比较乱,所以未对背面拍照。
所有器件都在电路板上布局。
上面是两段LED数码管,用于显示时间和日期的。
下面是八个上拉电阻,是作LED数码管显示时驱动显示的。
左边是一个喇叭,用于检测定时时间到。
中间的是单片机AT89C51芯片,是整个电路的核心部件,其作用上面已作了详细的分析。
下面的一个是三极管,用作音频放大。
一个晶振和两个电容,还有一个电阻和电容,它们组合起来,用来构成单片机的最小系统。
最下面的是一个电源底座,电源线插入,用来给该电路通电。
接着是一个74LS21四输入与门,与外部中断INT0相连接。
最后是四个按键,它们的功能前面也介绍清楚了。
3.3焊接中遇到的问题
在做焊接前,我们小组三个人进行了明确的分工。
一名同学负责看电路、排线,一名同学负责焊接电路,最后一个负责检查电路。
焊接中,我们遇到了很多问题。
首先,看电路图然后找准引脚将两个脚焊接起来。
在焊接的过程中,会出现虚焊、漏焊或者是焊接过程中将两个引脚连接起来,造成短路现象。
我们组遇到最多的问题就是不能一次焊接成功,其中造成短路现象的做多,不得不设法将焊接好的引脚拆除,重新焊接。
由于引脚太多,有时由于失误就错误地焊接了两个引脚,这给我们引起了很多麻烦。
其次,掌握好的焊接技术也是非常重要的。
虽然,这次我没有亲自焊接,都是我们那个组员动手焊接的。
但由于不小心,还是会出现烫手事故的。
正是经历了不少的挫折,我们才成功地将电子万年历实物焊接好了,并且各项功都能按预期结果实现。
四、单片机程序的下载
当完成在电路仿真和焊接好实物后,还需要把在keil软件中编译链接成的十六进制文件下载到单片机的程序存储器里。
单片机程序的下载有以下几种方式:
用商用编程器下载;
利用编程器编程;
ISP编程。
本次设计中,我们采用的主要是ISP编程法将.hex文件下载到AT89C51芯片中。
所谓ISP是指系统编程,只需3根线来连接上位机和单片机即可实现对单片机的编程。
STC89C51系列单片机片内程序存储器采用先进的FLASH存储器结构,比EPROM存储器更好,它不仅可读,而且可以用软件快速地擦除和写入,从而引出了在系统编程ISP技术。
把单片机与主机连接好以后,就可以使用ISP下载软件进行程序的写入了。
STC_ISP是专门针对STC公司支持ISP编程的单片机进行ISP写入的软件。
该软件的界面如下图所示:
图4-1STC下载软件
使用STC软件下载程序时,一般遵循以下步骤:
1.选择单片机型号。
这里选择STC89C51系列。
2.选择串口。
一般选择COM1.
3.选择波特率。
根据需要选择通信所需的波特率。
4.可以根据需要选择速度。
5.选择要下载的文件。
点击Openfile,选择想要下载的程序文件。
6.将选中的.hex文件载入STC缓冲区。
7.在STC下载软件的右侧文件缓冲区中有相应的十六进制的数据生成,此时点击如上图所示的“dnwmload/下载”按钮就可以把程序下载到单片机中。
注意:
在下载程序时,单片机应该处于掉电状态,当“dnwmload/下载”下面的对话框中提示:
“请给MCU上电”,此时方可通电,否则下载程序会失败。
在掌握了单片机ISP编程的方法的基础上,就就可以把编制好的程序下载到
单片机中进行实际应用了。
本设计中,由于我们是在实验室进行焊接的,电子万年历焊接好后,是其他同学帮忙把.hex文件下载到单片机芯片里的,所以没有亲自操作一下。
不过,只要按照操作流程一步一步进行,一定能够成功的。
五、测试结果分析及电路的不足
5.1测试结果分析
(1)在测试中遇到LED数码管不显示,使用万用表对电路进行测试,观察是否存在漏焊、虚焊,或者元件损害等情况。
(2)数码管显示不正常,还有亮度不够,使用万用表对电路测试,查看是否存在短路状况,然后查看下载的程序是否正确无误,对程序进行认真修改。
5.2测试结论
经过多次的测试与分析,可以对电路的原理和功能更加熟悉,同时提高了设计能力和对电路的分析能力。
同时在软件的编程方面得到更高的提高,编程能力得到加强。
自己所学的单片机的知识也得到了很大的提高与巩固。
5.3电路的不足与改进
本次设计的万年历所要求的功能大体上都能实现,但还是一个缺陷,就是修改日期和时间时,只能加,而不能减。
这就大大降低了该设计的应用性,因此在实际应用中,我们