单片机课程设计报告13文档格式.docx
《单片机课程设计报告13文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告13文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
3.2主程序
3.4时钟设置子程序
3.5定时器中断子程序
3.6LED显示子程序
3.7按键控制子程序
第四部分调试与功能说明
4.1系统性能测试与功能说明
4.2系统时钟误差分析
4.3硬盘调试
4.4软件调试问题及解决
心得体会
附件
第一部分整体方案的设计
1.1课程设计的任务:
设计一个多功能数字时钟完成以下功能
1、走时(能实现时分秒,年月日的计时)
2、显示(分屏显示时分秒,年月日,修改定位闪烁显示)
3、校时(能用按键修改和校准时钟)
4、定时报警
1.2单片机的选择
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。
其发展趋势不外乎以下几个方面:
1、多功能
单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。
比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。
有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。
例如,有的芯片以51内核为核心,集成了USB控制器、SMARTCARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。
2、高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:
单片机的时钟频率得到提高;
同样频率的单片机运行效率也有了很大的提升;
由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。
由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。
使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。
3、低电压和低功耗
单片机的嵌入式应用决定了低电压和低功耗的特性十分重要。
由于CMOS等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到uA级。
这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。
4、低价格
单片机应用面广,使用数量大,带来的直接好处就是成本的降低。
目前世界各大公司为了提高竞争力,在提高单片机性能的同时,十分注意降低其产品的价格。
下面大致介绍一下单片机的主要应用领域和特点。
(1)家用电器领域
用单片机控制系统取代传统的模拟和数字控制电路,使家用电器(如洗衣机、空调、冰箱、微波炉、和电视机等)功能更完善,更加智能化和易于使用。
(2)办公自动化领域
单片机作为嵌入式系统广泛应用于现代办公设备,如计算机的键盘、磁盘驱动、打印机、复印机、电话机和传真机等。
(3)商业应用领域
商业应用系统部分与家用和办公应用系统相似,但更加注重设备的稳定性、可靠性和安全性。
商用系统中广泛使用的电子计量仪器、收款机、条形码阅读器、安全监测系统、空气调节系统和冷冻保鲜系统等,都采用了单片机构成的专用系统。
与通用计算机相比,这些系统由于比较封闭,可以更有效地防止病毒和电磁干扰等,可靠性更高。
(4)工业自动化
在工业控制和机电一体化控制系统中,除了采用工控计算机外,很多都是以单片机为核心的单片机和多机系统。
(5)智能仪表与集成智能传感器
目前在各种电气测量仪表中普遍采用了单片机应用系统来代替传统的测量系统,使得测量系统具有存储、数据处理、查询及联网等智能功能。
将单片机和传感器相结合,可以构成新一代的智能传感器。
它将传感器变换后的物理量作进一步的变化和处理,使其成为数字信号,可以远距离传输并与计算机接口。
(6)现代交通与航空航天领域
通常应用于电子综合显示系统、动力监控系统、自动驾驶系统、通信系统以及运行监视系统等。
这些领域对体积、功耗、稳定性和实时性的要求往往比商用系统还要高,因此采用单片机系统更加重要。
目前,我国生产很多型号的单片机,在此,我们采用型号为STC89C52的单片机。
因为:
STC89C52是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-52指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C52提供了高性价比的解决方案。
STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
STC89C-52单片机内部结构
STC89C-52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)
STC89C-52内部有256个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有256个,可存放读写的数据,运算的中间结果或用户定义的字型表。
程序存储器(ROM):
STC89C-52共有8192个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):
STC89C-52有三个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
STC89C-52共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
全双工串行口:
STC89C-52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
STC89C-52具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
STC89C-52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C-52单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-52系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
复位电路
单片机的复位方式可以是自动复位,也可以是手动复位,见下图。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
上电自动和手动复位电路图
图2-5内部和外部时钟方式图
2.1最小系统设计
单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。
1.电源引脚
Vcc 40 电源端
GND 20 接地端
工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。
2.外接晶体引脚
图3-2晶振连接的内部、外部方式图
XTAL1 19
XTAL2 18
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
3.复位 RST 9
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。
复位操作不会对内部RAM有所影响。
常用的复位电路如下图所示:
图3-3常用复位电路图
4.输入输出引脚
(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
对内部Flash程序存储器编程时,接收指令字节;
校验程序时输出指令字节,要求外接上拉电阻。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收低8位地址信息。
(3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。
对内部Flash程序存储器编程时,接控制信息。
除此之外P3端口还用于一些专门功能,具体请看下表。
P3引脚
兼用功能
P3.0
串行通讯输入(RXD)
P3.1
串行通讯输出(TXD)
P3.2
外部中断0(INT0)
P3.3
外部中断1(INT1)
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通WR
P3.7
外部数据存储器写选通RD
P3端口引脚兼用功能表
显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:
发光二极管LED显示器、液晶LCD显示器、CRT显示器等。
LED显示器是现在最常用的显示器之一,如下图所示。
LED显示器的符号图
发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。
分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。
外加正向电压时二极管导通,发出清晰的光。
只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。
LED数码管有共阳、共阴之分。
图是共阳式、共阴式LED数码管的原理图和符号.
共阳式、共阴式LED数码管的原理图和数码管的符号图
显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管。
采用动态显示方式显示时间,硬件连接如下图所示,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第三个和四五个数码管,秒的十位和个位分别显示在第五个和第六个数码管。
LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。
对于多位LED显示器,通常
都是采用动态扫描的方法进行显示,其硬件连接方式如下图所示。
数码管的硬件连接示意图
数码管使用条件:
a、段及小数点上加限流电阻
b、使用电压:
段:
根据发光颜色决定;
小数点:
根据发光颜色决定
c、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA峰值电流100mA
数码管使用注意事项说明:
(1)数码管表面不要用手触摸,不要用手去弄引角;
(2)焊接温度:
260度;
焊接时间:
5S
(3)表面有保护膜的产品,可以在使用前撕下来。
系统的软件设计也是工具系统功能的设计。
单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。
单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。
既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
(6)为程序加入注释,提高可读性,实施软件工程;
(7)注意软件的抗干扰设计,提高系统的可靠性。
3.1软件设计流程图
这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。
主程序是先进行初始的设置,然后启动定时器计数器0,定时器启动后再进行按键检测,检测完后,在根据为各种显示设置的标志来判断显示时分秒,年月日或闹钟时间,若判断有按键则进入相应按键处理子程序进行操作。
按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;
如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;
如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;
如果没有按下,就把时间显示出来。
按键处理流程图
采用定时器计数器0,工作在方式1下,每50毫秒中断一次,若计时中断每到20次则跳出中断继续计时,若到20次则秒存储单元加1,若秒不满60则跳出中断,满60则清零,分单元加1,分满60则清零,时单元加1,不满24退出中断,满则时单元清零,日单元加1,如此方式累次下去就完成时分秒,年月日的走时。
定时器中断流程图
闹钟设置流程图
数字电子钟的工作原理。
工作原理:
数字电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。
因此,一个基本的数字钟电路主要由显示器“时”,“分”,“秒”和单片机,还有校时电路组成。
8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。
数码管按照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。
“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。
“时单元”采用24进制计时器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”通过七段显示器显示出来。
3.2设计主程序。
(采用汇编语言编写程序)
资源分配:
P0.0-7口为数码管段选,采用共阴显示管。
;
P2.0-5数码管位选
30H-秒,31H-分,32H-时,40H-日,41H-月,42H-年
闹钟:
50H-秒,51H-分,52H-时
60H,61H,调整定位计数单元
38H-计数单元
F0-切换标志,为1显示日期,为0显示时间
PSW.1为1显示闹钟定时单元,为0正常显示时间
R7定时中断次数
R5延时计数单元
R2-扫描码初始单元
ORG0000H
LJMPMAIN;
跳入主程序初始化
ORG000BH;
定时中断0入口地址
LJMPTM0
ORG0030H
MAIN:
MOV60H,#00;
时分秒定位计数
MOV61H,#00;
闹钟定位计数
CLRPSW.1
CLRF0
MOVSP,#6FH;
堆栈指针初始化
MOV30H,#50H;
秒初始化
MOV31H,#36H;
分初始化
MOV32H,#14H;
时初始化
MOV40H,#22H;
日初始化
MOV41H,#12H;
月初始化
MOV42H,#11H;
年初始化
MOV50H,#00H
MOV51H,#30H
MOV52H,#14H
MOVR7,#20;
50毫秒中断50次
MOVSCON,#00
MOVDPTR,#TAB
MOVIE,#82H
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0;
启动计时
LOOP1:
ACALLDSP1;
调用显示时分秒程序
ACALLCJDW;
查键
ACALLDSP2;
调用显示年月日子程序
ACALLNZXX;
闹钟显示
ACALLNN;
闹钟设定
AJMPLOOP1
DSP1:
JBPSW.1,EXQ0;
PSW.1为1跳出
JBF0,EXQ0;
F0为1跳出
MOVR2,#0FEH;
扫描码初始化
MOVR6,#03
MOVR0,#32H;
显示单元初始化
ACALLSCAN;
调用扫描子程序
RET
DSP2:
JBPSW.1,EXQ0
JNBF0,EXQ0
MOVR2,#0FEH
MOVR6,#03
MOVR0,#42H
ACALLSCAN
EXQ0:
RET
SCAN:
NOP
LOOP2:
MOVA,@R0
ANLA,#0F0H;
取高位
SWAPA
MOVCA,@A+DPTR;
查表
MOVSBUF,A;
送入SBUF串行输出
JNBTI,$
CLRTI
MOVA,R2
MOVP2,A;
送位选码,选通数码管
RLA
MOVR2,A
ACALLDELAY1MS;
单个数码管显示延时
ANLA,#0FH
MOVCA,@A+DPTR
MOVSBUF,A
MOVP2,A
DECR0
ACALLDELAY1MS
DJNZR6,LOOP2
DELAY1MS:
MOVR5,#02;
延时1毫秒
LP3:
MOVB,#250
DJNZB,$
DJNZR5,LP4
DELAY10MS:
MOVR5,#10;
查键延时10毫秒(延时去抖)
LP4:
CJDW:
K1:
JBP1.4,K2
ACALLDELAY10MS
XH:
JNBF0,SFM
ACALLDSP2
AJMPNEXT
SFM:
ACALLDSP1
NEXT:
JNBP1.4,XH
CPLF0
K2:
JBP1.5,K3
MOVA,60H
ADDA,#01
MOV60H,A
CJNEA,#07,K3
JX1:
MOVR0,#32H
ACALLSCAN
JNBP1.5,JX1
EXQ1:
MOV60H,#00
K3:
TM:
MOVA,60H;
秒调整
CJNEA,#01,TF;
定位到秒?
MOV38H,#160