精华内容
下载资源
问答
  • 本例程适用于共阴数码管 段选锁存器与位选锁存器都接P0
  • 多个数码管显示数字的时候,我们实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。...
  • 1.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选和段选通过[74HC595]
  • 而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示。一...
    • 数码管
      多位数码管,即是两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示。一般一位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚。
      为了更方便区分段选和位选,请看下原理图:

    aecd1b28ed81b024c45ac56b0cdf6d86.png


    如图为两个4位一体的数码管,可以看到与8个com相连的是两个数码管的位选,位选与引脚相连,所以位选控制那个灯亮。段选可以看到a,b,,,,,g并联到一起。因为是并联,所以点亮的数码管显示的数字相同。

    • 共阴极数码管和共阳极数码管

    99e4beb7d9ba3426ab1ecd02a2a4afb8.png

    图a数码管管脚图,图b是共阳极数码管,图c是共阴极数码管。
    由图b可知共阳极数码管阳极连接在一起,接高电平,阴极对应的各段分别控制。比如要想显示1,则阴极对应的bc段低电平,其它接高电平,即可显示。
    由图C可知,共阴极数码管将各个二极管的阴极连接在一起(阴极为低电平),而阳极控制各段,比如要显示1,则bc为高电平,其它各段低电平即可显示。


    共阳极和共阴极数码管对照表:
    共阳极数码管对照表(位选位高电平,各段选低电平控制数字显示)

    uchar code table[]={
    	0xc0,//0
    	0xf9,//1
    	0xa4,//2
    	0xb0,//3
    	0x99,//4
    	0x92,//5
    	0x82,//6
    	0xf8,//7
    	0x80,//8
    	0x90,//9
    	0x88,//A
    	0x83,//B
    	0xc6,//C
    	0xa1,//D
    	0x86,//E
    	0x8e, //F
    	0x8c, //P
    	0xc1,//U
    	0x91,//Y
    	0x7c,//L
    	0x00,//全亮
    	0xff  //熄灭


    共阴极数码管对照表(位选为低电平,段选为高电平)

    uchar code leddata[]={
    	0x3F,  //"0"
        0x06,  //"1"
        0x5B,  //"2"
        0x4F,  //"3"
        0x66,  //"4"
        0x6D,  //"5"
        0x7D,  //"6"
        0x07,  //"7"
        0x7F,  //"8"
        0x6F,  //"9"
        0x77,  //"A"
        0x7C,  //"B"
        0x39,  //"C"
        0x5E,  //"D"
        0x79,  //"E"
        0x71,  //"F"
        0x76,  //"H"
        0x38,  //"L"
        0x37,  //"n"
        0x3E,  //"u"
        0x73,  //"P"
        0x5C,  //"o"
        0x40,  //"-"
        0x00  //熄灭
    	};
    
    
    • 数码管显示原理
      1.静态显示
      多位数码管依然可以静态显示,但是显示时要么只显示一位数码管,否则一体的多位同时显示必须时显示相同内容。当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选的信号都是相同的,那么他们显示的数字必定一样。(换言之,你可以通过位选控制那个数码管亮,但是亮的同时显示的数字必定相同)
      2.动态显示
      位选控制亮不亮,而段选控制显示数字,那怎样显示不同的数字呢?这就利用了人体肉眼观察的能力。
      举个例子,假设段选1控制第一位数码管数字显示1,那么在显示第二个数码管是段选控制数码管显示2,而位选控制灯第二位数码管亮,第一位数码管灭。但是给人的感受是第一位数码管并没有灭(实际已经灭了),因为时间太短人体肉眼无法识别。这样就会发现数码管动态显示是向左或向右一位一位点亮。
    • 静态数码管工作原理
      静态数码管原理图:

    474685e18cd0b5daefd246bf58807d6d.png


    因为共阳极数码管,所以位选接的是高电平,要想正常显示通过控制低电平来控制段选即可。

    • 静态数码管代码实现:
    #include <reg52.h>
    #include <intrins.h>
    typedef unsigned char u8; //重定义全局字符型变量
    typedef unsigned int u16; //重定义全局整型变量
    u8 code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
    0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    /*利用数组引用数码表(注次数码表为阴极数码表,因为是共阳极数码管,本应使用刚阳极数码管,
    为了方便直接将共阴极数码表取反来使用)。code是将数组从ram调到ROM节省空间*/
    
    /*延时函数*/
    void dealy(u16 i)
    {
    while(i--);
    }
    
    void main()
    { int i=0;
      for(i=0;i<9;i++){
      P0=~table[i];//取反是因为使用的是阴极数码表,而取反得阳极数码表
      dealy(50000);
      }	
      //p0=~table[0];  该写法是固定显示数字不变的写法,~table[0]显示的就为0
    	 
    }
    • 动态数码管工作原理

    4b104f9d6378c280ba3ab54aaf372fcd.png

    df8f4ce05f0245ca2e3691b6d1c60ad5.png


    如图,位选的控制通过连接J16的管脚连接138译码器,利用138译码器控制位选。段选不是有单片机IO直接驱动,而是通过连接74HC25芯片连接管脚,利用芯片来实现段选。
    因为是共阴极数码管,所以位选应接低电平,段选接高电平时,数码管正常显示。

    译码器工作原理

    a5d051d96fb754ebaac413cd96280810.png

    6004f27f63dde0955508bce7f0399d43.png

    b1210f4f18e739ef9ff4b2dab2dfbdcd.png


    可以有真值表观察,当使能控制都为低电平的情况下,A0A1A2输入不同电平控制输出。
    例,A0A1A2为000(二进制为0,A为低位,C为高位)对应Y0就输出低电平,为001(二进制为1)输出Y1就位高电平。所以就相当于二进制十进制,十进制对应输出。
    74HC25看自己的原理图即可,不再阐述。

    • 动态数码管代码实现
    #include <reg52.h>
    #include <intrins.h>
    typedef unsigned char u8; //重定义全局字符型变量
    typedef unsigned int u16; //重定义全局整型变量
    
    u8 code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
    0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    /*利用数组引用数码表(该数码管是共阴极数码管,所以使用共阴极数码表)。code是将数组从ram调到ROM节省空间*/
    
    sbit LSA=P2^2;    //ABC分别连接单片机的P2^2,P2^3,P2^4管脚
    sbit LSB=P2^3;
    sbit LSC=P2^4;
    
    /*延时函数*/
    void dealy(u16 i)
    {
    while(i--);
    }
    
    /*动态显示函数
    *参数说明
    *ABC分别为138译码器的输入端,通过控制输入端来控制输出端的高低电平,从而实现对位选的控制
    且A为二进制中的低位,C为高位*/
    void Display()
    {  u16 i=0;
    for(i=0;i<8;i++)
    {
     switch(i)
     {
     case 0:LSA=0;LSB=0;LSC=0;break; //利用138译码器来控制位选,当ABC都等于0时,y0为低电平,其余为高电平
     case 1:LSA=1;LSB=0;LSC=0;break; //Y1输出低电平
     case 2:LSA=0;LSB=1;LSC=0;break; //Y2输出低电平
     case 3:LSA=1;LSB=1;LSC=0;break; //Y3输出低电平
     case 4:LSA=0;LSB=0;LSC=1;break; //Y4输出低电平
     case 5:LSA=1;LSB=0;LSC=1;break; //Y5输出低电平
     case 6:LSA=0;LSB=1;LSC=1;break; //Y6输出低电平
     case 7:LSA=1;LSB=1;LSC=1;break; //Y7输出低电平
     }
     P0=table[i];  //第i个为低电平决定位选则跳出switch循环,P0提供段选(原理图可以看出)
     dealy(100);  // 短暂的延时,达到肉眼看不到的速度,以达到同时显示效果
     P0=0x00;     //清零,作用为了下一个显示不会产生重影
    }
    }
    
    void main()
    { 
      while(1)
      {
      Display();
      }	 
    } 
    展开全文
  • #include//#include#include#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;sbit key2=P3^5;sbit key3=P3^6;sbit beep=P2^3;unsigned code table[]={0x3f , 0x...

    #include

    //#include#include

    #define uchar unsigned char

    #define uint unsigned int

    sbit dula=P2^6;

    sbit wela=P2^7;

    sbit key1=P3^4;

    sbit key2=P3^5;

    sbit key3=P3^6;

    sbit beep=P2^3;

    unsigned code table[]={

    0x3f , 0x06 , 0x5b , 0x4f ,

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

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

    0x39 , 0x5e , 0x79 , 0x71

    };

    uchar num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi;

    uchar ns,ns1,nf,nf1,numns,numnf;

    void delay(uint z);

    void keyscan ();

    void keyscan1 ();

    void alram();

    void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1);

    void display0(uchar nf,uchar nf1,uchar ns,uchar ns1);

    void main()

    {

    TMOD=0x01;//设定定时器0工作方式1

    TH0=(65536-46080)/256 ;

    TL0=(65536-46080)%256 ;

    EA=1;//开总中断

    ET0=1;//开定时器0中断

    TR0=1;//启动定时器0中断

    numns=12;

    numnf=0;

    while(1)

    {

    if(dingshi==0)

    {

    keyscan ();

    display(m,m1,f,f1,s,s1);

    alram();

    }

    else

    {

    keyscan1 ();

    display0(nf,nf1,ns,ns1);

    }

    }

    }

    void keyscan ()

    {

    if(key1==0)

    {

    delay(10);

    if(key1==0)

    nums++;

    if (nums==24)

    nums=0;

    while(!key1);

    display(m,m1,f,f1,s,s1);

    }

    if(key2==0)

    {

    delay(10);

    if(key2==0)

    numf++;

    if (numf==60)

    numf=0;

    while(!key2);

    display(m,m1,f,f1,s,s1);

    }

    if(key3==0)

    {

    delay(10);

    if(key3==0)

    {

    dingshi=~dingshi;

    while(!key3)

    display(m,m1,f,f1,s,s1);

    }

    }

    /* if(key4==0)

    {

    delay(10);

    if(key4==0)

    {

    flag=1;

    while(!key4);

    display(m,m1,f,f1,s,s1);

    }

    }*/

    }

    void keyscan1()

    {

    if(key1==0)

    {

    delay(10);

    if(key1==0)

    numns++;

    if (numns==24)

    numns=0;

    while(!key1);

    // display(nf,nf1,ns,ns1);

    }

    if(key2==0)

    {

    delay(10);

    if(key2==0)

    numnf++;

    if (numnf==60)

    numnf=0;

    while(!key2);

    // display(nf,nf1,ns,ns1);

    }

    if(key3==0)

    {

    delay(10);

    if(key3==0)

    {

    dingshi=0;

    while(!key3);

    // display(m,m1,f,f1,s,s1);

    }

    }

    }

    void alram()

    {

    展开全文
  • 基于51单片机定时,数码管显示时间

    千次阅读 多人点赞 2020-10-27 19:15:12
    基于单片机定时,数码管显示时间

    基于51单片机定时,数码管显示时间

    要想让数码管显示时间,就得让数码管显示,然后需要让显示的数字按秒、分、时进位。数码管显示可以看我前面文章:
    基于51单片机数码管显示

    单片机的定时器中断
    51单片机内部有两个16位可以编程的定时器T0/计数器T1,52单片机内多了一个T2定时器/计数器;

    定时器/计数器的实质是加1计数器(16位),由高8位和低8位2个寄存器组成。TMOD 是定时器/计数器的工作方式寄存器,确定工作方式和功能: TCON 是控制寄存器,控制TO、TI的启动和停止及设置溢出标志。
    加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分 频后送来;另一个是T0或T1引脚输入的外部脉冲源,每来一个脉冲计数器加 1,当加到计数器为全I时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON寄存器中TFO或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表示定时时间已到:如果工作于计数模式,则表示计数值已满。
    由上可知,由溢出的计数器的值减去计数初值才是计数器的计数值。
    设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tey就是定时时间t。
    定时器初值计算

    定时时间T=(2的N次方-X)12/单片机晶振频率(方式0时,N=13 方式1时,N=16 方式2时,N=8)

    打个比方计时2ms,当晶振为12M。
    方法一
    定时时间2ms=(2的16次方-时间常数X)12/f 即晶振为12M f=121000000
    2ms=(2的16次方-时间常数X)12/(12
    1000000)
    方法二
    12MHz除12为1MHz,也就是说一秒=1000000次机器周期。2ms=50000次 机器周期。

    时间常数X=2000
    TH0=(65536-2000)/256; 就是转换成十六进制 再除以256 取整数 即高8位送时间常数寄存器的高8位计数器
    TL0=(65536-2000)%256; 就是转换成十六进制 再除以256 取余数 即低8位送时间常数寄存器的低8位计数器

    单片机在使用定时器或计数器功能时,通常需要设置2个与定时器有关的寄存器:定时器/计数器工作方式寄存器TMOD与定时器/计数器控制寄存器TCON。
    定时器/计数器工作方式寄存器TMOD
    TMOD各位定义如下表:

    位序号D7D6D5D4D3D2D1D0
    位符号GATEC/TM1M0GATEC/TM1M0

    D7–D4是定时器1 D3–D0是定时器0
    TMOD的高4位用于设置定时器1,低4位用于设置定时器0,对应4位含义如下:
    GATE一门控制位。GATE=0,定时器/计数器启动与停止仅受TCON寄存器中的TRX(X=0, 1)来控制; GATE=1,定时器/计数器启动与停止由TCON寄存器中的TRX (X=0, 1)和外部中断引脚(INTO或INT1)上的电平状态来共同控制.
    C/T一定时器模式和计数器模式选择位。C/T=1, 为计数器模式: C/T=0 为定时器模式。M1 M0是工作方式选择位。每个定时器计数器都有4种工作方式,它们由MIMO设定,如下表所示

    M1M0工作方式
    00方式0 是13位定时器/计数器
    01方式1 是16位定时器/计数器
    10方式2 是8位初值自动重装的8位定时器/计数器
    11方式3 是仅仅适用与T0分为两个8位计数器,T1停止计数

    定时器/计数器控制寄存器TCON

    定时器/计数器控制寄存器TCON在特殊功能寄存器中,字节地址为88H, 位地址(由低位到高位)分别是88H~8FH,可进行位寻址。TCON寄存器用来控制定时器的启、停,以及标志定时器溢出和中断情况。单片机复位时,TCON 全部被清0.
    其各位定义如下表所示.其中TFI、 TRI、TFO和TRO位用于定时器/计数器; 1IEI、 ITI、 IEO和ITO位用于外部中断。

    位序号D7D6D5D4D3D2D1D0
    位符号TF1TR1TF0TR0IE1IT1IE0IT0
    位地址8FH8EH8DH8CH8BH8AH89H88H

    TF1 定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0.注意,如果使用定时器的中断,那么该位完全不用人为去操作;如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0.
    TR1 定时器1运行控制位。由软件清0关闭定时器1.当GATE=I且INT1为高电平时, TR1置1,启动定时器1;当GATE=0时, TRI置1, 启动定时器1.
    TF0 定时器0溢出标志,其功能及操作方法同TF1.
    TR0 定时器0运行控制位,其功能及操作方法同TR1.
    IE1 外部中断1请求标志.

    要让数码管显示时间要使用寄存器TMOD定时器0,工作方式1;
    代码如下

    void T0_init(){                    
     TMOD = 0x01; //设置定时器0为工作方式1(M1 M0为01)
     TH0 = (65536-50000)/256;//装初值12Mhz晶振定时50ms  
     TL0 = (65536-50000)%256;  
     EA = 1;//开总开关     
     ET0 = 1;//开定时器0中断     
     TR0 = 1;//启动定时器0    
    }
    void timer0_int() interrupt 1{
     TH0 = (65536-50000)/256; //重装初值
     TL0 = (65536-50000)%256;
     i++;//每加一次就判断一次看是否到达1s
       if(i == 20){
       i = 0;  
       miao++//每加一次就判断一次看是否到达1分
         if(miao == 60){
         miao = 0;
         fen++;//每加一次就判断一次看是否到达1小时
           if(fen == 60){
            fen = 0;  
            shi++;
        	  if(shi == 24){
         	  shi = 0;  
         	  fen = 0;
         	  miao = 0;
         }
       }
     }
     miao_g = miao%10;//求余得到秒的个位   
     miao_s = miao/10;//取十得到十位 这就是送到数码管元素的下标与数组相对应 下同
     fen_g = fen%10;  
     fen_s = fen/10;
     shi_g = shi%10;  
     shi_s = shi/10;
      }
    }

    数码管显示函数如多段数码管动态显示相似可以看上文
    代码与原理图已经上传资源,感兴趣可以看看,也请各位大佬纠正;

    展开全文
  • 数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5...

    描述

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。

    数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。

    按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

    数码管驱动方式

    概述

    数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

    静态显示驱动

    静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

    动态显示驱动

    数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

    利用单片机数码管程序模拟是时钟显示时间

    本电子时钟主要是由AT89S51单片机及8个共阳数码管组成。由于数码管引脚比较多,占用单片机的I\O口也比较多,由于单片机最多只有32个I\O口,在数码管比较多时(两个以上),就满足不了实际需要,因此在数码管比较多时,采用动态扫描的方式使数码管逐个点亮。本电子时钟就是采用的这种显示方式。利用取表指令“MOV DPTR,#TABLE与MOVC A,@A+DPTR”和条件转移指令“CJNE A,#data,rel”所要显示的时间送入单片机的端口(P0口和P2口)并放大后,驱动数码管显示出所要显示的具体时间。采用单片机内部定时器定时,计数,时间非常准确!

    显示的时间格式为:12—00—00,即“小时—分钟—秒”。P0口为数码管的各段位接口,P2口为8个数码管的电源端。P3.2口为“小时”调整,P3.3口为“分钟”调整,P3.4口为“秒”调整。但每个调整键只能加,不能减。晶振为12MHZ。

    汇编源程序如下:

    SECOND EQU 30H

    MINITE EQU 31H

    HOUR EQU 32H

    HOURK BIT P3.2

    MINITEK BIT P3.3

    SECONDK BIT P3.4

    DISPBUF EQU 40H

    DISPBIT EQU 48H

    T2SCNTA EQU 49H

    T2SCNTB EQU 4AH

    TEMP EQU 4BH

    ORG 00H

    LJMP START

    ORG 0BH

    LJMP INT_T0

    START:MOV SECOND,#00H

    MOV MINITE,#00H

    MOV HOUR,#12

    MOV DISPBIT,#00H

    MOV T2SCNTA,#00H

    MOV T2SCNTB,#00H

    MOV TEMP,#0FEH

    LCALL DISP

    MOV TMOD,#01H

    MOV TH0,#(65536-2000) / 256

    MOV TL0,#(65536-2000) MOD 256

    SETB TR0

    SETB ET0

    SETB EA

    WT:JB SECONDK,NK1

    LCALL DELY10MS

    JB SECONDK,NK1

    INC SECOND

    MOV A,SECOND

    CJNE A,#60,NS60

    MOV SECOND,#00H

    NS60:LCALL DISP

    JNB SECONDK,$

    NK1:JB MINITEK,NK2

    LCALL DELY10MS

    JB MINITEK,NK2

    INC MINITE

    MOV A,MINITE

    CJNE A,#60,NM60

    MOV MINITE,#00H

    NM60:LCALL DISP

    JNB MINITEK,$

    NK2:JB HOURK,NK3

    LCALL DELY10MS

    JB HOURK,NK3

    INC HOUR

    MOV A,HOUR

    CJNE A,#24,NH24

    MOV HOUR,#00H

    NH24:LCALL DISP

    JNB HOURK,$

    NK3:LJMP WT

    DELY10MS:MOV R6,#10

    D1:MOV R7,#248

    DJNZ R7,$

    DJNZ R6,D1

    RET

    DISP:MOV A,#DISPBUF

    ADD A,#8

    DEC A

    MOV R1,A

    MOV A,HOUR

    MOV B,#10

    DIV AB

    MOV @R1,A

    DEC R1

    MOV A,B

    MOV @R1,A

    DEC R1

    MOV A,#10

    MOV @R1,A

    DEC R1

    MOV A,MINITE

    MOV B,#10

    DIV AB

    MOV @R1,A

    DEC R1

    MOV A,B

    MOV @R1,A

    DEC R1

    MOV A,#10

    MOV@R1,A

    DEC R1

    MOV A,SECOND

    MOV B,#10

    DIV AB

    MOV @R1,A

    DEC R1

    MOV A,B

    MOV @R1,A

    DEC R1

    RET

    INT_T0:MOV TH0,#(65536-2000) / 256

    MOV TL0,#(65536-2000) MOD 256

    MOV A,#DISPBUF

    ADD A,DISPBIT

    MOV R0,A

    MOV A,@R0

    MOV DPTR,#TABLE

    MOVC A,@A+DPTR

    MOV P0,A

    MOV A,DISPBIT

    MOV DPTR,#TAB

    MOVC A,@A+DPTR

    MOV P2,A

    INC DISPBIT

    MOV A,DISPBIT

    CJNE A,#08H,KNA

    MOV DISPBIT,#00H

    KNA:INC T2SCNTA

    MOV A,T2SCNTA

    CJNE A,#100,DONE

    MOV T2SCNTA,#00H

    INC T2SCNTB

    MOV A,T2SCNTB

    CJNE A,#05H,DONE

    MOV T2SCNTB,#00H

    INC SECOND

    MOV A,SECOND

    CJNE A,#60,NEXT

    MOV SECOND,#00H

    INC MINITE

    MOV A,MINITE

    CJNE A,#60,NEXT

    MOV MINITE,#00H

    INC HOUR

    MOV A,HOUR

    CJNE A,#24,NEXT

    MOV HOUR,#00H

    NEXT:LCALL DISP

    DONE:RETI

    TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH

    TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH

    END

    本程序已通过实践验证!!!

    4145900b03b5eb8010ff8a11ea2e9b26.png

    d2dfc5402e1c06b84f34b17d7359cefa.png

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • //位选,让最底位数码管显示 while (1) { for(num=0;num;num++)//for循环10次 { P0=sz[num];//给P0口传送要显示的变量数据(0-9) delay(50000);//调用延时 } } } void delay(uint t)//延时函数 { uint i; i=t; while(i...
  • //*******时间程序**************////*******2010-7-14 00:31:39 *******////******* Z X C ******************////*******晶体振荡器 12.000MHZ 共阳数码管***////*******头文件*********************//#include #...
  • 为了便于封装,数码管的外部一共10个引脚,5和10连在一起接公共端,其余各对应一个发光二极管: 例如,如果我们想显示数字“0”,那么就需要a~f这六个数码管亮;如果显示数字“1”,那么就需要b、c两个数码管...
  • 基于51单片机数码管显示

    千次阅读 多人点赞 2020-10-24 19:46:24
    基于51单片机数码管显示,定时器,数码管时间显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极...
  • 常见LED数码管LED数码管(LED Segment Displays)简介数码管也称LED数码管,是由多个发光二极管封装在一起的“8”字型的器件。按发光二极管单元连接方式可分为`共阳极数码管`和`共阴极数码管`。内部连接原理图共阳...
  • 交通灯原理图,51单片机,带四组数码管显示时间,每组两个
  • 单片机计时器应用,本资源为四位数码管,无锁存器的60s倒计时
  • 画出单片机电路原理图,编写程序,并通过开关按钮分别对小时、分钟、秒实现加减控制,实现在LED数码管时钟00.00.00格式时分秒。
  • 51单片机实现了数码管和时钟芯片ds1302显示时间
  • 74hc573是锁存器,用于数码管显示时通常是采用段选、片选共用同一组并口的驱动方式。驱动数码管需要两个信号,一个是段选信号,另一个是片选信号。段选信号是固定的8个(对于普通7段数码管),而片选信号数量是与...
  • 简单的计时以及通过按键或者串口修改时间 使用方法: 按键修改时间: 按键自上而下 1:暂停开始 2:修改第n位的时间 3.加一 4.减一 串口通讯:PC机发送“i(1)(2)(3)(4)(5)(6)(7)(8)s” (1): p暂停 ...
  • 1.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选通过P0口八位引脚控制 5.七段数码管的段选通过74LS138 (3-8译码器)...
  • 51单片机通过DS1302进行时钟显示,并在数码管显示时间,可以按键设置时间实现闹铃。
  • 利用数码管显示时间(非当前时间) #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit dula=P2^6; ...
  • 摘要:VC/C++源码,系统相关,单片机... 在DS1302数码管显示时钟电路中,K5按键 按一下,时钟开始正常显示时间,再按一下,显示日期  K6按键为调整键  K7按键 按一下,开始显示日期,再按一下进入 日期跟时钟的 调节模式
  • 51单片机数码管显示+proteus仿真

    千次阅读 2020-06-21 20:01:47
    七段数码管是一种常用的数字显示元件,可以用来显示数字0~F及相关符号,它具有功耗低、亮度高、寿命长、尺寸小等许多优点,在家电及工业控制中应用广泛。 外形 由7个条状的发光二极管排列而成,可实现数字“0~F”及...
  • 这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高 动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓...
  • 51单片机数码管秒表显示,程序很简单,初学单片机者适用
  • C51单片机数码管动态显示

    万次阅读 多人点赞 2018-08-27 21:49:25
    数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: ...
  • 数码管由于内部由多段LED灯构成,也被称为多段式LED数码管。 从数码管里面包含的LED个数来分,可以分为七段式、八段式、十四段式等。 七段式数码管: 八段式数码管(比七段式右下角多了一个小点): 十四段式...
  • 资源包含代码和PCB原理图。时钟芯片计时。四位共阴数码管显示时分秒时间,扩展的话也可以显示日月周年,数码管采用74HC138控制位选,74HC573控制段选。独立按键修改时间,LED状态指示灯。
  • 不管是省赛还是国赛,数码管显示是蓝桥杯“单片机设计与开发”赛项必考的内容之一。要掌握数码管显示这个内容需要分为两个步骤:首先弄清楚数码管的静态显示,然后再去掌握数码管的动态显示。 一、数码管原理图 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,006
精华内容 2,802
关键字:

单片机数码管显示时间

友情链接: NETR.rar