《单片机原理及应用》课程设计报告Word文件下载.docx
《《单片机原理及应用》课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》课程设计报告Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
11
附录·
12
第1章绪论
1.1课程设计目的:
通过《单片机原理与应用》课程设计,掌握单片机及其扩展系统设计的方法和设计原则及相应的硬件调试的方法。
进一步加深单片机及其扩展系统设计和应用的理解。
1.2课程设计内容:
电子计时器综合系统设计
①有6位数码管显示,能按照分秒进制显示时间;
②能正确手动复位;
③有上电指示灯;
1.3课程设计要求:
1)独立设计原理图及相应的硬件电路。
2)针对选择的设计题目,设计系统软件。
软件要做到:
操作方便,实用性强,稳定可靠。
3)设计说明书格式规范,层次合理,重点突出。
并附上设计原理图及相应的源程序。
1.4电子计时器的简单介绍
该电子计时器由AT89C51,BUTTON,八段数码管等构成,采用晶振电路作为驱动电路,有延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
有两个按键分别控制小时和分钟,当按下控制分钟的按键时,分钟加一,同理按控制小时的按键时,小时加一。
第2章控制系统的硬件设计
2.1单片机型号的选择
通过对多种单片机性能的分析,最终认为AT89C51时最理想的电子时钟开发芯片。
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
2.2AT89C51单片机介绍
图1AT89C51
VCC:
电源
GND:
接地
P0口:
P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定能够以为数据/地址的第八位。
在FLASH编程时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部上拉为低电平时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写1时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的原因。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高8位。
在给出地址1时,它利用内部上拉优势,当对外部8位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入1时,它们被内部上拉位高电平,并用作输入。
作为输入,由于外部上拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,次引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如果想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置为无效。
/PSEN:
外部程序存储器的读选通信号,低电平有效。
在由外部程序存储器取值期间,每个机器两次/PSEN有效,但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
/EA为该引脚的第一功能,即外部程序存储器访问控制允许端。
当/EA为高电平时,在PC值不超过0FFFFH时,单片机读片内程序存储器(4KB)中的程序;
当PC值超出时,将自动转向片外60KB程序存储器空间中的程序。
当/EA引脚为低电平时,只读取外部程序存储器中的内容。
VPP为该引脚的第二功能,即在对片内FLASH进行编程时,VPP引脚接入编程电压。
2.3振荡电路
本次设计采用内部振荡电路,瓷片电容采用33pf,晶振采用12MHZ。
电路连接如图2所示
图2震荡电路
2.4复位电路
单片机系统的复位电路在这里采用的是上电复位电路的形式,其中电阻R1采用10KΩ的阻值,电容采用电容值为100u的电容。
电路连接如图4所示
图3复位电路
2.5键盘电路
图4键盘电路
2.6数码管显示工作原理
数码管是一个把多个LED显示段集成在一起的显示设备。
有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED显示段的阴极接在一起,即为公共商。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便设计的,称为A、B、C、D、E、F、G、DP,其中DP是小数点位段。
而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。
即,所有的A段都会连在一起,其它的段也是如此,这是最实际的用法。
数码管显示方法可分为静态显示和动态显示两种。
静态显示就是数码管的8段输入及公共端电平一直有效。
动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;
每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,早同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
2.7整个电路原理图
图6电路原理图
第3章控制系统的软件设计
3.1程序流程图
本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。
主程序流程图:
3.2程序设计
见附录
第4章软件仿真
4.1Proteus软件介绍
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件,是目前最好的模拟单片机外围器件的工具。
可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD、RAM、ROM、键盘、马达、LED、AD/DA,部分SPI器件,部分IIC器件等)。
Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围设备协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件PCB设计软件和虚拟模型仿真软件三合一的设计平台。
Proteus具有原理布图、PCB自动或人工布线、SPICE电路仿真的功能。
4.2仿真结果
图7时钟仿真图
图8秒表仿真结果
第5章心得体会
课程设计是对课程的实践与总结,只要做了就会有收获。
在这次设计中我加深了程序的阅读能力、程序的灵活调用、单片机的设计制作调试方法。
为了能顺利的完成这次的课程设计我找了很多资料也因此知道了不少课本上没深入介绍的东西,提高了我的思维空间,拓宽了我的知识面,加深了对单片机课程的兴趣。
最主要的是加强了动手的能力。
遇到问题是先思考,解决不了再查资料,实在弄不出来就问老师和同学们,毕竟不耻下问是中华名族的优良美德。
只有如此才能不断进步。
通过这次课程设计我了解到学好一门汇编语言,最根本的应该是了解所能接触到的程序中最关键的是哪些,实际的应用编写更是非常重要,所以我们一定要自己动手试一下,尝试编写程序。
因为做一个旁观者事不能够学到东西的。
此外在此次设计中我对此次设计的内容有一下感触,第一,由于此次设计的过程中设计秒表和时钟的显示,即在一个数码管上显示两种变量,必须确定以下两点:
1、必须仔细的核对每一个变量的名字,我曾经在核对变量的名字上面花了很大的力气,由于变量的名字错了,软件编译时很少能检查出,因此仿真时往往不容易发现。
2、要每个子程序的调试,这样才能确认某一个部分是正确的,这样才有继续往下做的信心和勇气。
参考文献
1.《单片机原理及应用》/张毅刚彭喜元彭宇主编.高等教育出版社,2010年5月第二版
2.《单片机原理及应用》/张毅刚.高等教育出版社,2004
3.《MCS-51系列单片机实用接口技术》/李华主编.北京:
北京航空航天大学出版社,1993.8
4.《单片机C语言轻松入门》周坚编北京航空航天大学出版社
5.《单片机人机接口实例》公茂法编著,北京航空航天大学出版社
6.《单片机应用系统设计与实践》陈景初,北京:
北京航空航天大学出版社
附录
DISBEGEQU30H;
显示单元首地址
TIMCONEQU2FH;
存放报时次数
ORG0000H;
程序开始
LJMPMAIN
ORG0003H;
关外中断0
RETI
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTTO执行
ORG0013H;
关中断1
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳至INTT1执行
ORG0023H;
关串行中断
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
I_TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H
DLY1M:
MOVR6,#14H;
1毫秒延时
DL_LOOP:
MOVR7,#19H
DL_LOOP1:
DJNZR7,DL_LOOP1
DJNZR6,DL_LOOP
RET
DLY20M:
LCALLD_II_PLAY
LCALLD_II_PLAY
DL_LOOPS:
LCALLDL05S
LCALLDL05S
DL05S:
MOVR3,#20H;
8毫秒*32=0.196秒
DL05S1:
LCALLD_II_PLAY
DJNZR3,DL05S1
CTIME:
MOVA,#10H
MOVB,79H
MULAB
ADDA,78H
MOVTIMCON,A
CLOOP:
LCALLDLY20M
LCALLDL_LOOPS
LCALLDL_LOOPS
DJNZTIMCON,CLOOP
CLR08H;
清整点报时标志
AJMPMLOOP1
MAIN:
MOVR0,#00H;
清00H-7FH内存单元
MOVR7,#80H;
MLOOP:
MOV@R0,#00H;
INCR0;
DJNZR7,MLOOP;
MOV20H,#00H;
清20H(标志用)
MOV7AH,#0AH;
放入"
熄灭符"
数据
MOVTMOD,#11H;
设T0、T1为16位定时器
MOVTL0,#0B0H;
50MS定时初值(T0计时用)
MOVTH0,#3CH;
50MS定时初值
MOVTL1,#0B0H;
50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;
SETBEA;
总中断开放
SETBET0;
允许T0中断
SETBTR0;
开启T0定时器
MOVR4,#14H;
1秒定时用计数值(50MS×
20)
MOVDISBEG,#70H;
显示单元为70-75H
MLOOP1:
LCALLD_II_PLAY;
调用显示子程序
JNBP1.0,T_SETSC
JNBP1.1,DLY5;
秒表功能,P1.1按键调时时作减1加
JNBP1.2,FUNBT;
秒表STOP,PUSE,CLR
JB08H,CTIME
AJMPMLOOP1;
P1.0口为1时跳回MLOOP1
FUNBT:
LJMPDLY6
TSET:
LCALLDLY20M
JBP1.3,MLOOP1;
TS_LOOP:
JNBP1.3,TS_LOOP;
等待键释放
MINCHG:
SETBEA
JNBP1.2,DLY1;
分加1
JNBP1.0,DLY3;
分减1
JNBP1.3,DLY;
进入时调整
AJMPMINCHG
CLRBELL:
AJMPMLOOP1
DLY:
LCALLDLY20M;
消抖
JBP1.3,MINCHG
T_SETSC:
LJMPR_SETTIM;
转到时间调整程序R_SETTIM
DLY1:
JBP1.2,MINCHG
DLY2:
LCALLD_II_PLAY;
等键释放
JNBP1.2,DLY2
CLREA
CJNEA,#60H,ADD_M;
ADD_M:
JCMINCHG;
小于60分时返回
ACALLCLR_H;
大于或等于60分时分计时单元清0
AJMPMINCHG
DLY3:
JBP1.0,MINCHG
DLY4:
LCALLD_II_PLAY;
JNBP1.0,DLY4
MOVR0,#53H;
LJMPMINCHG
DLY5:
LCALLDLY20M
JBP1.1,T_MLOOP1
JNBP1.1,$
CPL03H
JNB03H,DIS_SET
MOVDISBEG,#60H;
显示秒表数据单元
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H;
10MS定时初值()
MOVTH1,#0D8H;
10MS定时初值
SETBTR1
SETBET1
T_MLOOP1:
LJMPMLOOP1
DIS_SET:
显示时钟数据单元
CLRET1
CLRTR1
T_MLOOP11:
DLY6:
JBP1.2,T_MLOOP11
T_EST11:
JNBP1.2,T_EST11
T_EST22:
JNBP1.1,DLY5
JBP1.2,T_EST21
LCALLDLY20M
JBP1.2,T_EST22
T_EST55:
JNBP1.2,T_EST51
T_EST33:
JBP1.2,T_EST31
JBP1.2,T_EST33
T_EST44:
JNBP1.2,T_EST41
T_EST411:
AJMPT_EST11
T_EST21:
AJMPT_EST22
T_EST31:
AJMPT_EST33
T_EST41:
AJMPT_EST44
T_EST51:
AJMPT_EST55
INTT0:
PUSHACC;
累加器入栈保护
PUSHPSW;
状态字入栈保护
CLRET0;
关T0中断允许
CLRTR0;
关闭定时器T0
MOVA,#0B7H;
中断响应时间同步修正
ADDA,TL0;
低8位初值修正
MOVTL0,A;
重装初值(低8位修正值)
MOVA,#3CH;
高8位初值修正
ADDCA,TH0
MOVTH0,A;
重装初值(高8位修正值)
开启定时器T0
DJNZR4,I_INT0;
20次中断未到中断退出
A_DDS:
20次中断到(1秒)重赋初值
CPL07H;
闹铃时间隔呜叫用
MOVR0,#71H;
指向秒计时单元(71H-72H)
ACALLADD_1;
调用加1程序(加1秒操作)
MOVA,R3CLRC
CJNEA,#60H,A_DDM
A_DDM:
JCI_INT0;
小于60秒时中断退出
ACALLCLR_H
MOVR0,#77H;
指向分计时单元(76H-77H)
ACALLADD_1;
分计时单元加1分钟
MOVA,R3;
分数据放入A
CLRC;
清进位标志
CJNEA,#60H,A_DDH;
A_DDH:
小于60分时中断退出
ACALLCLR_H;
LCALLDLY20M;
正点报时
SETB08H
MOVR0,#79H;
指向小时计时单元(78H-79H)
ACALLADD_1;
小时计时单元加1小时
时数据放入A
CJNEA,#24H,RSTART;
RSTART:
小于24小时中断退出
ACALLCLR_H;
大于或等于24小时小时计时单元清0
I_INT0:
MOV72H,76H;
中断退出时将分、时计时单元数据移
MOV73H,77H;
入对应显示单元
MOV74H,78H;
MOV75H,79H;
POPPSW;
恢复状态字(出栈)
POPACC;
恢复累加器
开放T0中断
RETI;
中断返回
INTT1:
中断现场保护
PUSHPSW
JB03H,R_ADDS;
=1时秒表
MOVTL1,#0B0H;
装定时器T1定时初值
MOVTH1,#3CH
DJNZR2,I_INT1
MOVR2,#06H;
重装0.3秒定时用初值
CPL02H;
0.3秒定时到对闪烁标志取反
JB02H,FLASH0;
02H位为1时显示单元"
熄灭"
02H位为0时正常