实验交通灯要求及报告示例.docx 您所在的位置:网站首页 单片机NST-16F826PC 实验交通灯要求及报告示例.docx

实验交通灯要求及报告示例.docx

2023-04-19 20:29| 来源: 网络整理| 查看: 265

实验交通灯要求及报告示例.docx

《实验交通灯要求及报告示例.docx》由会员分享,可在线阅读,更多相关《实验交通灯要求及报告示例.docx(25页珍藏版)》请在冰豆网上搜索。

实验交通灯要求及报告示例.docx

实验交通灯要求及报告示例

交通灯控制器的设计

一、实验目的

掌握单片机最小系统构成,单片机定时/计数器的工作原理,中断系统的特点,显示器、按键的接口原理,以及综合应用程序的设计方法。

二、实验要求

设计一个以单片机为核心的交通灯控制器,用于控制十字路口的信号灯按指定规律变化。

信号灯分东西方向和南北方向,每个方向各有一组红、黄、绿信号灯。

信号灯的状态变化规律如表1所示。

表1交通灯的状态表

序号

状态

东西信号灯

南北信号灯

时间

说明

绿

绿

0

加电后起始状态

5秒

黄灯双闪

1

东西通行

25秒

东西绿南北红

2

换向提示

5秒

东西黄南北红

3

南北通行

25秒

东西红南北绿

4

换向提示

5秒

东西红南北黄

1、基本要求

用发光二极管模拟信号灯,使用LED数码管作倒计时显示器,实现表1要求,设计相应硬件、软件,并写出实验报告。

2、创新要求

1)通过按键进入紧急状态、黄灯双闪状态等;

2)数码管上显示通行状态的示意符号;

3)状态时间可以通过按键或遥控设置;

4)更改成更实用的通行规则或其它有实用意义的创新;

5)制作实物。

三、实验方案

(一)实现基本要求的方案

1、硬件方案

指示灯采用电路板上的8只发光二极管中的左侧3个及右侧3个,分别代表东西、南北方向的红、黄、绿信号灯。

倒计时显示器采用4位数码管,分别显示东南、西北方向的通行状态时间。

单片机采用STC89C52RD,晶振采用12M。

整个硬件电路框图如图3-1所示。

 

2、软件方案

计时采用定时中断实现,时间显示采用显示子程序实现,状态转换及信号灯控制通过设置状态代码在主程序中实现。

(二)创新方案

1、创新功能描述

(1)在数码管倒计时显示的左侧显示通行状态的示意符号,各状态的示意符号如下:

允许通行——“H”,中间的横杠向上滚动;

禁行——“三”,静止显示三条横杠;

黄灯状态——“H”,闪动显示。

(2)通过按键设置各状态时间

设置四个按键:

“设置”、“右移”、“加1”、“确认”,用以调整、设置各状态的时间。

2、实现方案

详见后面的说明。

四、实现基本要求的软硬件设计

(一)硬件设计

1、指示灯电路设计

利用P1口直接控制和驱动,原理图如图2所示。

图中RES-8为由8只电阻构成的电阻排。

阻值按下式估算:

RES=(VCC-Vd-Vol)/Id=(5-1.5-0.5)/5=0.6K

图3-2指示灯电路原理图

2、倒计时显示电路设计

采用动态显示方案,共设8位数码管,采用共阳接法,段接口由P0口提供,位接口由P2口提供,经三极管驱动后接至各位数码管的公共端。

电路图如图3所示。

R1-R9为限流电阻,阻值约100-200Ω。

图3显示器电路原理图

(二)软件设计

1、总体设计

整个软件由主程序、显示子程序、T0定时中断服务程序等构成。

T0被设置成方式1定时,允许中断,定时时间设置成50MS,在中断服务程序中对此时间计数可实现更长的定时。

显示子程序固定对显示缓冲区中的8个单元中的代码转成7段码后送显示器显示。

闪烁显示、示意符号显示也由该程序完成。

2、主程序设计

主程序完成初始化、调用子程序、输出信号灯控制代码等功能,框图如图4所示。

3、显示子程序设计

显示子程序采用动态扫描方式对显示缓冲区中的代码经查表转成七段码送显示器显示。

