一起玩儿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年由英国伦敦大学教授皮特·马克·罗葛特在他的研究报告《移动物体的视觉暂留现象》中最先提出:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468136.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web3知识体系汇总

web3.0知识体系 1.行业发展 2. web3的特点: 1、统一身份认证系统 2、数据确权与授权 3、隐私保护与抗审查 4、去中心化运行 Web3.0思维技术思维✖金融思维✖社群思维✖产业思维”,才能从容理解未来Web3.0时代的大趋势。 3.技术栈 Web3.jsSolidit…

OpenCV-38 图像金字塔

目录 一、图像金字塔 1. 高斯金字塔 2. 拉普拉斯金字塔 一、图像金字塔 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图…

累加器 - 分布式共享写变量

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 概念注意:应用 概念 因为RDD是可分区的,每个分区在不同的节点上运行,如果想要对某个值进行全局累加,就需要将每个task中的值取到然后进行累…

【C语言进阶】深度剖析数据在内存中的存储--上

1. C语言中的数据类型的简单介绍 注:C99标准里面,定义了bool类型变量。这时,只要引入头文件stdbool.h ,就能在C语言里面正常使用bool类型。 1.1 在C语言中各类型所占内存空间的大小如下 char类型的数据类型大小为1字节即8比特位。…

[NSSCTF]-Web:[SWPUCTF 2021 新生赛]easyrce解析

先看网页 代码审计: error_reporting(0); :关闭报错,代码的错误将不会显示 highlight_file(__FILE__); :将当前文件的源代码显示出来 eval($_GET[url]); :将url的值作为php代码执行 解题: 题目既然允许…

ChatGPT高效提问—prompt实践(视频制作)

ChatGPT高效提问—prompt实践(视频制作) 1.1 视频制作 ​ 制作视频对于什么都不懂的小白来说非常难。而随着AI技术的发展,这件事变得越来越简单,如今小白也可以轻松上手。如何借助ChatGPT来制作短视频。 ​ 其实方法非常简单&a…

SolidWorks学习笔记——入门知识1

目录 1、固定最近文档 2、根据需要自定义菜单栏 3、根据需要增添选项卡 4、命令搜索框 5、鼠标右键长按快速切换视图 6、鼠标笔势 自定义鼠标笔势 1、固定最近文档 图1 固定最近文档 2、根据需要自定义菜单栏 图2 根据需要自定义菜单栏 3、根据需要增添选项卡 图3 根据…

javaspringbootMySQL高考志愿选择系统68335-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 第1章 绪论 1.1 研究背景与意义 1.2 研究现状 1.3论文结构与章节安排 第2章 相关技术 2.1开发技术 2.2 Java简介 2.3 MVVM模式 2.4 B/S结构 2.5 MySQL数据库 2.6 SpringBoot框架介绍 第3章 系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数…

【开源】SpringBoot框架开发企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

Java并发基础:DelayQueue全面解析!

内容概要 DelayQueue类专为处理延迟任务设计,它允许开发者将任务与指定的延迟时间关联,并在任务到期时自动处理,从而避免了不必要的轮询和资源浪费,此外,DelayQueue内部基于优先队列实现,确保最先到期的任…

2024年幻兽帕鲁服务器搭建方法_图文保姆级教程

幻兽帕鲁官方服务器不稳定?自己搭建幻兽帕鲁服务器,低延迟、稳定不卡,目前阿里云和腾讯云均推出幻兽帕鲁专用服务器,腾讯云直接提供幻兽帕鲁镜像系统,阿里云通过计算巢服务,均可以一键部署,鼠标…

【Jmeter】JDK及Jmeter的安装部署及简单配置

JDK的安装和环境变量配置 对于Linux、Mac和Windows系统,JDK的安装和环境变量配置方法略有不同。以下是针对这三种系统的详细步骤: 对于Linux系统: 下载适合Linux系统的JDK安装包,可以选择32位或64位的版本。 将JDK的安装包放置…