资源描述
08级电气工程系单片机课程设计
第1章 秒计时器总体设计
课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不少的,是非常必要的。
1.1 设计目的
设计目的
1. 单片机的基本原理及相关的简单应用。
2. 掌握用单片机设计系统的一般步骤。
3. 了解LED数码管的基本知识和驱动方法。
4.掌握单片机系统各个组成部分的作用以及分布位置。
5.学会运用单片机的硬件资源。
1.2 设计任务和要求
任务和要求
任务:
用AT89S51单片机和中小规模集成芯片设计1/100秒计时器
要求:
1. 计时精度 10-2秒。
2. 6位数码显示,分别表示分、秒、1/10秒、1/100秒。
3. 有两个按键分别控制秒表的归零、停止。
4. 用汇编语言编程,用proteus仿真。
1.3 总体设计方案
1.硬件设计方案
方案:该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。 MCS-51单片机特点如下:
(1)可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高、易扩充。
(2)单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。
(3)控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
其原理框图如图1.1所示:
六位显示
AT89C51
复位开关
暂停开关
时间脉冲源
图1.1 硬件设计原理框图
2.软件设计方案
显示程序
主程序
复位程序
暂停程序
中断程序
通过汇编语言编写程序来实现设计任务与要求,总体设计方案图如图1.2所示:
图1.2 软件设计原理框图
第2章 单片机应用系统简介
单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。一般包括总体设计、硬件设计、软件设计、仿真调试、固化程序、应用系统独立运行等步骤。
2.1单片机结构
1. 80C51单片机的功能结构
正如我们所知,单片机是属于三总线结构,80C51单片机功能方框图如图2.1所示:
图2.1 单片机内部结构框图
2. 单片机内容结构
单片机的内部结构如图2.2所示,从图中看出,它具有以下特征;
适于控制应用的8位CPU
56字节片内数据存储器,分高低两个128字节
4K字节片内程序存储器
64KB程序存储器空间
64KB数据存储器空间
4个8位共32根双向并可按位寻址的I/O口线
两个16位定时/计数器
一个全双工的串行I/O接口
有5个中断源
片内时钟振荡器
具有布尔处理(位处理)能力
图2.2 单片机内部结构
2.2 单片机的封装形式、引脚定义及功能
1. 80C51封装
80C51系列单片机具有双列直插式和方形两种封装。
2. 80C51系列单片机引脚功能
① 引脚分布:如图2.3所示为双列直插式引脚分布图
② 引脚功能:
VCC----工作电源+5V
GND----电源地
ALE/PROG -----访问外部存储器时作为低8位地址锁存控制信号;在对EPROM编程时作为编程脉冲输入;在不访问外部存储器和非EPROM编程状态下,该脚输出频率为1/6单片机晶振频率的方波信号,该信号,可作为时钟脉冲,但在访问数据存储器时会丢失一个脉冲
PSEN——外部程序存储器读选通信号
EA/VPP——访问程序存储器控制信号。当EA为低电平时,只读外部存储器,当EA为高电平时则先读内部程序存储器,再读外部程序存储器;这个引脚在编程时接编程电压VPP
RST——复位信号,对系统复位信号要>2T
XTAL1——片内振荡电路输入端
XTAL2——片内振荡电路输出端
P0-P3——输入输出端口
图2.3 双列直插式引脚分布图
2.3 定时/计数器
1.定时/计数器结构
80C51单片机内部设有两个16位定时/计数器,简称为定时器0(T0)和定时器1(T1)。定时器/计数器的结构如图2.4所示:
TMOD---方式控制寄存器,用于设定定时/计数器的工作方式
TCON---定时器控制寄存器,用于启动定时/计数器
IE---中断允许控制寄存器:定时/计数器是微机的中断源
图2.4 80C51单片机内部定时/计数器的结构
2.工作原理
定时/计数功能选择:当C/T=0时,为定时器功能,此时,C与A相连(计数脉冲为机器周期);当C/T=1时,为计数功能,此时,C与B相连(计数脉冲从P3.4或P3.5口输入)。
定时/计数器设置:定时/计数器设置由工作方式控制寄存器(TMOD)、定时控制寄存器(TCON)以及中断允许寄存器(IE)共同完成。
2.4 键盘接口技术
键盘分两类:独立连接多键盘和矩阵式键盘,如图2.5所示。
1.独立式键盘
独立式按键结构的键盘是最简单的键盘电路,每个键独立接入一根输入线。这种键盘的优点是结构简单、使用十分方便,目前这种结构的键盘应用还相当普遍,这种键盘的缺点是随着键数数量的增加所占用的I/O口线也增加。
独立式按键结构的键盘在没有键按下时,数据输入线均为高电平,当有键按下时,与之对应的数据线将变成低电平。因此可用位指令判别是否有键按下。
2.行列式键盘
独立式键盘虽然结构简单,使用方便,但每一个按键开关要占一根I/O口线,因此在按键数较多时,采用行列式键盘技术。
&
图2.5独立式键盘
行列式键盘的结构及原理
输
出
锁
存
器
输
入
缓
冲
器
图2.6 行列式键盘
行
线
列
线
①行列式键盘的结构
图2.6所示为行列式键盘的基本结构。它由键盘开关矩阵、输出(行线)锁存器、输入(列线)缓冲器三部分组成。在具体组成电路时,有以下几种组合方式:
直接使用I/O的键盘电路。
MCU的I/O口输出具有锁存器,输入具有缓冲器,因此应用I/O口直接与行线与列线相连就可以组成行列式键盘。如图2.6所示,是由P1口组成的4*4键盘。图中左示的是普通接法,右示为带中断的键盘接法。
利用I/O口和译码器的接口电路
P1.0
P1.1
P1.2
P0.0
P0.1
P0.2
P0.3
A
B
C
图2.7 由I/O口与译码器组成的行列式键盘
如图2.7所示为使用I/O口与74LS138译码器构成的键盘电路
利用串行口的键盘接口电路
图2.8为由I/O口与串行口组成的键盘电路。
②行列式键盘的工作原理:
尽管构成行列式键盘有多种形式,但它们的工作原理是相同的,现以图2.8为例来说明:
行线P1.4~P1.7为输出,列线P1.0~P1.3为输入。
CPU先使第一行( P1.4)为“0”,其余行为“1”。
读输入口P1.0~P1.3的状态,若输入缓冲器的状态全部为“1”,则表示所在行无键按下,CPU使一下行线为“0”,其余行线为“1”,扫描下一行,这样在P1.4~P1.7循环进行。若输入缓冲器不全为“1”,说明所在行有键按下,CPU停止当前行线扫描,转入到列线扫描,列线P1.0 ~P1.3为“0”状态的列表示对应列有键按下。这样,行线与列数交叉键就是扫描到的按键。
P1.0
P1.1
A
B
P1.2
RXD
TXD
图2.8 I/O口与串行口组成的行列式键盘
③键扫描方式:
程控扫描方式:CPU从执行程序就开始了键盘的扫描,等待来是键盘的命令。这种程控扫描方式,适用单任务多分支结构。
定时扫描方式:在多任务应用系统中,既要执行当前任务,又要及时接受键盘命令,定时扫描方式适应这种需要。具体做法是:在程序初始化时,先对定时/计数器进行设置,使其每10ms中断一次,每次中断,CPU将去扫描一次键盘,若两次中断扫描到有键按下(这里考虑了消抖动),CPU将对键作相应的处理。
中断扫描方式:采用中断扫描方式必需有外部中断接口,当有键按下时,产生中断请请求,CPU响应中断,在中断服务程序扫描键盘,作相应处理。这是多任务应用系统常用的一种方式。
2.5 显示接口技术
1.显示器结构与原理
如图2.9所示为LED显示器。在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
八段LED显示器由8个发光二极管组成。基中7个长条形的发光管排列成“8”字形,另一个点置于右下角作为显示小数点用。LED显示器有共阴和共阳两种结构,显示器各笔划段名和安排位置相同。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。在单片机接口中,单片机口线须接300-750Ω的限流电阻。
a
a
b
c
d
e
f
g
h
a
b
c
d
e
f
g
h
b
c
d
e
f
g
h
g
f
GND
a
b
e
d
GND
c
dp
共阳极
共阴极
图2.9 LED显示器
2. LED显示接口技术
LED显示电路分静态显示和动态显示两类:
(1)静态显示接口技术
所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。单片机只要把要显示的字形代码发送到接口电路就可以了,静态显示电路有以下几种形式:
①通过MCU的口线的显示接口电路
a
a
b
c
d
e
f
g
h
b
c
d
e
f
g
h
P1
GND
图2.10 单片机的I/O口直接与LED显示器相连
如图2.10所示,数码管既可直接接单片机的口线(如果是P0口的话,只能接共阳极的,接共阴的要接上拉电阻),又可通过锁存器接单片机口线。
②通过MCU口线和译码驱动的显示接口
如图2.11所示,图中MC14495为带锁存的地址译码器,译码器采用通用的二-四译码器。
图2.11 I/O口线与译码器构成静态显示电路
③利用串行总线控制的显示接口
如图2.12所示,通过单片机的串行总线控制的静态显示电路:
a
b
c
d
e
f
g
h
+5V
VCC
a
e
d
f
c
h
g
b
d
f
g
a
h
c
b
e
P0
+5V
VCC
P1.0
P1.1
图2.12 单片机动态显示扫描电路
图中74LS164为移位寄存器,将单片机设置在串行口方式0,欲显示的数据建一个表格,然后采用MOVC A,@A+DPTR指令,将欲显示的数据送入SBUF寄存器中,SBUF中的数据通过串行口送到74LS164,移位寄存器的输出接数码管。
(2)动态显示接口技术
如图2.12是动态扫描显示接口电路。接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,虽然所所有显示器接收到相同的字形码,但是只有被选中的位才显示。所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
2.6 复位操作
复位操作是单片机的初始化操作,单片机在进入运行前和在运行过程中程序出错或操作失误使系统不能正常运行时,需要进行复位操作。复位操作后,程序将从0000H开始重新执行,复位时特殊功能寄存器的状态。除此之外,复位操作还使单片机的ALE和PSEN引脚信号在复位期间变为无效状态。单片机对复位信号的要求:一是复位信号为高电平,二是复位信号有效持续时间不少于24个振荡脉冲(两个机器周期)以上。在这里特别要提醒的是,在一个应用系统中,如果有几片单片机同时工作,在程序上有连接关系,系统复位时,应确保每一片单片机同时复位。复位信号由单片机的RST引脚输入,复位操作有上电自动复位、按键复位和外部脉冲复位三种方式。随着单片机技术的发展,目前有些单片机内部带有看门狗电路,当程序进行出错或进入了无休止循环时,看门狗电路将利用软件强行使系统复位。
第3章 硬件电路设
3.1 秒计时器电路图
如图3.1所示为电路图。其工作原理为:接通电源后,按“开始”按键,开始计数,数码管显示从00开始每百分之一秒自动加一;按“复位”按键,系统清零,数码管显示00;按“暂停”按键,系统暂停计数,数码管显示当时的计数。
图3.1 秒计时器电路原理图
3.2 单元电路设计
1.时序控制电路设计
时序电路设计是秒计数器设计的关键,如图3.2所示,它主要完成以下功能:
(1)当我们按下“开始”按钮时,数码管显示数字,秒计时器开始计时。
(2)当我们再按一下“暂停”按钮时,数码管停止计数,显示当前数值。
2.复位电路的设计
外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。复位电路如下图3.3所示:
图3.2 开始/暂停按钮
图3.3 复位电路
3.3外部震荡电路
外部震荡电路单片机必须在AT49C51的驱动下才能工作,在单片机内部有一个时钟震荡电路,只需要外接一个振荡器就能产生一定的时钟信号送到单片机内部的各个单元,外部震荡电路如图3.4所示。
图3.4外部震荡电路图
3.4 LED显示电路设计
秒计时器采用LED动态显示,为了简化电路将所有位的段选线并联在一起,由一个八位IO的接口控制,电路如图3.5所示:
图3.5 LED显示
第4章 软件设计
通过前面的硬件介绍,现在我们将对1/100秒表进行系统软件设计。
4.1 系统主程序设计
1.秒计时器主程序流程图如图4.1所示:
END
开始计数
取秒钟的六位数字放六个连续单元存放起来
调用显示子程序
STATR
显示单元置初值
定时和中断的初始化
秒钟初值设置
调用键盘操作
(主程序)
图4.1 主程序流程图
2.LED动态程序图如图4.2所示:
秒钟加1
60秒到吗
分钟加1
60分到吗
分钟清0
开T1
RETI
1s到吗
MSECBUF 内容加1
关T1并重装时常数
(中断服务程序)
中断入口
N
Y
N
Y
N
Y
图4.2 LED动态程序图
3.程序清单
ORG 0000H
LJMP START
ORG 001BH ;中断入口
LJMP CLOCK
ORG 0100H
;-------------------内存分配--------------------
DISBUF EQU 30H ;显示数字缓冲首地址
MSECBUF EQU 21H ;1/100秒缓冲
SECBUF EQU 22H ;秒缓冲
MINBUF EQU 23H ;分钟缓冲
;---------------------------主程序-----------------------
START: MOV MSECBUF ,# 00H
MOV SECBUF ,#00H
MOV MINBUF,#00H
JB P3.2,$
CALL DELAY1
MOV TMOD ,#10H ;设置T1工作于定时方式1
MOV TL1,#68H
MOV TH1,#0C5H ;写0.01S的时间常数
MOV SP,#50H
SETB EA ;开放CPU中断
SETB ET1 ;开放T1中断
SETB TR1 ;允许T1工作
;---------------------暂停复位程序-----------------------
L2:CALL DELAY ;跳转消抖程序
JB P3.5,L3 ;暂停程序
JMP L2
L3:JB P3.5,$
CALL DELAY1
L4:JB P3.5,START ;复位程序
JMP4
DISP1:MOV R0,#DISBUF ;显示数字存放首地址
MOV A, MSECBUF ;取0.01秒高位数字
ANL A, #0FH
MOV @R0, A
INC R0 ;指向下一个单元
MOV A, MSECBUF ;取0.01秒低位数字
ANL A, #0F0H
SWAP A
MOV @R0 ,A
INC R0
MOV A, SECBUF ;取秒高位数字
ANL A, #0FH
MOV @R0 , A
INC R0
MOV A, SECBUF ;取秒低位数字
ANL A, #0F0H
SWAP A
MOV @R0, A
INC R0
MOV A, MINBUF ;取分高位数字
ANL A, #0FH
MOV @R0 ,A
INC R0
MOV A, MINBUF ;取分低高位数字
ANL A ,#0F0H
SWAP A
MOV @R0 ,A
LCALL DISPLAY
SJMP DISP1
;----------------------------------显示子程序---------------------------------
DISPLAY: MOV P3, #0FEH ;驱动最低位
MOV R1, #DISBUF ;取显示数字首地址
MOV R2, #06H ;软计数器表示显示位数
LOOP1: MOV DPTR,#SEGTAB ;七段显示码表首地址
MOV A, @R1
MOVC A, @A+DPTR ;查代码
MOV P0 ,A ;送段驱动器74LS273
LCALL DELAY ;延时
MOV A, P3
RL A ;指向下一位位驱动
MOV P0, A
INC R1 ;指向下以个显示数字的地址单元
DJNZ R2, LOOP1;显示位完了吗
RET
;-------------------------中断服务程序--------------------------
CLOCK: CLR TR1 ;关T1
MOV TL1, #68H
MOV TH1, #0C5H ;重装时间常数
PUSH PSW
PUSH ACC ;压栈保护
MOV A, MSECBUF
ADD A, #01H ;0.01S缓冲器加1
DA A ;转换为BCD码数
MOV MSECBUF ,A
CJNE A, #100H, INT_DONE ;1 S时间没有到中断返回
MOV MSECBUF ,#00H ;1S到就将BUF清0
MOV A , SECBUF
ADD A , #01H
DA A ;秒钟加1并变成BCD码数
MOV SECBUF , A
CJNE A, #60H, INT_DONE;60秒没有到中断返回
MOV SECBUF ,#00H ;60秒到秒钟清0
MOV A, MINBUF
ADD A, # 01H
DA A ;环种蛹?并变成BCD码数
MOV MINBUF , A
CJNE A, #60H, INT_DONE ;60分钟没到中断返回
MOV MINBUF , #00H ;60分到分钟清0
INT_DONE:POP ACC
POP PSW
SETB TR1
RETI
;---------------------延时此程序---------------------------
DELAY: MOV R7 , #2
D1: MOV R6 , #255
D2: DJNZ R6 ,D2
DJNZ R7 , D1
RET
;------------------消抖程序---------------------
DELAY1: MOV R6,#60
D2: MOV R7, #248
DJNZ R7, $
DJNZ R6, D2
RET
END
;-----------------------表格数据----------------
SEGTAB: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH ,6FH,00H
END
4.2 系统调试
1.Keil调试程序如图4.3所示:
图4.3keil调试程序图
2.开机
按电源开关,数码管全显示为0。
3.测试按键
当按下“开始”按钮时,数码管开始计时;当再一次按下“开始”按钮时,数码管计时暂停;当按下“复位”按钮时,数码管全部清零。
设计心得
这次实习让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在QQ群里讨论或者是同学之间相互帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。
来源:( - 单片机课程设计心得_逆流的风_新浪博参考文献
1、《单片微机原理 》 主编 丁元杰
2、《MCS-51系列单片机应用系统设计 系统配置与接口技术》主编 何立民
3、《数字电子技术》 主编 张克农
4、彭介华 主编.电子技术课程设计指导》.高教出版社出版.第一版.2002年
25
展开阅读全文