在动态扫描过程中,各位数码管是逐位点亮的,某一时刻哪位被点亮由位码控制,每位点亮时间要持续大约1-2MS,此时间用延时子程序实现。

重复扫描时间间隔一般不大于20MS,此要求由主程序对显示子程序的重复调用来保证。

显示子程序框图如图5所示。

 

4、T0中断服务程序设计

T0被设置成方式1定时50MS,允许中断,在中断服务程序中对50MS计数,进而可以判断出是否到0.5秒、1秒。

每到0.5秒将闪烁的亮灭指示标志(FLM)取反;每到1秒将当前的倒计时值(Tsec)减1,再分解出个位和十位送到显示缓冲区,供显示子程序显示。

定时初值计算如下:

由于晶振频率为12M,所以机器周期为1uS,假设定时初值为X,则有:

(216-X)*1=50*103

X=65536-50000=15536=3CB0H

程序框图如图6所示。

5、资源分配

程序在工作过程中要占用片内RAM等硬件资源,具体分配如表3-2所示。

表3-2资源分配表

资源

用途

说明

00H-07H

0组工作寄存器

R0-R7

08H-0FH

1组工作寄存器

R0-R7,PSW.4=1

10H-17H

显示缓冲区

DBUF

18H

状态计数单元

NST

19H

倒计时单元

Tsec

1AH

50MS计数单元

N50MS

1BH

暂空

1CH

暂空

1DH

暂空

1EH

暂空

1FH

暂空

20H

标志位单元

20H.0=FLM

21H-2FH

暂空

30H-7FH

堆栈

T0

方式1定时50MS

允许中断

6、源代码编写

;主程序

DBUFEQU10H;显示缓冲区10H-17H

NSTEQU18H.状态计数单元

TSECEQU19H;倒计时单元

N50MSEQU1AH;50毫秒计数单元

FLMBIT20H.0;闪烁亮灭标志位

ORG0000H

LJMPMAIN;转主程序

ORG000BH

LJMPINT_T0;转T0中断服务程序

;主程序

ORG0030H

MAIN:

MOVSP,#30H;堆栈从31H单元开始

MOVA,#0AH;显示器中间4位未用,0AH为熄灭码序号

MOVDBUF+2,A

MOVDBUF+3,A

MOVDBUF+4,A

MOVDBUF+5,A

MOVNST,#0;加电后起始状态为黄灯闪烁

MOVA,NST

MOVDPTR,#TABTIME;取起始状态对应的持续时间

MOVCA,@A+DPTR

MOVTSEC,A;持续时间送倒计时单元

MOVB,#10;将时间值转成2位BCD码

DIVAB

MOVDBUF,A;时间值BCD码送显缓最左边和最右边2位

MOVDBUF+6,A

MOVDBUF+1,B

MOVDBUF+7,B

;MOVA,NST;根据当前状态输出对应的信号灯控制码

;MOVDPTR,#TABXHD;信号灯控制码表首地址为TABXHD

;MOVCA,@A+DPTR

;MOVP1,A;信号灯控制码从P1口输出

MOVTMOD,#01H;初始化TO方式1定时50毫秒

MOVTH0,#3CH

MOVTL0,#0B0H

SETBEA;允许T0中断

SETBET0

SETBTR0;启动T0开始定时

M1:

LCALLDISP;显示倒计时值

MOVA,NST;判断当前状态是否起始状态,双向黄灯闪烁

JNZM1A

JBFLM,M1A

MOVA,#0FFH;信号灯灭

SJMPM1B

M1A:

MOVDPTR,#TABXHD;取当前状态对应的信号灯代码

MOVCA,@A+DPTR

M1B:

MOVP1,A

SJMPM1;主程序死循环

;显示子程序

DISP:

MOVR0,#DBUF;取显缓首址

MOVR1,#7FH;起始位码

D1:

MOVA,@R0;从显缓中取一个数

MOVDPTR,#TSEG;查表得到对应的七段码

MOVCA,@A+DPTR

MOVP0,A;七段码送段接口

INCR0;显缓指针加1

MOVA,R1;输出位码

MOVP2,A

ACALLD1MS;延时1毫秒

RRA;位码右移

MOVR1,A

CJNEA,#7FH,D1;8位未扫描完,继续扫描

RET

D1MS:

