崔建彪单片机课程设计报告第二部分.docx
《崔建彪单片机课程设计报告第二部分.docx》由会员分享,可在线阅读,更多相关《崔建彪单片机课程设计报告第二部分.docx(12页珍藏版)》请在冰豆网上搜索。
![崔建彪单片机课程设计报告第二部分.docx](https://file1.bdocx.com/fileroot1/2022-12/31/df986470-c432-4512-a1c1-6c5e3eacfa72/df986470-c432-4512-a1c1-6c5e3eacfa721.gif)
崔建彪单片机课程设计报告第二部分
一、设计目的
为了熟悉单片机课程的精髓,增加对单片机课程的认识程度,特别是对自身的实践能力的提高,所以选择进行单片机应用系统设计,在设计过程中对Keil软件和protel99软件进行熟悉和应用。
首先对这两个软件进行学习也扩大自己对计算机软件的认识程度和了解应用程度。
这样能充分锻炼自己对理论和实践的结合认识,增强自己在实践方面的能力,比较好地掌握单片机知识。
也会为自己将来面临的就业打下良好的基础!
二、设计要求和设计指标
本设计程序能够正常显示一个交通灯所能达到的指示效果,并能够对其稍作改进后,可以显示不同的效果,满足对交通的指挥和向导作用。
本次设计锻炼了我自己的动手实践能力和软件编程能力。
另外本次单片机应用系统设计让我更好地了解到单片机知识在实际生活中的应用,让我更加有兴趣去学习单片机知识。
本次交通灯应用系统设计中,要求设计一个十字路口的交通灯控制电路,要求南北方向和东西方向车道的车辆交替运行。
分别有红、黄、绿三种通行灯在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道,黄灯亮时,要求每秒闪亮一次。
带紧急按钮功能,当紧急按钮按下时,所有方向均亮起红灯;夜间运行模式按钮,按下时,所有方向黄灯闪烁。
可以在线修改红绿灯等待间隔时间,实现显示倒计时功能。
在现有的研发装置上掌握相关硬件正确地进行连线,在计算机上编写汇编程序,调试,下载,配合外部电路进行系统功能调试,设计并实现上述要求的系统。
要求按设计制定方案,直至正确地实现系统功能,写出课程设计报告,理解设计方案后自己动手修改程序并连线,构成硬件电路,通过独立调试实现预定功能。
三、设计内容
3.1设计任务
该课程设计是利用STC-89C52RC单片机中断系统、以及行列键盘和LED显示器等部件,设计一个单片机交通信号灯。
设计的交通信号灯通过LED灯显示,并能通过按键实现设置时间和暂停、启动控制等。
3.2硬件部分
单片机是由运算器、控制器、存储器、输入设备以及输出设备共五个基本部分组成的。
单片机是把包括运算器、控制器、少量的存储器、最基本的输入输出口电路、串行口电路、中断和定时电路等都集成在一个尺寸有限的芯片上。
选用的STC-89C52与同系列的STC-89C52在功能上有明显的提高,最突出是的可以实现在线的编程。
用于实现系统的总的控制。
其主要功能列举如下:
1、为一般控制应用的8位单片机
2、晶片内部具有时钟振荡器(传统最高工作频率可至33MHz)
3、内部程式存储器(ROM)为4KB
4、内部数据存储器(RAM)为128B
5、外部程序存储器可扩充至64KB
6、外部数据存储器可扩充至64KB
7、32条双向输入输出线,且每条均可以单独做I/O的控制
8、5个中断向量源
9、2组独立的16位定时器
10、1个全双工串行通信端口
11、8751及8752单芯片具有数据保密的功能
12、单芯片提供位逻辑运算指令
通常,单片机由单个集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统.
STC-89C52RC是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC-89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC-89C52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC-89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电。
VCC:
STC-89C52RC电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反向放大器输入端。
XTAL2:
系统时钟的反向放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两个引脚与地之间加入一个20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
RESET:
STC-89C52RC的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,STC-89C52RC便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。
如果是使用8751内部程序空间时,此引脚要接成高电平。
此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
ALE/PROG:
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
STC-89C52RC可以利用这个引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为STC-89C52RC是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
PSEN:
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
STC-89C52RC可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
PORT0(P0.0~P0.7):
端口0是一个8位宽的开路电极(OpenDrain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。
其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。
如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。
设计者必须外加一个锁存器将端口0送出的地址锁住成为A0~A7,再配合端口2所送出的A8~A15合成一组完整的16位地址总线,而定位地址到64K的外部存储器空间。
PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。
P2除了当作一般I/O端口使用外,若是在STC-89C52RC扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地,若将端口1的输出设为高电平,便是由此端口来输入数据。
如果是使用8052或是8032的话,P1.0又当作定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发引脚。
PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
P3.0:
RXD,串行通信输入。
P3.1:
TXD,串行通信输出。
P3.2:
INT0,外部中断0输入。
P3.3:
INT1,外部中断1输入。
P3.4:
T0,计时计数器0输入。
P3.5:
T1,计时计数器1输入。
P3.6:
WR:
外部数据存储器的写入信号。
P3.7:
RD,外部数据存储器的读取信号。
3.3软件部分
3.3.1定时器的设置
定时器需定时50毫秒,故T1工作于方式1。
初值计算:
TC=M-T/T计数 =216-50ms/1us=15536=3CBOH
START:
MOVTMOD,#10H;令TO为定时器方式1
MOVTH0,#3CH;装入定时器初值
MOVTL0,#0BOH
SETBEA ;打开总中断
SETBET1 ;开T1中断
SETBER ;启动T1计数器
CLRFLAG1
CLRFLAG2
CLRFLAG3
MOV R3, #20H ;软件计数器赋初值
3.3.2相应中断服务子程序
ORG 001BH
LJMP DSD
ORG0030H
DSD:
INC R3
MOVTH0,#3CH;重装入定时器初值
MOVTL0,#BOH
CJNER3,#20,FH
DECR0
DECR1
MOVR3,#00H
FH:
RETI
3.3.3程序的软件延时:
STC-89C52的工作频率为0—33MHZ,我们选用的STC-89C52单片机的工作频率为12MHZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12M)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DELAY:
MOVR4,#08H延时1秒主程序
DE2:
LCALLDELAY1
DJNZR4,DE2
RET
DELAY1:
MOVR4,#00H;延时125us子程序
D1:
MOVR5,#00H
D2:
CJNER5,DL2
CJNER4,D1
RET
DELAY1为一个双重循坏循环次数为256*256=65536所以延时时间=65536*2=131072us约为125us
3.4设计方案及工作原理
中断技术是计算机中一项很重要的技术,它既和硬件有关,也和软件有关,正是因为有了中断才使计算机的工作更加灵活,效率更高。
单片机交通信号灯的模拟系统就是根据中断这一方式进行工作的。
对于中断系统的应用,需要用户完成的工作主要是编制中断应用程序,它包括两部分内容:
一是编制中断初始化程序;二是编制中断服务程序。
中断初始化实质上就是用软件对四个与中断有关的特殊功能寄存器进行设置,使CPU按照要求对中断源进行管理和控制。
中断初始化一般是放在主程序中,与主程序其他初始化内容一起完成设置。
中断服务程序是具有特定功能的独立程序段。
他是为了中断源的特定要求服务,以中断返回指令结束。
在本设计中,实际控制的灯只有6个,即:
东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。
下表为交通状态及红绿灯状态
状态1
状态3
状态4
状态6
东西向
禁行
等待变换
通行
等待变换
南北向
通行
等待变换
禁行
等待变换
东西红灯
0
0
1
1
东西黄灯
1
1
1
0
东西绿灯
1
1
0
1
南北红灯
1
1
0
0
南北绿灯
0
1
1
1
南北黄灯
1
0
1
1
共有4钟状态:
东西红灯亮,南北绿灯亮(11011101/DDH);东西红灯亮,南北黄灯亮(10111101/BDH);东西绿灯亮,南北红灯亮(11101101/EDH);东西黄灯亮,南北红灯亮(11100111/E7H)。
括号中是P2端口8个引脚值P2.7,P2.6,P2.5,P2.4,P2.3,P2.2,P2.1,P2.0以及对应的十六进制码。
在用于显示发光二极管时,直接由MOV指令将十六进制码送入P2口。
刚才的4个状态是依次变换的,这就要涉及到状态的判断和衔接了。
先把P2端口的值与所有的4个状态码比较,若相同则判断成功当前状态,再把下一状态的状态码送显P2即可。
程序如下:
MOVA,P2
DJNZA,#0DDH,D1
MOVP2,#BDH
D1:
DJNZA,BDH,D2
MOVP2,#EDH
D2:
CJNZA,#EDH,D3
MOVP2,#E7H
D3:
CJNZA,#E7H,Y
MOVR2,#DDH
……
本次设计的交通灯原理图如下:
上图表示只用了六个LED灯来表示四个方向的红黄绿共十二个LED灯。
3.5程序流程图
3.6交通灯汇编程序如下
ORG0000H
LJMPSETUP
ORG0003H;外部中断INT0的入口地址
LJMPINT0SER
ORG0013H;外部中断INT1的入口地址
LJMPINT1SER
ORG0030H
SETUP:
SETBIT0;初始化,打开中断
SETBIT1
SETBEX0;MOVIE,#15H
SETBEX1
SETBEA
MAIN:
MOVR2,#0AH;闪烁次数
MOVP2,#0FFH;信号灯初始状态全灭
CLRP2.2;东西向绿灯亮,东西向放行
CLRP2.3;南北向红灯亮,南北向禁止通行
MOVR4,#3CH;延时30S
LP1:
LCALLDL
DJNZR4,LP1
SETBP2.2
D:
CLRP2.1;东西向黄灯闪烁
LCALLDL
SETBP2.1
LCALLDL
DJNZR2,D
MOVR4,#06H
LP2:
LCALLDL
DJNZR4,LP2
MOVP2,#0FFH
CLRP2.0;东西向红灯亮,东西向禁止通行
CLRP2.5;南北向绿灯亮,南北向通行
MOVR4,#3CH;延时30S
LP3:
LCALLDL
DJNZR4,LP3
SETBP2.5;熄灭南北向绿灯
MOVR2,#06H
N:
CLRP2.4;南北向黄灯闪烁
LCALLDL
SETBP2.4
LCALLDL
DJNZR2,N
MOVR4,#06H;延时3S
LP4:
LCALLDL
DJNZR4,LP4
LJMPMAIN;重新开始下一个周期
INT0SER:
MOVA,P2;保存中断前状态
MOVP2,#0FFH;
MOVR1,#11H
I0:
CLRP2.0;紧急情况红灯全亮
CLRP2.3
ACALLDL
DJNZR1,I0;红灯亮6S
SETBP2.0
SETBP2.3
MOVP2,A;恢复中断前状态
RETI
INT1SER:
MOVA,P2;保存中断前状态
MOVP2,#0FFH
MOVR1,#0AH
I1:
CLRP2.1;夜间模式下黄灯闪烁
CLRP2.4
ACALLDL
SETBP2.1
SETBP2.4
ACALLDL
DJNZR1,I1
SETBP2.1
SETBP2.4
MOVP2,A;恢复中断前状态
RETI
DL:
MOVR7,#05H;0.5S软件延时子程序
DL1:
MOVR6,#086H
DL2:
MOVR5,#0FAH
DJNZR5,$
DJNZR6,DL2
DJNZR7,DL1
RET
END
四、本设计改进建议
时间设定中没有黄灯的等待闪烁时间,以及自动根据车流改变红绿灯时间,此外,还没有充分考虑的把现代管理、人工智能运用到交通的控制中,来计算交通控制点之间的距离,来更合理的安排红、绿灯的持续时间,使城市的交通管理更加人性化。
使人们远离目前的交通拥塞的现象。
另外对本次设计未能作出对各方向红灯亮之后的复位问题,以上问题需要认真查阅相关资料和请教指导老师后对不足之处进行改进。
五、总结
通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。
使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高。
最后,对在这个专周帮助我的所有同学和指导老师再次表示衷心的感谢!
六、主要参考文献
【1】《单片机原理及应用》梅丽凤主编,清华大学出版社等
【2】《单片机原理技术及应用》刘训非等,清华大学出版社
【3】《单片机原理及应用》张毅刚高等教育出版社
【4】《单片机实验教程》彭冬明韦友春北京理工大学出版社等