51单片机 数码管模块

发布者:温文儒雅最新更新时间:2020-04-04 来源: eefocus关键字:51单片机  数码管模块  led灯 手机看文章 扫描二维码
随时随地手机看文章

1.原理图

共阴极和共阳极:


简单来说,如果是共阴极的话,我们想要驱动某一个led灯,就应该给另一端加高电平,共阳极的话就加低电平


数码管显示分两种:静态显示和动态显示;


静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动。


动态显示:动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。在实际应用中我们都是采用动态显示方式,不管你要显示几位,我们都只需要8+1+1 = 10个引脚。


(动态显示的原理:余辉效应。


在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。只是可能亮度没有静态显示那么亮,但是影响不大)


74HC573芯片

                       

74HC573是八进制 3 态非反转-----“透明”锁存器


用于锁存引脚数据,实现引脚复用,这样的话,我们的P0端口就可以用于先后提供数码管段选和位选的数值。


我们结合数码管原理图以及上面两个图可以得出,当LE引脚(即单片机的P2^6,P2^7两个引脚)为高电平时,输出引脚Q是输入端D的值,当LE引脚为低电平时,75HC573芯片会将数据锁存(可看成在输出引脚上保存上一次的输入数据),


所以如果我们要写数据,可通过P2^6、P2^7两个引脚来选择芯片,通过置高电平后再置低电平的方式,实现P0端口的复用。


好了,知识讲到这里就够了,我们直接上代码


/*****************************************

*本代码实现的是,重复从左往右依次显示0-7

*即第一位显示0,然后第一位暗,接着第二位显示1

*****************************************/

#include

sbit l1 = P1^0;

sbit duan = P2^6;

sbit wei = P2^7;

/**********************************************

*这个是随便写的延时函数,需要精确到几ms的话,可以参照

*网上的延时函数写法,这里只是起到简单延时的作用

**********************************************/ 

void delay(int n)   

{

n = n *10000;

while(n--) ;

}

void main()

{

/***********************

        *段选是共阴极

        *位选是共阳极

        ***********************/

        int j ;

int a[8] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};//数字0-7的段选编码

        int b;

while(1)

{

b = 0xfe;  //选中第一位显示

  for(j = 0;j < 8;++j)

  {

  P0 = a[j];   //段选

duan = 1;

duan = 0;

P0 = b;      //位选

wei = 1;

wei = 0;

delay(10);

b = (b<<1)|0x01;  //每次往右移动一位显示

  }

}


本人所写的有关51单片机的前面部分理论是从观看“亚博科技”的资料所整理的

关键字:51单片机  数码管模块  led灯 引用地址:51单片机 数码管模块

上一篇:51单片机之数码管静态显示
下一篇:C51单片机学习笔记(五)——数码管的静态显示和动态显示

推荐阅读最新更新时间:2024-11-10 18:43

MCS-51单片机的程序设计方法
  程序设计是用计算机解决实际问题过程中的一个环节。用计算机解决实际问题的过程包括了建立数学模型、选择计算方法、设计程序以及上机调试、运行程序并分析计算结果两个阶段。在分析一个具体的问题后,我们可以得出输入和输出量之间的关系,并用数学式进行描述,这个过程称之为建立数学模型。有了数学模型还必须选择适合于计算机实现的具体计算方法,然后再设计程序。程序设计实际上是对具体算法的实施。设计的程序还需在一定的调试环境中进行调试,此时应输入数据,并检查输出数据是否正确,为保证解题的正确性,应设计合理的输入数据,以检查程序可能出现的错误。   MCS-51单片机的程序设计通常分为下面3个步骤:   1.制作程序流程图   对提出的算法找出最合理、最
