定时器计数 数码管显示0到99 (中断和查询两种方式)

定时器中计数 数码管显示0到99

仿真图

定时器中断方式计数

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
         0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};  
uchar data_L, data_H;
uchar data_0, b;  
void delay(uchar time)
{
	uchar m;
	for(m=0;m<time;m++)
	;
}
void T0_init()
{
   TMOD = 0x05;            
	 TH0=0xFF;        
   TL0=0xFF;
   EA=1; 
   ET0=1; 
   TR0=1;
}
void timer0( ) interrupt 1 
{
	TH0=0xFF;        
  TL0=0xFF;
	if(data_0==99)
	{
		data_0=0;
	}
	else
	{
		data_0++;
	}
 
}
void data_in(void)
   { data_L=data_0%10;
     data_H=data_0/10;
	 }
void display(void)
    {
		 P2=0x01;
     P0=tab[data_H];
     delay(100);
     P2=0x02;
     P0=tab[data_L];
     delay(100);
		}
void main()
{
	data_0=0;
	T0_init();
	
	while(1)
	{
	data_in();
	display();
	}
	
}	

定时器查询方式计数

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};   

uchar data_L, data_H;
uchar a, b;  

void delay( uint k)
{
	uint m, n;
	for(m =0; m<k; m++)
		 {
			 for(n=0;n<120;n++);
		 }
}
	 
void display(void)
{
 P2=0x01;
 P0=tab[data_H];
 delay(1);
 P2=0x02;
 P0=tab[data_L];
 delay(1);
}
		
void count0(void)
{
	if(TF0==1)
	{
	TH0=0xFF;
	TL0=0xFF;
	 if(a==99)
		{ 
		 a=0;
		}
	 else
		{
		 a++;
		}
	 TF0=0;
	}
}

	 
void data_in(void)
{   
    data_L=a%10;
	data_H=a/10;
}

void T0_init( void)
{ 
	TMOD=0x05;
	TH0 =0XFF;
	TL0=0xFF;
	TR0=1; 
	EA =0;
}
		
void main( void)
{ 
 
 a=0;
 T0_init();
 while(1)
 {
	count0();
	data_in();
	display();
 }
}

 
 
 
 
 
		 
  • 18
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值