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

📄 电子钟3.c

📁 能够调时间的时钟,用单片机内部定时器工作
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P3^0;
sbit rw=P3^1;
sbit lcden=P3^2;
sbit key_set=P3^3;
sbit key_up=P3^4;
sbit key_down=P3^5;
uchar code table[]="  AUTO OF SCUT";
uchar code table1[]="CLASS 4 RUIXING";
uchar code table2[]="CLOCK BY RUIXING";
uchar code table3[]="    00:00:00";
uchar num,aa,sec,min,hou,key_num;
void delay(uint z)
{
		uint x,y;
		for (x=z;x>0;x--)
		{
			for(y=250;y>0;y--);
		}

}
void write_dat(uchar);		 //写数据子程序
void write_com(uchar);		// 写程序子程序
void init();
void display_2(uchar add,uchar acc);  //时分秒显示子程序
void keyscan()						 //时间调节程序
{
	
	if(key_set==0)
	{
		delay(5);
		if(key_set==0)
		{
			while(!key_set);
			key_num++;
			if(key_num==1)
			{ 	
			 	TR0=0;
		    	write_com(0x80+0x40+11);
				write_com(0x0f);	
			 }
			 if(key_num==2)
			 {
			 	write_com(0x80+0x40+8);
			 }
			 if(key_num==3)
			 {
			 	write_com(0x80+0x40+5);
			 }
			 if(key_num==4)
			 {
				 key_num=0;
				 write_com(0x0c);
				 TR0=1;
			 }

			 
	
		}
	
	
		
	}
	if(key_num!=0)
		 {
		 	if(key_up==0)
			{
				delay(5);
				if(key_up==0)
				{
						while(!key_up);
						if(key_num==1)
						{
							sec++;
							if(sec==60)
								sec=0;
								display_2(10,sec);
								write_com(0x80+0x40+11);
						}
						if(key_num==2)
						{
							min++;
							if(min==60)
								min=0;
							display_2(7,min);
							write_com(0x80+0x40+8);
							
						}
						if(key_num==3)
						{
							hou++;
							if(hou==24)
								hou=0;
							display_2(4,hou);
							write_com(0x80+0x40+5);
							
						}
						
			    		  
				}
							
			}
			if(key_down==0)
			{
				delay(5);
				if(key_down==0)
				{
						while(!key_down);
						if(key_num==1)
						{
							sec--;
							if(sec==-1)
								sec=59;
								display_2(10,sec);
								write_com(0x80+0x40+11);
						}
						if(key_num==2)
						{
							min--;
							if(min==-1)
								min=59;
							display_2(7,min);
							write_com(0x80+0x40+8);
							
						}
						if(key_num==3)
						{
							hou--;
							if(hou==-1)
								hou=23;
							display_2(4,hou);
							write_com(0x80+0x40+5);
							
						}		  
				}
			}
		 
		}	
}




void main()
{
	init();
	while(1)
			
	{		
			keyscan();
			if(aa==20)
			 {
			 	aa=0;
				sec++;
				if(sec==60)
				{
					sec=0;
					min++;
					if(min==60)
					{
						min=0;
						hou++;
						if(hou==24)
						{
							hou=0;
						}
						display_2(4,hou);
					}
					display_2(7,min);
				}
				display_2(10,sec);
			 }
			 

	 }
	
	
}




													//写程序子程序
void write_com(uchar com)
{
	rs=0;
	lcden=1;
	P2=com;
	delay(5);
	lcden=1;	
	delay(5);
	lcden=0;

}

void write_dat(uchar dat)						//写数据子程序
{
	rs=1;
	lcden=1;
	P2=dat;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;

}



void init()
{
	rw=0;
	lcden=0;
	write_com(0x38);				  //	 显示模式设置
	write_com(0x0c);				  //	 光标控制设置 开关 闪烁
	write_com(0x06);				  //	 光标控制设置  自动左移
	write_com(0x80);				  //	 数据指针位置复位
	write_com(0x01);				  //	 显示清屏


		for(num=0;num<14;num++)			 //显示作者
	{
		write_dat(table[num]);
		delay(1);
	}
	write_com(0x80+0x40);
	for(num=0;num<15;num++)
	{
		write_dat(table1[num]);
		delay(1);
	}								  
	delay(100);								 
	write_com(0x01);
		for(num=0;num<16;num++)			 //显示作者
	{
		write_dat(table2[num]);
		delay(1);
	}
	write_com(0x80+0x40);
	for(num=0;num<12;num++)			 //显示作者
	{
		write_dat(table3[num]);
		delay(1);
	}
											  

	TMOD=0x01;							  //初始化定时器
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	EA=1;
	ET0=1;
	TR0=1;									

											
}												

void display_2(uchar add,uchar acc)		 //时分秒显示子程序
{
	uchar shi,ge;
	shi=acc/10;
	ge=acc%10;
	write_com(0x80+0x40+add);
	write_dat(0x30+shi);
	write_dat(0x30+ge);

		
}



void timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	aa++;
}

⌨️ 快捷键说明

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