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

📄 shizhong.c

📁 51单片机时钟+秒表程序
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char	
uchar hour,minute,second,hour2,minute2,second2,count,num,num1,a,b,c,d,e,f,i,k,nao,date,month,nian,lowsec1,second1,higsec1;
uchar code xian[]="WELCOME TO CQUPT";
uchar code xingqi[]="MONTUEWEDTHUFRISATSUN";
uchar code table[]="2000-01-01  MON";
uchar code table1[]="00:00:00";
sbit lcdrs=P2^7;
sbit lcdrw=P2^6;
sbit lcde=P2^5;
sbit mod=P1^0;     /*********设置键*******/
sbit add=P1^1;     /*********调整键*******/
sbit swi=P1^2;     /*********12/24模式转换键*****/
sbit sec=P1^3;     /*********秒表键*******/
sbit buz=P1^5;     /*********闹钟IO口定义******/
sbit clo=P1^4;     /*********闹钟键********/
void xianshi(uchar i);
void  lcd_com(uchar com);
void  lcd_dat(uchar dat);
void display(uchar add,uchar dat);
void display1(uchar add,uchar dat);
void keyscan();
void delay(uint z);
void startlcd();
void starttimer();
void start();
void main()
{
	 start();
	 startlcd();
	 starttimer();	 
	while(1)
	{
		keyscan();
	}	
}

void xianshi(uchar i)
{
	k=3*i;
	lcd_com(0x80+12);
	lcd_dat(xingqi[k]);
	lcd_dat(xingqi[k+1]);
	lcd_dat(xingqi[k+2]);
}

void startlcd()
	{
	   lcd_com(0x01);
       lcd_com(0x38);
       lcd_com(0x0c);
	   lcd_com(0x06);
	   lcd_com(0x80);
	   for(num=0;num<16;num++)
	   {
			lcd_dat(xian[num]);
	   }
	   delay(3000);
	   lcd_com(0x01);
	   lcd_com(0x80);
	   for(num=0;num<15;num++)
			{
				  lcd_dat(table[num]);
			}
	   lcd_com(0x80+0x43);
	   for(num1=0;num1<8;num1++)
			{
				  lcd_dat(table1[num1]);
			}
	}
	
void starttimer()
	{				
	   TMOD=0x11;
	   TH0=(65536-10000)/256;
	   TL0=(65536-10000)%256;
	   TH1=(65536-50000)/256;
	   TL1=(65536-50000)%256;
	   EA=1;
	   ET0=1;
	   ET1=1;
       TR0=0;
	   TR1=1;
	}
	
void start()
{
	   buz=1;
	   count=0;
	   second=0;
	   minute=0;
	   hour=0;
	   date=1;
	   month=1;
	   nian=0;
	   lowsec1=0;
	   second1=0;
       higsec1=0;
	   second2=0;
	   minute2=0;
	   hour2=0;
	   a=0;
	   b=0;
	   c=0;
	   d=0;
	   e=0;
	   f=0;
	   i=0;
	   k=0;
       nao=0;
}	

void  lcd_com(uchar com)
{
	lcdrs=0;
	lcdrw=0;
	lcde=0;
	P0=com;
	lcde=1;
	lcde=0;
	delay(1);
}

void  lcd_dat(uchar dat)
{
	lcdrs=1;
	lcdrw=0;
	P0=dat;
	lcde=1;
	lcde=0;
	lcdrs=0;
	delay(1);
}

/**********************1602第二排显示****************/
void display(uchar add,uchar dat)
{
	uchar shi,ge;
	shi=dat/10;
	ge=dat%10;
	lcd_com(0x80+0x40+add);
	lcd_dat(0x30+shi);
	lcd_dat(0x30+ge);
}

/********************1602第一排显示*****************/
void display1(uchar add,uchar dat)
{
	uchar shi,ge;
	shi=dat/10;
	ge=dat%10;
	lcd_com(0x80+add);
	lcd_dat(0x30+shi);
	lcd_dat(0x30+ge);
}


void delay(uint z)
{
	uint x,y;
	for(x=0;x<z;x++)
	for(y=0;y<123;y++);
}

