交通灯课程设计可控制时间.docx
《交通灯课程设计可控制时间.docx》由会员分享,可在线阅读,更多相关《交通灯课程设计可控制时间.docx(21页珍藏版)》请在冰豆网上搜索。
交通灯课程设计可控制时间
一、课程设计的目的
本课程设计是自动化专业、电子信息技术专业学生在学完单片机原理及课程之后必修课程,它的教学目的和任务是综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
二、设计内容
利用单片机的定时/计数器,中断系统,以及阵列键盘和LED显示器进行设计。
在数码管显示器上实现电子时钟,并且能进行设置时间和暂停、启动控制;同时又有显示日期,设定闹铃功能
用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为B03C。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms计数,计20次产生秒。
在处理过程中加上了按键判断程序,能对按键处理。
三、设计要求
1、在PROTEUS中设计硬件,在KEIL51中编写软件,在PROTEUS中运行程序仿真实现。
2、写课程设计报告,给出设计思想,原理,硬件电路图,给出相应程序,并写出设计过程。
课程设计报告格式:
1、课程设计的目的
2、课程设计具体要求
3、MCS-51单片机系统简介
4、MCS-51单片机内部定时器/计数器简介
5、键盘和LED数码管显示器简介
6、基本原理
7、硬件电路
8、软件程序流程及代码
9、设计制作过程
10、总结
四、MCS-51单片机系统简介
MCS-51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,它包含51和52两个子系列。
-2-
对于51子系列,主要有8031、8051、8751三种机型,它们的指令系统与芯片引脚完全兼容,仅片内程序存储器有所不同,8031芯片不带ROM,8051芯片带4KROM,8751芯片带4KEPROM。
51子系列的主要特点为:
◆8位CPU。
◆片内带振荡器,频率范围1.2~12MHZ。
◆片内带128字节的数据存储器。
◆片内带4K的程序存储器。
◆程序存储器的寻址空间为64K字节。
◆片外数据存储器的寻址空间为64K字节。
◆128个用户位寻址空间。
◆21个字节特殊功能寄存器。
◆4个8位的并行I/O接口:
P0、P1、P2、P3。
◆2个16位定时器/计数器
◆2个优先级别的5个中断源。
◆1个全双工的串行I/O接口,可多机通信。
◆111条指令,含乘法指令和除法指令。
◆片内采用单总线结构。
◆有较强的位处理能力。
◆采用单一+5V电源。
图一、MCS-51系列单片机的内部结构
五、MCS-51单片机内部定时器/计数器中断系统简介
定时/计数器的主要特性:
1.MCS-51系列中51子系列有两个16位的可编程定时/计数器:
定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/计数器T2。
2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。
-3-
3.每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。
通过编程可设定工作于某种方式。
4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。
图二、定时/计数器T0、T1的结构及工作原理
定时/计数器的工作方式:
方式0是13位的定时/计数方式,因而最大计数值(满值)为2的13次幂,等于8192。
如计数值为N,则置入的初值X为:
X=8192-N
方式1的结构与方式0结构相同,只是把13位变成16位,16位的加法计数器被全部用上。
由于是16位的定时/计数方式,因而最大计数值(满值)为2的16次幂,等于65536。
如计数值为N,则置入的初值X为:
X=65536-N
方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。
当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发图6.5上的三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。
由于是8位的定时/计数方式,因而最大计数值(满值)为2的8次幂,等于256。
如计数值为N,则置入的初值X为:
X=256-N
方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3。
方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:
GATE、C/T、TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。
-4-
六、键盘简介
1、键盘的工作原理
键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
它的结构和产生的波形如图所示。
图三、键盘开关及波形示意图
2、键盘抖动的消除
消除按键盘抖动通常有两种方法:
硬件消抖和软件消抖。
图四、硬件消抖电路
硬件消抖可以采用R—S触发器或单稳态电路。
软件消抖是利用延时来跳过抖动过程
3、键盘的结构形式
键盘的结构形式一般有两种:
独立式键盘与矩阵式键盘。
独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。
-5-
矩阵式键盘又叫行列式键盘。
用I/O口线组成行、列结构,键位设置在行列的交点上。
例如4×4的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。
七、LED数码管显示器简介
图五、LED显示器的结构
LED数码管的显示方式:
LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。
要显示字符,直接在I/O线送相应的字段码。
LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。
LED显示器从译码方式上有硬件译码方式和软件译码方式。
从显示方式上有静态显示方式和动态显示方式。
在使用时可以把它们组合起来。
在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。
仿真电路图:
程序代码:
ORG0000H
AJMPMAIN
ORG0003H
AJMPKEY_SELECT
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,00H,90H,0FFH
DELAY_1MS:
MOVR5,#14H
DL1:
MOVR4,#19H
DL2:
DJNZR4,DL2
DJNZR5,DL1
RET
MAIN:
MOV30H,#03;黄灯3秒
MOV31H,#30;南北红灯
MOV32H,#30;东西红灯
MOV33H,#0EEH
MOV34H,#0DEH
MOV35H,#0FEH
MOV36H,#0F5H
MOV37H,#0F3H
MOV38H,#0F7H
MOV50H,#0
MOV61H,#0
MOV71H,#0
MOV72H,#0
MOV75H,#0
MOV76H,#0
MOV77H,#0
MOVDPTR,#TABLE
SETBEX0
SETBEA
LOOP:
MOV50H,#0
MOV40H,30H
MOV41H,31H
MOV42H,32H
MOV43H,33H
MOV44H,34H
MOV45H,35H
MOV46H,36H
MOV47H,37H
MOV48H,38H
MOVA,41H
SUBBA,40H
MOV49H,A
MOVA,42H
SUBBA,40H
MOV4AH,A
;;;;;;;;;;;
CLREA
MOVA,50H
CJNEA,#0,LOOP
;;;;;;;;;;;
MOVR7,49H
MOVR3,41H
MOVR2,49H
SETBEA
MOVA,43H
MOVP1,A
LOOP1_0:
MOVR6,#250
LOOP1_1:
LCALLLOOP5
DJNZR6,LOOP1_1
DECR3
DECR2
DJNZR7,LOOP1_0
;;;;;;;;;;;
CLREA
MOVA,50H
CJNEA,#0,LOOP
;;;;;;;;;;;;;
MOVR7,40H
MOVR3,40H
MOVR2,40H
SETBEA
MOVA,44H
MOVP1,A
LOOP2_0:
MOVR6,#250
LOOP2_1:
LCALLLOOP5
CJNER6,#126,LOOP2_10
MOVA,45H
MOVP1,A
LOOP2_10:
CJNER6,#1,LOOP2_11
MOVA,44H
MOVP1,A
LOOP2_11:
DJNZR6,LOOP2_1
DECR3
DECR2
DJNZR7,LOOP2_0
;;;;;;;;;;;
CLREA
MOVA,50H
CJNEA,#0,LOOP
;;;;;;;;;;;;;
MOVR7,4AH
MOVR3,4AH
MOVR2,42H
SETBEA
MOVA,46H
MOVP1,A
LOOP3_0:
MOVR6,#250
LOOP3_1:
LCALLLOOP5
DJNZR6,LOOP3_1
DECR3
DECR2
DJNZR7,LOOP3_0
;;;;;;;;;;;;;;;;
CLREA
MOVA,50H
CJNEA,#0,LOOP6
;;;;;;;;;;;;;;
MOVR7,40H
MOVR3,40H
MOVR2,40H
SETBEA
MOVA,47H
MOVP1,A
LOOP4_0:
MOVR6,#250
LOOP4_1:
LCALLLOOP5
MOVA,R6
CJNER6,#126,LOOP4_20
MOVA,48H
MOVP1,A
LOOP4_20:
CJNER6,#1,LOOP4_21
MOVA,47H
MOVP1,A
LOOP4_21:
DJNZR6,LOOP4_1
DECR3
DECR2
DJNZR7,LOOP4_0
LOOP6:
AJMPLOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP5:
CLRP2.4
CLRP2.5
MOVA,#0FFH
MOVP0,A
MOVA,R3
MOVB,#0AH
DIVAB
MOV52H,A
MOV51H,B
MOVA,R2
MOVB,#0AH
DIVAB
MOV54H,A
MOV53H,B
MOV60H,#01H
MOVA,60H
MOVP2,A
RLA
MOV60H,A
MOVA,51H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOVA,60H
MOVP2,A
RLA
MOV60H,A
MOVA,52H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOVA,60H
MOVP2,A
RLA
MOV60H,A
MOVA,53H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOVA,60H
MOVP2,A
RLA
MOV60H,A
MOVA,54H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOV60H,#0
MOVA,#0FFH
MOVP0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_SELECT:
CLREA
MOVA,#0FFH
MOVP0,A
WAIT0:
JNBP3.2,WAIT0
INC61H
MOVA,#0B6H
MOVP1,A
K1:
ACALLLOOP7
JNBP3.5,SELECT_5
JNBP3.6,SELECT_6
JNBP3.7,SELECT_7
JNBP3.2,SELECT_2
JNBP3.4,SELECT_40
SJMPK1
SELECT_40:
LJMPSELECT_4
OUT:
CLRP2.5
CLRP2.4
MOVR7,#5
MOVR2,#5
MOVR3,#5
MOVA,#0F6H
MOVP1,A
MOV43H,#0F6H
MOV44H,#0F6H
MOV45H,#0F6H
MOV46H,#0F6H
MOV47H,#0F6H
MOV48H,#0F6H
MOV50H,#1
SETBEA
RETI
;;;;;;;;;;;;;;;;;;;;;;;;
SELECT_5:
LCALLDELAY_10MS
JBP3.5,K1
WAIT5:
JNBP3.5,WAIT5
CLRP2.5
MOVA,#0EEH
MOVP1,A
WAIT50:
JBP3.5,WAIT50
SJMPOUT
SELECT_6:
LCALLDELAY_10MS
JBP3.6,K1
WAIT6:
JNBP3.6,WAIT6
CLRP2.5
MOVA,#0F5H
MOVP1,A
WAIT60:
JBP3.6,WAIT60
SJMPOUT
SELECT_7:
LCALLDELAY_10MS
JBP3.7,K1
WAIT7:
JNBP3.7,WAIT7
CLRP2.5
MOVA,#0F6H
MOVP1,A
WAIT70:
JBP3.7,WAIT70
LJMPOUT
;;;;;;;;;;;;;;;;;;;;;;;;;
SELECT_2:
LCALLDELAY_10MS
JBP3.2,SELECT_211
LCALLDELAY_300MS
JBP3.2,Y1
WAIT1:
MOVA,61H
CJNEA,#1,SELECT_20
INC31H
MOVA,31H
CJNEA,#94,SELECT_21
MOV31H,#18
SJMPSELECT_21
SELECT_20:
INC32H
MOVA,32H
CJNEA,#94,SELECT_21
MOV32H,#18
SELECT_21:
LCALLLOOP8
JNBP3.2,WAIT1
SELECT_211:
LJMPK1
Y1:
INC61H
MOVA,61H
CJNEA,#03,SELECT_211
MOV61H,#0
MOVA,#0F6H
MOVP1,A
SELECT_210:
LJMPOUT
;;;;;;;;;;;;;;;;;;;;;;;
SELECT_4:
LCALLDELAY_10MS
JBP3.4,SELECT_210
LCALLDELAY_300MS
JBP3.4,W1
WAIT2:
JNBP3.4,WAIT2
MOVA,61H
CJNEA,#1,SELECT_4_0
DEC31H
MOVA,31H
CJNEA,#17,SELECT_211
MOV31H,#93
AJMPK1
SELECT_4_0:
DEC32H
MOVA,32H
CJNEA,#17,SELECT_41
MOV32H,#93
AJMPK1
W1:
MOVA,61H
CJNEA,#1,SELECT_4_1
INC31H
MOVA,31H
CJNEA,#94,SELECT_41
MOV31H,#18
AJMPK1
SELECT_4_1:
INC32H
MOVA,32H
CJNEA,#94,SELECT_41
MOV32H,#18
SELECT_41:
LJMPK1
;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_10MS:
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
LCALLDELAY_1MS
RET
DELAY_300MS:
MOVR1,#30
DELAY:
LCALLDELAY_10MS
DJNZR1,DELAY
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP7:
MOVA,61H
CJNEA,#1,LOOP7_1
MOVA,#0B6H
MOVP1,A
MOVA,31H
MOVB,#0AH
DIVAB
MOV72H,A
MOV71H,B
SJMPDISP
LOOP7_1:
MOVA,#076H
MOVP1,A
MOVA,32H
MOVB,#0AH
DIVAB
MOV72H,A
MOV71H,B
DISP:
MOV60H,#10H
MOVA,60H
MOVP2,A
MOVA,71H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOV60H,#20H
MOVA,60H
MOVP2,A
MOVA,72H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOVA,#0FFH
MOVP0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;
LOOP8:
MOVR0,#150
LOOP8_0:
MOVA,61H
CJNEA,#1,LOOP8_1
MOVA,31H
MOVB,#0AH
DIVAB
MOV72H,A
MOV71H,B
SJMPDISP2
LOOP8_1:
MOVA,32H
MOVB,#0AH
DIVAB
MOV72H,A
MOV71H,B
DISP2:
MOV60H,#10H
MOVA,60H
MOVP2,A
MOVA,71H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOV60H,#20H
MOVA,60H
MOVP2,A
MOVA,72H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAY_1MS
MOVA,#0FFH
MOVP0,A
DJNZR0,LOOP8_0
RET
END
十一、总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
-11-
回顾起此次单片机课程设计,我仍感慨颇多。
的确,从拿到课程设计题目后,从理论到实践,在接近一个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
-11-