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

📄 02-定时器.c

📁 CAN现场总线.rar
💻 C
字号:
// 02-定时器.c
// 很经典的一个程式,主要利用定时器0;
// 将每秒累加的数目显示在数码管上;
// 29-09-09 akuei2;

#include "reg52.h"
#define uchar unsigned char

//定义数码管码
uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//定义位选码
//0b111101111,0b11111011,0b11111101,0b11111110
uchar code Led_Select[]={0xf7,0xfb,0xfd,0xfe}; 

//定义变量
int Sec,t0;

//50微秒延迟函数
void Delay_50us(int t)
{
	uchar j; 
    t--;
	for(;t>0;t--)  
   		for(j=19;j>0;j--);
    
}

//数码管显示函数
void Display(void)
{
	int Digit[4],i;
	Digit[3]=Sec/1000;			//第一个数码管取千位
	Digit[2]=Sec%1000/100;		//第二个数码管取百位
	Digit[1]=Sec%100/10;		//第三个数码管取十位
	Digit[0]=Sec%10;			//第四个数码管取个位
	for(i=0;i<4;i++)
	{
		P0=Led_Code[Digit[3-i]];		//送数码管码
		P2=Led_Select[i];				//送位选码
		Delay_50us(20);					//延迟1微秒
		P0=P2=0xff;						//消影
	}
}

//初始化函数
void Init(void)
{
	TMOD=0x01;					//定时0,工作模式1
	TH0=(65536-(50000))/256;	//定时器0,高四位赋值	
	TL0=(65536-(50000))%256;	//定时器0,第四位赋值,时间大约是50毫秒
	EA=1;						//全能中断使能
	ET0=1;						//定时器0中断使能
	TR0=1;						//定时0启动	
}

//主函数
void main(void)
{
	Init();						//初始化函数
	while(1)
	{
		Display();				//显示函数
	}
}

//定时器0 中断函数
void Ir_t0(void) interrupt 1
{
	TH0=(65536-(50000))/256;	//重新赋值
	TL0=(65536-(50000))%256;	//重新赋值
	t0++;			
	if(t0>=20)					//大约1秒
	{
		t0=0; Sec++;			//Sec增值
		if(Sec>=10000) Sec=0;	//当Sec大于等于10000,Sec重新赋值
	}


}

⌨️ 快捷键说明

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