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

📄 xxh.c

📁 Proteus + KeilC 开发的跑表程序。简单、完整
💻 C
字号:
#include <reg52.h>

#define PORTSEG P0		// 数码管段输出
#define PORTDIG P2		// 数码管位输出

sbit KEY0   = P1^7;
sbit KEY1   = P1^6;

unsigned char i_ms,i_sec,i_min;
unsigned char c_disp_dat[8],i_cur_dig;
bit b_flag;

char code seg_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

void time() interrupt 1		// 10ms 到了更新时间值
{
	TH0=0x78;
	TL0=0xEC;
	TR0=1;

	if(i_ms++ == 100)	    // ms 计数到100ms 
	{
		i_ms = 0;			// ms 清零
		if(i_sec++ == 60)   // 秒计数加一 
		{
			i_sec = 0;      // 秒计数达到60 就清0
			if(i_min++ == 60)   // 分计数加一
			{
				i_min = 0;      // 分计数达到60 就清0
			}
		}
	}

	c_disp_dat[0]=seg_7[i_min/10];   // 把要显示的分钟数的十位数段码查出来
	c_disp_dat[1]=seg_7[i_min%10];   // 把要显示的分钟数的个位数段码查出来
	c_disp_dat[2]=seg_7[i_sec/10];   // 把要显示的秒钟数的十位数段码查出来
	c_disp_dat[3]=seg_7[i_sec%10];   // 把要显示的秒钟数的个位数段码查出来
	c_disp_dat[4]=seg_7[i_ms/10];   // 把要显示的毫秒数的十位数段码查出来
	c_disp_dat[5]=seg_7[i_ms%10];   // 把要显示的毫秒数的个位数段码查出来
}


void interact() interrupt 3		//隔一段时间切换显示一位LED,实现扫描显示
{
	TH1=0xf6;
	TL1=0x3c;
	TR1=1;

	PORTSEG = 0x0;
	if(++i_cur_dig==6)			// 共需要显示6位数字
	{
		PORTDIG = 0xdf;
		i_cur_dig = 0;
	}
	else
		PORTDIG = ~((~PORTDIG)>>1);		// 显示右边一位LED
	PORTSEG = c_disp_dat[i_cur_dig];    // 段码输出
}

void delay(unsigned char i)		// 延时程序
{
	while(i--);
}

void main()
{
	EA=0; //关所有中断

	TMOD=0x01;			// T0、T1 均为16位计数模式
	TH0=0x78;
	TL0=0xEC;

	TH1=0xf6;
	TL1=0x3c;

	i_ms = i_sec = i_min = 0;
	i_cur_dig = 0;
	PORTDIG = 0xfe;

	ET0=1;		//开T0中断
	TR0=1;
	ET1=1;		//开T1中断
	TR1=1;
	EA=1; 		//开所有中断
	
	while(1)
	{
		if(KEY0 == 0)		//检测是否按下  key0 按键
		{
			delay(100);		// 消抖
			if(KEY0 == 0)
			{
				TR0 = ~TR0;			// 暂停秒表
				while(KEY0 == 0)	// 等待按键释放
				{}
			}
		}
		if(KEY1 == 0)		//检测是否按下  key1 按键
		{
			delay(100);		// 消抖
			if(KEY1 == 0)
			{
				i_ms = i_sec = i_min = 0;	// 清秒表计数
				while(KEY0 == 0)	// 等待按键释放
				{}
			}
		}
	}
}

⌨️ 快捷键说明

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