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

📄 to.c

📁 基于AT89C51系列单片机的按键识别的C51程序定时器T0的应用---9.9秒计时设
💻 C
字号:
#include <AT89X51.H>

unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 
                             0x66,0x6d,0x7d,0x07, 
                             0x7f,0x6f,}; 
unsigned char sec;        //定义计数值,每过1/10秒,sec加一
unsigned char keycnt=0;   
unsigned int tcnt;        //键值判断


sbit gewei=P2^0;               //个位选通定义
sbit shiwei=P2^1;              //十位选通定义
void Delay(unsigned int tc)     //延时程序
{
	while( tc != 0 )			
	{
		unsigned int i;			
		for(i=0; i<100; i++);	
		tc--;					
	}
}
void LED()                  //LED显示函数
{
       shiwei=0;
	   P0=table[sec/10];
	   Delay(8);
	   shiwei=1;
	   gewei=0;
	   P0=table[sec%10];
	   Delay(5);  
	   gewei=1;
}
void KEY()          //按键扫描程序
{
unsigned char i,j; 
if(P3_0==0) 
  { 
    for(i=20;i>0;i--) 
    for(j=248;j>0;j--); 
    if(P3_0==0) 
      { 
        keycnt++; 
        switch(keycnt)  //按下次数判断
          { 
            case 1:     //第一次按下
              TH0=0x06; //对TH0 TL0赋值
              TL0=0x06; 
              TR0=1;    //开始定时
              break; 
            case 2:     //第二次按下 
              TR0=0;    //定时结束
              break; 
            case 3:     //第三次按下
             keycnt=0;  //重新开始判断键值
             sec=0;     //计数重新从零开始
              break; 
          } 
        while(P3_0==0); 
      } 
  }
}

void t0(void) interrupt 1 using 0  //定时中断服务函数
{ 
tcnt++;        //每过250ust tcnt加一
if(tcnt==400)  //计满400次(1/10秒)时
  { 
    tcnt=0;   //重新再计
    sec++;    
    if(sec==100) //定时10秒,在从零开始计时
      { 
        sec=0; 
      } 
  } 
}
void main(void) 
{ 
TMOD=0x02;  //定时器工作在方式2
ET0=1; 
EA=1; 
sec=0; 
while(1) 
  {   
      KEY(); 
 	  LED();
	  
  } 
} 

⌨️ 快捷键说明

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