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

📄 eg.c

📁 C51语言对数字逻辑时间的一个控制
💻 C
字号:
#include <at89x51.h>
#include<absacc.h>
#include<stdio.h>
#include<math.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
 uchar num1;
 uchar num2;
 uchar n=0;
 uchar num=0;
 uchar flag=0;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void hour(void);
void Delay (void)//键盘延时程序
{
  uint i;
  for(i=0;i<300;i++);
}
void Leddelay(void)//LED 刷新延迟
{
 uchar i;
 for(i=0;i<255;i++)                                                 
 {
    ;
 }
 
}

uchar Key()      //键盘处理函数
{
  uchar a,b,c;               //定义3 个变量
  EA=0;
  Delay();   //延时
  if ((P1&0x0f)!=0x0f)          //有键按下处理
  {
      a=(P1&0x0f);                 //键值放入寄存器a
      P1=0xf0;              //将键盘口置为11110000
      c=(P1&0xf0);        
      a=a|c;               //将两个数据融合
  }
  switch(a)              //对比数据值
  {
	        case 0xee: b=3; break;
	        case 0xed: b=7; break;
	        case 0xeb: b=11; break;
	        case 0xe7: b=15; break;
	        case 0xde: b=2; break;
	        case 0xdd: b=6; break;
	        case 0xdb: b=10; break;
	        case 0xd7: b=14; break;
	        case 0xbe: b=1; break;
	        case 0xbd: b=5; break;
	        case 0xbb: b=9; break;
	        case 0xb7: b=13; break;
	        case 0x7e: b=0; break;
	        case 0x7d: b=4; break;
	        case 0x7b: b=8; break;
	        case 0x77: b=12; break;
	        default: return(0xff);  //键值错误处理
    }     
    EA=1;
	P1=0x0f;
    return(b);  //将b作为返回值
}


void Display(uchar b,uchar a)    //LED显示
{ 
  uchar fq,fb,fs,fg;
     if(a!=0xff)          //用于串口接收数据显示
    {
         fq=a/10;
         fb=a%10;
   	     P2=0xfe;
         P0=tab[fb];
	     Leddelay();
	     P2=0xfd;
	 	 P0=tab[fq];
	 	 Leddelay();
	 	 P2=0xff;
     }
      if(b!=0xff)
     {
        fs=b/10;
        fg=b%10;
     	P2=0xfb;
	 	P0=tab[fg];
	 	Leddelay();
	 	P2=0xf7;
	 	P0=tab[fs];
	 	Leddelay();
	 	P2=0xff;
      }
}

void main(void)
{
	TMOD = 0x10; 
	TH1 = 0x3c;
	TL1 = 0xb0;
	EA=1;
    EX0=1;//外部中断0使能
	ET1=1;
	IT0=1;//负脉冲触发
	TR1 = 1;
	P1=0x0f;
	while(1)
	{
		hour();
		if(flag==0)
		{
			hour();
			Display(num2,num);
		}
		if(flag==1)
		{   
			hour();
			Display(num1,num2);
		}
	}
}


void hour(void)
{
       if(n==20)
		{
			n=0;
			num++;
			if(num==60)
			{
				num=0;
				num2++;
				if(num2==60)
				{
					num2=0;
					num1++;
					if(num1==24)
					{
						num1=0;
					}																																																																																																																			
				}
			}
		}
}



void time1_int(void) interrupt 3
{
 TH1 = 0x3c;
 TL1 = 0xb0;
 n++;
}

void intersvr0(void) interrupt 0  //键盘中断
{
	Delay();   //延时
	if ((P1&0x0f)!=0x0f) 
	{
		flag++;
	 	if(flag>=2)
	 	{
	  		flag=0;
	 	}
	 }
}

⌨️ 快捷键说明

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