单片机实验报告 交通灯14页精选文档.docx
- 文档编号:11140911
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:20
- 大小:19.91KB
单片机实验报告 交通灯14页精选文档.docx
《单片机实验报告 交通灯14页精选文档.docx》由会员分享,可在线阅读,更多相关《单片机实验报告 交通灯14页精选文档.docx(20页珍藏版)》请在冰豆网上搜索。
单片机实验报告交通灯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、君子之交
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机实验报告 交通灯14页精选文档 单片机 实验 报告 交通灯 14 精选 文档