/***********中断1为秒表的中断************/
void timer0() interrupt 1
{
	   TH0=(65536-10000)/256;
	   TL0=(65536-10000)%256;
	   lowsec1++;
	   if(lowsec1==100)
		   {
			   	lowsec1=0;
				second1++;
				if(second1==60)
					{
						second1=0;
						higsec1++;
						if(higsec1==60)
							{	
								higsec1=0;																
							 }
						display1(0,higsec1);
					}
				display1(3,second1);
		   }
	   display1(6,lowsec1);
}	

/*******************中断2为时钟运行************/
void timer1() interrupt 3
{ 
 	   TH0=(65536-50000)/256;
	   TL0=(65536-50000)%256;
	   count++;	   
	   if(count==20)
		   {
			   	count=0;
				second++;
				if(b==1)
				{
					if(hour>12)
					{
					hour=hour-12;
					display(3,hour);										
					}
				}
				if(hour==hour2)
				f=1;
				if((minute==minute2)&&(f==1))
				f=2;
				if((second==second2)&&(f==2))
				{
				buz=0;
				if(second>55)
				nao=second-55;
				nao=second+5;
				}
				if(nao==second)
				{
					buz=1;
					f=0;
				}
				if(second==60)
					{
						second=0;
						minute++;
						if(minute==60)
							{	
								buz=0;
								nao=2;
								minute=0;
								hour++;
								if(b==1)
								{
									if(hour==12)
									{
										c++;
										if(c%2==0)
										{
											c=0;
											date++;
											i++;
											if(date==30&&month==2)
											 {
											  	date=1;
												month++;
												if(month==13)
												  {
												   month=1;
												   nian++;
												   if(nian==100)
												   nian=0;
												   display1(2,nian);
												  }
												   if(e==0)
												   display1(5,month);
											 }	
											if(date==31&&(month==4||month==6||month==9||month==11))
											   {
											  	date=1;
												month++;
												if(month==13)
												  { 
												   month=1;
												   nian++;
												   if(nian==100)
												   nian=0;
												   display1(2,nian);
												  }
												   if(e==0)
												   display1(5,month);
											  	}
											if(date==32)
											  {
											  	date=1;
												month++;
												if(month==13)
												  {
												   month=1;
												   nian++;
												   if(nian==100)
												   nian=0;
												   display1(2,nian);
												  }
												   if(e==0)
												   display1(5,month);
											  }
											  if(e==0)
											  {
											  display1(8,date);
											  xianshi(i);
											  }
										  }
									}	
									if(hour==13)
									hour=1;
								}
								else
								{
										if(hour==24)
									{
										hour=0;
										date++;
										i++;
										if(date==30&&month==2)
											{
										  	date=1;
											month++;
											if(month==13)
											  {
										   	   month=1;
											   nian++;
											   if(nian==100)
											   nian=0;
											   display1(2,nian);
											  }
											   if(e==0)
											   display1(5,month);
										     }	
										if(date==31&&(month==4||month==6||month==9||month==11))
										   {
										  	date=1;
											month++;
											if(month==13)
											 {
											   month=1;
											   nian++;
											   if(nian==100)
											   nian=0;
											   display1(2,nian);
											 }
											   if(e==0)
											   display1(5,month);
										  }
										if(date==32)
										  {
										  	date=1;
											month++;
											if(month==13)
											 {
											   month=1;
											   nian++;
											   if(nian==100)
											   nian=0;
											   display1(2,nian);
											  }
											   if(e==0)
											   display1(5,month);
										  }
										  if(e==0)
										  {
										  display1(8,date);
										  xianshi(i);
										  }
									}
								}
								if(e==0)
								display(3,hour);
							 }
						if(e==0)
						display(6,minute);
					}
				if(e==0)
				display(9,second);
		   }
}