[单片机]
51单片机之——中断的概念
前面讲了许多51单片机的外设部分,大致有一些芯片,以及元器件。而这篇博文就走进单片机内设——中断系统。 首先,搞清楚什么是中断? 引用资料书的话:对于单片机而言,中断是指CPU在处理某一件事A时,发生了另一件事B,请求CPU迅速去处理(这个过程是“中断发生”);此时,CPU暂时停止当前的A事件(这个过程是“中断响应”),转去处理B事件(这个过程是“中断服务”);待CPU将B事件处理完毕后,再回到事件A被中断打断的地方继续处理事件A(这个过程是“中断返回”)。这一过程,称之为中断。其流程图如下所示: 其中,主程序为上述所说的A事件,中断请求由B事件发出。 再来引出一个生活中的例子: 首先,我们会知道有一个重要的人会在中午正餐的时
[单片机]
jz2440裸机开发与分析: 点亮LED灯之汇编语言
LED原理图及2440寄存器说明 汇编语言编写控制LED灯 .text /*.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段*/ .global _start; /*.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;*/ /* 告诉编译器后续跟的是一个全局可见的名字*/ /*.global _start让_start符号成为可见的标识符,*/ /*这样链接器就知道跳转到程序中的什么地方并开始执行程序*/ _start: /*_start是一个函数的起始地址,也是编译、链接后程序的起始地址*/ ldr r0, =0x
[单片机]
jz2440裸机开发与分析: 点亮<font color='red'>LED灯</font>之汇编语言
51单片机串行口速率设置
/* 51单片机速率设置公式 波特率=SYSclk/(32*12*(256-TH1) */ #ifndef MONITOR51 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */ TR1 = 1; /* TR1: timer 1 run
[单片机]
51单片机快速入门指南】仿真实例:幅值可调、频率可调的函数发生器
STC89C52 Windows 10 20H2 Proteus 8 Frofessional v8.9 SP2 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 效果 0 ~ 5V ,50Hz的正弦波: 1 ~ 4V,500Hz的三角波: 1.5 ~ 3.5V,1000Hz的正弦波 1.5 ~ 3.5V,5000Hz的方波 1.5 ~ 3.5V,10000Hz的方波 设计思路 共由两个DAC0832、一个DAC0808构成;两个DAC0832分别产生DAC0808的正、负参考电压,以控制电压范围,DAC0808产生波形,三
[单片机]
【<font color='red'>51单片机</font>快速入门指南】仿真实例:幅值可调、频率可调的函数发生器
AT89S51单片机的低频信号仿真研究
1 设计目标和思路 文中设计目标是完成4种波形信号输出,即正弦波、三角波、方波和锯齿波,并使其在低频范围内具有稳定稳定性好、性能可靠、体积较小、占空比调节方便等技术优势。文中采用键盘控制的办法,来实现并输出方波、锯齿波、三角波和正弦波等信号。另外,对频率和幅值的变换情况,用键盘也能够较好的进行控制和调整。同时,本文还将其产生的信号参数用LCD进行仿真显示和调试。 在设计中,首先在函数中对某个数组附值,利用DAC0832来实现输出波形信号输出转换,再经过功放滤波模块处理,这样的话,就会在示波器上观察到不同函数值的波形信号。但是,因为函数对数组中的数附值之后并不是一次就输出显示出来,这就需要编写AT89S51的控制字,使其开中
[单片机]
AT89S<font color='red'>51单片机</font>的低频信号仿真研究
MCS-51单片机控制字详解
PSW:程序状态字 寄存器地址D0H,位寻址D7H~D0H。 位地址 D7 D6 D5 D4 D3 D2 D1 D0 位符号 CY AC F0 RS1 RS0 OV - P CY 进位标记 AC 半进位标记 F0 用户设定标记 RS1、RS0 4个工作寄存器区的选择位。 VO 溢出标记 P 奇偶校验标记 PCON:电源控制器及波特率选择寄存器 字节地址=87H,不可位寻址
[单片机]
51单片机在Keil中使用printf进行串口输出
最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是最常用的STC89C52、keil下其他51系列单片机如STC12、STC15等同样适用。具体步骤如下: 在Keil中建立一个空的工程,加入一个源文件,如main.c 粘贴以下代码,编译生成hex文件,下载到单片机即可。 需要注意的是: 1、需要包含stdio.h头文件 2、串口初试化函数中需要有 TI = 1; 废话少说,直接上代码: #include stdio.h #include reg52.h void InitUART
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved