clc.c

来自「数字时钟--51单片机 可以用KEY调整时间」· C语言 代码 · 共 112 行

C
112
字号
#include <reg51.h>
#include "seg_trd.c"

#define uchar unsigned char
#define uint unsigned int

sbit bell = P1^1;

uchar num;
char sec,min,hor;

void delay(uchar t)
{
	unsigned char i, j;
	for(i=255; i>0; i--)
		for(j=t; j>0; j--);
}
uchar key_press(void)//返回1,则有按键按下
{
	uchar i;
	i = P3;
	i&=0X3C;
	if(i==0X3C)
	{
	  return 0;
	}
	else
	{
	 return 1;
	}
}
uchar key_scan(void)
{
	uchar key;
	TR0 = 0;
	delay(1);
if(key_press())//判断按键是否真的按下
	{
	key=P3;
	key&=0X3C;
	switch(key)
	{
	   case 0X38: 
	      min++;
		  if(min==60)min=0;

		   break;
	   case 0X34:
		  min--;if(min<0)min=59;

		   break;
	   	 case 0X2C: 
		  hor++;if(hor==24)hor=0;

		   break;
	   case 0X1C:
		  hor--;if(hor<0)hor=23;

		   break; 
		default:	
	       break;
	}
	  while(key_press());//等待按键松开
	}
	TR0 = 1;
}
void timer0_ovf_isr(void) interrupt 1
{
	TH0 = 0X4C;//4C00
	TL0 = 0X0C;
	num++;
	if(num==20)
	{
	 num = 0;
	 sec++;
		if(sec==60)
		{
		 sec=0;
		 min++;
			if(min==60)
				{	
				 min=0;
				 hor++;
				 if(hor==24)
					{
					 hor=0;
					}
				}	
		}
	}
}
void main()
{
	EA = 1;
	TMOD = 0X01;//T0 方式1
	TH0 = 0X4C;
	TL0 = 0X0C;//初值
	ET0 = 1;//溢出使能
	TR0 = 1;//开始计时
	while(1)
	{
	 if(key_press())//判断是否有按键按下
	  {
	     key_scan();
	   }	
	 display_sec(sec);
	 display_min(min);
	 display_hor(hor);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?