摘要:本文介绍如何仿真红绿灯
今天来做一个红绿灯仿真的程序,这个程序主要包括一下这些功能:
- 模拟的路口为十字交叉路口,假设东西和南北方向都是双向行驶,因此需要设置4组红绿灯和4个倒计时显示屏。
- 倒计时时间最长为99秒,可以使用2位数码管。
- 用按键可以单独调整东西和南北方向的绿灯时间。
- 黄灯的时长默认为3秒。
- 红灯的倒计时时间为另一方向的绿灯时间加上黄灯的时间。
下面就来做一个简单的仿真程序。在进行方案设计之前,先来了解一下数码管的基本知识机器使用方法。
数码管是一种利用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年由英国伦敦大学教授皮特·马克·罗葛特在他的研究报告《移动物体的视觉暂留现象》中最先提出:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
动态显示的原理如下图所示:
动态显示的程序在这里就不举例了,这个红绿灯仿真的程序使用的就是动态显示的方法。具体实现方法请参照下篇文章中的介绍。