欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    51单片机模拟交通信号灯.docx

    • 资源ID:11807968       资源大小:48.13KB        全文页数:27页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机模拟交通信号灯.docx

    1、51单片机模拟交通信号灯单片机实验设计报告交通信号灯模拟系统设计交通信号灯模拟系统设计摘要: 本系统以单片机为核心,主要应用单片机中定时器计数器,IO接口,中断系统等,结合8279键盘控制电路,数码管显示以及LED灯实现对十字路口交通信号灯的智能控制。成功实现了利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,通过按键对红绿灯点亮和熄灭时间进行调整及设置以及对红绿灯点亮和熄灭时间进行倒计时时间显示等基本功能。并在此基础上进一步扩展,实现了对某些特殊功能的操作,如:突发紧急情况,所有路线全部红灯,或南北向(主干道)强制绿灯通行,以及东西向(次干道)强制绿灯等,并且可在交通高峰期(系统默认

    2、上午7:00-8:00,下午17:00-18:00)自动修改绿灯时间。系统功能完善,可操控性好,代码通俗易懂。关键字:51单片机 交通信号灯 智能控制 8279主要功能: 分析题目可知,有两种方案设计的方法,也即两条不同的主干分别对应不同的方案,方案一以键盘控制为主干,穿插对系统时钟的检测,倒计时的检测等,系统主干为循环检测键盘是否被按下并作出相应操作。方案二以交通信号灯不同的点亮与熄灭状态为主干,即系统的主干是交通灯状态的循环,在循环中检测按键并作出相应调整。此次试验选择的是方案二,因为对方案一的代码实现比较复杂。信号灯的状态依次为:南北绿灯,东西红灯-南北黄灯,东西红灯-南北红灯,东西绿灯

    3、-南北红灯,东西黄灯。解决这部分问题的关键在于8279键盘扫描和相应的数码管显示,在实验帮助里有详细代码,另一个难点在于内置时钟和倒计时显示,这一部分内容通过使用单片机内的定时器能很好的解决,实验帮助五有详细的代码,通过定时器T1产生中断来定时,从而完成一秒的时间。具体详见附录代码。设计的主要内容:第一部分,系统开机界面,设置及人机互动的按键控制,流程图如下:(相应的功能流程图中已给出)第二部分, 系统主干部分,即交通信号灯4个大循环以及循环内部检测按键完成拓展功能的实现,在循环内检测按键,实现相应功能,流程如下:具体细节,例如定时器的设计等在纸质档报告中有详细分析,在这里就不赘述总结: 总的

    4、来说这次试验比较成功,题目要求的功能基本都实现了,对于单片机汇编程序语言的理解也更深刻了,课本上的知识比较分散,每部分之间都没有什么联系,通过实验很好的把各部分之间联系起来,加深记忆,更便于理解。唯一不足的是对于题目的考虑不周,特殊功能采用键盘扫描子程序解决了,而没有采用终端,使得程序应激性不好,没有很好的应变性。在以后的编程中会注意这方面的内容。附录:(详细代码);-Z8279 EQU 0FF82H ;8279 状态/命令口地址D8279 EQU 0FF80H ;8279 数据口地址LEDMOD EQU 00H ;左边输入 八位字符显示 ;外部译码键扫描方式,双键互锁LEDFEQ EQU 2

    5、FH ;扫描速率LEDCLS EQU 0C1H ;清除显示 RAMLEDWR0 EQU 80H ;设定的将要写入的显示RAM地址READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字;- ORG 0000H AJMP START ORG 001BH ;INT T1 入口地址 AJMP INT_T1 ORG 0040HSTART: MOV SP,#60H LCALL INIT8279 ;初始化8279 MOV R3,#0H ;时 MOV R2,#0H ;分 MOV R1,#0H ;秒 MOV R7,#0H ;倒计时时间 MOV R0,#20 ;50毫秒 MOV 40H,#0 ;

    6、用于改变主次干道时长比 MOV R6,#0FFH ;标志 MOV TMOD,#10H MOV TL1,#00H ;50毫秒的时间常数 MOV TH1,#4CH SETB EX0 SETB ET1 SETB EA ;允许中断; 初始状态,全红灯 MOV DPTR,#8300H MOV A,#0FH MOVX DPTR,A; 键盘操作WAIT: LCALL GETKEY ;读键盘 CJNE A,#0FFH,CONT ;判断是否有键输入 MOV A,B CJNE A,#3CH,KEY_C ;输入键是C,转CLEAR_T LCALL CLEAR_TKEY_C: CJNE A,#3AH,KEY_A ;输

    7、入键是A,转START_T LCALL START_TKEY_A: CJNE A,#3DH,KEY_D ;输入键是D,转STOP_T LCALL STOP_TKEY_D: CJNE A,#3BH,KEY_E ;输入键是B,转SET_T LCALL SET_T ;设置系统时间KEY_E: CJNE A,#3FH,KEY_B ;输入键是F,转SET_COUT LCALL SET_COUT ;设置倒计时间KEY_B: CJNE A,#3EH,CONT ;输入键是E,转MONITOR AJMP MONITORCONT: CJNE R6,#0FFH,WAIT;若无秒标志则循环 LCALL DISPLAY

    8、 ;显示时间 MOV R6,#0 ;清标志 SJMP WAIT ;循环MONITOR: NOP SJMP $ ;等待回到监控;按键对应的功能 CLEAR_T: ;时间清零子程序 CLR TR1 ;关计数器 MOV R3,#0H ;小时清零 MOV R2,#0H ;分钟清零 MOV R1,#0H ;秒清零 MOV R0,#20 ;10毫秒清零 MOV R7,#0H ;倒计时时间清零 MOV R6,#0FFH ;置秒标志 RETSTART_T: ;电子钟计时子程序;程序主要部分;程序开始执行后将循环在这部分 CIRCLE: LCALL STATION1 ;南北绿灯,东西红灯 LCALL STATI

    9、ON2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATION3 ;南北红灯,东西绿灯 LCALL STATION4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLE RET;STATION1STATION1: ;南北绿灯,东西红灯 MOV R7,30H MOV A,R7 ADD A,40H MOV R7,A MOV DPTR,#8300H MOV A,#96H ;南北绿灯,东西红灯 MOVX DPTR,A SETB TR1; 扫描键盘WO1: LCALL GETKEY ;读键盘 CJNE A,#0FFH,JB1 ;判断是否有键输入 MOV A,B CJNE A,#3FH,PUSHB1

    10、;若是按下F,则清零并且返回 MOV R4,#1 LCALL GETWORD ;读倒计时时间数 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R7,A ;保存输入的值 INC A MOV 30H,A LCALL DISPLAY ;显示时间PUSHB1: CJNE A,#3BH,PUSHC1 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器 MOV R3,#0H ;小时清零 MOV R2,#0H ;分钟清零 MOV R1,#0H ;秒清零 MOV R0,#20 ;10毫秒清零 MOV R7,#0H ;倒计时时间清零 MOV R6,#0FF

    11、H ;置秒标志 AJMP WAITPUSHC1: CJNE A,#3CH,PUSHD1 MOV R7,#3 ;若按下C,输出3秒红灯 MOV DPTR,#8300H MOV A,#0FH MOVX DPTR,APUSHD1: CJNE A,#3DH,PUSHE1 ;若按下D,南北绿灯5秒 MOV R7,#5 MOV A,#96H MOVX DPTR,A PUSHE1: CJNE A,#3EH,JB1 MOV R7,#5 MOV A,#69H MOVX DPTR,A JB1: CJNE R7,#0H,WO1 RET ;STATION2STATION2: MOV R7,#3 MOV DPTR,#8

    12、300H MOV A,#06H MOVX DPTR,A SETB TR1WO2: LCALL GETKEY ;读键盘 CJNE A,#0FFH,JB2 ;判断是否有键输入 MOV A,B CJNE A,#3FH,PUSHB2 ;若是按下F,则清零并且返回 MOV R4,#1 LCALL GETWORD ;读倒计时时间数 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R7,A ;保存输入的值 INC A MOV 30H,A LCALL DISPLAY ;显示时间PUSHB2: CJNE A,#3BH,PUSHC2 ;若是按下B,则清零并且返回WAIT C

    13、LR TR1 ;关计数器 MOV R3,#0H ;小时清零 MOV R2,#0H ;分钟清零 MOV R1,#0H ;秒清零 MOV R0,#20 ;10毫秒清零 MOV R7,#0H ;倒计时时间清零 MOV R6,#0FFH ;置秒标志 AJMP WAITPUSHC2: CJNE A,#3CH,PUSHD2 MOV R7,#3 ;若按下C,输出3秒红灯 MOV DPTR,#8300H MOV A,#0FH MOVX DPTR,APUSHD2: CJNE A,#3DH,PUSHE2 ;若按下D,南北绿灯5秒 MOV R7,#5 MOV A,#96H MOVX DPTR,A PUSHE2: C

    14、JNE A,#3EH,JB2 MOV R7,#5 MOV A,#69H MOVX DPTR,A JB2: CJNE R7,#0H,WO2 RET;STATION3STATION3: ;南北红灯,东西绿灯 MOV R7,30H MOV DPTR,#8300H MOV A,#69H MOVX DPTR,A SETB TR1WO3: LCALL GETKEY ;读键盘 CJNE A,#0FFH,JB3 ;判断是否有键输入 MOV A,B CJNE A,#3FH,PUSHB3 ;若是按下F,则清零并且返回 MOV R4,#1 LCALL GETWORD ;读倒计时时间数 MOV A,B MOV B,#

    15、10 DIV AB SWAP A ADD A,B MOV R7,A ;保存输入的值 INC A MOV 30H,A LCALL DISPLAY ;显示时间PUSHB3: CJNE A,#3BH,PUSHC3 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器 MOV R3,#0H ;小时清零 MOV R2,#0H ;分钟清零 MOV R1,#0H ;秒清零 MOV R0,#20 ;10毫秒清零 MOV R7,#0H ;倒计时时间清零 MOV R6,#0FFH ;置秒标志 AJMP WAITPUSHC3: CJNE A,#3CH,PUSHD3 MOV R7,#3 ;若按下C,输出3

    16、秒红灯 MOV DPTR,#8300H MOV A,#0FH MOVX DPTR,APUSHD3: CJNE A,#3DH,PUSHE3 ;若按下D,南北绿灯5秒 MOV R7,#5 MOV A,#96H MOVX DPTR,A PUSHE3: CJNE A,#3EH,JB3 MOV R7,#5 MOV A,#69H MOVX DPTR,A JB3: CJNE R7,#0H,WO3 RET;STATION4STATION4: MOV R7,#3 MOV DPTR,#8300H MOV A,#09H MOVX DPTR,A SETB TR1WO4: LCALL GETKEY ;读键盘 CJNE

    17、A,#0FFH,JB4 ;判断是否有键输入 MOV A,B CJNE A,#3FH,PUSHB4 ;若是按下F,则清零并且返回 MOV R4,#1 LCALL GETWORD ;读倒计时时间数 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R7,A ;保存输入的值 INC A MOV 30H,A LCALL DISPLAY ;显示时间PUSHB4: CJNE A,#3BH,PUSHC4 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器 MOV R3,#0H ;小时清零 MOV R2,#0H ;分钟清零 MOV R1,#0H ;秒清零 M

    18、OV R0,#20 ;10毫秒清零 MOV R7,#0H ;倒计时时间清零 MOV R6,#0FFH ;置秒标志 AJMP WAITPUSHC4: CJNE A,#3CH,PUSHD4 MOV R7,#3 ;若按下C,输出3秒红灯 MOV DPTR,#8300H MOV A,#0FH MOVX DPTR,APUSHD4: CJNE A,#3DH,PUSHE4 ;若按下D,南北绿灯5秒 MOV R7,#5 MOV A,#96H MOVX DPTR,A PUSHE4: CJNE A,#3EH,JB4 MOV R7,#5 MOV A,#69H MOVX DPTR,A JB4: CJNE R7,#0H

    19、,WO4 RET ;电子钟停止的部分STOP_T: ;电子钟停止计时子程序 CLR TR1 RET;时钟设置部分 SET_T: ;设置初值子程序 CLR TR1 ;关计数器 MOV R4,#7 LCALL GETWORD ;读小时数 CJNE A,#0FFH,INVALID ;判断输入合法性 MOV A,B ADD A,#232 JC INVALID ;判断输入小时值 24 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R3,A ;保存输入的值 MOV R4,#5 LCALL GETWORD ;读分钟数 CJNE A,#0FFH,INVALID ;判断

    20、输入合法性 MOV A,B ADD A,#196 JC INVALID ;判断输入分钟数 60 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R2,A ;保存输入的值 MOV R4,#3 LCALL GETWORD ;读秒钟数 CJNE A,#0FFH,INVALID ;判断输入合法性 MOV A,B ADD A,#196 JC INVALID ;判断输入分钟值 60 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R1,A ;保存输入的值 AJMP SET_TOKSET_COUT: MOV R4,#1 LCAL

    21、L GETWORD ;读倒计时时间数 CJNE A,#0FFH,INVALID ;判断输入合法性 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R7,A ;保存输入的值 INC A MOV 30H,A AJMP SET_TOKINVALID: LCALL CLEAR_T ;时间清零SET_TOK: LCALL DISPLAY ;显示时间 RET;读取输入按键的部分 GETWORD: ;读数子程序WKEY1: LCALL GETKEY ;读键盘 CJNE A,#0FFH,WKEY1;无键输入,则再读 MOV A,B ADD A,#0C6H JC ERRO

    22、R1 ;判断输入是否大于9 MOV A,B SUBB A,#30H JC ERROR1 ;判断输入是否小于0 MOV R5,A LCALL DISLED ;显示输入的字符 MOV B,#10 MUL AB PUSH ACC ;保存输入的值WKEY2: LCALL GETKEY ;读键盘 CJNE A,#0FFH,WKEY2;无键输入则再读 MOV A,B ADD A,#0C6H ;判断输入是否大于9 JC ERROR2 MOV A,B SUBB A,#30H ;判断输入是否小于0 JC ERROR2 DEC R4 MOV R5,A LCALL DISLED ;显示输入的字符 MOV B,A P

    23、OP ACC ADD A,B MOV B,A ;把得到的值存在B MOV A,#0FFH ;置合法输入标志 AJMP KEYOKERROR2: POP ACCERROR1: MOV A,#0 ;置非法输入标志KEYOK: RET;8279初始化INIT8279: ;8279初始化子程序 PUSH DPH ;保存现场 PUSH DPL PUSH ACC LCALL DELAY ;延时 MOV DPTR ,#Z8279 MOV A,#LEDMOD ;置8279工作方式 MOVX DPTR,A MOV A,#LEDFEQ ;置键盘扫描速率 MOVX DPTR,A MOV A,#LEDCLS ;清除

    24、LED 显示 MOVX DPTR,A POP ACC ;恢复现场 POP DPL POP DPH RET;读取键盘子程序GETKEY: ;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志 PUSH DPH ;保存现场 PUSH DPL PUSH PSW MOV DPTR,#Z8279 MOVX A,DPTR ;读8279状态 ANL A,#07H ;屏蔽D7-D3 JNZ GETVAL ;判断是否有键输入 MOV A,#0H ;置标志(无键输入) SJMP NKBHITGETVAL: MOV A,#READKB ;读 FIFO RAM 命令 MOVX DPTR,A MOV DPTR,

    25、#D8279 MOVX A,DPTR ;读键 ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE;键码表起始地址 MOVC A,A+DPTR ;查表 MOV B,A ;置返回键值 MOV A,#0FFH ;置标志(有键输入)NKBHIT: POP PSW ;恢复现场 POP DPL POP DPH RET ;T1定时器中断控制部分,INT_T1: ;INT_T1中断服务子程序 PUSH DPH ;保护现场 PUSH DPL PUSH ACC PUSH PSW MOV TL1,#00H ;50毫秒定时常数 MOV TH1,#4CH DJNZ R0,EX

    26、IT ;判断毫秒=0 MOV R0,#20 ;DELAY 1 SECOND MOV R6,#0FFH ;置秒标志 COUNT1: MOV A,R7 ADD A,#99H DA A MOV R7,A ;减1 CJNE R1,#59H,SECOND;判断秒=59 MOV R1,#99H CJNE R2,#59H,MINUTE;判断分=59 MOV R2,#99H CJNE R3,#23H,HOUR ;判断时=23 MOV R3,#99HHOUR: MOV A,R3 ADD A,#1 ;时加1 DA A MOV R3,AMINUTE: MOV A,R2 ADD A,#1 ;分加1 DA A MOV

    27、R2,ASECOND: MOV A,R1 ADD A,#1 ;秒加1 DA A MOV R1,A ;判断是否到了特定时间78,1718点 CJNE R3,#7,EXIT1 MOV 40H,#5 SJMP SHOWT CJNE R3,#00010111B,EXIT1 MOV 40H,#5 SJMP SHOWTEXIT1: MOV 40H,#0 SHOWT: CJNE R6,#0FFH,EXIT;若无秒标志则循环 LCALL DISPLAY ;显示时间 MOV R6,#0 ;清标志 EXIT: POP PSW ;恢复现场 POP ACC POP DPL POP DPH RETI ;中断返回 ;实验

    28、帮助11延时部分,不太清楚具体功能是什么,可能是键盘消抖DELAY: ;延时子程序 PUSH 0 ;保存现场 PUSH 1 MOV 0,#0HDELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ;恢复现场 POP 0 RET ;显示控制部分,但不是具体显示部分DISPLAY: MOV A,R3 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#6 LCALL DISLED ;显示小时低位 MOV A,R3 SWAP A ANL A,#0FH MOV R5,A MOV R4,#7 LCALL DISLED ;显示小时高位 MOV A,R2 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#4 LCALL DISLED ;显示分钟低位 MOV A,R2 SWAP A ANL A,#0FH MOV R5,A MOV R4,#5 LCALL DISLED ;显示分钟高位 MOV A,R1 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#2 LCALL DISLED ;显示秒低位 MOV A,R1 SWAP A ANL A,#0FH


    注意事项

    本文(51单片机模拟交通信号灯.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开