单片机实验报告 交通灯14页精选文档.docx

上传人:b****3 文档编号:5064529 上传时间:2023-05-08 格式:DOCX 页数:20 大小:19.91KB
下载 相关 举报
单片机实验报告 交通灯14页精选文档.docx_第1页
第1页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第2页
第2页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第3页
第3页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第4页
第4页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第5页
第5页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第6页
第6页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第7页
第7页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第8页
第8页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第9页
第9页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第10页
第10页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第11页
第11页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第12页
第12页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第13页
第13页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第14页
第14页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第15页
第15页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第16页
第16页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第17页
第17页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第18页
第18页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第19页
第19页 / 共20页
单片机实验报告 交通灯14页精选文档.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机实验报告 交通灯14页精选文档.docx

《单片机实验报告 交通灯14页精选文档.docx》由会员分享,可在线阅读,更多相关《单片机实验报告 交通灯14页精选文档.docx(20页珍藏版)》请在冰点文库上搜索。

单片机实验报告 交通灯14页精选文档.docx

单片机实验报告交通灯14页精选文档

实验四交通灯实验

1、实验目的

1)按键、数码管、发光二极管综合应用编程技术

2)定时中断技术

3)按键中断技术

二、实验实现的功能

1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。

2)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。

再按该键,恢复正常显示。

三、系统硬件设计

四、系统软件设计

说明:

1、红绿灯规则:

绿变红时:

绿灯亮→绿灯闪→绿灯灭黄灯亮→黄灯灭红灯亮;

红变绿时:

红灯亮→红灯黄灯同时亮→红灯黄灯同时灭绿灯亮;

2、左边数1、2位数码管计左右灯时间,3、4位计上下灯时间;

3、1键按下时进入设置红灯时间模式,同时计时停止;再次按下进入绿灯设置模式;再次按下退出设置模式,同时继续计时。

设置模式时2键选中灯加,3键选中灯减。

4、按键4进入和退出紧急模式

P1M1EQU91H

P1M0EQU92H

DX1DATA30H;数码管个位显示

DX2DATA31H;数码管十位显示

NB1DATA32H;数码管百位显示

NB2DATA33H;数码管千位显示

REDATA34H;红灯亮时间,单位为秒

GRDATA35H;绿灯亮时间,单位为秒

YEDATA36H;黄灯亮时间,单位为秒

NUM1DATA37H;计算东西向亮灯时间参数

NUM2DATA38H;计算南北向亮灯时间参数

DELAY_1DATA39H;延时参数

DELAY_2DATA40H;延时参数

KF1DATA41H;按键标志位

KF2DATA42H;按键标志位

KF3DATA43H;按键标志位

KF4DATA44H;按键标志位

ORG0000H

LJMP0030H

ORG001BH;定时器1定时中断,记秒

LJMPINTR0

ORG0030H

MOVP1M1,#00000000B

MOVP1M0,#11111111B

MOVSP,#060H;设置堆栈指针

MOVRE,#025;红灯亮时间默认值25S

MOVGR,#020;绿灯亮时间默认值20S

MOVYE,#005;黄灯亮时间默认值5S

MOVR1,#000;设置时间时暂停红绿灯

MOVR2,#000;保存键值

MOVR7,#000;记中断次数,R7=100为1秒

MOVKF1,#000;初始化相关参数

MOVKF2,#000

MOVKF3,#000

MOVKF4,#000

MOVTMOD,#10H;定时器初始化

MOVTH1,#0D8H;定时时间10ms

MOVTL1,#0F0H

SETBET1

SETBTR1

SETBEA;开启总中断

MAIN:

LCALLLIGHT;主程序

/*********************************************************按键逻辑********************************************************************/

KY:

MOVR1,#001;暂停计时

CJNER2,#000,KY0

LJMPKY15

KY0:

CJNER2,#004,KY1;紧急按键

MOVR2,#000

KY00:

LCALLDP1;应急模式

LCALLDP2

LCALLLIGHT7

CJNER2,#004,KY00

MOVR2,#000

LJMPKY15

AJMPKY00

KY1:

CJNER2,#001,KY15;进入设置模式

MOVR2,#000

KY10:

MOVNUM2,RE

LCALLCOUNT2

LCALLDP3

LCALLLIGHT7

