⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 这是一个用c51做的数字钟源代码,实现了时间设置,闹铃设置等一系列钟表的功能,并付上了硬件原理图,供大家学习和参考,我的qq:9577287
💻 C
字号:
/*附:用C51编写的源程序清单(已由实验板运行通过)*/
#include <reg52.h>				/*包含器件配置文件*/
#define uchar unsigned char
#define uint unsigned int


sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
sbit P3_7=P3^7;

char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,
                    0x92,0x82,0xF8,0x80,0x90,};/*0~9的数码管段码*/
uchar hour=0,min=0,sec=0;			/*时、分、秒单元清零*/
uchar deda=0;   					/*5mS计数单元清零*/ 
uchar t_hour=0,t_min=0;  			/*闹时时、分单元清零*/
uchar set=0;						/*模式设定标志*/
uchar m=0;
uchar flag=0x55;						/*RAM掉电标志*/
void delay(uint k);					/*延时子函数*/
void conv();						/*走时单元转换*/
void p_out();						/*判别闹时到否子函数*/
void dirve();						/*走时时间输出驱动子函数*/
void t_dirve();						/*闹时时间输出驱动子函数*/


/*走时函数*/
void time()
{ if(t_hour==hour){if(t_min==min){if(sec>=10){  if((sec%2)!=0){P3_3=0;
	                                            P1=DATA_7SEG[hour/10];P3=0xf5;delay(1);
                                                delay(1);
                                                P1=DATA_7SEG[hour%10];P3=0xf4;P1_7=0;delay(1);
                                                P1=DATA_7SEG[min/10];P3=0xf3;delay(1);
                                                P1=DATA_7SEG[min%10];P3=0xf2;P1_7=0;delay(1);
                                                P1=DATA_7SEG[sec/10];P3=0xf1;delay(1);
                                                P1=DATA_7SEG[sec%10];P3=0xf0;delay(1);
					                            P3_3=1;
 											                 }
												 else dirve();
												return;
												}
						           }
					}
  if(min==0)if(sec<=10){if((sec%2)!=0){P3_3=0;
	                    P1=DATA_7SEG[hour/10];P3=0xf5;delay(1);
                        delay(1);
                        P1=DATA_7SEG[hour%10];P3=0xf4;P1_7=0;delay(1);
                        P1=DATA_7SEG[min/10];P3=0xf3;delay(1);
                        P1=DATA_7SEG[min%10];P3=0xf2;P1_7=0;delay(1);
                        P1=DATA_7SEG[sec/10];P3=0xf1;delay(1);
                        P1=DATA_7SEG[sec%10];P3=0xf0;delay(1);
						P3_3=1; 
						            }
						else dirve();
						return;
						}	/*判别闹时到否子函数*/

dirve();							/*走时时间输出驱动子函数*/

}


/*定时器T0  5mS初始化*/
void init_timer()
{
TMOD=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TR0=1;
P3_3=1;
}

/*扫描按键子函数*/
void scan_key()
{ if(flag==0x55)flag=0x34;        /*进入走时状态*/
delay(1);
if(P3_4==0)set++;
if(set>=4)set=0;
F0:if(P3_4==0)goto F0;				/*按键未释放,在此等候*/
}


/*延时子函数*/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<120;j++)
{;}}
}

/*5mS定时中断服务子函数*/
void zd(void) interrupt 1 
{
TH0=-(4800/256);
TL0=-(4800%256);
deda++;
if(deda>=200){sec++;deda=0;}
if(sec==60){min++;sec=0;}
if(min==60){hour++;min=0;}
if(hour==24){hour=0;}
}

/*调整走时时间*/
void time_adj()
{  
    if(P3_5==0)delay(1);
	if(P3_5==0){
	           hour++;
	           if(hour>=24)hour=0;
			   F1:if(P3_5==0)goto F1;
			   }
	           dirve();
		delay(1);
	if(P3_7==0)delay(1);
	if(P3_7==0){
	           min++;
	           if(min>=60)min=0;
			   F2:if(P3_7==0)goto F2;
			   }
	           dirve();
		delay(1);

}


/*调整闹时时间*/
void time1_adj()
{
	if(P3_5==0)delay(1);
	if(P3_5==0){
	            t_hour++;
	           if(t_hour>=24)t_hour=0;
			   F3:if(P3_5==0)goto F3;
			   }
		       t_dirve();
			   delay(1);
	if(P3_7==0)delay(1);
	if(P3_7==0){t_min++;
	           if(t_min>=60)t_min=0;
			   F4:if(P3_7==0)goto F4;
			   }
		       t_dirve();
			   delay(1);
}	



/*走时时间输出驱动子函数*/
void dirve()
{
P1=DATA_7SEG[hour/10];P3=0xfd;delay(1);
P1=DATA_7SEG[hour%10];P3=0xfc;P1_7=0;delay(1);
P1=DATA_7SEG[min/10];P3=0xfb;if(set==2)P1_7=0;delay(1);
P1=DATA_7SEG[min%10];P3=0xfa;P1_7=0;delay(1);
P1=DATA_7SEG[sec/10];P3=0xf9;delay(1);
P1=DATA_7SEG[sec%10];P3=0xf8;delay(1);
}

/*闹时时间输出驱动子函数*/
void t_dirve()
{
P1=DATA_7SEG[t_hour/10];P3=0xfd;P1_7=0;delay(1);
delay(1);
P1=DATA_7SEG[t_hour%10];P3=0xfc;P1_7=0;delay(1);
P1=DATA_7SEG[t_min/10];P3=0xfb;delay(1);
P1=DATA_7SEG[t_min%10];P3=0xfa;P1_7=0;delay(1);
P1=DATA_7SEG[0];P3=0xf9;delay(1);
P1=DATA_7SEG[0];P3=0xf8;delay(1);
}


/*主函数*/
void main()
{
	init_timer();            		/*定时器T0初始化*/
	while(1)						/*无限循环*/
	{
	if(P3_4==0)scan_key();			/*有按键,调用按键扫描子函数*/
	if(flag!=0x55)
	{switch(set)						/*根据set键值散转*/
        {
          case 0:time();break;					/*走时时间程序*/
          case 1:time1_adj();break;			/*闹时时间调整*/
          case 2:time_adj();break;				/*走时时间调整*/
          default:break;						/*其它退出*/
        }
    }
	else					/*判断掉电标志*/
		/*点亮四个8字*/
		{
		P1=0x00;P3=0xf5;delay(1);
		P1=0x00;P3=0xf4;delay(1);
		P1=0x00;P3=0xf3;delay(1);
		P1=0x00;P3=0xf2;delay(1);
		P1=0x00;P3=0xf1;delay(1);
		P1=0x00;P3=0xf0;delay(1);
		}
	}
}

⌨️ 快捷键说明

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