一起玩儿Proteus仿真(C51)——05. 红绿灯仿真(一)

摘要:本文介绍如何仿真红绿灯

今天来做一个红绿灯仿真的程序,这个程序主要包括一下这些功能:

  1. 模拟的路口为十字交叉路口,假设东西和南北方向都是双向行驶,因此需要设置4组红绿灯和4个倒计时显示屏。
  2. 倒计时时间最长为99秒,可以使用2位数码管。
  3. 用按键可以单独调整东西和南北方向的绿灯时间。
  4. 黄灯的时长默认为3秒。
  5. 红灯的倒计时时间为另一方向的绿灯时间加上黄灯的时间。

下面就来做一个简单的仿真程序。在进行方案设计之前,先来了解一下数码管的基本知识机器使用方法。

数码管是一种利用LED的显示器件,其原理就是在内部集成了一系列的LED,每个LED对应显示一段,通过控制不同的LED点亮来组成不同的字符。根据不同的显示段数(也就是内部LED的数量),常见的有7段式、8段式、14段式和16段式数码管。如下图所示:

数码管内部是一系列的LED二极管,根据这些LED的接法不同,可以将数码管分成共阳极数码管和共阴极数码管。所谓的共阳极就是将LED的阳极都连接到一起,这样在使用的时候,将这个公共端连接到电源正极,那么另一端为低电平的时候,该LED就会被点亮。如果是共阴极数码管,那么就是将所有LED的阴极连接到了一起,然后再将这个公共点接地,那么将来另一端为高电平时,可以驱动这个LED点亮。电路原理图如下图所示:

由于数码管的内部就是LED二极管,因此在驱动其点亮的时候,不能直接一端接+5V,一端接地,必须要有限流电阻。通常限流电阻的大小为100欧~330欧都可以。

利用单片机驱动数码管,本质上就是通过单片机的引脚控制LED的两灭,通过不同的组合,显示出来我们想要的字符。下面就以上图中的8段式数码管为例,将其连接到单片机的某一组的8个引脚上,看显示不同的字符,所对应的引脚的输出值。

数码管内部连接

共阳

共阴

小数点接单片机

最高位

最低位

最高位

最低位

点亮

熄灭

点亮

熄灭

点亮

熄灭

点亮

熄灭

0

0x40

0xC0

0x02

0x03

0xBF

0x3F

0xFD

0xFC

1

0x79

0xF9

0x9E

0x9F

0x86

0x06

0x61

0x60

2

0x24

0xA4

0x24

0x25

0xDB

0x5B

0xDB

0xDA

3

0x30

0xB0

0x0C

0x0D

0xCF

0x4F

0xF3

0xF2

4

0x19

0x99

0x98

0x99

0xE6

0x66

0x67

0x66

5

0x12

0x92

0x48

0x49

0xED

0x6D

0xB7

0xB6

6

0x02

0x82

0x40

0x41

0xFD

0x7D

0xBF

0xBE

7

0x78

0xF8

0x1E

0x1F

0x87

0x07

0xE1

0xE0

8

0x00

0x80

0x00

0x01

0xFF

0x7F

0xFF

0xFE

9

0x10

0x90

0x08

0x09

0xEF

0x6F

0xF7

0xF6

在程序的开发中可以按照接法,将相应一列的数值存储到一个数组中,这样,使用的时候,直接通过索引访问数组中的数值就可以了。这个在后面的程序中会有例子。

数码管的驱动显示方法有两种,一种是静态显示,一种是动态显示。静态显示就是利用单片机的一组GPIO口,连接一个数码管模块,然后让各个引脚保持上面表中相应的状态,来显示数据的方法。

具体使用方法如下图所示:

这时,只要设置P0=0x40就可以让数码管一直显示“0”。这种静态驱动数码管的好处显而易见,就是驱动程序非常的简单,但缺点也是显而易见的,每个数码管都要占用一组GPIO端口,如果数码管多了,引脚肯定会不够用的。因此,多个数码管的时候,就要使用动态显示。

所谓的动态显示,就是依次向每位数码管送出字形码的同时,控制公共端的电平,每一位数码管之间利用延时程序进行延时,当延时程序非常短时,由于发光管的余辉和人眼视觉暂留作用,此时我们人眼就分别不出位于位之间时有延迟存在并且是交替显示的,此时的感觉是所有的数码管都在同时显示。

所谓视觉暂留现象即视觉暂停现象(Persistenceofvision Visualstayingphenomenon, durationofvision)又称“余晖效应”,1824年由英国伦敦大学教授皮特·马克·罗葛特在他的研究报告《移动物体的视觉暂留现象》中最先提出:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。

动态显示的原理如下图所示:

动态显示的程序在这里就不举例了,这个红绿灯仿真的程序使用的就是动态显示的方法。具体实现方法请参照下篇文章中的介绍。

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
观察十字路口红绿灯工作流程,设计交通灯。 1、初始时:南北向、东西向直行左转均为红灯 2、南北向直行: ①南北向直行绿灯亮,延时若干秒 ②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒 ③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 3、南北向左转: ①南北向左转绿灯亮,延时若干秒 ②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒 ③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 4、东西向直行: ①东西向直行绿灯亮,延时若干秒 ②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒 ③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 5、东西向左转: ①东西向左转绿灯亮,延时若干秒 ②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒 ③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值