CJNER2,#001,KY11

MOVR2,#000

LJMPKY20

KY11:

CJNER2,#002,KY12;红灯加

MOVR2,#000

INCRE

MOVA,RE

CJNEA,#100,KY12

MOVRE,#000

KY12:

CJNER2,#003,KY14;红灯减

MOVR2,#000

MOVA,RE

CJNEA,#000,KY13

MOVRE,#099

LJMPKY14

KY13:

DECRE

KY14:

AJMPKY10

KY15:

MOVR1,#000

RET

KY20:

MOVNUM2,GR;退出设置

LCALLCOUNT2

LCALLDP3

LCALLLIGHT8

CJNER2,#001,KY21

MOVR2,#000

LJMPKY3

KY21:

CJNER2,#002,KY22;绿灯加

MOVR2,#000

INCGR

MOVA,GR

CJNEA,#100,KY22

MOVGR,#000

KY22:

CJNER2,#003,KY24;绿灯减

MOVR2,#000

MOVA,GR

CJNEA,#000,KY23

MOVGR,#099

LJMPKY24

KY23:

DECGR

KY24:

AJMPKY20

KY3:

MOVA,RE;利用CJNE指令对CY位的影响来比较大小

CJNEA,GR,KY31;处理最终设置结果

AJMPBIG

KY31:

JCBIG

AJMPSMALL

SMALL:

MOVA,RE

SUBBA,GR

MOVYE,A

AJMPKY4

BIG:

LJMPKY10;当绿灯时间小于等于红灯时间时重新设置

KY4:

MOVR1,#000

RET

/*******************************************************按键扫描及确定****************************************************************/

KS:

LCALLKS1

LCALLKS2

LCALLKS3

LCALLKS4

RET

KS1:

MOVA,KF1

CJNEA,#001,KS12;按键标志位消抖

SETBP0.5

CLRP3.6

SETBP3.7

JBP0.5,KS13

MOVR2,#001

MOVKF1,#000

AJMPKS13

KS12:

SETBP0.5

CLRP3.6

SETBP3.7

JNBP0.5,KS13

MOVKF1,#001

KS13:

RET

KS2:

MOVA,KF2

CJNEA,#001,KS22;按键标志位消抖

SETBP0.6

CLRP3.6

SETBP3.7

JBP0.6,KS23

MOVR2,#002

MOVKF2,#000

AJMPKS23

KS22:

SETBP0.6

CLRP3.6

SETBP3.7

JNBP0.6,KS23

MOVKF2,#001

KS23:

RET

KS3:

MOVA,KF3

CJNEA,#001,KS32;按键标志位消抖

SETBP0.7

CLRP3.6

SETBP3.7

JBP0.7,KS33

MOVR2,#003

MOVKF3,#000

AJMPKS13

KS32:

SETBP0.7

CLRP3.6

SETBP3.7

JNBP0.7,KS33

MOVKF3,#001

KS33:

RET

KS4:

MOVA,KF4

CJNEA,#001,KS42;按键标志位消抖

SETBP0.5

CLRP3.7

SETBP3.6

JBP0.5,KS43

MOVR2,#004

MOVKF4,#000

AJMPKS43

KS42:

SETBP0.5

CLRP3.7

SETBP3.6

JNBP0.5,KS43

MOVKF4,#001

KS43:

RET

/**********************************************************红绿灯亮灯规则*************************************************************/

/*绿变红时:

绿灯亮→绿灯闪→绿灯灭黄灯亮→黄灯灭红灯亮;

红变绿时:

红灯亮→红灯黄灯同时亮→红灯黄灯同时灭绿灯亮*/

LIGHT:

LOOP0:

MOVR5,GR;东西向绿灯亮

MOVR6,GR

MOVR3,RE;南北向红灯亮

MOVR4,RE

MOVR0,YE;保存原黄灯时间

LOOP01:

LCALLKY

MOVNUM1,R6

MOVNUM2,R4

LCALLCOUNT1

LCALLCOUNT2

LCALLLIGHT1

LCALLDP1

LCALLDP2

MOVA,R0

XRLA,R6

JNZLOOP01

LJMPLOOP1

LOOP1:

LCALLKY

MOVNUM1,R6

MOVNUM2,R4

