资源描述
大连交通大学信息工程学院2010届自动化专业单片机实训报告
前 言
现今,高度精确的计时器为我们大部分电子仪器校准时间。几乎所有的电脑都有一个石英钟为整部电脑的运作校时,而从全球定位系统(GPS,Global Position System)卫星传送下来的时间讯号,不但为高精密度的航行仪器校时,这项功能还遍及手机、即时股市交易与全国电力配置网。这些以时间为基础的科技事物整合得完美无缺,已成为我们常生活中重要的一环大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,不容我们忽视高精度的计时工具,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器或液晶显示屏代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好,减少了时间的误差,是以人性化设计科技来解决生活实际问题。
随着电子技术的迅速发展,特别是随大规模集成电路出现,给揉生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。数字电子钟的出现给人们的生活带来诸多方便。数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
1、AT89C51单片机简介
1.1 AT89C51的主要性能参数
1、与MCS-51产品指令系统完全兼容
2、4k 字节可重擦写FLASH闪速存储器
3、1000次擦写周期
4、全静态操作:0Hz—24MHz
5、三级加密程序存储器
6、128×8字节内部RAM
7、32个可编程I/O口线
8、2个16位定时/计数器
9、6个中断源
10、可编程串行URAR通道
11、低功耗空闲和掉电模式
1.2 AT89C51提供以下标准功能
4k 字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。
1.3 AT89C51各引脚功能介绍
图1-1 AT89C51的引脚图
管脚说明:
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.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2、Proteus ISIS的介绍
Proteus具有和其他EDA工具一样的原理图编辑、印刷电路板(PCB)设计及电路仿真功能,最大的特色是其电路仿真的交互化和可视化,如图2-1所示。通过Proteus软件的VSM(虚拟仿真模式),用户可以对模拟电路、数字电路、模数混合电路、单片机及外围元器件等电子线路进行系统仿真。Proteus软件由ISIS和ARES两部分构成,其中ISIS是一款便捷的电子系统原理设计和仿真平台软件,ARES是一款高级的PCB布线编辑软件。
Proteus ISIS是一种操作简便而又功能强大的原理图编辑工具,它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件的特点有:
(1) 实现了单片机仿真和SPICE电路仿真的结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真等功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2) 支持主流单片机系统的仿真。目前支持的单片机类型有68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(3) 提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。
(4) 具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的电路设计和仿真软件,功能极其强大。
3、系统设计
3.1 电路组成及工作原理
本文数字时钟设计原理主要利用AT89C51单片机,由单片机的P2口控制数码管的位显示, P0口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入电源电路,外部电源系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的总电压。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
3.2 单片机系统
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小而且完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
本文采用的单片机为AT89C51,AT89C51是一种低功耗、高性能的片内含有4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。它的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.3 显示部分
单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED;
目前在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
3.4 LED显示结构与原理
单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!这种显示器有共阴极和共阳极两种!发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器,一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段) a…g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。在这里我采用的是共阴极连接。
共阴极7 段LED显示字型编码表
显示字符 共阴极段选码 显示字符 共阴极段选码
0 3FH 5 6DH
1 06H 6 7DH
2 5BH 7 07H
3 4FH 8 7FH
4 66H 9 6FH
共阴极7 段LED显示字型带小数点编码表
显示字符 共阴极段选码 显示字符 共阴极段选码
0 BFH 5 EDH
1 86H 6 FDH
2 D6H 7 87H
3 CFH 8 FFH
4 E6H 9 EFH
3.5 LED显示器接口及显示方式
LED显示器有静态显示方式和动态显示方式两种。静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。LED显示器工作于静态显示方式时,各位的共阴极接地;若为共阳极则接+5V电源。每位的段选端分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。
正因为如此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。因此,在显示位数较多的情况下,一般都采用动态显示方式。
由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相 同的字符。要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间只使某一位显示字符。在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。
在6位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个6位I/O口控制。而共阴极公共端分别由相应的I/O口线控制,实现各位的分时选通。
段选码,位选码每送入一次后延时1MS,因人的视觉暂留时间为0.1S(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描方式。
3.6 独立式按键结构
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。 独立式按键电路配置灵活,软件结构简单。
3.7 独立式按键的软件结构
独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。
3.8 控制系统流程图
图2-1 流程图
4、谢辞
通过这次课程设计,本人不仅加强了自己对所掌握的知识的巩固和进一步理解,同时对自己设计进行了一次全面的检验和提升。设计过程中丰富了自己的知识,积累了宝贵的设计经验,获得了一定的设计和能力,能承担一些的设计工作;同时也于此,发现自己还存在不少的知识缺陷,懂得自己要想成为一个杰出的人,我就应该不断地努力学习知识,充实自己的头脑。
本次课程设计得到魏庆涛老师的悉心指导、不啬赐教,在百忙中抽出宝贵的时间对我提出的问题进行耐心的解答,并提出宝贵的意见,使我收获颇多,魏庆涛老师敏捷的思维、精深的学识、严谨的治学态度是我学习的楷模,他对事业孜孜不倦的追求以及志在必得的气魄也都铭刻于我的脑海,催我不断前进!最后得使我很顺利的完成此次课程设计,在此本人表示衷心的感谢!
5、专业课程实践训练总结
这次专业课程设计总体来说还算是成功的,但我也发现了自己许多的错漏和不足之处。最简单的程序没写好就想着去写复杂的程序,做事还是缺乏耐心和信心,当有时遇到问题时,总是无从下手,总想让老师解决问题,对于课本上的知识不能很好的组织到一起,不会灵活的运用,总是对书本知识有着模糊的记忆,不能掌握扎实。在编写个功能的程序时,特别是后来增添更复杂的程序时,明显地显示出自己的不足。通过本次的实训,让我了解到了自己的不足,需要更好的掌握本门课程,书本上的知识是基础,想要更好的掌握就要多动手实践与动脑思考,这样才会达到事半功倍的效果。
编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习汇编语言的一次实践作业,自己进步的证明。
通过这次课程设计,使我对汇编语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对汇编语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对汇编语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习汇编语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
6、参考文献
[1] 丁辉、姚庆文.实用单片机电子钟的设计. 2003年合订本(下)
[2] 于海生.微型计算机控制技术[M] .清华大学出版社.1999.6
[3] 孙涵芳.MCS-51系列单片机原理及应用[M] .北京航空航天大学出版 社.1996.4
[4] 黄正谨.综合电子设计与实践[M] .东南大学出版社.2002.3
[5] 杨欣等.电子设计从零开始[M] .清华大学出版社.2005.10
[6] 谢嘉奎.电子线路[M] .高等教育出版社.2003.2
[7] 夏路易,石宗义.电路原理图与电路设计教程Protel 99SE[M].北京希望电子出版社.2002
附录
附录1 控制程序
main:
mov 30h,#0 ;高位
mov 31h,#10
mov 32h,#0
mov 33h,#10
mov 34h,#0
mov 35h,#0;低位
mov r5,#20
t10ms:mov tmod,#01h
mov th0,#3ch
mov tl0,#0b0h
setb tr0
loop:mov r0,#30h
mov r1,#40h
mov r3,#6
loop1:mov a,@r0
mov dptr,#tab
movc a,@a+dptr
mov @r1,a
inc r1
inc r0
djnz r3,loop1
disp: mov r1,#40h
mov r2,#6
mov r3,#01h
disp1:mov a,r3
mov p2,a
mov a,@r1
mov p0,a
acall delay
mov a,r3
rl a
mov r3,a
inc r1
djnz r2,disp1
JB TF0,jiaa
jnb p1.0,startt ;启动
jnb p1.1,tiaoo;停止/调位秒
jnb p1.2,yiwei1
ajmp disp
jiaa:ajmp jia
tiaoo:ajmp tiao
startt:ajmp start
yiwei1: call delay1
loop2:mov r0,#32h
mov r1,#42h
mov r3,#2
loop12:mov a,@r0
mov dptr,#tab
movc a,@a+dptr
mov @r1,a
inc r1
inc r0
djnz r3,loop12
disp2: mov r1,#42h
mov r2,#2
mov r3,#04h
disp12:mov a,r3
mov p2,a
mov a,@r1
mov p0,a
acall delay11
mov a,r3
rl a
mov r3,a
inc r1
djnz r2,disp12
jnb p1.0,startt ;启动
jnb p1.1,tiaof;停止/调位
jnb p1.2,yiwei2 ;时调整
ajmp disp2
tiao:clr tr0
call delay1
mov a,35h
inc 35h
cjne a,#9,loops
mov 35h,#0
mov a,34h
inc 34h
cjne a,#5,loops
mov 34h,#0
mov 35h,#0
loops: ajmp loop
yiwei1m:ajmp yiwei1 ;分调整
/*yiwei11:call delay1
jnb p1.1,tiaoxx
jnb p1.2,yiwei2
ajmp yiwei1
tiaoxx: ajmp tiaoxx*/
yiwei2:call delay1
loop22: mov r0,#30h
mov r1,#40h
mov r3,#2
loop122:mov a,@r0
mov dptr,#tab
movc a,@a+dptr
mov @r1,a
inc r1
inc r0
djnz r3,loop122
disp22:mov r1,#40h
mov r2,#2
mov r3,#01h
disp122:mov a,r3
mov p2,a
mov a,@r1
mov p0,a
acall delay11
mov a,r3
rl a
mov r3,a
inc r1
djnz r2,disp122
jnb p1.0,start ;启动
jnb p1.1,tiaox;停止/调位
jnb p1.2,loopp
ajmp disp22
loopp:call delay1
ajmp loop
tiaof: clr tr0
call delay1
mov a,33h
inc 33h
cjne a,#19,tiaof1 ;9.编码
mov 33h,#10
mov a,32h
inc 32h
cjne a,#5,tiaof1
mov 32h,#0
mov 33h,#0
tiaof1: ajmp loop2
yiwei2m:ajmp yiwei2
tiaox: clr tr0
call delay1
mov a,31h
inc 31h
cjne a,#12,tiaox2
mov a,30h
cjne a,#1,tiaox2
mov 30h,#1
mov 31h,#0
ajmp tiaox1
tiaox2:cjne a,#19,tiaox1
mov 31h,#10
mov a,30h
inc 30h
cjne a,#1,tiaox1
mov 30h,#0
mov 31h,#0
tiaox1: ajmp loop22
stop:clr tr0
call delay1
jnb p1.1,tiaooo;调整
jnb p1.0,start
ajmp stop
tiaooo:ajmp tiao
stop1:ajmp disp
start: call delay1
setb tr0
ajmp t10ms
jia:clr tf0
djnz r5,t10ms2
mov r5,#10
mov a,35h
inc 35h
cjne a,#9,t10ms2
ajmp jias
t10ms2:ajmp t10ms
jias: mov a,34h
mov 35h,#0
inc 34h
cjne a,#5,t10ms2;
jias1:mov 35h,#0
mov 34h,#0
mov a,33h
inc 33h
cjne a,#19,t10ms2
ajmp jiaf
ajmp disp
jiaf:mov 33h,#10
mov a,32h
inc 32h
cjne a,#5,t10ms2
mov 35h,#0
mov 34h,#0
mov 33h,#10
mov 32h,#0
mov a,31h
inc 31h
cjne a,#11,t12x ;有问题
mov a,30h
cjne a,#1,t12x1
ajmp main
t12x: cjne a,#19,t10ms2
mov 31h,#10
inc 30h
t12x1:ajmp t10ms
delay:mov r6,#100
d1:mov r7,#2
d2:djnz r7,d2
djnz r6,d1
ret
delay11:mov r6,#100
d111:mov r7,#2
d222:djnz r7,d222
djnz r6,d111
ret
delay1:mov r1,#255 ;键盘消抖时间
dd1:mov r2,#200
dd2:mov r3,#1
dd3:djnz r3,dd3
djnz r2,dd2
djnz r1,dd1
ret
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh
end
附录2 控制系统电路图
21
展开阅读全文