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

📄 standardtimeext.c

📁 含有大量的单片机代码
💻 C
字号:
//QQ群:33495724 单片机 ARM FPGA 团队全力打造技术联盟
//实验课题:标准时间,按键校时
//编写人:lc
//时间:2006.11.25.

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sfr p0=0x80;//初始化
sfr p1=0x90;
sfr p2=0xA0;
unsigned char code tab[10]={0xfc/*0*/,0x60/*1*/,0xda/*2*/,0xf2/*3*/,0x66/*4*/,
                            0xb6/*5*/,0xbe/*6*/,0xe0/*7*/,0xfe/*8*/,0xf6/*9*/};//段码查表
    
uint addi=0;  //标示相对50mS的20次中断是否到达,到达就是一秒;
uchar hour=23;//时间初始化,其为全局变量!
uchar minute=59;
uchar second=50;
uchar templow,temphigh;//取十位,取个位
uchar displaylow(uchar middlenum1);//函数声明
uchar displayhigh(uchar middlenum2);
void delay(uint num);
void fun_frabrication();
void keycheck();

void t0_show() interrupt 1 using 0//TO中断
{ 
 TH0=(65536-50000)/256;//产生一次中断,重新配置定时器预置值
 TL0=(65536-50000)%256;
 addi++;
 if(addi==20){second+=1;addi=0;}
}


void displaysecond(uchar p_second)//秒显                                   
{ 
  if(p_second<60||p_second==00)
   {
	 p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
	 p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
   }
  else 
   {
    p_second=00; 
	second=00;
    p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
    p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
    minute+=1;
   }
}


void displayminute(uchar p_minute)//分显
{
  if(p_minute<60||p_minute==00)
   {
    p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
    p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
   }
  else 
   {
    p_minute=00;
    minute=00;
    p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
	p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
    hour+=1;
   }
}


void displayhour(uchar p_hour)//时显
{
 if(p_hour<24||p_hour==00)
  {
   p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
   p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
  }
  else 
  { 
   p_hour=00;
   hour=00;
   p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
   p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
  }
}

uchar displaylow(uchar middlenum1)//显十位通用包
{
 templow=tab[middlenum1%10];
 return(templow);
}


uchar displayhigh(uchar middlenum2) //显示个位通用包
{ 
 temphigh=tab[middlenum2/10];
 return(temphigh);
}


void delay(uint num)//函数延迟程序包,可以通用;
{ 
 uint i,j;
 for(i=num;i>0;i--)
   for(j=0;j<200;j++);
}


void fun_frabrication()//显示函数封装包,可以用在很多其他的时钟设计当中;
{
 displaysecond(second);
 displayminute(minute);
 displayhour(hour);
}


void main()
{
 uchar p2change;
 TMOD=0X01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 IE=0X82;
 TR0=1;
 while(1)
 { 
   fun_frabrication();//将该显示信号放里面就不会刷动了
   p2change=p2;
   if((p2change&0x04)==0)keycheck();
   else continue;
 }
}

void keycheck()
{
 uchar p2_change;
 p2_change=p2;
 while((p2_change&0x04)==0)
    {
	 fun_frabrication();
	 if((p2_change&0x01)==0)
	       { 
		     delay(3);//延时去抖;
		     if((p2_change&0x01)==0)hour+=1;
			 while((p2_change&0x01)==0)
			 {
			  p2_change=p2;
			  fun_frabrication();
			  if((p2_change&0x01)==1)break;}
		   }
	 if((p2_change&0x02)==0)
	       { delay(3);//延时去抖
		     if((p2_change&0x02)==0)minute+=1;
			 while((p2_change&0x02)==0)
			 {p2_change=p2;
			  fun_frabrication();
			  if((p2_change&0x02)==0x02)break;}
		   }
	 p2_change=p2;
	}
}

⌨️ 快捷键说明

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