单片机最小系统交通灯流水灯课程设计.docx
《单片机最小系统交通灯流水灯课程设计.docx》由会员分享,可在线阅读,更多相关《单片机最小系统交通灯流水灯课程设计.docx(27页珍藏版)》请在冰点文库上搜索。
![单片机最小系统交通灯流水灯课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/12/e0d8aff3-fa6a-4391-8582-29efc793e92a/e0d8aff3-fa6a-4391-8582-29efc793e92a1.gif)
单片机最小系统交通灯流水灯课程设计
HEFEIUNIVERSITY
单片机应用技术课程
设计报告
系别:
电子信息与电气工程系
专业(班级):
姓名(学号):
导师姓名:
完成时间:
2015-05-30
摘要
本课程设计完成的是构建单片机最小系统和实验环境熟悉,跑马灯实验及74LS138译码器,8255控制交通灯实验,8253方波实验。
最小系统包括晶振,复位等模块。
138的译码实验,根据138的译码特性建立一个译码表,用P1口给74LS138的A、B、C口赋值,在此过程中其实只用到了P1^0,P1^1,P1^2;8255A交通的实验选择PA口控制交通灯,核心思想就是延时时间的控制;8253方波实验采用的是CLK0产生方波信号,再用T0、T1不同工作方式进行分频,输出方波;最后继电器是通过控制单片机端口的高低电平来控制继电器的通断。
关键词:
单片机译码器交通灯方波工作方式
一、系统分析
本次设计的单片机控制系统,旨在通过按键操作完成如下五个功能:
1、实现P1口控制8个指示灯,循环点亮,瞬间只有一个灯亮
2、实现与74LS138译码器连接的8个指示灯,循环点亮,瞬间只有一个灯亮
3、使用芯片8255A控制LED指示灯,实现交通灯功能。
4、使用8253A的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号
5、设计接口电路,通过继电器控制直流电机转动、停止
通过分析以上功能可知,本次实验可以选用已有单片机STC89C52,运用5个独立按键来控制5个功能的实现,且各个功能不能相互干扰。
因此需要每个功能实现后进行复位,但是考虑到8253A芯片没有自带复位键,决定采用上电复位。
对于第一个实验,由于要实现循环点亮,所以直接用8个灯并联然后与一个1K电阻串联,接成共阳即可;对于第二个实验,指示灯的电路可与第一个实验相同,但其负极需与74LS138译码器的输出相接,然后通过单片机控制译码器的A、B、C实现指示灯的循环点亮;对于第三个实验,交通灯采取红、黄、绿排列,指示灯需串1K电阻,然后通过单片机控制8255A的工作方式0来实现交通灯的功能;对于第四个实验,采用红灯与蜂鸣器并联接地,其阳极接8253A的OUT1输出,绿灯阴极接在OUT1上,通过单片机控制8253A可以实现蜂鸣器报警,红绿灯交替点亮;对于第五个实验,初步考虑利用PNP三极管来驱动5V的继电器,由于PNP低电平有效,起基极b与单片机相连,这样可以通过单片机控制继电器的吸合,考虑到在电路板上焊接直流电机不方便,在此将直流电机换成LED灯。
以上便是整个系统的初步分析,具体电路还需根据实际情况设计。
二、系统总体设计
根据本次设计的要求,经小组成员讨论后,选用单片机STC89C52作为控制器,5个独立按键作为各个独立模块的按钮,译码器实验选用74LS138,交通灯实验选用D82C55AC-2芯片,方波实验选用D8253C-2芯片,继电器实验选用HRS2H-S-DC5V-N继电器,另外电源采用直流可调稳压电源。
系统原理框图如2.1所示:
图2.1系统原理图
具体的单片机端口分工:
(1)单片机最小系统的晶振采用12MHz晶振,电源采用直流可调稳压电源5V供电,五个独立按键接单片机P2.0~P2.4口,分别依次控制五个模块。
(2)实验一8个LED灯阴极接单片机P1口
(3)实验二74LS138译码器G2A、G2B一起接P3.0口,A、B、C分别接P1.2、P1.1、P1.0口
(4)实验三D8255A芯片的A1、A0接P2.6、P2.7,D0~D7接P0,CS接P3.1,
WR、RD接P3.6、P3.7
(5)实验四D8253C芯片的A1、A0接P2.6、P2.7,D0~D7接P0,CS接P3.2,
WR、RD接P3.6、P3.7,CLK0接P3.5
(6)实验五PNP三极管基极b接P2.5
三、硬件设计
1、单片机最小系统
单片机最小系统主要由晶振电路和复位电路组成的,晶振电路是由晶振和瓷片电容构成的,我们是的晶振是11.0592Mhz,为51单片机提供时钟源。
复位电路是由按钮、电解电容和电阻组成的,为单片机提供复位功能,就此就构成了最小系统板。
STC89C52RC单片机是基于51内核的单片机,是在51单片机应有的功能上基础拓展的单片机,是属于MCS—51系列单片机中的高端单片机,它有运算器包括算术逻辑运算单元ALU、累加器ACC、寄存器B、暂存器TMP、程序状态字寄存器PSW、十进制调整电路等。
它能实现数据的算术逻辑运算、位变量处理和数据传送操作。
(1)控制器
单片机有控制器,它包括定时控制逻辑(时钟电路、复位电路),指令寄存器,指令译码器程序计数器PC,堆栈指针SP,数据指针寄存器DPTR以及信息传送控制部件等。
(2)时钟电路
单片机有时钟电路,在单片机芯片的内部有一个高增益反相放大器,输入端为XTAL1,输出端为XTAL2,一般在XTAL1与XTAL2之间接石英晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,就是单片机的内部时钟电路,时钟电路产生的振荡脉冲经过二分频以后,才成为单片机的时钟信号。
电容C1和C2为微调电容,可起频率稳定、微调作用,我们取用30pf电容。
晶振的频率范围是1.2MHz~12MHz,我们取11.0592MHz。
(3)复位电路
单片机的复位电路需要外接,对于使用12MHZ的晶振的单片机,复位信号持续时间应超过4μs才能完成复位操作。
产生复位信号的电路有上电自动复位电路和按键手动复位电路两种方式。
我通过外部复位电路的电容充电来实现的单片机复位的,即人为的复位操作。
(4)指令寄存器和指令译码器
指令寄存器中存放指令代码,CPU执行指令时,由程序存储器中读取的指令代码送入指令存储器,经译码器后由定时与控制电路发出相应的控制信号,完成指令所指定的操作。
(5)程序计数器PC
PC是一个16位计数器,其内容为单片机将要执行的指令机器码所在存储单元的地址。
PC具有自动加1的功能,从而实现程序的顺序执行。
由于PC不可寻址的,因此用户无法对它直接进行读写操作,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。
PC的寻址范围为64KB,即地址空间为0000~0FFFFH。
(6)堆栈指针SP
SP为8位寄存器,用于指示栈顶单元地址。
所谓堆栈是一种数据结构,它只允许在其一端进行数据删除和数据插入操作的线性表。
数据写入堆栈叫入栈(PUSH),数据读出堆栈叫出栈(POP)。
堆栈的最大特点是“后进先出”的数据操作原则。
MCS-51系统复位后,SP初始化为07H。
(7)数据指针DPTR
数据指针DPTR为16位寄存器,它是MCS—51中唯一的一个16位寄存器。
编程时,既可按16位寄存器使用,也可作为两个8位寄存器分开使用。
DPH为DPTR的高八位寄存器,DPL为DPTR的低八位寄存器。
DPTR通常在访问外部数据存储器时作为地址指针使用,寻址范围为64KB。
(8)引脚定义
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.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
最小系统原理图如图2.2所示:
图2.2单片机最小系统原理图
2、流水灯电路
系统若要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
由于是一个一个点亮,在此我们采用8个LED并联然后与一个1K电阻串联,具体电路如图2.3所示:
图2.3流水灯电路
3、译码器电路
本模块功能是通过单片机控制74LS138译码器来实现流水灯,首先我们了解下译码器的工作原理。
3.174LS138芯片的引脚图及功能
(1)74LS138芯片的引脚图如图2.4所示
图2.474LS138芯片引脚图
A0~A2:
地址输入端
G1:
选通端(高电平有效)
/G2A、/G2B:
选通端(低电平有效)
/Y0~/Y7:
输出端(低电平有效)
VCC:
电源正
GND:
地
A0~A2对应Y0——Y7;A0,A1,A2以二进制形式输入,然后转换成十进制,对应相应Y的序号输出低电平,其他均为高电平
(2)74LS138芯片真值表如表2.1
表2.174LS138译码器真值表
3.2电路设计
根据上述74LS138译码器的工作原理可知,当G1G2AG2B=100时,译码器工作,根据74LS138的3个译码信号A、B、C来选择Y0、Y1、Y2、Y3、Y4、Y5、Y6作为输出,各输出为低电平时,当共阳极的LED灯节高电平时,就会使相应的灯亮。
给单片机的端口赋初值,点亮第一个LED,然后延时一段时间后,点亮下一个LED,依次循环下去,会实现流水灯的模式,具体电路如图2.5所示:
图2.5译码器电路
4、交通灯电路
本模块功能是通过单片机控制8255A芯片控制电路实现交通灯功能,首先我们应了解8255A芯片的工作原理。
4.18255A芯片引脚图及功能
(1)8255A芯片引脚图如图2.6所示:
图2.68255A芯片引脚图
D0--D7:
三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:
片选信号线,低电平有效,表示芯片被选中。
RD:
读出信号线,低电平有效,控制数据的读出。
WR:
写入信号线,低电平有效,控制数据的写入。
GND:
地线。
Vc:
+5V电源
PA0--PA7:
A口输入/输出线。
PB0--PB7:
B口输入/输出线。
PC0--PC7:
C口输入/输出线。
RESET:
复位信号线。
A1、A0:
地址线,用来选择8255内部端口。
(2)工作方式
①方式0——基本输入/输出方式
8255工作在方式0时,三个端口分成彼此的两个8位口,即A口和B口,两个4位口,这4个并行口都能设定为输入或输出。
方式0常用于无条件查询传送
②方式1——选通输入/输出方式
③方式2——双向输入/输出方式
4.2电路设计
交通灯共有东西南北四个方向,红黄绿总共12个LED灯,为了让电路简单,在此采用4个方向的LED灯共阳接法,每个方向的红、黄、绿灯并联然后与一个1K电阻串联,阴极接在对应8255A芯片的PA口,具体仿真电路如图2.7所示:
图2.7交通灯电路
5、方波电路
本模块功能是通过单片机控制D8253C芯片输出方波信号,首先我们需要了解8253芯片的工作原理。
5.18253芯片的引脚图及功能
(1)8253芯片的引脚图如图2.8所示
图2.88253芯片引脚图
(2)8253芯片内部组成部分
1)数据总线缓冲器(8位、三态、双向)。
数据中线缓冲器是8253与系统数据总线相连接时用的接口电路,它由8位双向三态缓冲器构成。
2)读/写控制逻辑。
读/写控制逻辑接收系统控制总线送来的输入信号,经组合后形成控制信号,对各部分操作进行控制。
可接收的控制信号有:
:
片选信号,低电平有效;
:
读信号,低电平有效;
:
写信号,低电平信号;
:
端口选择信号。
=00时,选中0通道;
=01时,选中1通道;
=10时,选中2通道;
=11时,选中控制寄存器。
8253的输入信号组合功能表如表2.2所示。
表2.28253输入信号组合的功能表
功能
0
1
0
00
写计数器0
0
1
0
01
写计数器1
0
1
0
10
写计数器2
0
1
0
11
写入控制字寄存器
0
0
1
00
读计数器0
0
0
1
01
读计数器1
0
0
1
10
读计数器2
0
0
1
11
无操作
1
×
×
××
禁止使用
0
1
1
××
无操作
3)计数器0~2。
三个完全相同的16位减计数器。
每个通各有3个引脚,它们是:
CLK0~CLK2计数器0~2的输入时钟脉冲此引脚输入;
OUT0~OUT2计数器0~2的输出端;
GATE0~GATE2计数器0~2的门控脉冲输入端。
4)控制字寄存器。
控制字寄存器是一种只写寄存器,在对8253编程时,由CPU用输出指令向它写入控制字,来选定计数器通道,规定各计数器的工作方式,读写格式和数制。
其格式如图2.9所示:
BCD
图2.98253控制字格式
5)8253芯片的工作方式:
工作方式0:
计数结束中断方式;
工作方式1:
可编程单稳态输出方式;
工作方式2:
比率发生器;
工作方式3:
方波发生器;
工作方式4:
软件触发选通;
工作方式5:
硬件触发选通;
5.2电路设计
具体的设计电路如图2.10所示:
图2.10方波电路
6、继电器电路
此模块功能是实现单片机控制继电器的吸合来实现对LED灯的控制,其实验原理就是单片机给s8550PNP三极管低电平使其导通,然后控制继电器的线圈,使内部开关吸合,以致LED的电路能够导通。
具体电路如图2.11所示:
7、独立按键电路
键盘在单片机应用系统中,实现输入数据,传送命令的功能,是人工干预的主要手段。
因此设计5个独立按键来控制模块的选择运行,当某个按键按下时,单片机便执行对应的程序,具体的设计电路如图2.12所示:
图2.12独立按键电路
四、软件设计
1、主程序
主程序开始时要从存放实际键值的参数中取出刚读取到的键值送到累加器A,依次判断累加器A的低四位。
若检测到低电平,则说明与该位对应的按键按下,从而转到相应的处理子程序段,完成相应的操作,实现相应的功能后返回。
若没有检测到低电平,则返回。
主程序流程图如图4.1所示:
2、地址端口定义
#include
#include//绝对地址处理头文件,包含XBYTE,用XBYTE来定义扩展的I/O端口和外部RAM单元地址
#defineuintunsignedint
#defineucharunsignedchar
#definecontrolXBYTE[0xffd7]//定义控制字寄存器端口地址
#definePAXBYTE[0x3fd7]//定义端口PA地址
sbitA0=P2^6;//定义8255地址端口引脚A0
sbitA1=P2^7;//定义8255地址端口引脚A1
sbitdat=P0;//定义数据口D0~D7
#defineT0XBYTE[0x3fff]//定义定时器1地址
#defineT1XBYTE[0x7fff]
端口定义原则
由于A0、A1对应的端口是P2.6、P2.7,在程序开始需要定义控制字及需要使用的端口的地址,单片机共16位地址线,P2口是高八位地址线,P0口是低8位地址线,如表4.1所示:
表4.1端口地址表
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
A1
A0
*
*
*
*
*
*
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
*
*
0
1
0
*
*
*
其中*代表未知电平,对应表中A0、A1,把*默认为1,得到控制字的地址为0xffd7(A1=0,A0=0),对于8255A使用PA口,则需A1=0,A0=1,定义为0x3fd7,在8253A芯片使用时,用到了T0,T1计数器,为了区分8255A的PA口,定义地址为0x3fff(A1=0,A0=1),0x7fff(A1=1,A0=0)。
3、输出方波程序
若想单片机内部产生4KHZ即周期为250微秒的脉冲,单片机晶振频率为12MHZ,则此时计数初值X=M-N=(256-250)÷1=6,故只要在TH0,TL0中预置初始值6,将定时器/计数器T0设置成定时工作方式2即可实现。
具体程序如下:
voidT0_time()interrupt1
{
TH0=6;
TL0=6;
clk0=~clk0;//产生4kHZ脉冲
}
五、系统调试
1、硬件调试
在焊接过程中,我们采用焊一个模块,调试一个模块的原则,这样可以保证电路如果出错可以及时修改。
通过万用表,测试电路的通断,观察有无虚焊的地方,对芯片的引脚也进行了检查,逐个模块检查接地和VCC的连接。
总的来说,在硬件调试时发现了线路接错的现象,错误原因是在网上XX的芯片引脚图错误,经修改,所有模块调试均成功。
2、软件调试
对于软件调试,我在proteus中对整个电路图进行了绘制,一些比较复杂的线路,我采用了标号和总线方式,对于程序方面,用的是KeilC软件。
在不断的调试后,整个仿真图全部正常运行,但是也发现了一点,在proteus中仿真,单片机是无法复位的,最终所有模块均按程序执行。
3、软硬件联调
在软硬件联调时,感觉模块上的接线太多,但是电路已经焊出来了,我们就没做修改,把连线统一给固定住了;另外,也发现了8253A不能直接复位,只能通过断电复位,因此我们最终采用了每个模块都用上电复位,整体调试很成功。
六、功能测试
1、测试平台
在实验室工作台上进行的功能测试,当时室内温度26℃,对硬件电路影响不大。
2、测试工具
单片机开发板、双向USB线、笔记本电脑、整个电路模块、杜邦线、万用表
3、测试步骤
①通过电脑将程序下载至STC89C52RC单片机
②把整个电路模块的接地、VCC及数据端口连接,并检查,确保连线无误
③通过控制按键1~5,来控制各个模块的运行
4、测试结果
软硬件很符合要求,各个模块均实现了预期的功能,
总结
通过单片机应用技术课程上的学习,经过4个星期的努力,我们组最终完成了老师所要求的实验设计。
整个控制系统主要分为硬件设计和软件设计两个部分:
硬件设计主要是把单片机最小系统、键盘控制模块、流水灯模块等各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行提供一个硬件平台。
软件设计主要是通过编写程序代码,实现对整个系统的控制。
在系统上电复位后程序自动运行,通过接受查询外部的键盘参数值,控制各个模块的启停。
由于本次设计的要求时间较短,个人能力以及精力等因素的限制,加之设计经验的不足,该系统还有许多不尽如人意的地方。
该系统未能完全的实现设计的所有功能。
如:
利用8253A芯片实现红绿等交替点亮,但在实际电路中只实现了红灯闪亮,而绿灯只会变暗;还有光耦设计部分也没有完成。
通过这次单片机系统控制各个模块运行的设计,使我们从一开始对单片机各个引脚功能不太熟悉,到能开发一个简单的系统,在这整个过程中我学到了很多东西,掌握了一些常用的开发技能,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。
只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
致谢
经过很长时间的努力,我们在储忠老师的指导、同学耐心的帮助和组员的努力下终于完成了此次设计,并按设计要求实现了按键控制流水灯、译码器、交通灯、方波、继电器五个功能。
通过这次设计使我们从中学到到了很多课本上学不到的知识,了解了单片机的工作原理及端口地址定义,并学会了用单片机开发产品的完整的过程,明白了设计的概念。
通过自己亲自去动手和调试我明白的实践的重要性,明白了理论结合实践的含义,同时也大大的提高了自己的动手能力能力,这在我们以后的工作中都是非常有用的。
在这次设计中,感谢储忠老师对我们课程设计的指导和修改,感谢同学的帮助,在此表示衷心的感谢!
参考文献
[1]王静霞.单片机应用技术C语言版.北京:
电子工业出版社.2009
[2]谭浩强.C语言程序设计.北京:
清华大学出版社.2000
[3]余锡存.单片机原理及接口技术.西安:
西安电子科技大学出版社.2007
[4]周荷琴.微型计算机原理与接口技术.合肥:
中国科技大学出版社.2008
附录
附录1作品展示
单片机最小系统图
各个功能模块图
附录2硬件清单
STC89C52RC单片机一个
12MHZ晶振一个
30pf电容两个10uf电容一个
复位开关6个
4.7K排阻一个
1K电阻20个
单片机底座1个
各色LED灯共30个
8255A芯片一个
8253C芯片一个
LS138译码器一个
蜂鸣器一个
5V继电器一个
Ss8550三极管一个
排针50个
芯片底座共4个
杜邦线若干
焊接板2块
附录3软件清单
#include
#include//绝对地址处理头文件,包含XBYTE,用XBYTE来定义扩展的I/O端口和外部RAM单元地址
#defineuintunsignedint
#defineucharunsignedchar
sbitHC138A=P1^2;//位定义74HC138端口
sbitHC138B=P1^1;
sbitHC138C=P1^0;
#definecontrolXBYTE[0xffd7]//定义控制字寄存器端口地址
#definePAXBYTE[0x3fd7]//定义端口PA地址