精华内容
下载资源
问答
  • 这是一个简单的动态显示共阳极数码管的汇编程序,74HC573完成段选,位选由单片机I/O端口完成。 Proteus电路图 只要看该部分电路连线即可,完整JD51单片机电路图见后方资料。 汇编程序 ORG 00H START: SETB P2.5;...

    本文应用AT89C51芯片,使用该芯片的单片机型号有JD51等。这是一个简单的动态显示共阳极数码管的汇编程序,74HC573完成段选,位选由单片机I/O端口完成。

    Proteus电路图

    只要看该部分电路连线即可,完整JD51单片机电路图可下载。

    在这里插入图片描述

    汇编程序

    ORG 00H
    START:
    SETB P2.5;开启74HC573使能端
    
    MAIN:
    CLR P2.0
    MOV P0,#0A4H;显示2
    LCALL DELAY
    SETB P2.0
    
    CLR P2.1
    MOV P0,#0C0H;0
    LCALL DELAY
    SETB P2.1
    
    CLR P2.2
    MOV P0,#0A4H;2
    LCALL DELAY
    SETB P2.2
    
    CLR P2.3
    MOV P0,#0C0H;0
    LCALL DELAY
    SETB P2.3
    LJMP MAIN
    
    DELAY:MOV R5,#50;此时四位数依次亮起;改成1则四位数全部显示
    D2:MOV R6,#100
    D1:
    MOV R7,#100
    DJNZ R7,$
    DJNZ R6,D1
    DJNZ R5,D2
       
    RET
    END
    

    注意事项

    由于仿真与实际硬件效果存在差异,笔者使用单片机测试时可以达到动态显示的效果。

    展开全文
  • 数码管的显示是单片机中最基本的功能,一般分为动态显示和静态显示,动态显示的原理就是利用人眼的视觉残留现象快速刷新数码管显示的内容来进行眼中不变的数字显示,一般分为三部分,①是位选码和段选码,位选码根据...

    仿真图:

    代码:

    #include <reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    uchar num=5;
    uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //共阳极数码管段码
    uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //位选码
    void delay(uint z)     //延迟函数
     {
     	uint x,y;
    	for(x=z;x>0;x--)
    	   for(y=110;y>0;y--);
     }
    void main(){    //主函数
    	uint i;
    	while(1){            //动态刷新
    	for(i=0;i<8;i++){    //逐位显示
    		P2=wei[i];
    		P0=table[i+1];
    		delay(5);
    		if(i==8)
    			i=-1;
    }
    }
    }

    解析:

    数码管的显示是单片机中最基本的功能,一般分为动态显示和静态显示,动态显示的原理就是利用人眼的视觉残留现象快速刷新数码管显示的内容来进行眼中不变的数字显示,一般分为三部分,①是位选码和段选码,位选码根据位选的接口来确定,段选码根据选用的是共阳极数码管还是共阴极数码管来确定。②是延迟部分,正常的延迟函数即可,最好带参数便于调试。③是显示函数,一般通过for循环来逐位输出,并通过while循环来进行动态刷新,一般使用中会用到锁存器进行信号的锁存,避免陷入死循环中

    展开全文
  • 名称:单个数码管静态显示 内容:通过赋值给P1,让数码管显示特定的字符或者数字
  • 一、程序实战 (三)数码管相关 ...下图是共阳极数码管,通过WE控制段,P0控制位,四个数码管共占用12个I/O口,若使用74HC573等锁存器可简化电路,减少占用I/O的数量,使能(G)为高时,Q 输出将随数...

    一、程序实战

    (三)数码管相关

    使用前先明确数码管是共阴极接法还是共阳极接法,若是共阴极接法,定义char型按位控制其输出:(共阳极与下图相反)
    在这里插入图片描述
    工作方式分为静态显示和动态显示,静态显示数码管必须段选接八位数据线保持字码。
    下图是共阳极数码管,通过WE控制段,P0控制位,四个数码管共占用12个I/O口,若使用74HC573等锁存器可简化电路,减少占用I/O的数量,使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,将输出锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。
    在这里插入图片描述

    1、控制一个数码管显示“1"

    方法一:共阴极使用寄存器的情况下

    #include <reg52.h>
    sbit duan = P2^6;
    sbit wei = P2^7;
    int main(){
    	duan = 1;
    	P0 = 0xfe;
    	duan = 0;
    	wei = 1;
    	P0 = 0x06;
    	wei = 0;
    	while(1);		 	
    }
    

    方法二:共阳极情况下

    #include <reg52.h>
    sbit S1 = P2^0;
    int main(){
    	S1 = 0;
    	P0 = 0xf9;
    	while(1);		 	
    }
    

    在这里插入图片描述
    测试成功。

    2、控制所有数码管显示“1"

    #include <reg52.h>
    sbit S1 = P2^0;
    sbit S2 = P2^1;
    sbit S3 = P2^2;
    sbit S4 = P2^3;
    int main(){
    	S1 = S2 = S3 = S4 = 0;
    	P0 = 0xf9;
    	while(1);		 	
    }
    

    3、数码管动态扫描显示“1212"

    #include <reg52.h>
    sbit S1 = P2^0;
    sbit S2 = P2^1;
    sbit S3 = P2^2;
    sbit S4 = P2^3;
    #define uint unsigned int
    void delay(uint z){
        uint x,y;
        for (x = 4; x > 0; x--) {
            for(y = z; y > 0; y--);
        }
    }
    int main(){
    	while(1){
    		S1 = 0;
    		P0 = 0xf9;
    		delay(50);
    		S1 = 1;
    		S2 = 0;
    		P0 = 0xa4;
    		delay(50);
    		S2 = 1;
    		S3 = 0;
    		P0 = 0xf9;
    		delay(50);
    		S3 = 1;
    		S4 = 0;
    		P0 = 0xa4;
    		delay(50);
    		S4 = 1;
    	}	 	
    }
    

    测试成功。

    4、共阳极数码管循环显示“1-9及字母"

    #include <reg52.h>
    sbit S1 = P2^0;
    sbit S2 = P2^1;
    sbit S3 = P2^2;
    sbit S4 = P2^3;
    #define uint unsigned int
    #define uchar unsigned char
    uchar i;
    uchar code table[] = {
    0xc0,0xf9,0xa4,0xb0,
    0x99,0x92,0x82,0xf8,
    0x80,0x90,0x88,0x83,
    0xc6,0xa1,0x86,0x8e
    };
    void delay(uint z){
        uint x,y;
        for (x = 200; x > 0; x--) {
            for(y = z; y > 0; y--);
        }
    }
    int main(){
    	S1 = S2 = S3 = S4 = 0;
    	while(1){
    		for(i = 0; i < 16; i++){
    			P0 = table[i];
    			delay(200);		
    		}
    	}
    }
    

    测试成功。

    展开全文
  • 51单片机之动态数码管显示

    万次阅读 多人点赞 2019-05-17 19:34:33
    本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。 138译码器的真值表如下图G1,G2A,G2B都是...

    首先来看一下开发板上的电路原理图:

     

    本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。

    138译码器的真值表如下图G1,G2A,G2B都是选通脚,当G1,G2A,G2B为100的时候138译码器开始工作,A为最低位,B为中间位,C为最高位。CBA=000B时,Y0为1,其他口为0,CBA=001B时,Y1为1,其他口为0,CBA=010B时,Y2为1,其他口为0,CBA=011B时,Y3为1,其他口为0,CBA=100B时,Y4为1,其他口为0,CBA=101B时,Y5为1,其他口为0,CBA=110B时,Y6为1,其他口为0,CBA=111B时,Y7为1,其他口为0。

    由于8个数码管是共阴的,所以当Y0~Y7中的一个为1,其反值为0,相应的数码管阴极置低,再将数码管的段选位置高,就可以显示相应的值。

     

     

         使用38译码器只能在同一个时刻让一个数码管显示,想要让8个数码管同时显示。这个时候就要用到动态显示技术。

          动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了。

      程序示例如下:

    #include "reg52.h"
    
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       sbit LSA = P2^2;
       sbit LSB = P2^3;
       sbit LSC = P2^4;
    
    
       u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,
                        0x66, 0x6d, 0x7d, 0x07,
    					0x7f, 0x6f, 0x77, 0x7c,
    					0x39, 0x5e, 0x79, 0x71}; //0~F数码
    
     
    
       void delay(u16 i) //延时函数
       {
        while(i--);
       }
    	
    	void DigDisplay() //数码管显示函数
    	{
    	u8 i;
    	for(i=0;i<8;i++)
    	{ 
    	  switch(i)
    	  {
    		case 0:
    	  		LSC = 0;LSB = 0;LSA = 0;break; //显示第1个数码管
    		case 1:
    	  		LSC = 0;LSB = 0;LSA = 1;break; //显示第2个数码管
    		case 2:
    	 		LSC = 0;LSB = 1;LSA = 0;break; //显示第3个数码管
    		case 3:
    			LSC = 0;LSB = 1;LSA = 1;break; //显示第4个数码管
    		case 4:
    			LSC = 1;LSB = 0;LSA = 0;break; //显示第5个数码管
    		case 5:
    	  		LSC = 1;LSB = 0;LSA = 1;break; //显示第6个数码管
    		case 6:
    	  		LSC = 1;LSB = 1;LSA = 0;break; //显示第7个数码管
    		case 7:
    	 		LSC = 1;LSB = 1;LSA = 1;break; //显示第8个数码管
    	  }
    	  P0 = smgduan[i+1];//显示1~8的数值
    	  delay(100); //延时,造成视觉暂留现象
    	  P0 = 0x00; //数码管消隐
    	}
    	}	
    
       void main()
       {
       while(1)
       {
       DigDisplay();
       }
       }

     

        在上例代码中使用了C51中的code关键字。

    u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,

                        0x66, 0x6d, 0x7d, 0x07,

                               0x7f, 0x6f, 0x77, 0x7c,

                            0x39, 0x5e, 0x79, 0x71};

           这称之为编码定义,编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思。需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间(ROM)中,编译后编码占用的是程序存储空间,而非内存空间(RAM)。

         本次实验使用的是共阴极数码管,在静态数码管试验中使用的是共阳极数码管,那在试验过程中如果不清楚数码管是共阴极或者共阳极,可以使用万用表来确定数码管是共阴极还是共阳极的。

        

         对数字万用表来说,红色表笔连接表内部电池正极,黑色表笔连接表内部电池负极,当把数字万用表置于二极管档时,其两表笔间开路电压约为1.5V,把两表笔正确加在发光二极管两端时,可以点亮发光二极管。

         如下图所示,将数字万用表置于二极管挡,红表笔接在①脚,然后用黑表笔去接触其他各引脚,假设只有当接触到⑨脚时,数码管的a段发光,而接触其余引脚时则不发光。由此可知,被测数码管为共阴极结构类型,⑨脚是公共阴极,①脚则是数码管的a段.接下来再检测各段引脚,仍使用数字万用表二极管档,将黑表笔固定接在⑨脚,用红表笔依次接触②、③、④、⑤、⑥、⑦、⑧、⑩引脚时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排列图。

               

          检测中,若被测数码管为共阳极类型,则需将红、黑表笔对调才能测出上述结果,在判别结构类型时,操作时要灵活掌握,反复试验,直到找出公共端为止,大家只要懂得了原理,检测出各个引脚便不在是问题了。

    展开全文
  • 如图所示,我所使用的数码管为共阳极数码管,即公共端(位选)连高电平,引脚a b c d e f g dp连接单片机的P0口。 数码管点亮原理: 因为为阳极,因此接收到低电平点亮; 比如要显示数字“1”,需要数码管引脚b和...
  • PNP型三极管s9012驱动共阳极数码管

    千次阅读 2020-11-29 21:49:09
    3.一位共阳极数码管的引脚位置图如下 4.因为直接拿单片机的引脚驱动阳极的数码管,数码管的亮度会比较低。而用三极管来驱动会有效的解决数码管的亮度问题。以下为pnp型三极管驱动阳数码管的电路图(已验证) ...
  • 51单片机之静态数码管显示

    万次阅读 多人点赞 2019-05-16 21:50:24
    数码管的物理实物图: 不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管内部电路如下图所示,从右图可看出,一位...
  • 单个数码管动态显示仿真电路(软件为Proteus)所用元件目录步骤...1.在Proteus里数码管名称后CC表示阴极,CA表示共阳极,在选择的时候需要注意跟你写的程序是否匹配。 步骤 对Proteus软件操作步骤: 新建工程; 添加
  • 基于51单片机倒计时数码管仿真设计 视频演示地址: https://www.bilibili.com/video/BV1ez4y1o71d/ 功能操作说明: 本设计包括四个按键,单片机复位按键,开始/加,停止/减,设置键。 开机运行后默认显示倒计时时间1...
  • #include #include #include #define uchar unsigned char sbit duanxuan=P2^6; sbit weixuan=P2^7; sbit adwr=P3^6; sbit adrd=P3^7; uchar time=0;...uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66
  • 随着生产自动化的发展,数字式仪表和数字控制设备使用日益广泛。七段显示器是目前使用最多的...下面介绍应用较多的LED数码管显示器。 它每一段是一个发光二极管,排成一个“日”字形。通过控制某几段发光二极管...
  • 该文档包括原理图、源代码,系统的介绍了51单片机和DS1302的应用,显示方式为4位阴时钟数码管,具有调时功能,原理图和源代码都已验证是可用的。E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.csbit ntds p3 3...
  • 89C51单片机按键控制数码管动态显示0~9 1.preteus仿真图 2.keli代码 #include <reg51.h> sbit key1=P3^0; int CC_num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay...
  • C语言实现一位共阳极数码管

    千次阅读 2013-06-13 21:53:34
    #include void main() { P1=0xB0; while(1); } 呃,就这些代码了。...假设该数码管为共阳极数码管,要显示数字“3”。 数码管原理如图: 按照字母顺序为 a b c d e f g dp 对应的电平高
  • 51单片机LED与数码管的学习

    千次阅读 2017-05-06 19:26:37
    数码管,根据内部结构,可分为阴极数码管和共阳极数码管。七段发光管加上一个小数点,共计8段。 因此我们对它编码时,刚好是用一个字节。 2、数码管的种类 根据数码管的显示原理: 可分为阴数码管和...
  • 【视频所用板子 为 共阳极 数码管】     数码管真值表   此节 是 静态显示,下节是 动态显示      写错了,,,,是“ 节省内存空间”         视频示例程序  —— 静态...
  • 51单片机数码管

    千次阅读 2018-08-12 23:12:02
    单个数码管静态显示 #include&lt;reg51.h&gt; //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 void main (void) { P1=0xc0; //二进制 为 1100 0000 参考数码管排列, //...
  • 基于51单片机共阳极数码管显示0000到9999!注意布线……#include #define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };void delayms...
  • 51单片机数码管静态显示

    万次阅读 多人点赞 2018-10-14 14:17:59
     在对单片机编程以实现数码管静态显示数字之前,..., 其实我们没必要说对数码管很陌生,因为数码管无非就是八块发光二极管集成在了一起,另外数码管有阴极和共阳极数码管之分,说起阴,阳,大家可能会有...
  • 本文旨在介绍单片机入门的基础知识,为初接触或即将接触单片的新手提供一个入门指导。本文章会陆续推出,隔几天一个章节。所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;...LED数码管是单
  • 此资源为51单片机共数码管倒计时工程,理解原理之后,其实很简单,附件包含代码和仿真文件,(阳类似)有需要请下载,如有问题请私信。
  • 数码管单片机设计中经常用到的器件,本文主要介绍单片机数码管阴极与共阳极编码
  • 基于 51 单片机共阳极数码管显示 0000 到 9999 !注意布线……#include #define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};vo...
  • 说明: 驱动四位一体数码管动态显示数字,可方便的移植到其它程序中。 例如:1、硬件改为三位一体或二位一体数码管,只需修改Display_... 2、本例中,采用了数码管,如果用在数码管,只需修改相应段码表。
  • 51单片机数码管

    千次阅读 2015-08-10 10:45:40
    使用时,阴极数码管公共端接地,共阳极数码管公共端接电源。参照下图:  通过给每个管脚高低电平即可控制数码管的亮灭。还是举个例子吧,以阴极数码管为例,让数码管显示数字0,只要个abcdef六个管脚输
  • 单片机C语言实现数码管控制

    万次阅读 多人点赞 2017-06-13 08:30:29
    本文分析了数码管的工作原理,并尝试用C51单片机去控制数码管的显示。希望更加深入理解单片机的内部工作原理和C语言的特性。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 854
精华内容 341
关键字:

51单片机共阳极数码管