LCALLCOUNT1;东西向绿灯闪,南北向红灯亮

LCALLCOUNT2

LCALLLIGHT2

LCALLDP1

LCALLDP2

MOVA,R0

DECA

XRLA,R4

JNZLOOP1

LJMPLOOP2

LOOP2:

MOVA,R0

MOVR5,A;东西向黄灯亮

MOVR6,A;南北向红黄灯亮

MOVR3,#099

MOVR4,#099

LOOP21:

LCALLKY

MOVNUM1,R6

MOVNUM2,R6

LCALLCOUNT1

LCALLCOUNT2

LCALLLIGHT3

LCALLDP1

LCALLDP2

MOVA,#099

SUBBA,R0

DECA

XRLA,R4

JNZLOOP21

LJMPLOOP3

LOOP3:

MOVR5,RE;东西向红灯亮

MOVR6,RE

MOVR3,GR;南北向绿灯亮

MOVR4,GR

MOVR0,YE;保存原黄灯时间

LOOP31:

LCALLKY

MOVNUM1,R6

MOVNUM2,R4

LCALLCOUNT1

LCALLCOUNT2

LCALLLIGHT4

LCALLDP1

LCALLDP2

MOVA,R0

XRLA,R4

JNZLOOP31

LJMPLOOP4

LOOP4:

LCALLKY

MOVNUM1,R6

MOVNUM2,R4

LCALLCOUNT1;东西向绿灯闪,南北向红灯亮

LCALLCOUNT2

LCALLLIGHT5

LCALLDP1

LCALLDP2

MOVA,R0

DECA

XRLA,R6

JNZLOOP4

LJMPLOOP5

LOOP5:

MOVA,R0

MOVR5,A;东西向红黄灯亮

MOVR6,A;南北向黄灯亮

MOVR3,#099

MOVR4,#099

LOOP51:

LCALLKY

MOVNUM1,R6

MOVNUM2,R6

LCALLCOUNT1

LCALLCOUNT2

LCALLLIGHT6

LCALLDP1

LCALLDP2

MOVA,#099

SUBBA,R0

DECA

XRLA,R4

JNZLOOP51

LCALLLOOP0

/*******************************************************运行模式的红绿灯**************************************************************/

/**********东西向绿灯亮,南北向红灯亮**********/

LIGHT1:

MOVP2,#0EBH

SETBP3.5

CLRP3.4

SETBP3.3

CLRP3.2

RET

/**********东西向绿灯闪,南北向红灯亮*********/

LIGHT2:

CJNER7,#050,LIGHT21

LIGHT21:

JNCLIGHT22

LCALLLIGHT24

AJMPLIGHT23

LIGHT22:

LCALLLIGHT25

LIGHT23:

RET

LIGHT24:

MOVP2,#0EBH;东西向绿灯亮,南北向红灯亮

SETBP3.5

CLRP3.4

SETBP3.3

CLRP3.2

RET

LIGHT25:

MOVP2,#0EFH;东西向无灯亮,南北向红灯亮

SETBP3.5

CLRP3.4

SETBP3.3

SETBP3.2

RET

/*********东西向黄灯亮,南北向红黄灯亮*******/

LIGHT3:

MOVP2,#0A6H

SETBP3.5

CLRP3.4

CLRP3.3

SETBP3.2

RET

/*********东西向红灯亮,南北向绿灯亮**********/

LIGHT4:

MOVP2,#05DH

CLRP3.5

SETBP3.4

SETBP3.3

SETBP3.2

RET

/********东西向红黄灯亮,南北向绿灯闪*********/

LIGHT5:

CJNER7,#050,LIGHT51

LIGHT51:

JNCLIGHT52

LCALLLIGHT54

AJMPLIGHT53

LIGHT52:

LCALLLIGHT55

LIGHT53:

RET

LIGHT54:

MOVP2,#05DH;东西向红灯亮,南北向绿灯亮

CLRP3.5

SETBP3.4

SETBP3.3

SETBP3.2

RET

LIGHT55:

MOVP2,#07DH;东西向红灯亮,南北向无灯亮

SETBP3.5

SETBP3.4

SETBP3.3

SETBP3.2

RET

/********东西向红黄灯亮,南北向黄灯亮*********/

LIGHT6:

MOVP2,#034H

SETBP3.5

