单片机交通信号灯模拟系统设计_第1页
单片机交通信号灯模拟系统设计_第2页
单片机交通信号灯模拟系统设计_第3页
单片机交通信号灯模拟系统设计_第4页
单片机交通信号灯模拟系统设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的交通信号灯模拟系统设计主要内容:利用单片机中的定时器、io接口、中断系统等资源,设计一个十字路口交通信号灯的控制模拟系统。基本要求:(1)利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。 (2)可通过按键对红绿灯点亮和熄灭时间进行调整及设置。(3)能对红绿灯点亮和熄灭时间进行倒计时时间显示。提高部分:(4)可进行紧急或特殊情况的人工处理控制。(5)有内部24小时钟,可根据时间表对对红绿灯点亮和熄灭时间进行自动调整。(如高峰期:7:30-8:30,17:00-18:30或夜间时段红绿灯主次干道时长比等)。(6)可根据交通流量自动调整对红绿灯点亮和熄灭时间。程序:z8279

2、equ 0ff82h ;8279 状态/命令口地址d8279 equ 0ff80h ;8279 数据口地址ledmod equ 00h ;左边输入八位字符显示 ;外部译码键扫描方式,双键互锁ledfeq equ 2fh ;扫描速率ledcls equ 0c1h ;清除显示ramledwr0 equ 80h ;设定的将要写入的显示ram地址readkb equ 40h ;读fifo ram 地址0 的命令字;-org 0000hljmp start org 0003h ljmp emergency org 000bh ;定时器中断的入口地址 ljmp counter org 0040hstart

3、: mov sp,#60h lcall init8279 ;初始化 movtmod,#01h movtl0,#056h ;50ms时间常数 movth0,#4ch movr2,#20 ;设置循环次数20次,定时1s mov r3,#1 mov 20h,#5mov 21h,#2 mov r6,#06h ;时 mov r1,#59h ;分 mov r0,#45h ;秒 mov r7,#00h ;交通灯状态选择 setb et0 ;允许定时器中断, setb tr0 ;启动t0 setb ex0 ;允许外部中断中断 setb it0 ;外部中断为电平触发方式 setb ea ;开cpu开中断 ;-w

4、ait: lcall getkey ;读键盘 cjne a,#0ffh,cont ;判断是否有键输入 mov a,b cjne a,#3ch,key_b ;输入键是'c',转clear_t lcall clear_tkey_b: cjne a,#3bh,key_a ;输入键是'b',转set_t lcall set_t key_a: ;输入键是'a',转start_t cjne a,#3ah,key_e lcall start_tkey_e: ;输入键是'e',进行高峰处理,调整时间 cjne a,#3eh,key_f mov 2

5、0h,#10 ;红绿灯时间为10s key_f: cjne a,#3fh,key_d ;输入是'f',进行低峰处理,调整时间mov 20h,#3key_d: cjne a,#3dh,cont ;输入是'd',进行常态处理,调整时间mov 20h,#5cont: lcall display ;显示时间 sjmp wait ;循环clear_t: ;时间清零 clr tr0 mov r3,#0h mov r6,#0h ;时 mov r1,#0h ;分 mov r0,#0h ;秒 lcall display retstart_t: ;电子钟计时子程序 setb tr0

6、 retset_t: ;设置初值子程序 clr tr0 ;关计数器 mov r4,#1 lcall getword ;读秒数 cjne a,#0ffh,invalid ;判断输入合法性 mov a,b add a,#156 jc invalid ;判断输入秒值<100 mov a,b cjne r7,#01h,t1 ;若为状态1,保存输入值 mov 20h,a mov r3,20h lcall display t1: cjne r7,#02h,t2 ;若为状态2,保存输入值 mov 21h,a mov r3,21h lcall displayt2: cjne r7,#03h,t3 ;若为

7、状态3,保存输入值 mov 20h,a mov r3,20h lcall displayt3: cjne r7,#00h,t4 ;若为状态4,保存输入值 mov 21h,a mov r3,21h lcall displayt4: setb tr0retinvalid: lcall clear_t ;时间清零 ;-getword: ;读数子程序 wkey1: lcall getkey ;读键盘 cjne a,#0ffh,wkey1;无键输入,则再读 mov a,b add a,#0c6h jc error1 ;判断输入是否大于 mov a,b subb a,#30h jc error1 ;判断输

8、入是否小于 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 ;判断输入是否大于 jc error2 mov a,b subb a,#30h ;判断输入是否小于 jc error2 dec r4 mov r5,a lcall disled ;显示输入的字符 mov b,a pop acc add a,b mov b,a ;把得到的值存在b mov a,#0ffh ;置合法输

9、入标志 ajmp keyokerror2: pop accerror1: mov a,#0 ;置非法输入标志keyok: ret ;-;定时器的中断服务程序counter: ;int_t0中断服务子程序 push acc ;保护现场 push psw clrtr0 movtl0,#056h ;重新设置初值movth0,#4chlcall display ;1s时间到,显示当前倒计时的时间djnz r2,return1mov r2,#20hcjne r0,#59h,second;判断秒=59 mov r0,#99h cjne r1,#59h,minute;判断分=59 mov r1,#99h c