/****************按键功能程序****************/
void keyscan()
{
	 if(mod==0)
		{
			delay(10);
			if(mod==0)
			{
				while(mod==0);				  //松手检测,必须
				a++;
				if(a==1)
				{
					TR1=0;
					lcd_com(0x80+2);
					lcd_com(0x0f);
				}
				if(a==2)
				{
					lcd_com(0x80+5);
					lcd_com(0x0f);
				}
				if(a==3)
				{
					lcd_com(0x80+8);
					lcd_com(0x0f);
				}
				if(a==4)
				{
					lcd_com(0x80+12);
					lcd_com(0x0f);
				}
				if(a==5)
				{
					lcd_com(0x80+0x40+3);
					lcd_com(0x0f);
				}
				if(a==6)
				{
					lcd_com(0x80+0x40+6);
					lcd_com(0x0f);
				}
				if(a==7)
				{
					lcd_com(0x80+0x40+9);
					lcd_com(0x0f);
				}
				if(a>=8)
				{
				a=0;
				TR1=1;
				lcd_com(0x0c);
				}
			}
		}
	if(clo==0)
		{
			delay(10);
			if(clo==0)
			{
                                                                                                                                				while(clo==0);				  //松手检测,必须
				e++;
				if(e==1)
				{
					lcd_com(0x01);
					lcd_com(0x80);
					for(num1=0;num1<8;num1++)
					{
						  lcd_dat(table1[num1]);
					}
					lcd_com(0x80);
					lcd_com(0x0f);
				}
				if(e==2)
				{
					lcd_com(0x80+3);
					lcd_com(0x0f);
				}
				if(e==3)
				{
					lcd_com(0x80+6);
					lcd_com(0x0f);
				}
				if(e>=4)
				{
				e=0;
				lcd_com(0x0c);
				lcd_com(0x01);
				lcd_com(0x80);
				for(num=0;num<15;num++)
					{
						  lcd_dat(table[num]);
					}
				lcd_com(0x80+0x43);
				for(num1=0;num1<8;num1++)
					{
						  lcd_dat(table1[num1]);
					}
				display1(2,nian);
				display1(5,month);
				display1(8,date);
				display(3,hour);
				display(6,minute);
				display(9,second);
				xianshi(i);
				}
			}
		}
	if(e!=0)
	{
		if(add==0)
		{
			delay(10);
			if(add==0)
			{
				while(add==0);
				if(e==1)
				{
					hour2++ ;
					if(hour2==24)
					hour2=0;
					display1(0,hour2);
				}
				if(e==2)
					{
						minute2++;
						if(minute2==60)
						minute2=0;
						display1(3,minute2);
					}
				if(e==3)
					{
						second2++ ;
						if(second2==60)
						second2=0;
						display1(6,second2);
					}
			}
		}
	}		
	if(a!=0)
	{
		if(add==0)
		{
			delay(10);
			if(add==0)
			{
				while(add==0);
				if(a==1)
				{
					nian++;
					if(nian==100)
					nian=0;
					display1(2,nian);
				}
				if(a==2)
				{
					month++;
					if(month==13)
					month=1;
				    display1(5,month);
				}
				if(a==3)
				{
					date++;
					if(date==32)
					date=1;
				    display1(8,date);
				}
				if(a==4)
				{
					i++;
					if(i==7)
					i=0;
					xianshi(i);
				}
				if(a==5)
				{
					hour++ ;
					if(hour==24)
					hour=0;
					display(3,hour);
				}
				if(a==6)
					{
						minute++;
						if(minute==60)
						minute=0;
						display(6,minute);
					}
				if(a==7)
					{
						second++ ;
						if(second==60)
						second=0;
						display(9,second);
					}
			}
		}
	}		
	if(swi==0)
	{
		delay(10);
		if(swi==0)
		{
			while(swi==0);
			b++;
			if(b>=2)
			{
				b=0;
			}
		}
	}
	if(sec==0)
	{
		delay(10);
		if(sec==0)
		{
			while(sec==0);
			d++;
			if(d==1)
			{
				TR1=0;
				lcd_com(0x01);
				lcd_com(0x80);
				for(num1=0;num1<8;num1++)
				{
					  lcd_dat(table1[num1]);
				}
			}
			if(d==2)
			{
				TR0=1;
			}
			if(d==3)
			{
				TR0=0;
			}
			if(d>=4)
			{
				d=0;
				lowsec1=0;
				second1=0;
				higsec1=0;
				TR1=1;
				lcd_com(0x01);
				lcd_com(0x80);
				for(num=0;num<15;num++)
					{
						  lcd_dat(table[num]);
					}
				lcd_com(0x80+0x43);
				for(num1=0;num1<8;num1++)
					{
						  lcd_dat(table1[num1]);
					}
				display1(2,nian);
				display1(5,month);
				display1(8,date);
				display(3,hour);
				display(6,minute);
				display(9,second);
				xianshi(i);
			}
		}
	}	 
}

⌨️ 快捷键说明

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