设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 电子领域 单片机 51单片机 查看内容

基于单片机AT89S51自制数码显示交通灯

2014-6-7 21:31| 发布者: dzly| 查看: 623| 评论: 0|原作者: 高偲航;

摘要: 如今科技飞速发展,尤其是电子信息产业,单片机作为一个微型计算机系统结合各种电子元器件及传感器制造出的产品层出不穷,已应用到生活中的各个方面。交通灯作为一个由单片机控制的智能电路应用已久,对于电子爱好初学者来说,能制作出简易交通灯可以说是对单片机实践的一个具体应用,也为后续学习单片机的高级设计及应用打下一个坚实的基础。
  1 交通灯的工作原理
  本人通过自学单片机,结合LED 发光二极管和数码管通过单片机汇编语言自制出带数码显示时间的简易交通灯。下面就来跟大家分享一下设计过程。首先我们需要了解马路上的交通灯的工作原理,交通灯的发光顺序依次为红绿黄。红灯亮的时间稍长些,黄灯亮的时间最短,并且有LED 灯组成的数字显示交通灯倒计时。作者假设南北向红灯亮35 秒,绿灯亮30 秒,黄灯亮5 秒。东西向在南北向的红灯亮的同时绿灯亮30 秒,
  黄灯亮5 秒,然后红灯亮35 秒。这样交替变化不会影响因为存在时间差导致的两个方向的灯变化不一致的情况。作者用单片机控制数码管来显示交通灯倒计时时间。为了保证时间精准,作者采用四个AT89S51 单片机分别控制12 个LED 发光二极管,及四个数码管。采用四个复位开关同时触发,使四个单片机同时工作,保证交通灯及数码管工作时间一致。
  2 AT89S51 单片机结合
  74LS47 译码器控制数码管74LS47 译码器与数码管之间通过220Ω 电阻相连接,单片机I\O 口P0.0 到P0.7 输出的BCD 码控制着数码管显示的数字。
  其中一个单片机控制一组数码管的程序如下:
  SW EQU P1.0 ; 首先令SW 开关指
  向P1.0 口
  ORG 00H
  START:
  MOV P0, #88H ; 从P0 口输出
  10001000,通过74LS47 译码器转换后,数码管显示88
  JB SW, $ ; 检测按钮开关是否被按下
  NOP
  NOP
  NOP
  NOP
  JNB SW, $ ; 检测按钮开关是否被按下后抬起
  MOV R1, #36 ; 首次倒计时初始值设定为36
  COUNTDOWN:
  DEC R 1 ; 由于R1 自减1,显示从我们想要的35 开始
  MOV A, R1 ; 下面几行指令把十进制35 转换成BCD 码从P0 口输出
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN ; 通过比较指令及上述的自减指令,实现数码管的倒计时功能
  MOV R1, #30 ; 由于要改变交通灯状态,需重新载入交通灯设定值,由于第一次载入输出结束值与下一次重新载入初始设定值为同一时间,所以此次30 秒倒计时初始设定值为30
  COUNTDOWN_1:
  DEC R1
  MOV A, R1
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN_1
  MOV R1, #05 ; 同上,此次5 秒倒计时初始值设定为5
  COUNTDOWN_2:
  DEC R1
  MOV A, R1
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN_2
  LOOP: ; LOOP 段可循环执行
  MOV R1, #35 ; 初始值设定为35
  COUNTDOWN6:
  DEC R1
  MOV A, R1
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN6
  MOV R1, #30 ; 初始值设定为30
  COUNTDOWN_3:
  DEC R1
  MOV A, R1
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN_3
  MOV R1, #05 ; 初始值设定为5
  COUNTDOWN_4:
  DEC R1
  MOV A, R1
  MOV B, #10
  DIV AB
  SWAP A
  ORL A, B
  MOV P0, A
  CALL DELAY
  CJNE A, #00H, COUNTDOWN_4
  JMP LOOP ; 循环执行LOOP 段,用以实现交通灯的数码显示功能
  DELAY:
  ; 延时1 秒的子程序
  MOV R3, #100
  D3:
  MOV R4, #20
  D4:
  MOV R5, #248
  DJNZ R5, $
  DJNZ R4, D4
  DJNZ R3, D3
  RET
  END
  另一段汇编程序由于交通灯方向不同,所以状态不同,数码管显示的数字初始值设定略有不同,这里不加赘述。
  3 AT89S51 单片机控制LED 发光二极管
  作者采用P0 口输出高低电平来控制LED 发光二极管变化,当P0 口某一位置0 时,发光二极管导通,被点亮;反之熄灭。由于单片机工作电压为+5V, 发光二极管工作电流一般为10-30mA,所以作者选用220Ω 电阻与其串联。令P0.0 口连接红色发光二极管、P0.1 口连接黄色发光二极管、P0.2 口连接绿色发光二极管。另一组依次分别连接单片机P0.4、P0.5、P0.6 口。
  由于同方向的交通灯状态一致,作者将不同状态的两组红绿黄灯放在一个单片机中进行汇编,所以控制LED 发光二极管的两个单片机程序是一样的。
  下面作者来具体介绍一下程序汇编:
  SW EQU P1.0 ; 首先令SW 开关指向P1.0 口
  ORG 00H
  JB SW,$ ; 检测按钮开关是否被按下
  NOP
  NOP
  NOP
  NOP
  JNB SW,$ ; 检测按钮开关是否被按下后抬起
  START:
  MOV P0,#01101011B ;P0.4 口红灯点亮,P0.5 口黄灯熄灭,P0.2 口绿灯点亮,
  P0.0 口红灯 熄灭
  CALL DELAY ; 延时30 秒
  MOV P0,#01101101B ;P0.4 口红灯继续被点亮,P0.2 口绿灯熄灭,P0.1 口黄灯点亮
  CALL DELAY_1 ; 延时5 秒
  MOV P0,#00111110B ;P0.4 口红灯熄
  灭,P0.6 口绿灯点亮,P0.1 口黄灯熄灭,
  P0.0 口红 灯点亮
  CALL DELAY
  MOV P0,#01011110B ;P0.6 口绿灯熄
  灭,P0.5 口黄灯被点亮,P0.0 口红灯继续被点亮
  CALL DELAY_1
  JMP START ; 循环执行START
  段,用以实现交通灯交替变化功能
  DELAY: ; 延时30 秒的子程序
  MOV R1,#30
  D1:
  MOV R2,#100
  D2:
  MOV R3,#20
  D3:
  MOV R4,#248
  DJNZ R4,$
  DJNZ R3,D3
  DJNZ R2,D2
  DJNZ R1,D1
  RET
  DELAY_1: ; 延时5 秒的子程序
  MOV R1,#5
  D4:
  MOV R2,#100
  D5:
  MOV R3,#20
  D6:
  MOV R4,#248
  DJNZ R4,$
  DJNZ R3,D6
  DJNZ R2,D5
  DJNZ R1,D4
  RET
  END
  4 电路连接
  将每个单片机的程序,通过杜邦公转母排线连接USB 插口烧录到单片机中,按照设计好的电路图连接好电路,接通电源(如果没有+5V 电池可以用电池盒装四节1.5V 电池串联一个1N4148 二极管将电压降到约+5V),当同时按下四个按钮开关时,便可观察实验效果。这样,一个带数码管显示的简易LED 交通灯就制作成功了。


  5 结论
  通过对简易交通灯的制作,作者已经对单片机有了一个初步的认识,也可以体会到单片机功能的的强大,在未来的学习及实践中,一定会加强对于单片机的开发,尤其是单片机与各种电子元器件的结合应用,因为这不仅能衡量一个从业人员的技术水平和能力,而且对个人思维能力尤其是创造能力的培养也起到了一定的积极作用。只有在科学的海洋里不断创新,不断进步,才能在以后的工作和生活中立于不败之地。
  

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-6-17 03:36 , Processed in 0.037299 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部