MOVR6,#0FFH

D1A:

NOP

NOP

NOP

DJNZR6,D1A

RET

TSEG:

DB03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,0FFH;0-9及熄灭的七段码顺序排列

;T0定时中断服务程序

INT_T0:

PUSHACC;现场入栈

PUSHPSW

MOVTH0,#3CH;重装50MS定时初值

MOVTL0,#0B0H

MOVA,N50MS;对50毫秒计数

INCA

CJNEA,#200,$+3;计数最大值为200

JCT0A

CLRA

T0A:

MOVN50MS,A

MOVB,#10;判别是否到0.5秒

DIVAB

MOVA,B

JNZT0E

CPLFLM;0.5秒到,闪烁的亮灭标志取反

MOVA,N50MS

MOVB,#20;判别是否到1秒

DIVAB

MOVA,B

JNZT0E

MOVA,TSEC;1秒到,倒计时值减1

JZT0B

DECTSEC

SJMPT0D

T0B:

INCNST;倒计时值到0,改变状态值

MOVA,NST

CJNEA,#5,$+3;最大状态后回到状态1

JCT0C

MOVNST,#1

T0C:

MOVA,NST;取新状态对应的时间值

MOVDPTR,#TABTIME

MOVCA,@A+DPTR

MOVTSEC,A

T0D:

MOVA,TSEC;时间值转成BCD码送到显缓对应单元

MOVB,#10

DIVAB

MOVDBUF,A

MOVDBUF+6,A

MOVDBUF+1,B

MOVDBUF+7,B

T0E:

POPPSW;恢复现场

POPACC

RETI;中断返回

TABTIME:

DB5,25,5,25,5;各状态对应的持续时间

TABXHD:

DB0BDH,7EH,0BDH,0DBH,0BDH;各状态对应的信号灯控制码

END

五、实验总结

1、实现的基本功能

通过设计与调试,实现了实验要求中的信号灯按要求亮灭以及用数码管显示倒计时时间两项基本功能。

2、实现的创新

创新功能尚未实现。

3、取得的收获、存在的不足与自我评价

(1)显示电路及显示程序的设计方法

数码管显示电路一般工作在动态扫描方式,需要一个8位的段接口和一个大于数码管位数的位接口,在本设计中分别占用单片机的P0口和P2口。

在动态扫描方式下数码管的电流较大,一般需要位驱动电路,本设计采用三极管。

显示程序一般编成子程序,供主程序调用。

显示程序的主要工作过程是在显示缓冲区中逐个取出各位数码管要显示的数,再通过查表的方法转换成七段码送显示电路的段接口,同时在位接口输出对应的位扫描码。

此过程要反复进行。

(2)定时与中断的实现方法

使用定时器定时的方法如下:

根据定时时间确定工作方式,再计算定时初值。

在程序中,当主程序进行初始化时要对定时/计数器的工作方式、初值进行初始化,如果允许中断还要开中断、启动定时/计数器。

在定时中断服务程序中,每次进入都要重装定时初值,再采取计数等方式实现更长的定时。

在中断服务程序中还要注意利用入栈、出栈指令保护和恢复现场。

(3)整个设计采用模块化的结构,便于调试和修改。

显示子程序具有通用性,稍加修改就可以实现更多的显示功能,如特殊符号、闪烁显示等。

4、存在的不足

尚未实现创新。

5、自我评价:

中等

 

创新设计

本创新欲实现用按键修改各状态时间的功能。

1、功能描述

交通灯控制器共有5个状态,对应5种时间(t0-t4)。

在通过按键设置某个时间时,同时通过显示器显示提示符及对应的时间,格式如下:

t

0

-

0

5

其中t0是提示符,表示当前要设置的时间是状态0对应的时间;-是分隔符,05是以十进制表示的时间值。

当前被设置的位还将闪动。

2、按键的设置及硬件电路

共设4个按键:

“设置”、“右移”、“加1”、“确认”。

按键电路采用独立式按键,原理图如下:

 

 

按键与接口的对应关系如下:

键名称

设置

右移

加1

确认

键符号

K0

K1

K2

K3

键接口

P34

P35

P36

P37

3、按键的功能描述

为了实现按键的功能,并且便于程序设计,特做如下总体规划:

