二、数码管显示原理及应用实现
数码管显示原理及应用实现
视频链接
对应课程:P11-P12
数码管显示原理
我们先看一下一个数码管是如何亮起来的。数码管内部电路如图所示:
为了封装统一,生产商为单位数码管都封装了10个引脚,其中第3个和第8个引脚是连接在一起的。显示一个8字需要七个小段,另外还有一个小数点,所以其内部共有8个小的发光二极管,最后还有一个公共端。
公共端可分为共阳极和共阴极,其内部原理图如图所示:
对于共阴极数码而言,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称为”共阴“,它们的阳极是独立的。当我们给数码管的任一个阳极加上一个高电平时,对应的发光二极管就点亮了。
例如如果想让数码管显示”0“,只需要让”g“"dp"引脚送入低电平,而其余引脚全部输入高电平。
共阳极数码同理,其8个发光二极管的阳极在数码管内部全部连接在一起,所以称为”共阳“,它们的阴极是独立的。当我们给数码管的任一个阴极加上一个低电平时,对应的发光二极管就点亮了。
数码管内部发光二极管要想点亮,需要5mA以上的电流,但电流也不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加上驱动电路。
多位一体数码管
以四位一体的数码管为例,其内部原理图如图所示:
它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可知控制这个能点亮数码管亮什么数字。
通常我们把公共端叫做位选线
连接在一起的段线叫做段选线
有了这两个线,通过单片机及外部电路就可以控制任意的数码管显示任意的数字了。
数码管静态显示
先来看巫妖王V2版数码管原理图:
本实验板使用的数码管为共阴极,COM为公共端,若想让LED6亮,则赋LED6为0其余为1,此为”选中“,若想LED6显示1,则要给阳码:0110 0000 (1是亮 0是灭)
74LS138(38译码器)
LED1—LED8连接38译码器的输出端,即通过38译码器可实现P22、P23、P24这三个I/O口来控制LED1—LED8的输出。
74HC573(锁存器)
OE(使能端,低电平有效)
LE连接VCC(跳帽连接)
这样锁存器的输入端连接单片机的P0口,实现D0-D7的数据原封不动的送入Q0-Q7.
代码
先介绍C51数组
数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据
定义和引用:
int x[3]; //定义一组变量(3个) int x[]={1,2,3};//定义一组变量并初始化x[0] //引用数组的第0个变量 x[1] //引用数组的第1个变量 x[2] //引用数组的第2个变量 引用x[3]时,数组越界,读出的数值不确定,应避免这种操作
Switch语句
switch(变量) {case 常量1:语句体1;break;case 常量2:语句体2;break;case 常量3:语句体3;break;case 常量4:语句体4;break;...default:语句体x;break; }
将变量与case后的各个常量对比,若有相等,则执行相应的语句体。若没有一个相等,则执行default后的语句体(default可以不写)
完整代码如下:
#include <REGX52.H> //和#include <REG52.H>的区别//段位表(共阴极数码管编码,对于的符号为0,1,2,3,4,5,7,8,9)
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location) //位码输出,通过38译码器进而实现数码管的选中{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number]; //段码输出
} void main()
{while(1){Nixie(3,0); //在第3个数码管位置显示0}
}
/*
当P0等于0x3f,换算成2进制为 0011 1111
P0.0是低位,P0.7是高位,则P0.0-P0.7:1111 1100
由于是共阴极连接,1是亮,0是灭,则g,dp不亮,其余亮,显示为数字0
*/
数码管动态显示
数码管驱动方式通常有两种:
单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可
数码管动态扫描,其实是轮流向各个数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使得人的感觉好像数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼无法分辨出来。
#include <REGX52.H> //和#include <REG52.H>的区别//段位表(共阴极数码管编码,对于的符号为0,1,2,3,4,5,7,8,9)
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时子函数
void Delay1ms(unsigned int xms) //@12.000MHz
{while(xms--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}
//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location) //位码输出,通过38译码器进而实现数码管的选中{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number]; //段码输出 Delay1ms(1); //P0=0x00; //消影
} void main()
{while(1){Nixie(1,0); //八个数码管依次显示为01234567Nixie(2,1); Nixie(3,2); Nixie(4,3); Nixie(5,4);Nixie(6,5);Nixie(7,6); Nixie(8,7); }
}
二、数码管显示原理及应用实现相关推荐
- STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现
这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...
- Arduino:数码管显示原理详解和Proteus仿真实验
Arduino:数码管显示原理详解和Proteus仿真实验 Proteus仿真 数码管介绍 数码管是半导体发光元件,其基本单元是发光二极管.根据段数,数码管分为七段管和八段管. 八段管比七段管还多一个 ...
- 数码管显示原理:共阴极和共阳极的区别,静态显示程序。
数码管显示原理:共阴与共阳 LED发光原理是PN结光电二极管将电能转化为光能的结果.当半导体芯片两端加正反向电压时,当电子从n区域注入p区域时,它们与p区的空穴结合并释放能量,这些能量以光子的形式发射 ...
- 51单片机按键值显示在数码管上,数码管亮度控制,数码管显示原理
项目场景: 51单片机按下按键在数码管上显示相应的值 问题描述 平常按键检测程序,按下延时消抖,记录一个数字,再按下另一个记录一个数字,然后在一位数码管上显示,就出现了问题.数码管一直显示0 . 下面 ...
- 数码管显示原理与驱动方式
目录 一.数码管内部结构 二.数码管的显示方式 三.数码管显示编程思想 一.数码管内部结构 1.内部结构有八个发光二极管,一个8字只需要显示7段,但是有一个小数点,dp,所以有八个发光二极管. 2.单 ...
- python数码管绘制原理_Micropython入门四位数码管显示原理
原理非常简单,控制各个针脚的高低电平来显示数字,这里我用的是共阳的数码管.不过有一个问题,我第一次显示的时候代码输入数字是9.876不过数码管显示9.875,刚开始我以为代码错了,仔细检查了几遍没有问 ...
- 新手必看 四位数码管显示原理
原理非常简单,控制各个针脚的高低电平来显示数字,这里我用的是共阳的数码管.不过有一个问题,我第一次显示的时候代码输入数字是9.876不过数码管显示9.875,刚开始我以为代码错了,仔细检查了几遍没有问 ...
- 共阳数码管段码表_C51编程7数码管显示原理
如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器:如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读. 为 ...
- 基于51单片机数码管显示
基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...
最新文章
- 微软表示Edge的性能更优于Chrome和Firefox
- 配置linux终端主题需要密码,Mac/Ubuntu下终端色彩主题设置
- mos管开关电路_MOS管的知识,看这一篇就可以了
- 百度危矣:乱评程苓峰《360的章鱼手要抢谁家饭碗?》
- 30K程序员的简述:如何成为高级开发人员
- 排序 np_P问题、NP问题、NP完全问题和NP难问题理解
- js $.ajax stop,jQuery.ajaxStop() 函数详解
- Mysql对用户操作加审计功能——高级版
- python获取linux本机IP
- 99乘法表c语言显示坐标,C语言打印九九乘法表
- WGS84 UTM 坐标系及UTM投影分带标准
- 金融计量经济学中使用R构建置信区间
- 敏捷史话系列(一)| 用一半的时间做两倍的事——Jeff Sutherland
- coreldraw x4被禁用怎么解决及不能使用序列号警告办法
- winfrom给word加水印
- 程序模板(20210603笔记)
- matlab图像分类器,一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
- Linux启动流程之ROM-CODE
- android+自定义键盘之汉字,android自定义键盘(解决弹出提示的字体颜色问题)
- SIZE SSIZE