精华内容
下载资源
问答
  • 51单片机数码管时钟c语言,基于c51单片机8位数码管显示电子时钟程序
    2021-05-22 02:16:23

    /*

    8位数码管显示 时间格式 05—50—00 标示05点50分00秒

    S1 用于小时加1操作

    S2 用于小时减1操作

    S3 用于分钟加1操作

    S4 用于分钟减1操作

    */

    #includesbit KEY1=P3^0; //定义端口参数

    sbit KEY2=P3^1;

    sbit KEY3=P3^2;

    sbit KEY4=P3^3;

    sbitLED=P1^2; //定义指示灯参数

    code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9

    unsigned char StrTab[8]; //定义缓冲区

    unsigned char minute=19,hour=23,second; //定义并初始化为 12:30:00

    void delay(unsigned int cnt)

    {

    while(--cnt);

    }

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

    /* 显示处理函数 */

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

    void Displaypro(void)

    {

    StrTab[0]=tab[hour/10]; //显示小时

    StrTab[1]=tab[hour%10];

    StrTab[2]=0x40; //显示"-"

    StrTab[3]=tab[minute/10]; //显示分钟

    StrTab[4]=tab[minute%10];

    StrTab[5]=0x40; //显示"-"

    StrTab[6]=tab[second/10]; //显示秒

    StrTab[7]=tab[second%10];

    }

    main()

    {

    TMOD |=0x01; //定时器0 10ms inM crystal 用于计时

    TH0=0xd8; //初值

    TL0=0xf0;

    ET0=1;

    TR0=1;

    TMOD |=0x10; //定时器1用于动态扫描

    TH1=0xF8; //初值

    TL1=0xf0;

    ET1=1;

    TR1=1;

    EA =1;

    Displaypro(); //调用显示处理函数

    while(1)

    {

    if(!KEY1) //按键1去抖以及动作

    {

    delay(10000);

    if(!KEY1)

    {

    hour++;

    if(hour==24)

    hour=0; //正常时间 小时 加1

    Displaypro();

    }

    }

    if(!KEY2) //按键2去抖以及动作

    {

    delay(10000);

    if(!KEY2)

    {

    hour--;

    if(hour==255)

    hour=23; //正常时间 小时减1

    Displaypro();

    }

    }

    if(!KEY3) //按键去抖以及动作

    {

    delay(10000);

    if(!KEY3)

    {

    minute++;

    if(minute==60)

    minute=0; //分加1

    Displaypro();

    }

    }

    if(!KEY4) //按键去抖以及动作

    {

    delay(10000);

    if(!KEY4)

    {

    minute--;

    if(minute==255)

    minute=59; //分减1

    Displaypro();

    }

    }

    }

    }

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

    /* 定时器1中断 */

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

    void time1_isr(void) interrupt 3 using 0 //定时器1用来动态扫描

    {

    statICunsigned char num;

    TH1=0xF8; //重入初值

    TL1=0xf0;

    switch (num)

    {

    case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描

    case 1:P2=1;P0=StrTab[num];break;

    case 2:P2=2;P0=StrTab[num];break;

    case 3:P2=3;P0=StrTab[num];break;

    case 4:P2=4;P0=StrTab[num];break;

    case 5:P2=5;P0=StrTab[num];break;

    case 6:P2=6;P0=StrTab[num];break;

    case 7:P2=7;P0=StrTab[num];break;

    default:break;

    }

    num++; //扫描8次,使用8个数码管

    if(num==8)

    num=0;

    }

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

    /* 定时器0中断 */

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

    void tim(void) interrupt 1 using 1

    {

    static unsigned char count; //定义内部局部变量

    更多相关内容
  • 51单片机上实现数码管时钟程序,程序的开发环境是keil软件。
  • 本例程适用于共阴数码管 段选锁存器与位选锁存器都接P0
  • 全套集合:51单片机数码管时钟电路+代码+hex文件+报告+演示视频,全套齐活包满意
  • 51单片机数码管时钟

    2015-05-07 11:17:41
    at89c51单片机 8位数码管电子时钟显示
  • 数码管由于内部由多段LED灯构成,也被称为多段式LED数码管。 从数码管里面包含的LED个数来分,可以分为七段式、八段式、十四段式等。 七段式数码管: 八段式数码管(比七段式右下角多了一个小点): 十四段式...
  • 这是基于51或者51单片机数码管显示时钟与仿真原理图的资源; 其中包括c语言源程序与keil仿真生成的hex文件可以直接烧录到单片机上进行看实物效果,其中还包括preteus仿真的电路图 此资源用与验证数码管定时显示时钟...
  • 本文主要为51单片机数码管动态时钟电路图,下面一起来学习一下
  • 51(52)单片机 定时器实现数码管时钟(按键实现时.分加及时钟启动)

    单片机小白,主页第一篇文章有共通代码详解。

    独立按键一:按下数码管显示小时增加(>23变00)
    独立按键二:按下数码管显示分钟增加(>59变00)
    独立按键三:长按关闭时钟自增后,可使用按键一.二对数码管显示时间进行更改
    独立按键四:按下时钟启动

    运行效果:

    在这里插入图片描述

    代码:

    #include <reg52.h>
    #define u8 unsigned char
    #define u16 unsigned int
    
    	 sbit button1=P3^1;
    	 sbit button2=P3^0;
    	 sbit button3=P3^2;
    	 sbit button4=P3^3;
    	 sbit add_1=P2^2;
    	 sbit add_2=P2^3;
    	 sbit add_3=P2^4;
    
         u16 n=0;
         u8 x,y,z;
    	 u8 code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
      
    	 
    //DingshiQi YanShi
    void delay_ds(u8 ms)
      {
        u8 T=0;
        TMOD=0x01;
        TH0=0xfb;
        TL0=0x80;
        TR0=1;
        while(T<ms)
        {
         if(TF0==1)
    	   {
    	    TF0=0;
    	  	TH0=0xfb;
            TL0=0x80;
    	    T++;
    	   }
        }
        
      }//1.25*ms
    	
    
    //shuaxin
    void shuaxin()
     { 
    	 add_1=0;
         add_2=0;
         add_3=0;
    	 P0=table[z%10];   
    	 delay_ds(1);	
    	 P0=0x00;    //01
    			
    	 add_1=1;
    	 add_2=0;
    	 add_3=0;
         P0=table[z/10%10];
         delay_ds(1);	
    	 P0=0x00;    //02
    	 
    	 add_1=0;
    	 add_2=1;
    	 add_3=0;
    	 P0=0x40;
         delay_ds(1);	
    	 P0=0x00;    //03
    	 
    	 add_1=1;
    	 add_2=1;
    	 add_3=0;
    	 P0=table[y%10];
         delay_ds(1);	
    	 P0=0x00;    //04
    	 
    	 add_1=0;
         add_2=0;
         add_3=1;
    	 P0=table[y/10%10];   
    	 delay_ds(1);	
    	 P0=0x00;    //05
    			
    	 add_1=1;
    	 add_2=0;
    	 add_3=1;
         P0=0x40;
         delay_ds(1);	
    	 P0=0x00;    //06
    	 
    	 add_1=0;
    	 add_2=1;
    	 add_3=1;
    	 P0=table[x%10];
         delay_ds(1);	
    	 P0=0x00;    //07
    	 
    	 add_1=1;
    	 add_2=1;
    	 add_3=1;
    	 P0=table[x/10%10];
         delay_ds(1);	
    	 P0=0x00;    //08
     }	//11.25ms
    	
     
    //1 s
    void Ding_shi()
      { 
    	u8 T=0;
        TMOD=0x01;
        TH0=0xf7;
        TL0=0x00;    //2.5ms
    	shuaxin(); 
        TR0=1;
        while(T<80)
        {
         if(TF0==1)
    	   {
    	      TF0=0;
    		  TH0=0xf7;
              TL0=0x00;    //2.5
    		  shuaxin();   //10          12.5ms*79=987.5ms
    		  T++;
    	   }
        }
      }
    
    //
    void Ding_shi01()
      { 
    	u8 T=0;
        TMOD=0x01;
        TH0=0xf7;
        TL0=0x00;    //1.25ms
        TR0=1;
        while(T<20)
        {
         if(TF0==1)
    	   {
    	      TF0=0;
    		  TH0=0xf7;
              TL0=0x00;    //1.25
    		  shuaxin();   //20           12.5ms*79=987.5ms
    		  T++;
    	   }
        }
      }
    	
    
    
    
    
    void main()
    {  
       u8 k,j;
       k=j=0;
       button1=0xff;
       button2=0xff; 
       button3=0xff;
       button4=0xff;
    
    	
       while(1)
       {       
           
    	  shuaxin(); 	
    		 
         if(button1==0)
    	    {
    	     delay_ds(2);
    	     if(button1==0)
    	     {
    	       while(!button1)
    	        { 
                     x++;
                     
    			     if(x>23)
    			    	x=0;
    			    	
    				Ding_shi01();
    	        }
    	        
    	     }
    	     
    	    }
    			
    			
    	   if(button2==0)
    	    {
    	     delay_ds(2);
    	     if(button2==0)
    	     {
    	       while(!button2)
              {
    		
    	            y++;
    	            
    			    if(y>59)
    				  y=0;
    				  
    			    Ding_shi01();			
    						
              }
    	    
    			 }
    		 }
    			
    		
    		if(button3==0)
    	    {
    	     delay_ds(3);
    	     if(button3==0)
    	     {
    	       while(!button3)
               {
    				shuaxin();
    	        }
    	      }	
    	     }			                                                     
    		
    		           
    		if(button4==0)
    	    {
    	     delay_ds(2);
    	     if(button4==0)
    	     {  
    		   while(!button4)
    		   {
    	         while(1)
    	         {
    					 
    					 z++;
    					
    					 if(z>59)
    					 { y++;
    					   z=0;}
    					   if(y>59)
    						 { x++;
    						   y=0;}
    						   if(x>23)
    							   x=0;
    							   
    					 Ding_shi();
    							 
    					 if(button3==0)
    	                   break;																					
    	
    			   }
    			 }
           }
        } 
      }			
    }
    
    
    展开全文
  • 基于51单片机数码管时钟设计——按键修改时间

    万次阅读 多人点赞 2020-12-16 17:51:18
    reg51.h> typedef unsigned char uchar; typedef unsigned int uint; //按键定义 sbit key_stop = P3^0; sbit key_star = P3^1; sbit key_fen = P3^2; sbit key_shi = P3^3; //0~9的十六进制数码 uchar code ...

    视频演示

    哔哩哔哩视频演示

    Proteus 仿真图

    在这里插入图片描述

    代码:

    #include<reg51.h>
    
    typedef unsigned char uchar;
    typedef unsigned int uint;
    
    //按键定义
    sbit key_stop = P3^0;
    sbit key_star = P3^1;
    sbit key_fen = P3^2;
    sbit key_shi = P3^3;
    
    //0~9的十六进制数码
    uchar code num[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};  // 0~9
    
    //秒、分、时标志
    uchar miao = 0, fen = 0, shi = 0;  
    
    //秒、分、时高位低位
    uchar miao_L, miao_H, fen_L, fen_H, shi_L, shi_H; 
    
    //计数
    uint counter = 0;  
    
    
    void delay(uint x){  //延时函数
    	while(x--)
    		;
    }//delay
    
    void key_delay(int xms){  //按键延时函数 x ms
    	unsigned int i, j;
    	for(i=0; i<xms; ++i)
    		for(j=0; j<110; ++j)
    			;
    }//key_delay
    
    void T0_Init(){  //定时器初始化
    	
    	TMOD = 0x01; 
    	TH0 = 0x3c;  
    	TL0 = 0xb0;	 
        EA = 1;  //开总中断
    	ET0 = 1;     
    	TR0 = 1;    
    }//T0_Init
    
    void display(){  //显示函数
    	
    	P2 = 0x20;  
    	P0 = 0xbf;	
    	delay(50);
    		
    	P2 = 0x04; 
    	P0 = 0xbf;
    	delay(50);
    
    	P2 = 0x80;  // 1000 0000
    	P0 = num[miao_L];  
    	delay(50);
    
    	P2 = 0x40;	// 0100 0000
    	P0 = num[miao_H]; 
    	delay(50);
    
    	P2 = 0x10;	// 0001 0000
    	P0 = num[fen_L];  
    	delay(50);
    
    	P2 = 0x08;	// 0000 1000
    	P0 = num[fen_H];  
    	delay(50);
    
    	P2 = 0x02;	// 0000 0010
    	P0 = num[shi_L];  
    	delay(50);
    	
    	P2 = 0x01;	// 0000 0001
    	P0 = num[shi_H]; 
    	delay(50);
    
    }//display
    
    void keyscan(){  //按键函数
    
    	if(key_stop == 0){
    		key_delay(20);
    		if(key_stop == 0){
    			EA = 0;  //关总中断,即停止
    			while(!key_stop);
    		}
    	}//key_stop
    	
    	if(key_star == 0){
    		key_delay(20);
    		if(key_star == 0){
    			EA = 1;  //开总中断
    			while(!key_star);
    		}
    	}//key_star	
    	
    	if(key_fen == 0){
    		key_delay(20);
    		if(key_fen == 0){
    			fen++;
    			while(!key_fen);
    		}
    	}//key_fen++
    	
    	if(key_shi == 0){
    		key_delay(20);
    		if(key_shi == 0){
    			shi++;
    			while(!key_shi);
    		}
    	}//key_shi++
    }
    
    void main(){
    
    	T0_Init(); 
    	
    	while(1){
    
    		display();
    		
            keyscan();		
       }
    
    }//main
    
    void timer0_Init() interrupt 1{  //中断函数 
     	 
    	 counter++;
    
    	 if(counter == 20){
    	 	counter = 0;  
    	 	miao++;	//i = 100 
    
    		if(miao == 60){
    			miao = 0;  
    			fen++;
    
    			if(fen == 60){
    				fen = 0;  
    				shi++;
    
    				if(shi == 24){
    					shi = 0;
    					fen = 0;
    					miao = 0;
    				}
    			}
    		}
    
    		miao_L = miao%10;  
    		miao_H = miao/10; 
    
    		fen_L = fen%10; 
    		fen_H = fen/10;  
    
    		shi_L = shi%10;  
    		shi_H = shi/10;
    
    	 }
     }//timer0_Init
    

    完整工程

    时钟——两组实验.zip

    展开全文
  • 51单片机8位数码管电子时钟(完结)2015-07-09 10:48:07来源:51heidisp10: mov 34h,#0bfh ;"-"显示mov a,34hmov p0,aclr p2.5lcall del1mssetb p2.5disp11: mov 35h,#0bfh ;"-"显示mov a,35hmov p0,aclr p2.2lcall del...

    51单片机8位数码管电子时钟(完结)

    2015-07-09 10:48:07   来源:51hei

    disp10: mov 34h,#0bfh  ;"-"显示

    mov a,34h

    mov p0,a

    clr p2.5

    lcall del1ms

    setb p2.5

    disp11: mov 35h,#0bfh  ;"-"显示

    mov a,35h

    mov p0,a

    clr p2.2

    lcall del1ms

    setb p2.2

    ret

    display1:mov a,38h   ;闹钟分显示

    mov b,#10

    div ab

    mov 26h,a

    mov 27h,b

    d1:mov a,26h    ;闹钟分十位显示

    mov dptr,#table

    movc a,@a+dptr

    mov p0,a

    clr p2.3

    lcall del1ms

    setb p2.3

    d2:mov a,27h    ;闹钟分个位显示

    mov dptr,#table

    movc a,@a+dptr

    mov p0,a

    clr p2.4

    lcall del1ms

    setb p2.4

    dispnz: mov a,39h  ;闹钟时显示

    mov b,#10

    div ab

    mov 28h,a

    mov 29h,b

    d5: mov a,28h   ;闹钟时十位显示

    mov dptr,#table

    movc a,@a+dptr

    mov p0,a

    clr p2.0

    lcall del1ms

    setb p2.0

    d6: mov a,29h   ;闹钟时个位显示

    mov dptr,#table

    movc a,@a+dptr

    mov p0,a

    clr p2.1

    lcall del1ms

    setb p2.1

    mov 35h,#0bfh  ;"-"显示

    mov a,35h

    mov p0,a

    clr p2.2

    lcall del1ms

    setb p2.2

    ret

    table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h   ;数字0—9

    del1ms:mov r7,#10   ;1ms延时子程序

    del1: mov r6,#50

    del2:djnz r6,del2

    djnz r7,del1

    ret

    del20ms:mov r5,#40    ;20ms延时子程序

    del3: mov r4,#250

    del4: djnz r4,del4

    djnz r5,del3

    ret

    keysan:jnb p3.1,key1 ;秒加1按钮

    jnb p3.2,key2 ;分加1按钮

    jnb p3.3,key3 ;时加1按钮

    sjmp keyout

    key1: lcall del20ms

    jb p3.1,keyout

    jnb p3.1,$

    inc 31h  ;秒加1

    mov a,31h

    cjne a,#60,keyout

    mov 31h,#00

    sjmp keyout

    key2:lcall del20ms

    jb p3.2,keyout

    jnb p3.2,$

    inc 32h  ;分加1

    mov a,32h

    cjne a,#60,keyout

    mov 32h,#00

    sjmp keyout

    key3:lcall del20ms

    jb p3.3,keyout

    jnb p3.3,$

    inc 33h ;时加1

    mov a,33h

    cjne a,#24,keyout

    mov 33h,#00

    sjmp keyout

    keyout:ret

    keynz:jnb p3.4,keynz4 ;显示闹钟并可修改和显示当前时间

    jnb p3.7,keynz5

    jnb p3.5,nz3

    jnb p3.6,nz4

    sjmp nzout

    nzout:ret

    nz2:lcall display1

    jnb p3.5,nz3

    jnb p3.6,nz4

    keynz4:jnb p3.4,nz2

    sjmp nzout

    nz3:lcall del20ms

    jb p3.5,nzout

    jnb p3.5,$

    inc 38h

    mov a,38h

    cjne a,#60,nzout

    mov 38h,#00

    sjmp nzout

    nz4:lcall del20ms

    jb p3.6,nzout

    jnb p3.6,$

    inc 39h

    mov a,39h

    cjne a,#24,nzout

    mov 39h,#00

    sjmp keyout

    keynz5:jb p3.7,nzout

    jnb p3.7,$

    setb p1.0

    sjmp nzout

    end

    c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

    404-电子工程世界

    b094b28065371bab7e73d36d606aa669.png

    97c883c75098afdd39f665c518c59eec.png

    258b0bd82dd9ca476c7c8afdd48d607a.png

    北京市海淀区知春路23号集成电路设计园量子银座1305

    电话:(010)82350740

    邮编:100191

    电子工程世界版权所有

    京ICP证060456号

    Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved

    展开全文
  • 可以通过独立按键修改时钟 也可以通过串口通讯修改接收时间 已经测试并且成功
  • 本文章是关于单片机四位数码管时钟程序。
  • 51单片机实现了数码管时钟芯片ds1302显示时间
  • 51单片机做八位数码管时钟
  • 1.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选通过P0口八位引脚控制 5.七段数码管的段选通过74LS138 (3-8译码器)...
  • 对表程序 protues 时钟 51单片机 proteus模拟
  • 1.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选和段选通过[74HC595]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #define uchar unsigned char#define uint unsigned int#define data P0sbit wr=P3^0;sbit cs1=P3^1;sbit cs2=P3^2;sbit m=P2^0;sbit add=P2^1;...
  • 基于51单片机的电子时钟数码管显示)

    万次阅读 多人点赞 2018-05-20 08:30:59
    首先我们先进行原理图的讲解,这里我们直接使用的开发板,其原理连接图如下: 从图中,我们可以看到,第一个74HC573是来控制8个数码管的位选的,就是说我要选种哪个数码管,这里的WE是低电平有效,比如说我想选中...
  • 利用51单片机实现动态扫描数码管时钟
  • 数码管矩阵键盘实现时钟功能
  • 本设计主要设计了一个基于AT89C51单片机的电子时钟。在数码管通过一个控制键转换来显示相应的时间和日期。并通过多个控制键用来实现时间和日期的调节。
  • 01在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部...
  • 文章目录效果图一、BUG说明二、原理图三、代码1....COM口与74h138译码器短接 ,这里注意数码管阳极与74hc245连接顺序 三、代码 1.计数函数 void time() //从最内层while循环开始看 即while(k<10)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,408
精华内容 1,363
关键字:

51单片机数码管时钟