基于51单片机的数码管时钟设计——按键修改时间

视频演示

哔哩哔哩视频演示

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

  • 81
    点赞
  • 624
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guan_qiqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值