简易电子钟设计

#include <reg52.h>
#define LED P0

sbit key1 = P3^1;
sbit key2 = P3^2;
sbit key3 = P3^3;
sbit latch_bit = P2^1;
sbit latch_seg = P2^2;
unsigned char sec;
unsigned char min;
unsigned char hour;
unsigned char bit_table[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char seg_table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int t);
void time();
void key_add();
void DelayUs2x(unsigned char t);//函数声明 
void DelayMs(unsigned char t);

void main(void)
{
    TMOD = 0x01;
		TH0 = 0x3c;
		TL0 = 0xb0;
		TR0 = 1;
		EA = 1;
		ET0 = 1;
		
		while(1)
		{
		    time();
				key_add();
			//	delay(300);
		    latch_bit = 1;
				LED = bit_table[7];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = seg_table[sec%10];
				latch_seg = 0;
				DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[6];
				latch_bit = 0;
					
				latch_seg = 1;
				LED = seg_table[sec/10];
				latch_seg = 0;
		    DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[5];
				latch_bit = 0;
					
				latch_seg = 1;
				LED = 0x80;
				latch_seg = 0;
		  	DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[4];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = seg_table[min%10];
				latch_seg = 0;
				DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[3];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = seg_table[min/10];
				latch_seg = 0;
				DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[2];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = 0x80;
				latch_seg = 0;
				DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[1];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = seg_table[hour%10];
				latch_seg = 0;
				DelayMs(1);
				
				latch_bit = 1;
				LED = bit_table[0];
				latch_bit = 0;
				
				latch_seg = 1;
				LED = seg_table[hour/10];
				latch_seg = 0;
				DelayMs(1);
		}
				
}

void time()
{
    if(sec == 60)
		{
		    sec = 0;
				min++;
		}
		
		if(min == 60)
		{
		    min =0;
				hour++;
		}
		
		if(hour == 24)
		{
		    hour = 0;
		}
		
}

void key_add()
{
    
	      time();
				if(!key1)
				{
				    if(!key1)
						{
						    while(!key1);
								latch_bit = 1;
		          	LED = bit_table[1];
			        	latch_bit = 0;
				       // delay(300);
			        	latch_seg = 1;
			        	LED = seg_table[hour%10];
				        latch_seg = 0;
								DelayMs(1);
				        
				        latch_bit = 1;
			        	LED = bit_table[0];
			        	latch_bit = 0;
				//      delay(300);
				        latch_seg = 1;
			          LED = seg_table[hour/10];
				        latch_seg = 0;
							  hour++;
				        DelayMs(1);
         		}
				}
			 if(!key2)
				{
				    if(!key2)
						{
						    while(!key2);
								latch_bit = 1;
		          	LED = bit_table[4];
			        	latch_bit = 0;
				
			        	latch_seg = 1;
			        	LED = seg_table[min%10];
				        latch_seg = 0;
			        	DelayMs(1);
				
				        latch_bit = 1;
			        	LED = bit_table[3];
			        	latch_bit = 0;
				
				       latch_seg = 1;
			         LED = seg_table[min/10];
				       latch_seg = 0;
							 min++;
				       DelayMs(1);
         		}
								
				}  
				if(!key3)
				{
				    if(!key3)
						{
						    while(!key3);
								latch_bit = 1;
		          	LED = bit_table[7];
			        	latch_bit = 0;
				
			        	latch_seg = 1;
			        	LED = seg_table[sec%10];
				        latch_seg = 0;
			        	DelayMs(1);
				
				        latch_bit = 1;
			        	LED = bit_table[6];
			        	latch_bit = 0;
				
				       latch_seg = 1;
			         LED = seg_table[sec/10];
				       latch_seg = 0;
							 sec++;
				       DelayMs(1);
         		}
								
				}  
}

void DelayUs2x(unsigned char t)
{   
 while(--t);
}
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	   DelayUs2x(245);
 }
}

void ISO_time() interrupt 1
{
    unsigned char i;
		
		EA = 0;
		TH0 = 0x3c;
		TL0 = 0xb0;
		i++;
		if(i == 20)
		{
		    i = 0;
				sec++;
		}
		EA = 1;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值