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

📄 xiaonaozhong.c

📁 电子小闹钟设计 带程序 原理图纸 电子小闹钟设计 带程序 原理图纸
💻 C
字号:
//******************************************//
//********电子小闹钟************************//
//********AT89S51***************************//
//********晶振用12M*************************//


#include "reg51.h"
#define uchar unsigned char 
#define uint unsigned int 
char DATA_7SEG[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20, 
0xA0,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};/*0~9的数码管段码*/ 
uchar hour=0,min=0,sec=0; /*时、分、秒单元清零*/ 
uchar deda=0; /*5mS计数单元清零*/ 
uchar t_hour=0,t_min=0; /*闹时时、分单元清零*/ 
bit d_05s=0; /*0.5秒标志*/ 
bit o_f=0; /*闹时启/停标志*/ 
uchar set=0; /*模式设定标志*/ 
uchar m=0; 
uchar flag=0; /*RAM掉电标志*/ 
void delay(uint k); /*延时子函数*/ 
void conv(); /*走时单元转换*/ 
void p_out(); /*判别闹时到否子函数*/ 
void dirve(); /*走时时间输出驱动子函数*/ 
void t_dirve(); /*闹时时间输出驱动子函数*/
sbit P3_4=P3^4;	//模式设定键set(P3.4)
sbit P3_5=P3^5;	//时调整键hour(P3.5)
sbit P3_7=P3^7;	//分调整键min(P3.7)
sbit P1_7=P1^7;
sbit P3_1=P3^1;
//********************************************//
//********************************************//
/*闹时启/停子函数*/ 
void time1_of() 
	{uchar m; 
		if(P3_7==0)delay(1); 
			if(P3_7==0)o_f=1; 
			for(m=0;m<30;m++) 
				{ 
  					t_dirve(); 
					P1=DATA_7SEG[t_min/10];P2=0xdf;delay(1); 
					if(P2^5==0){if(o_f==1)P1_7=0;}else P1_7=1; 
					delay(1); 
				} 
	if(P3_5==0)delay(1); 
		if(P3_5==0) o_f=0; 
			for(m=0;m<30;m++) 
				{ 
					t_dirve(); 
					P1=DATA_7SEG[t_min/10];P3=0xdf;delay(1); 
					if(P3_1==0){if(o_f==1)P1_7=0;else P1_7=1;} 
				delay(1); 
				} 
	}
//********************************************//
//********************************************//
//********************************************//
	 	 	 
/*走时函数*/ 
void time() 
{ 
	conv(); /*走时单元转换*/ 
	dirve(); /*走时时间输出驱动子函数*/ 
	p_out(); /*判别闹时到否子函数*/ 
} 
//********************************************//
//********************************************//
//********************************************//
/*定时器T0 5mS初始化*/ 
void init_timer() 
{ 
	TMOD=0x01; 	//定时器T0工作在方式1,为16位计数器
	TH0=0xEC;//16位定时器5ms定时初值 
	TL0=0x78; //
	IE=0x82;//开中断总允许位,允许定时器T0
	EA=1; 
	TR0=1; //启动定时器T0
} 
//********************************************//
//********************************************//

//********************************************//
/*扫描按键子函数*/ 
void scan_key() 
	{ if(P3_4==0)
	  delay(1); 
		if(P3_4==0)set++; 
		if(set==4)set=0; 
			if(set==1)flag==0x55; 
				F0:if(P3_4==0)goto F0; /*按键未释放,在此等候*/ 
	} 
//********************************************//
//********************************************//
//********************************************//
/*延时子函数*/ 
void delay(uint k) 
	{ 
		uint i,j; 
		for(i=0;i<k;i++)
		for(j=0;j<121;j++) 
		{;}
	} 
 
//********************************************//
//********************************************//
//********************************************//
/*5mS定时中断服务子函数*/ 
void zd(void) interrupt 1 
	{ 
		TH0=0xEC;
		TL0=0x78;
		deda++; 
	} 
