资源描述
课 程 设 计 报 告
(2010— 2011学年 第 2 学期)
课程名称: 单片机课程设计
班 级:
学 号:
姓 名:
指导教师:
2011年 03月
一、目的
运用所学理论知识及实验方法解决实际问题,通过这些活动培养分析问题和解决问题的能力。具体表现在构造一个控制系统框架的能力;检索和阅读文献资料的能力;综合运用所学专业知识使之对所设计系统具有独立调试的能力和故障处理的能力;绘图能力;计算机运用能力;逻辑思维能力与形象思维能力;文字及口头表达的能力;撰写实习报告的能力。
二、内容和要求
1、用PROTEL99SE画单片机系统原理图;
2、焊接电路板;
3、根据编程任务要求编写并调试程序;
4、撰写报告;
5、参加实习成果验收及面试或考试;
任务1:交通灯
(1)基本要求:以单片机为核心设计一个完整的交通灯模拟系统。所谓模拟就是以每组有绿,红,黄色3支共两组发光二极管表示交通信号灯,数码管2只共两组以递减的方式表示各色信号灯的时间。在双干线路口上,交通信号灯的变化是定时的。假定:
(1)、放行线:绿灯亮放行25秒,黄灯亮警告5秒然后红灯亮禁止。
(2)、禁止线:红灯亮禁止30 秒,然后绿灯亮放行。
使两条路线交替地成为放行线和禁止线,就可以实现定时交通控制。假定以P1口线接6支发光二极管(即交通信号灯),因为电路中有反相器的关系,所以口线输出高电平则“信号灯”熄灭,口线输出低电平则“信号灯“亮。
(2)进阶要求一:在基本要求的基础上,要求红绿灯时间可通过按键设置,例如红灯60秒,绿灯52秒,黄灯8秒。提示:时间设置一定是要遵循以下规律:红灯时间=绿灯时间+黄灯时间。
任务2:秒表
要求:至少包括4个功能:时间清零;启动计时;暂定计时;继续计时;计时最小单位0.1 秒,最大计时时间999.9秒。
三、过程(如实际程序开发、电子制作,详细说明有关原理、开发过程、调试过程、结果)
交通灯:
(一)、功能描述:
这是一个交通灯模拟系统,每组有绿,红,黄色3支共两组发光二极管表示交通信号灯,数码管2只共两组以递减的方式表示各色信号灯的时间。在双干线路口上,交通信号灯的变化是定时的。初始时间设定为红灯30秒,绿灯25秒,黄灯5秒,在此基础上可通过按键修改红绿灯的时间。
(二)、硬件部分:
电源模块:
1、模块功能简介:此模块为整个系统提供稳定的5V电压。
2、电路图:
3、所用芯片介绍:
LM2576系列开关稳压集成电路是线性三端稳压器件的替代品,它具有可靠的工作性能、较高的工作效率和较强的输出电流驱动能力,从而为MCU的稳定、可靠工作提供了强有力的保证。
主要特性:最大输出电流:3A;最高输入电压:LM2576为40V,LM2576HV为60V;输出电压:3.3V、5V、12V、15V和ADJ(可调)等可选;振动频率:52kHz;转换效率:75%~88%(不同电压输出时的效率不同)。
单片机最小系统模块:
1、模块功能介绍:本系统包括时钟电路和复位电路。本课程设计采用的单片机是SST89E58,晶振采用12MHz。
2、电路图:
以上电路包括时钟电路和复位电路。
时钟电路是由振荡电路和分频电路组成,其中振荡电路是由反相器以及并联外接的石英晶体和电容构成,用于产生振荡脉冲;分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。晶振采用12MHz。
复位电路是采用的按键电平复位,通过使复位端经电阻与VCC电源接通而实现的。
3、所用芯片介绍:
SST89E58是通用的8位系列兼容微处理器,工作电压在4.5V和5.5V之间;内部RAM共有1KB;4个8位并行双向I/O口(32个I/O引脚);有4个中断源(2个定时器中断和2个外部中断);采用40引脚双列直插式的封装形式。
8段数码管显示模块:
1、模块功能介绍:此模块用来显示实验中药显示的时间等数字。这是由条形发光二极管组成“8”字形的LED显示器。发光响应快,亮度强,高频特性好。
2、电路图:
为了给发光二极管加驱动电压,上图中公共引脚的接法为共阳极接法,把发光二极管的阳极连在一起作为阳极公共引脚,这样阴极引脚上加低电平时即可导通点亮。
3、显示原理介绍:
本次课程设计中为并排使用的4位数码管,采用动态显示方式。显示时通过位控信号采用扫描的方法逐位地循环点亮各位数码管。虽然在任一时刻只有一位数码管被点亮,但是由于人眼具有的视觉残留效应,看起来与全部数码管持续点亮的效果一样。
动态显示需要为各位提供段控和位控,把段码表预先存放在存储器中,使用时通过查表就可以得到段码。而通过并行口输出的相互独立的位码则是起选通作用的,用于选择显示位。因此,需要用到接口芯片的两个数据口。本设计中所用的是8155,下面介绍。
4、所用芯片介绍:
见下页
8155:
芯片引脚介绍:
CE:芯片片选端。
/RD、/WR:读写信号。
ALE:地址锁存信号。
IO/E:为IO/RAM选择线,低电平选择RAM,高电平选择I/O。
PA0~PA7为端口A。PB0~PB7为端口B。PC0~PC7为端口C。
在设计中,使用PB口为位码输出口,以PB7~PB4输出位控线。PA口为段码输出口,加接74HC244进行段控输出驱动。因为8155只能输出显示段码而不具有控制功能,所以动态显示要靠程序实现。
LED灯模块:
1、模块功能介绍:此模块用来作为模拟交通灯的红黄绿灯的闪烁。
2、电路图:
3、显示原理介绍:
本设计中使用两组发光二极管,采用共阳极接法,阳极公共引脚接+5V,阴极引脚上加低电平时即可导通点亮。
按键模块:
1、模块功能介绍:此模块用来作为开关选择。
2、电路图:
使用时,用跳线将所需引脚与相应开关相连接。
(三)、软件部分:
1、设计思想:
此次设计是在基本功能上修改的,实现了可修改红黄绿灯时间的功能。
首先,基本功能是两组发光二极管表示交通灯信号,4个数码管分2组以递减的方式表示各色信号灯的时间。然后,在此基础之上,要求红绿灯时间可通过按键设置,则需要用到相应存储单元来控制时间。
2、流程图:
交通灯的基本功能大致可分为两部分,一部分为信号灯的控制,另一部分为数码管时间的显示,这两部分都是通过相应的关系控制的。可分为4种情况:(1)、A组红灯亮,B组绿灯亮;(2)、A组红灯继续亮,B组黄灯亮;(3)、B组红灯亮,A组绿灯亮;(4)、B组红灯继续亮,A组黄灯亮。
流程图如下:
定时中断子程序:
中断服务程序的主要功能是进行计时操作,设计一个以1秒为周期的中断子程序。流程图如下:
保护现场
是否满20次
计数器重新加载
循环次数减1
秒加1
秒缓冲单元清零
Y
N
是否满红黄
绿时间之和
Y
N
定时中断入口
现场恢复
返回
(四)、程序的调试与运行:
程序的调试运行采用KEILC51编译器,支持汇编语言和标准C语言。经过一系列的调试之后,终于可以成功运行。
秒表:
(一)、功能描述:
这是一个简易秒表,具有4个功能:启动计时、暂定计时、继续计时、时间清零。其中计时最小单位0.1 秒,最大计时时间999.9秒。
(二)、硬件部分:
详细请见交通灯硬件部分(除去LED灯部分)
(三)、软件部分:
1、设计思想:
使用3个按键实现4个功能,其中暂停和继续是一个键,这里通过判断存储单元的奇偶来选择暂停和继续。主要采用按键查询加中断定时的方法。
2、流程图:
开始
开始键
暂停键
清零键
暂停是否按过
暂停存
储单元
开始
暂停
继续
清零
Y
Y
Y
N
Y
偶
奇
循环检查按键
N
N
N
其中定时中断子程序与交通灯思想类似,此处不再叙述。
(四)、程序的调试与运行:
秒表程序设计过程中,初步完成时遇到2个bug:
1、未开始时,按两下暂停键,秒表也会开始计数;后来加了开始键计数单元,来判断有没有开始,若没有开始,暂停键不作用。
2、暂停后,按开始键也会继续;后来加了暂停键计数单元来判断暂停键是否按过,若已按过,开始键则不作用。
总电路图:
这是总的PCB图,其中电源模块没有画出来。
附:设计程序(主要部分)
任务一:交通灯
/******交通灯的基本功能********/
LOOP: SETB TR0
MOV A,60H
ADD A,61H
MOV 62H,A ;62H存放红灯时间
MOV A,61H
ADD A,62H
MOV 63H,A ;63H存放红灯时间加绿灯时间
ADD A,60H
MOV 64H,A ;64H存放红黄绿时间之和
CLR C
MOV A,51H
SUBB A,61H
JC LOOP1 ;计数值与61H比较
CLR C
MOV A,51H
SUBB A,62H
JC LOOP2 ;计数值与62H比较
CLR C
MOV A,51H
SUBB A,63H
JC LOOP3 ;计数值与63H比较
CLR C
MOV A,51H
SUBB A,64H
JC LOOP4 ;计数值与64H比较
CLR C
LOOP1: MOV P1,#0DEH ;A组红灯亮,B组绿灯亮 11011110
MOV A,62H
SETB C
SUBB A,51H
MOV 53H,A ;62H-当前计数值 送到53H A组灯
CLR C
SUBB A,60H
MOV 52H,A ;61H-当前计数值 送到52H B组灯
CLR C
SJMP SHUMA1
LOOP2: MOV P1,#0EEH ;A组红灯继续亮,B组黄灯亮 11101110
MOV A,62H
SETB C
SUBB A,51H
MOV 53H,A ;62H-当前计数值 送到两组
MOV 52H,A
CLR C
SJMP SHUMA1
LOOP3: MOV P1,#0F3H ;B组红灯亮,A组绿灯亮 11110011
MOV A,63H
SETB C
SUBB A,51H
MOV 53H,A
ADD A,60H
MOV 52H,A
CLR C
LJMP SHUMA1
LOOP4: MOV P1,#0F5H ;B组红灯继续亮,A组黄灯亮 11110101
MOV A,64H
SETB C
SUBB A,51H
MOV 53H,A
MOV 52H,A
LJMP SHUMA1
/*********设置黄灯 绿灯的时间********/
NEXT1:CLR TR0
LCALL DELAY2
LCALL DELAY2
MOV 60H,#00H
MOV 61H,#00H
MOV 20H,#00H
MOV 21H,#00H
MOV P1,#0FFH
NEXT:
JNB P3.2,COUNTER0 ;查询INT0口,有外部脉冲时60H自加1
JNB P3.3,COUNTER1 ;查询INT1口,有外部脉冲时61H自加1
JNB P3.5,L ;查询,有外部脉冲时执行交通灯红黄绿基本功能
LJMP SHUMA
L: LCALL DELAY2
LCALL DELAY2
LJMP LOOP
COUNTER0:
LCALL DELAY2
INC 60H
MOV 52H,60H
LJMP SHUMA
COUNTER1:
LCALL DELAY2
INC 61H
MOV 53H,61H
LJMP SHUMA
DELAY2: MOV R6,#0FFH
DELAY3: MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,DELAY3
RET
以上设置时间部分主要采用查询按键的方法来进行设置时间,同时送到数码管显示。
任务二:秒表
NEXT: MOV R5,25H
CJNE R5,#01H,L
JNB P3.2,BEGIN
L: JNB P3.3,COUNT0 ;以上可以使在暂停的情况下,按开始键不会继续
JNB P3.4,CLEAR
LCALL DISP ;调用显示子程序
SJMP NEXT ;重新循环
NOP
NOP
NOP
COUNT0:
LCALL DELAY2 ;此段用来判断有没有开始,若没有开始,摁两下暂停键也不会开始
MOV R6,26H
CJNE R6,#00H,COUNT1
LJMP L
COUNT1: ;当按键存储单元为奇数时继续,为偶数则暂停
LCALL DELAY2
INC 25H
MOV A,25H
MOV B,#02H
DIV AB
MOV R7,B
CJNE R7,#00H,CONTINUE
JMP STOP
JMP NEXT
BEGIN:LCALL DELAY2 ;开始,并用26H记录
INC 26H
SETB TR0
JMP NEXT
STOP:LCALL DELAY2 ;暂停
CLR TR0
JMP NEXT
CONTINUE:LCALL DELAY2 ;继续
SETB TR0
JMP NEXT
CLEAR:LCALL DELAY2 ;清零
LJMP MAIN
DELAY2: MOV R6,#0FFH
DELAY3: MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,DELAY3
RET
/************定时中断处理程序*************/
TIME: PUSH ACC ;保护现场
PUSH PSW
MOV TL0,#0B4H ;赋定时初值
MOV TH0,#3CH
INC 20H
MOV A,20H
CJNE A,#2,RETI1
MOV 20H,#00H ;0.1秒钟时间到
MOV A,21H ;21H存放0.1秒
ADD A,#01H
MOV 21H,A
CJNE A,#10,RETI1
MOV 21H,#00H ;一秒时间到
MOV A,22H ;22H存放1秒
ADD A,#01H
MOV 22H,A
CJNE A,#10,RETI1
MOV 22H,#00H ;10秒时间到
MOV A,23H ;23H存放10秒
ADD A,#01H
MOV 23H,A
CJNE A,#10,RETI1 ;100秒时间到
MOV 23H,#00H
MOV A,24H ;24H存放100秒
ADD A,#01H
MOV 24H,A
CJNE A,#10,RETI1
MOV 24H,#00H
RETI1: POP PSW ;恢复现场
POP ACC
RETI
NOP
NOP
四、小结
本次课程设计,我运用单片机相关知识及实验方法设计了交通灯模拟系统和秒表。通过运用所学方法和检索阅读相关资料,将各个模块调试运行,最终得以成功。此次设计中,我重新熟悉了用PROTEL99SE画系统原理图的步骤与方法,重点复习了汇编语言的相关细节与法则。
在设计交通灯系统的过程中,遇到了一些问题。由于在之前已经有过基本功能的设计,所以主要是考虑在正常运行的时候如何通过按键修改时间。在开始的程序中,没有把握好按键延时,导致不能进入修改状态。由于实验板上只有三个按键,在加上汇编语言的弊端,所以最后改变时间时只能加计数。
在设计秒表时,主要时如何处理好三个按键查询之间的关系。最初调试的时候,出现了2个bug:一个是在没开始时暂停键按两下也会开始;另一个是暂停后按开始键也会继续。后来经过加上相关按键的计数判断单元,这些问题才得到解决。而同学用C语言编写则比汇编要方便。
通过这次课程设计,加强了动手、思考和解决问题的能力。平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。在制作PCB时,发现细心耐心,恒心一定要有才能做好事情,首先是线的布局上既要美观又要实用和走线简单,兼顾到方方面面去考虑是很需要的。
参考文献
[1]李广弟等.单片机基础 [M].北京:北京航空航天大学出版社,2007 .
成绩
日期
批阅人
展开阅读全文