使用中断INT0和INT1来实现数码管显示以及清零

//用LED数码管显示计数器对T0的计数值
#include<reg52.h>   //包含52单片机寄存器定义的头文件
unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段码表
unsigned int x;
sbit P33=P3^3;
void delay1ms(unsigned int i)
{


unsigned char j;
 while(i--)
 {
 for(j=0;j<115;j++)  //1ms基准延时程序 
 {
  ;
 }
 
 
 }
  
}
 void Display(unsigned char x)
{
    
P2=0xdf;        //P2.6引脚输出低电平,DS6点亮 
    P0=Tab[x/100];   //显示十位
    delay1ms(5);

P2=0xbf;        //P2.6引脚输出低电平,DS6点亮 
    P0=Tab[x%100/10];   //显示十位
    delay1ms(5);
    P2=0x7f;      //P2.7引脚输出低电平,DS7点亮 
    P0=Tab[x%10];  //显示个位
    delay1ms(5);
P2=0xff;
 } 


/*******************************************
函数功能:主函数
******************************************/
void main(void)
  {  
       
       EA=1;         //开总中断   
  EX0=1;       //允许外中断INT0 
  EX1=1;       //允许外中断INT1 
  IT0=1;   //INT0为下负脉冲触发方式
  IT1=1;   //INT1为下负脉冲触发方式
   
 while(1)  //无限循环,不停地将TL0计数结果送P1口
 {
       //x=TL0;  
    Display(x);
    }
 }
//INT0终端函数
void clear0() interrupt 0
{
 
 x=0;


}


//T0 计数器中断
 void Key_counter() interrupt 2
 {
   if(P33==0){
   delay1ms(20);
   if(P33==0){
   
    x=(x+1)%1000; //因为是3位数码管显示 所以要把计的数控制在1000以内(000~999)
   }
   
   }
 
 
 }
 

你可能感兴趣的:(使用中断INT0和INT1来实现数码管显示以及清零)