//********************************************//
//********************************************//
//********************************************//
/*调整走时时间*/ 
void time_adj() 
{uchar m; 
	if(P3_5==0)delay(1); 
		if(P3_5==0)hour++; 
			if(hour==24)hour=0; 
			for(m=0;m<30;m++) 
				{ 
					dirve(); 
					if(P2^6==0)P1_7=0; 
					else P1_7=1; 
					delay(1); 
				} 
				if(P3_7==0)delay(1); 
				if(P3_7==0)min++; 
				if(min==60)min=0; 
				for(m=0;m<30;m++) 

				{ 
		
				dirve(); 
				if(P2^6==0)P1_7=0; 
				else P1_7=1; 
				delay(1); 
				} 
} 
//********************************************//
//********************************************//
//********************************************//
	 	 	 
/*调整闹时时间*/ 
void time1_adj() 
	
{uchar m; 
		if(P3_5==0)delay(1); 
		if(P3_5==0)t_hour++; 
		if(t_hour==24)t_hour=0; 
		for(m=0;m<30;m++) 
	{ 
	t_dirve(); 
	} 
	if(P3_7==0)delay(1); 
		if(P3_7==0)t_min++; 
			if(t_min==60)t_min=0; 
				for(m=0;m<30;m++) 
					{ 
						t_dirve(); 

					} 
} 
//********************************************//
//********************************************//
//********************************************//
/*时、分、秒单元及走时单元转换*/ 
void conv() 
	{ 
		if(deda=200){sec++;deda=0;} 
			if(sec==60){min++;sec=0;} 
				if(min==60){hour++;min=0;} 
					if(hour==24){hour=0;} 
	} 
//********************************************//
//********************************************//
//********************************************//
/*走时时间输出驱动子函数*/ 
void dirve() 
	{ 
		P1=DATA_7SEG[hour/10];P2=0x7f;delay(1); 
			P1=DATA_7SEG[hour%10];P2=0xbf;delay(1); 
			if(d_05s==1){if(P2^6==0)P1_7=0;else P1_7=1;} 
				delay(1); 
			P1=DATA_7SEG[min/10];P2=0xfd;delay(1); 
				if(o_f==1){if(P2^5==0)P1_7=0;else P1_7=1;delay(1);} 
					P1=DATA_7SEG[min%10];P2=0xef;delay(1); 
	} 
//********************************************//
//********************************************//
/*闹时时间输出驱动子函数*/ 
void t_dirve() 
	{ 
		P1=DATA_7SEG[t_hour/10];P2=0x7f;delay(1); 
		if(P2^7==0)P1_7=0;else P1_7=1; 
		delay(1); 
		P1=DATA_7SEG[t_hour%10];P2=0xbf;delay(1); 
		P1=DATA_7SEG[t_min/10];P2=0xdf;delay(1); 
		P1=DATA_7SEG[t_min%10];P2=0xef;delay(1); 
	}
//********************************************//
//********************************************//	 
/*判别闹时到否子函数*/ 
void p_out() 
	{ 
		if(o_f==1)
		{ 
			if(t_hour==hour)
				{if(t_min==min) 
				if(P2^4==0){P1_7=0;delay(1);} 
					else P1_7=1; 
				} 
		} 
	}
//********************************************//
//********************************************//
/*主函数*/ 
void main() 
	{ 
			init_timer(); /*定时器T0初始化*/ 
			while(1) /*无限循环*/ 
		{		 
			if(P3^4==0)
			scan_key(); /*有按键,调用按键扫描子函数*/ 
			switch(set) /*根据set键值散转*/ 
			{ 
				case 0:time();break; /*走时时间程序*/ 
				case 1:time1_adj();break; /*闹时时间调整*/ 
				case 2:time_adj();break; /*走时时间调整*/ 
				case 3:time1_of();break; /*启/停闹时*/ 
				default:break; /*其它退出*/ 
			} 
			if(flag!=0x55) /*判断掉电标志*/ 
				{for(m=0;m<100;m++) /*点亮四个8字400mS*/ 
					{ 
						P1=0x80;P2=0x7f;delay(1); 
						P1=0x80;P2=0xbf;delay(1); 
						P1=0x80;P2=0xdf;delay(1); 
						P1=0x80;P2=0xef;delay(1); 
					} 
				P1=0xff;P3=0xff;delay(400); /*熄灭四个8字400mS*/ 
				} 
			} 
		}

⌨️ 快捷键说明

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