设置一个设置状态标志位:

Fset,按下“设置”键后该标志置1,按下“确认”键后该标志清0。

在片内RAM中设置一个单元用于存放设置时间的序号,取名为Nset,每按一次“设定”键该单元内容加1,用于指示当前要设置第几个时间值。

设置一个位序号计数单元Nbit,每按一次右移键该单元内容加1。

设置5个单元,存放设置后的时间值,首地址取名TBUF。

(1)“设置”键

按此键进入设定状态,设置状态标志位Fset置1,显示器显示t0-05,时间值十位闪烁,每加按一次该键Nset单元加1,显示器同时显示下一个被设置的时间。

(2)“右移”键

此键使设置参数的闪动位置右移一位,每加按一次位序号Nbit加1。

(3)“加1”键

此键使设置的参数加1。

(4)“确认”键

此键使设置后的参数按对应的序号存到TBUF中的对应单元,退出设置状态,使Fset清0。

4、按键功能的实现方法

(1)被设置参数的显示方法

为了能在修改设置参数的同时,在显示器上显示修改过程和结果,被设置的参数在按下“设置”键时调入显示缓冲区,并将相应的提示符号一并按顺序调入相应单元。

(2)设置参数的存储

为了能够设置和修改,被设置参数在片内RAM中存放。

加电复位后从程序存储器中载入默认值,重新设置时再由此读出到显示缓冲区,修改确认后再保存到此区域。

(3)设置状态下闪烁位置的处理

闪烁位置代表当前设定位,按右移键后闪烁位置也右移,处理方法如下:

a)按下“设置”键后闪烁位置指示代码如下:

0

0

0

1

0

0

0

0

其中1的位置代表设置值的十位闪烁。

同时位序号单元Nbit清0。

b)每加按一次“右移”键,闪烁代码右移1位,同时位序号Nbit加1,大于等于2后回0,闪烁位代码也回起始状态。

(4)有关参数存储单元及标志位的定义

FSETBIT20H.1;设置状态标志位

NSETEQU1CH;设置参数序号(0-4)

NBITEQU1DH;设置位序号(0-1,十位、个位)

TBUFEQU21H;设置参数存储区(21H-25H)

5、程序设计

;键识别程序

;功能:

识别出哪个键按下,转向相应的键处理程序

;“设置”键处理程序

;功能:

置位设置标志,设置参数及提示符送显缓,置十位闪烁标志

;“右移”键处理

;功能:

将设置参数的位序号加1,并设置对应的闪烁位代码

;“加1”键处理

;功能:

将已调入显缓中的被设置参数的对应位按十进制加1

;说明:

被设置参数的指针(地址)=#DBUF+3+(NBIT)

 

;“确认”键处理

;功能:

将显缓中的被设置参数转换成二进制后保存到TBUF对应单元,并将设置标志位清0。

;说明:

被设置参数的十位在DBUF+3单元,个位在DBUF+4单元;

存放设置参数的单元地址=#TBUF+(NSET);

二进制=十位*10+个位

 

;键抖动及避免键重复处理

;说明:

按键在按下和抬起时有抖动,会形成抖动脉冲,造成多次按键的干扰;另外,当键按下时间较长时,会被重复处理,应当避免。

;方法:

识别出有键按下后先不处理,等延时一段时间(大约10毫秒)后再识别,如果键仍然按下说明不是抖动,可以继续处理,否则为键抖动或干扰,不予处理。

具体方法是:

设置一个键按下标志位KD和一个键处理标志位KP,当第一次识别出有键按下后将KD置1,但不处理,延时后再识别键是否按下,如果按下且KD=1则继续处理。

键处理时,同时将键处理标志KP置1,如果键仍不抬起但KP=1则不再重复处理。

无键按下时,上述两个标志位清0。

该段程序放在键盘程序的最开始。

 

;程序源代码

;键盘子程序

KEY:

MOVP3,#0FFH;有键按下否?

MOVA,P3

ANLA,#0F0H

CJNEA,#0F0H,KYY

CLRKD

CLRKP

RET

KYY:

JBKD,KYD;去抖动

SETBKD

RET

KYD:

JNBKP,KNP;避免重复处理

RET

KNP:

SETBKP

JNBP3.4,KJ0;键识别并转向相应处理程序

