定时器实验

定时器实验

两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,蜂鸣器响一声,数码管回归0,重新计数。

代码

	#include"reg51.h"
	#include"intrins.h"
	#define seg1 P0
	#define seg2 P2
	typedef unsigned int u16;
	typedef unsigned char u8;
	u16 code smg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};     
	sbit key1=P3^2;          
	sbit key2=P3^3;          
	sbit buzzer=P1^0;        
	u16 num=0;             
	u16 i=0;
	
	void delay(u16 i)   
	{
		while(i--);
	}
	
	void int_init()     
	{
		EA=1;           	
		EX0=1;            
		IT0=1;            
		EX1=1;            
		IT1=1;            
	}
	
	void tim0_init()      
	{
		ET0=1;               
		TMOD=0X01;          
		TH0=0XFC;           
		TL0=0X18;           
		TR0=0;              
	}
	
	void display()       
	{
		seg1=~smg[num/10%10];  
		delay(10);          
		seg2=~smg[num%10];   
		delay(10);          
	}
	
	
	
	void main()          
	{
		buzzer=0;
		int_init();
		tim0_init();
		while(1)
		{
			display();
		}
	}
	
	
	
	void int0() interrupt 0        
	{
		if(key1==0)                  
		{
			delay(1000);              
			if(key1==0)
			{
				TR0=1;                  
			}
		}
	}
	
		void int1() interrupt 2      
	{
		if(key2==0)                   
		{
			delay(1000);               
			if(key2==0)              
			{
				TR0=0;                   
			}
		}
	}
	
	void tim0() interrupt 1           
	{
		TH0=0XFC;                      
		TL0=0X18;
		if(i==1000)                     
		{
			i=0;
			num++;
		}
		i++;
		if(num==61)                    
		{
			buzzer=1;                    
			delay(1000);
			buzzer=0;
			num=0;
		}
	}

图像

在这里插入图片描述

控件

AT89C51
BUTTON
BUZZER
NPN
RES
AND
7SEG-MPX1-CA
注意:选择蜂鸣器时,不要选错,若蜂鸣器不响,可以尝试改变蜂鸣器电压电阻大小
在这里插入图片描述


版权声明:本文为pretend52原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。