10、jne r6,#23h,hour ;判断时=23 mov r6,#99hhour: mov a,r6 add a,#1 ;时加1 da a mov r6,aminute: mov a,r1 add a,#1 ;分加1 da a mov r1,asecond: mov a,r0 add a,#1 ;秒加1 da a mov r0,a cjne r6,#5h,turn ljmp turnturn: lcall display1 mov a,r7 ;显示交通灯的状态subb a,#02hjnc l3 cjne r7,#00h,l2 ;通过标志位来判断交通灯当前的状态 djnz r3,return c

11、jne r6,#5h,sh mov 20h,#10 mov 21h,#3 sh: jc sh1mov 20h,#10mov 21h,#3cjne r6,#7h,sh1mov 20h,#5mov 21h,#2sh1: jc sh2mov 20h,#5mov 21h,#2sh2: mov r3,20h mov dptr,#8300h ;南北绿灯,东西红灯 mov a,#96h movx dptr,a mov r7,#01h ;设置交通灯状态标志为下一个状态 sjmp returnreturn1:ljmp returnl2: djnz r3,return mov r3,21h mov dptr,#8

12、300h ;南北黄灯,东西红灯 mov a,#06h movx dptr,a mov r7,#02h sjmp return l3: cjne r7,#02h,l4 djnz r3,return mov r3,20h mov dptr,#8300h ;南北红灯,东西绿灯 mov a,#69h movx dptr,a mov r7,#03h sjmp return l4: djnz r3,return mov r3,21h mov dptr,#8300h ;南北红灯,东西黄灯 mov a,#09h movx dptr,a mov r7,#00h return: setb tr0 pop psw

13、;恢复现场 pop acc reti;-emergency: push psw ;保护现场 push acc mov dptr,#8300h mov a,#0fh ;南北,东西都亮红灯 movx dptr,a mov r3,#10 lcall display setb tr0 ;启动定时器 pop acc ;恢复现场 pop psw reti;-init8279: ;8279初始化子程序 push dph ;保存现场 push dpl push acc lcall delay ;延时 mov dptr ,#z8279 mov a,#ledmod ;置工作方式 movx dptr,a mov a

14、,#ledfeq ;置键盘扫描速率 movx dptr,a mov a,#ledcls ;清除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 ;读状态 anl a,#07h ;屏蔽d7-d3 jnz getval ;判断是否有键输入 mov a,#0h ;置标志(无键输入) sjmp recovergetval: mov a

15、,#readkb ;读fifo ram 命令 movx dptr,a mov dptr,#d8279 movx a,dptr ;读键 anl a,#3fh ;屏蔽shift 和ctrl 键 mov dptr,#keycode;键码表起始地址 movc a,a+dptr ;查表 mov b,a ;置返回键值 mov a,#0ffh ;置标志(有键输入)recover: pop psw ;恢复现场 pop dpl pop dph ret;-disled: ;显示字符子程序 ;输入: r4,位置r5,值 push dph ;保存现场 push dpl push acc mov a,#ledwr0 ;

16、置显示起始地址 add a,r4 ;加位置偏移量 mov dptr,#z8279 movx dptr,a ;设定显示位置 mov dptr,#ledseg ;置显示常数表起始位置 mov a,r5 movc a,a+dptr ;查表 mov dptr,#d8279 movx dptr,a ;显示数据 pop acc ;恢复现场 pop dpl pop dph ret;-delay: ;延时子程序 push 0 ;保存现场 push 1 mov 0,#0hdelay1: mov 1,#0h djnz 1,$ djnz 0,delay1 pop 1 ;恢复现场 pop 0 ret;-display

17、1: mov a,r6 anl a,#0fh add a,#10h mov r5,a mov r4,#6 lcall disled ;显示小时低位 mov a,r6 swap a anl a,#0fh mov r5,a mov r4,#7 lcall disled ;显示小时高位 mov a,r1 anl a,#0fh add a,#10h mov r5,a mov r4,#4 lcall disled ;显示分钟低位 mov a,r1 swap a anl a,#0fh mov r5,a mov r4,#5 lcall disled ;显示分钟高位 mov a,r0 anl a,#0fh a

18、dd a,#10h mov r5,a mov r4,#2 lcall disled ;显示秒低位 mov a,r0 swap a anl a,#0fh mov r5,a mov r4,#3 lcall disled ;显示秒高位 retdisplay: mov a,r3 mov b,#10 div ab mov r5,b mov r4,#0 lcall disled ;显示秒低位 mov r5,a mov r4,#1 lcall disled ;显示秒高位 ret;- ;led显示常数表ledseg: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;'0,1,2,3,4,5,6,7' db 7fh,6fh,77h,7ch,39h,5eh,79h,71h ;'8,9,a,b,c,d,e,f' db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,087h ;'0.,1.,2.,3.,4.,5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论