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

📄 timerzwh.c

📁 基于c51程序实现电子钟功能
💻 C
字号:
//采用8位LED软件译码动态显示,P0为字段码,P2为位选码,数码管共阳;
//key0为位选键;key1为加“1键;key2为减“1”键。

#include "reg51.h"
#include "absacc.h"

#define COM8155 XBYTE[0X7FF8]
#define PA8155 XBYTE[0X7FF9]
#define PB8155 XBYTE[0X7FFA]
#define PC8155 XBYTE[0X7FFB]

#define uchar unsigned char 
uchar code  dis_7[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0X40};
//0, 1, 2, 3,4,5,6,7,8,9,"灭”和“-”
uchar code scan_con[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//位的选择
uchar _data_dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
//显示缓冲区,时,分和秒初始为0,0x0b为“-”的编码
uchar data timedata[3]={0x00,0x00,0x00};	//秒,分,时
uchar data ms50=0x00,con=0x03,con1=0x00,con2=0x00,time04s=0x00;
uchar data key1flag=0x00,key2flag=0x00,key3flag=0x00,flag1=0x00;


//1ms延时
delay1ms(int t)
{ int i,j;
  for(i=0;i<t;i++)
    for(j=0;j<120;j++);
 }

//数码管显示
display()
 { char k;
    _data_dis[0]=timedata[0]%10; _data_dis[1]=timedata[0]/10;

	if ((con==1)&&(flag1%2==1))
      { _data_dis[3]=0x0a; _data_dis[4]=0x0a;}
	 else 
	   {_data_dis[3]=timedata[1]%10; _data_dis[4]=timedata[1]/10;}

	if ((con==2)&&(flag1%2==1))
      { _data_dis[6]=0x0a; _data_dis[7]=0x0a;}
	 else 
	  {_data_dis[6]=timedata[2]%10; _data_dis[7]=timedata[2]/10;}

    
   for(k=0;k<8;k++)
    { PB8155=dis_7[ _data_dis[k]];PA8155=scan_con[7-k];delay1ms(1);PB8155=0x00;}

}
 //按键处理
keyscan()
 {  
    PA8155=0x00;
    if((PC8155&0x08)==0)
      {
        if(key1flag==0)
	      { key1flag=1;}
         else
          { while((PC8155&0x08)==0){display();}
		    key1flag=0;
            con--;
	        if(con<=0)
               { con=3;TR0=1;ET0=1;}
            }
		}
      else key1flag=0;
    if(con!=3)
       { if((PC8155&0x04)==0)
	     {
           if(key2flag==0)
              { key2flag=1;}
	         else  		     
              { while((PC8155&0x04)==0){display();}
                key2flag=0;
	            timedata[con]++;
	            if(con==2) con1=24;else con1=60;
	            if(timedata[con]>=con1)
	             { timedata[con]=0;}
	           }
		   }
          else key2flag=0;
		 }
     if(con!=3)
       { if((PC8155&0x02)==0)
	       {
            if(key3flag==0)
              { key3flag=1;}
	         else  		     
              { while((PC8155&0x02)==0){display();}
                key3flag=0;
	            timedata[con]--;
	            if(con==2) con2=23;else con2=59;
	            if(timedata[con]==255)
	              { timedata[con]=con2;}
               }
			 }
	       else key3flag=0;
		 }
    }


//主函数
main()
 { TH0=0x3c;TL0=0xb0;
   TMOD=0x01;ET0=1;TR0=1;EA=1;
   COM8155=0x03;
    while(1)
	  { 
	    display();
	  }
}
//定时器/记数器T0中断服务
 void time_intt0(void)interrupt 1
 { 
   TH0=0x3c;TL0=0xb0;ET0=1;EA=1;
   if(con==3)
   { ms50++;
     if(ms50==40)	  
     { ms50=0x00;timedata[0]++;
       if(timedata[0]==60)
	     { timedata[0]=0;timedata[1]++;
	       if(timedata[1]==60)
	          { timedata[1]=0;timedata[2]++; 
	            if(timedata[2]==24)
		           {timedata[2]=0;
		            }
			   }
	       }
	  } 
	 }
	 else 
	 { time04s++;
	   if (time04s==10)
	     { time04s=0;flag1++;} }
	PA8155=0x00;
	if((PB8155&0x0e)!=0x0e)
    keyscan();
  }


 

⌨️ 快捷键说明

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