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

📄 yj.c

📁 单片机数字时钟
💻 C
字号:
 #include<reg51.h>
 #include<absacc.h>
 #include <intrins.h>
 #define uchar unsigned char
 uchar code time[]={"Time:"};//第一行显示	 “Time“
 uchar idata date[]	={"                "};//   第二行显示时间
 sbit RS=P3^2;	//	lcd1602			 
 sbit RW=P3^1;	 //	 lcd1602读写端口
 sbit EN=P3^0;	//使能端  下降沿有效
 sbit flag=ACC^7;
 sbit FZ=P1^0;	//分设置键
 sbit XZ=P1^1;	//时设置键 
 sbit TC=P3^4;	//退出键
 sbit SZ=P1^2;	//设置指示灯
 sbit ZC=P1^3;	//正常计时指示灯
 sbit ST=P3^3;// 时间设置模式
  uchar second;	//秒
  uchar mint; 	//分
  uchar hour;	//时
  uchar t;	   //定时器计数次数
 void delay(int y)	  //延时函数
 {
   uchar i,j;
	 for(j=0;j<=y;j++)
      for(i=0;i<=100;i++);
 }

 void wait(void)	   //判断显示器是否处于忙状态
 {
   RS=0;
   RW=1;
    do{ACC=P0;}
   while(flag==1);	//读显示器忙标志位
 }

 void writecom(uchar com)	 //写液晶显示命令
 {
     RS=0;
     RW=0;
     EN=0;
	 P0=com; 
     delay(1);
	 EN=1;
	 delay(1);
     EN=0;//使能 数据送到命令寄存器
 }
 void writedat(uchar dat)  //写数据送显示
 {
     RS=1;
     RW=0;
     EN=0;
     P0=dat;
	 delay(1);
	 EN=1;
	 delay(1);
	 EN=0;
 }
 void lcdinit(void)			 //显示器初始化以及定时器初始化
 {
  	  
	  TMOD=0x01;
	  TH0=(65536-50000)/256;
	  TL0=(65536-50000)%256;
	  EA=1;
	  ET0=1;
	  EX1=1;
	  TR0=1;
	  SZ=0;
      t=0;	   
	  second=0;
	  mint=0;
	  hour=12;
   writecom(0x38);	
       wait();
   writecom(0x08);	
       wait();	   	 
   writecom(0x01);	
       wait();
   writecom(0x06);	
	   wait();
   writecom(0x0c);	
	   wait();

	   
 }
 /////////////////////////
 /////////////////////// /
 ////////显示函数////////
 void display(uchar x,uchar *p)
 {
   while(*p!='\0')
  {  writecom(x);
     wait();  
     writedat(*p);
     wait();
	 x++;p++;
	delay(5);
}

}
	void time0(void) interrupt 1  	   
     {  
	  
	   t++;
	 if(t==7)	//溢出7次为一秒
	 {
	 	 t=0;
	    second++;
	     if(second==60)
	      { 
		      mint++;
	          second=0;
		      if(mint==60)
		      { hour++;
		        mint=0;
			  if(hour==24)hour=0;

		      }

	      }
	 
	 } 
	  TH0=(65536-50000)/256;
	  TL0=(65536-50000)%256;
	 	      
	 } 	
	  	
///////////////////////////////////
//////////////////////////////////
/////////////显示时间/////////////		
void display1(void)
{
    
	 date[0]=hour/10+0x30;	// 第二行第一位显示时的十位
	 date[1]=hour%10+0x30;	//	 第二位显示时的个位
	 date[2]=0x3a;			//	  第三位显示":"
	 date[3]=mint/10+0x30;	 //		分的十位
	 date[4]=mint%10+0x30;	 //		分的个位
	 date[5]=0x3a;			 //		":"
	 date[6]=second/10+0x30; //		秒的十位
	 date[7]=second%10+0x30; //		秒的个位
	 display(0xc0,date);	 //

}		
	
	 //////////////////////////////////////
	 //时间设置函数  ///////////////////////
	/////////////////////////////////////
	  void  key(void)  interrupt 2  	   
	       {  
		    
		       EA=0;			//关中断	   定时器停止计数
               SZ=1;			//设置等点亮
			   ZC=0;			//计时等熄灭
         	   second=0;
		   while(1) 
           { 
			 if(FZ==0)
			  {	 	
			    
			   delay(5) ;
			    if(FZ==0)  //每按下一次分加1
				  {	  
				  delay(5); 	//延时
				    mint++;
					 
					  if(mint==60){mint=0;}
					
				  }
			  }
		     if(XZ==0)
			  {
			   	  delay(5) ;
			    if(XZ==0)	 //每按下一次时加1
				 { 
				 	delay(50);
				     hour++;
				      if(hour==24){hour=0;}
					
				 }
			  }
	    	display1();		//及时显示变化
			 
  	   if(TC==0) break;	  // 退出键按下   退出时间设置
	 }
         SZ=0;		  // 设置灯灭
		 ZC=1;		  //	计时灯亮		  
		   EA=1;	  //	 开中断	定时器计数

	}	 
/***************************************************/
/******************主函数****************************/
/****************************************************/		 
		  							
void main(void)
{
    	
	   lcdinit(); 
	   display(0x80,time); //显示"Time"
	  
 while(1)
 {
    
   display1();	 	 	 
} 	 

}		

⌨️ 快捷键说明

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