//用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)
}
}
}
#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)
}
}
}