JNBP3.5,KJ1

JNBP3.6,KJ2

JNBP3.7,KJ3

RET

KJ0:

LJMPKF0;转向设置键处理

KJ1:

JNBFSET,KJE;非“设置”状态右移键无效

LJMPKF1;转向右移键处理

KJ2:

JNBFSET,KJE

LJMPKF2;转向加1键处理

KJ3:

JNBFSET,KJE

LJMPKF3;转向确认键处理

KJE:

RET

;设置键处理

KF0:

JBFSET,KF0A

SETBFSET

MOVNSET,#0

SJMPKF0B

KF0A:

MOVA,NSET

INCA

CJNEA,#5,$+3

JCKF0D

CLRA

KF0D:

MOVNSET,A;取出对应的设置值到显缓

KF0B:

MOVA,NSET

MOVR0,#TBUF

ADDA,R0

XCHA,R0

MOVA,@R0

MOVB,#10

DIVAB

MOVDBUF+3,A;设置参数转成十进制送显缓

MOVDBUF+4,B

MOVDBUF,#0E1H;t

MOVDBUF+1,NSET;序号

MOVDBUF+2,#0FDH;—

MOVDBUF+5,#0AH;其余位熄灭

MOVDBUF+6,#0AH

MOVDBUF+7,#0AH

MOVPBLK,#10H;起始闪烁位为参数十位

MOVNBIT,#0

RET

;右移键处理

KF1:

MOVA,NBIT

INCA

CJNEA,#2,$+3

JCKF1A

MOVNBIT,#0

MOVPBLK,#10H

RET

KF1A:

MOVNBIT,A

MOVPBLK,#08H

RET

;加1键处理

KF2:

MOVA,#DBUF+3

ADDA,NBIT

MOVR0,A

INC@R0

CJNE@R0,#10,$+3

JCKF2E

MOV@R0,#0

KF2E:

RET

;确认键处理

KF3:

MOVA,#TBUF

ADDA,NSET

MOVR0,A

MOVA,DBUF+3;十位*10+个位

MOVB,#10

MULAB

ADDA,DBUF+4

MOV@R0,A

CLRFSET

MOVDBUF+3,#0AH

MOVDBUF+4,#0AH

RET

6、原来程序中需要修改的地方

(1)主程序中增加:

上电复位后从时间表中读出默认时间到片内RAM的时间缓冲区TBUF

MOVDPTR,#TABTIME

MOVR0,#TBUF

CLRFSET

M0:

CLRA

MOVCA,@A+DPTR

MOV@R0,A

INCDPTR

INCR0

CJNER0,#TBUF+5,M0

(2)T0中断服务程序中

A、从时间表中取数送倒计时单元改为从TBUF中读取

MOVA,#TBUF

ADDA,NST

MOVR0,A

MOVA,@R0

MOVTSEC,A

B、倒计时值送显缓时增加判别条件,在设置状态不送,以免干扰设置状态的显示内容

T0D:

JBFSET,T0E

C、增加单元、位、七段码的定义

FSETBIT20H.1;设置状态标志位

NSETEQU1CH;存放设置参数序号

NBITEQU1DH;存放当前设置参数的位号(0:

十位,1:

个位)

TBUFEQU21H;存放

PBLKEQU26H;依次存放5个设置参数

TSEG:

DB…….,0E1H,0FDH;“t”和“-“的七段码

评分标准

等级

要求

有创新且实物工作正常,功能完善合理;实验报告原理正确、条理清晰、内容详实、格式工整;答辩中对设计原理掌握清楚。

有创新或有实物且设计或实现的功能完善合理;实验报告原理正确、条理清晰、内容详实、格式工整;答辩中对设计原理掌握较清楚。

设计实现了基本功能;实验报告内容较全面且原理基本正确、条理清晰、格式工整。

及格

设计实现了基本功能;实验报告内容较全面且原理、方案、结果基本正确

不及格

未按时提交设计成果;或抄袭严重;或设计原理严重错误;或设计内容未达到基本要求

提交成果及答辩时间:

2012年12月18日下午

现场答疑及中期检查:

2012年12月4日下午

地点:

上课教室(1617)

QQ答疑:

184840629(加好友时声明班级姓名)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有