精华内容
下载资源
问答
  • 基于51单片机数码管显示
    千次阅读 多人点赞
    2020-10-24 19:46:24

    基于51单片机数码管显示

    ## 数码管显示原理

    1. 数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示,如图所示。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管。
    2. 按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极的数码管,共阴数码管在应用时应将公共极接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

    根据数码管共阴共阳连接,通过单片机给单片机I/O口送高低电平就可以控制数码管每一段的显示。

    ## 共阴级数码管编码

    符号编码符号编码符号编码符号编码
    00x3f40x6680x7fc0x39
    10x0650x6d90x6fd0x5e
    20x5b60x7dA0x77E0x79
    30x4f70x07b0x7cF0x71

    一位数码管显示数字代码

    #include <reg51.h>
    unsigned char code LED[] = {0x3f,0x06,0x5b,0x4f,
                                0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f}//数码管显示0-9数字编码,写成数组直接给I/O口送进数组元素就欧克
    void main(){
    P1=LED[1];//可以根据电路图所接单片机I/O口改变向数码管接口
    }                  

    当数码管多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部连接在一起, 独立的公共端可以控制多位 一体中的哪一 位数码管点亮,连接在-起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路,就可以控制任意的数码管显示任意的数字了。
    一般单位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办法是用数字万用表测量。 若没有数字万用表,也可用直流电源串接1k电阻后测量,将测量结果进行记录,通过统计便可绘制出引脚标号。
    多位数码管显示需要用到段选与位选信号,也就是当你用到那一位数码管的时候,需要打开位选端,只有这样才可以向那一位传输数据,传输段选信号时还要打开段选段,这样才能可控的任意选择给哪一位数码管送入那一段数据;

    多位数码管显示代码

    #include <reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    void delay(uint x);
    sbit wela = P2^7; //定义位选IO口
    sbit dula = P2^6‘、//定义段选IO口
    uchar code D[] = {0x3f,0x06,0x5b,0x4f,
                      0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f};//0-9段选编码  
    uchar code W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//I/O口位选编码
    
    void main()
    {
     uint i;
     for(i=0;i<8;i++)//i可以控制几位数码管
     {
       delay(500);
       wela=1;
       P0=W[i];
       wela=0;
       P0=0xff;//消隐防止数码管亮的不均衡
       dula=1;
       P0=D[i];
       dula=0;
     }
     
    }
    //延时函数 这里是软件代码空运行延时
    void delay(uint x){
    uint i,j;
     for(i=0;i<x;i++){
      for(j=0;j<110;j++);
     }
      
    }
    更多相关内容
  • 51单片机数码管显示

    2021-05-16 17:29:21
    一、数码管静态显示 1.原理:数码管无非就是八块发光二极管集成在 了一起,如右图所示,数码管有共阴极 和共阳极数码管之分。 共阴极数码管:将八只发光二极管的负极通过一 根总线连接在了一起 , 然后每只二极管 ...

    一、数码管静态显示
    1.原理:数码管无非就是八块发光二极管集成在
    了一起,如右图所示,数码管有共阴极
    和共阳极数码管之分。
    在这里插入图片描述
    共阴极数码管:将八只发光二极管的负极通过一
    根总线连接在了一起 , 然后每只二极管
    的正极被引了出来,通过二极管的单向导
    通性可知,当对应数码管的二极管段接入
    高电平时,二极管点亮。
    共阳极数码管:八只发光二极管的正极通过一根总线连接在了一起 , 然后每只二极管的负极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入低电平时,二极管点亮。
    (以共阴极数码管为例)显示数字 “1 ” ,那也就是让 b 和 c 亮,编程的话,即是0x06,这样一来给了 b和 c 段高电平,实现了点亮数字 “1”;则对应表格

    2.锁存器74HC573:11引脚(LE)控制着开、关状态,D0-D7为输入,Q0-Q7为输出,在LE = 1,即输入高电平时,输入端=输出端,输入是什么,输出也就原封不动的输出;在LE = 0 ,即输入高电平时,大门关闭,实现锁存,不再输出。

    在实现数码管的静态显示中,我们用到了两个锁存器,两个I/O口,P2.6和P2.7,分别是位选和段选。位选,也就是位置的选择,选择控制的数码管;段选,就是我们常说的控制一个数码管中的a,b,c…g 段,使其显示数字。
    3.编程
    #include<reg52.h>sbit dula=P2^6;sbit wela=P2^7;void delay(unsigned int x){ unsigned char y;for(x;x>0;x--)for(y=240;y>0;y--);}void main(){unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char num;wela=1;P0=0xc0;wela=0;while(1){	for(num=0;num<16;num++){dula=1;P0=table[num];dula=0;delay(1000);}}}

    二、80C51的中断系统
    1、80C51的中断系统有5个中断源(8052有6个),2个中断优先级,可实现二级中断嵌套。
    在这里插入图片描述
    ⑴ (P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上有有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
    ⑵ (P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上有有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
    ⑶ TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
    ⑷ TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
    ⑸ RI(SCON.0)或TI(SCON.1)串行口中断请求标志。当串行口接受完一帧串行数据时置位RI,或者当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

    2、中断请求标志
    ⑴TCON的中断标志
    在这里插入图片描述
    IT0(TCON.0),外部中断0触发方式控制位。
    当IT0=0时,为电平触发方式。
    当IT0=1时,为边沿触发方式。(下降沿有效)
    IE0(TCON.1),外部中断0中断请求标志位。
    IT1(TCON.2),外部中断1触发方式控制位。
    IE1(TCON.3),外部中断1中断请求标志位。
    TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
    TF1(TCON.7),定时/计数器T1溢出中断请求标志位。

    ⑵SCON的中断标志
    在这里插入图片描述
    RI (SCON.0),串行口接收中断标志位。当串行口接收数据时,每接收完一帧串行数据,由硬件置位RI,向CPU申请中断,CPU响应中断时,不能自动清除RI,RI必须由软件清除。
    TI (SCON.1),串行口发送中断标志位。当串行口发送数据时,每发送完一帧串行数据,由硬件置位TI,向CPU申请中断,CPU响应中断时,不能自动清除TI,TI必须由软件清除。
    3、80C51中断的控制
    ⑴中断允许控制
    CPU对中断系统所有中断以及某个中断源的开放和屏蔽,是由中断允许寄存器IE控制的。
    在这里插入图片描述
    EX0(IE.0),外部中断0允许位。
    ET0(IE.1),定时/计数器T0中断允许位。
    EX1(IE.2),外部中断1允许位。
    ET1(IE.3),定时/计数器T1中断允许位。
    ES(IE.4),串行口中断允许位。
    EA(IE.7),CPU中断允许(总允许)位。
    ⑵中断优先级控制
    80C51单片机有两个中断优先级,可以实现二级中断服务嵌套。每个中断源的中断优先级,都是由中断优先级寄存器IP中的,相应位的状态来规定的。
    三条原则:
    CPU同时接收到几个中断时,首先响应优先级别最高的中断请求
    正在进行的中断过程,不能被新的同级或低优先级的中断请求所中断
    正在进行的低优先级中断服务,能被高优先级中断请求所中断
    为了实现上述后两条原则中断,系统内部设有两个用户不能寻址的优先级状态触发器,其中一个置1,表示正在响应高优先级的中断,他将阻断后来所有有的中断请求,另一个置1,表示正在响应低优先级中断,他将阻断后来所有的低优先级中断请求。
    在这里插入图片描述
    PX0(IP.0),外部中断0优先级设定位。
    PT0(IP.1),定时/计数器T0优先级设定位。
    PX1(IP.2),外部中断1优先级设定位。
    PT1(IP.3),定时/计数器T1优先级设定位。
    PS(IP.4),串行口优先级设定位。
    PT2(IP.5),定时/计数器T2优先级设定位。

    三、数码管动态显示
    动态数码管就是让人感觉多个数码管一起亮
    动态数码管显示和静态基本类似
    就是多个数码管切换的过程,利用人的视觉效果差,来感觉数码管是一起亮的

    #include <reg52.h>
    #define uchar unsigned char
    #define uint  unsigned int
    sbit we = P2^7;	
    sbit du = P2^6;
    void delay(uint x)    
    { uchar y;
       for(x;x>0;x--)
       for(y=110;y>0;y--);
    }
    	
    uchar code table[]=
    {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    
    void main()
    {				
    		while(1)
    		{
    			 //第一位数码管显示1
    			P0 = 0xfe;//1111 1110 第一位数码管显示,注意数码管的排序,P0.0对应连接的是左边第一位数码管
    			we = 1;//打开位选
    			we = 0;	//关闭位选
    			P0 = table[1];
    			du = 1;	//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时
    			
    			//第二位数码管显示2
    			P0 = 0xfd;//1111 1101  只选通第二位数码管
    			we = 1;	//打开位选
    			we = 0;	//关闭位选
    			P0 =table[2]; //显示2
    			du = 1;//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时	
    			//第三位数码管显示3
    			P0 = 0xfb;// 1111 1011只选通第三位数码管
    			we = 1;	//打开位选
    			we = 0;	//关闭位选			
    			P0 =table[3]; //显示3
    			du = 1;//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时
    	
    			P0 = 0xf7;//1111 0111  只选通第四位数码管
    			we = 1;	//打开位选
    			we = 0;	//关闭位选
    			P0 =table[4]; //显示4
    			du = 1;//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时
    			
    			P0 = 0xef;//1110 1111  只选通第五位数码管
    			we = 1;	//打开位选
    			we = 0;	//关闭位选
    			
    			P0 = table[5]; //显示5
    			du = 1;//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时
    			
    			P0 = 0xdf;//1101 1111  只选通第六位数码管
    			we = 1;	//打开位选
    			we = 0;	//关闭位选
    			
    			P0 =table[6]; //显示6
    			du = 1;//打开段选
    			du = 0;	//关闭段选
    			delay(2);//延时
    		}
    }
    
    展开全文
  • 利用单片机及某些数字电路块的结合,可以实现静态...表8 数码管显示数字“5555”硬件电路元器件表(3)数码管显示数字“5555”程序流程图(见图21)。 图21 显示数字“5555”程序流程图(4)数码管显示数字“5555”程序。
  • 本文主要对51单片机数码管显示跑马灯程序源代码进行了讲解,希望对您的学习有所帮助。
  • 51单片机数码管显示数字及小数点

    万次阅读 多人点赞 2021-03-17 17:20:24
    51单片机数码管显示(共阴极) 1.先看一下显示的结果: 源代码: #include <reg51.h> typedef unsigned int u16; typedef unsigned char u8; u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x...

    51单片机数码管显示(共阴极)


    1.先看一下显示的结果:

    在这里插入图片描述
    源代码:

    #include <reg51.h>
    
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
    u16 num=2021;//要显示的数字
    /*延时函数*/
    void delay(u16 i)
    {	
    	while(i--);
    }
    /*显示函数*/
    void display()
    {
    	u16 n,x=0;
    	while(1){
    		for(n=0;n<4;n++)
    	  {
    			switch(x){
    				case 0:
    					P2=0x0e;P0=smg[num/1000];break;//显示2
    				case 1:
    					P2=0x0d;P0=smg[(num%1000)/100];break;//显示0
    				case 2:
    					P2=0x0b;P0=smg[(num%1000)%100/10];break;//显示2
    				case 3:
    					P2=0x07;P0=smg[num%10];break;//显示1
    			}
    			delay(800);
    			x++;
    		}
    		x=0;  //for循环结束,x要重新置0
    	}
    }
    /*主函数*/
    void main()
    {
    		display();
    }
    

    2.如何在数码管显示小数点呢?

            对与共阴极数码管来说,直接将要显示的数字与0x80相或
            例如:
                     要想在数码管上显示数字2,对于本电路图来说,直接让P0=0x5b即可; 0x5b=01011011,
                     但怎么显示'2.'呢? 对于共阴极数码管来说,只需要让P0=0x5b | 0x80, 即P0=11011011,即点亮dp位
    

    显示结果:在这里插入图片描述
    源代码:

     #include <reg51.h>
    
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
    u16 num=2021;//要显示的数字
    /*延时函数*/
    void delay(u16 i)
    {	
    	while(i--);
    }
    /*显示函数*/
    void display()
    {
    	u16 n,x=0;
    	while(1){
    		for(n=0;n<4;n++)
    	  {
    			switch(x){
    				case 0:
    					P2=0x0e;P0=smg[num/1000]|0x80;break;//***只修改了此语句***
    				case 1:
    					P2=0x0d;P0=smg[(num%1000)/100];break;
    				case 2:
    					P2=0x0b;P0=smg[(num%1000)%100/10];break;
    				case 3:
    					P2=0x07;P0=smg[num%10];break;
    			}
    			delay(800);
    			x++;
    		}
    		x=0;
    	}
    }
    /*主函数*/
    void main()
    {
    		display();
    }
                         
    

    以上就是51单片机数码管显示数字及小数点了,但仅仅以共阴极数码管为例,大家还可以思考一下如何用共阳极数码管实现

    proteus中数码管: 7-SEG-MPX4 (CC是共阴极,CA是共阳极)

    展开全文
  • STC51单片机数码管显示程序和仿真 仿真使用的数码管时共阴极 1、共阳: char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; 2、共阴: char code ...

    STC51单片机数码管显示程序和仿真


    在这里插入图片描述

    • 仿真使用的数码管时共阴极

    1、共阳:

     char code table[]={
       0xc0,0xf9,0xa4,0xb0,0x99,0x92
    展开全文
  • 51单片机数码管显示数字

    千次阅读 2021-08-14 14:50:03
    采用74HC138译码器选择数码管亮 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit LSA = P2^2; sbit LSB = P2^3; sbit LSC = P2^4; char code smgduan[16]={0x3...
  • 单片机c语言 用数码管显示0123的简单程序 51单片机数码管显示0123 c语言源程序
  • 主程序中的循环语句反复将 0~9 的段码送至 P0 口,使数字 0~9 循环显示
  • c51单片机的用ds18b20显示温度,用数码管显示。使用的硬件是炜煌公司的开发板。
  • 基于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单片机数码管显示实验实验内容:编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。C语言程序#include#define uint unsigned intvoid ...
  • 本程序为数码管动态扫描显示: ...可传入任意三位及以下位数的正整数让数码管显示对应的数字,如传入256,则数码管显示256,需要注意的是对于不同的单片机,数码管段和位的引脚可能不同,因此可能要修改所控制的引脚。
  • 用汇编汇编汇编汇编语言设计程序,完成8个数码管显示控制。 检查内容:程序启动后,8 个数码管依次显示 11 21 2 31 2 3 41 2 3 4 51 2 3 4 5 61 2 3 4 5 6 71 2 3 4 5 6 7 8;当 8 个数码管全亮时,进行...
  • 51单片机数码管流动显示上档次第三方第三方
  • 单片机计时器应用,本资源为四位数码管,无锁存器的60s倒计时
  • 51单片机数码管显示历史键值

    千次阅读 2021-04-17 16:43:54
    51单片机数码管显示历史键值TGU想说的话单片机程序设计实验目的实验内容实验原理矩阵键盘数码管动态显示实验环境实验代码 想说的话 这个单片机实验要求是我的同学把别人的设计要求发给我,让我帮忙做一下,但是做着...
  • 51单片机数码管动态显示--51单片机数码管动态显示--51单片机数码管动态显示--51单片机数码管动态显示--51单片机数码管动态显示--51单片机数码管动态显示--51单片机数码管动态显示51单片机数码管动态显示--51单片机...
  • 基于51单片机数码管显示拨码开关编码仿真设计资料
  • 51单片机 6位数码管显示 具有2分钟(可以自己更改)的倒计时 精确度到0.01秒 可以暂停 与复位 功能 内附有Keil程序和Proteus仿真 可以调试看效果 绝对可以运行。
  • 通过数码管51单片机从电脑上接收来的数据进行转换并显示出来! 通过数码管51单片机从电脑上接收来的数据进行转换并显示出来!
  • proteus+stm32+tm1637显示仿真,仿真时数码管刷新率太低,数字一位一位显示,哪位高手改进一下。
  • 51单片机实现了数码管和时钟芯片ds1302显示时间
  • 51单片机数码管显示整数0-999

    千次阅读 2020-06-28 09:11:49
    //数码管位选 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数字0-9 void delay(unsigned char a)//自定义延迟函数,字符型a值范围0-255 {unsigned char x,y; for(x=0;x<a...
  • 基于51单片机数码管显示AD0808转化0V-5V
  • 51黑论坛_数码管显示程序,51单片机数码管显示程序,C,C++源码.rar
  • 51黑论坛_数码管显示程序,51单片机数码管显示程序,C,C++源码.zip

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,910
精华内容 5,164
关键字:

51单片机数码管显示