SETBP3.4

CLRP3.3

SETBP3.2

RET

/**********东西南北路口都变成红灯***********/

LIGHT7:

MOVP2,#06DH

SETBP3.5

CLRP3.4

SETBP3.3

SETBP3.2

RET

/*****东西南北路口都变成绿灯*****/

LIGHT8:

MOVP2,#0DBH

CLRP3.5

SETBP3.4

SETBP3.3

CLRP3.2

RET

/**************************************************中断服务程序**********************************************************************/

INTR0:

PUSHPSW;原始时间分秒的确定

PUSHAcc

LCALLKS

MOVTH1,#0D8H

MOVTL1,#0F0H

INCR7

CJNER7,#100,INTR04

MOVR7,#000H

CJNER1,#000,INTR04

CJNER6,#000,INTR01;倒计时

MOVA,R5

MOVR6,A

LJMPINTR02

INTR01:

DECR6

INTR02:

CJNER4,#000,INTR03;倒计时

MOVA,R3

MOVR4,A

LJMPINTR04

INTR03:

DECR4

INTR04:

POPAcc

POPPSW

RETI

/************************************************数码管各位显示计算*******************************************************************/

COUNT1:

MOVA,NUM1;计算东西向亮灯时间

MOVB,#10

DIVAB

MOVDX2,A

MOVDX1,B

RET

COUNT2:

MOVA,NUM2;计算南北向亮灯时间

MOVB,#10

DIVAB

MOVNB2,A

MOVNB1,B

RET

/*****************************************************数码管显示**********************************************************************/

DP1:

MOVA,DX2;东西向两位数码管显示

MOVDPTR,#TAB0

MOVCA,@A+DPTR

CLRP0.0

MOVP1,A

LCALLDL0

MOVP1,#000H

SETBP0.0

MOVA,DX1

MOVDPTR,#TAB1

MOVCA,@A+DPTR

CLRP0.1

MOVP1,A

LCALLDL0

MOVP1,#000H

SETBP0.1

RET

DP2:

MOVA,NB2;南北向两位数码管显示

MOVDPTR,#TAB0

MOVCA,@A+DPTR

CLRP0.2

MOVP1,A

LCALLDL0

MOVP1,#000H

SETBP0.2

MOVA,NB1

MOVDPTR,#TAB0

MOVCA,@A+DPTR

CLRP0.3

MOVP1,A

LCALLDL0

MOVP1,#000H

SETBP0.3

RET

DP3:

CJNER7,#050,DP31;设置模式时数码管显示模式

DP31:

JNCDP32

LCALLDP2

AJMPDP33

DP32:

LCALLDL0

DP33:

RET

/***************************************************************延时******************************************************************/

/*说明:

延时所用的三条令,stc10f08xe中与常用的51单片机中的指令执行时间不同*/

DL0:

MOVDELAY_1,#16;延时时间:

[2+(2+250*4+4)×16+4]/11.0592

DL01:

MOVDELAY_2,#250;=16102/11.0592

DJNZDELAY_2,$;=1.456ms

DJNZDELAY_1,DL01;

RET;;

TAB0:

DB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,067H;无小数点的LED字模表

TAB1:

DB0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H,0FFH,0E7H;有小数点的LED字模表

END

五、实验过程中遇到的问题及解决方法

1、怎么将按键按描程序放入中断?

改变用无延时的标志位按键扫描,然后在中断中调用。

2、汇编怎么写比较函数简洁?

CJNE指令中,如果目标操作数作为一个无符号整数时,其值小于源操作数对应的无符号整数,那么CY置1,否则置0。

利用CY进行判断比较。

3、为什么程序正常跑一二十分钟左右数码管会变的不稳定,时间更长甚至会错乱?

初始化时SP=07H,使用时应先将其设置到合适位置;由于中断中对A进行操作,而A的改变会对主程序产生影响,所以要把A也入栈保存。

4、不同模式的灯跳转时没有0?

改变跳转条件,用比较的方式进行跳转。

本程序有些是用加1或减1然后再用异或指令跳转。

指导老师签字:

日期:

希望以上资料对你有所帮助,附励志名言3条:

1、常自认为是福薄的人,任何不好的事情发生都合情合理,有这样平常心态,将会战胜很多困难。

2、君子之交

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2