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

📄 7_2.c

📁 51事例原代码 事例多多 应该对初学者很有用
💻 C
字号:
//秒计数器,定时器0工作在方式0,每5毫秒产生一次中断,转换一次数码管的显示位。
//同时,计数5毫秒的次数,到200次为1秒,使秒计数器time加1。

#include <AT892051.h>
#include <absacc.h>

#define DISPLAY_SEGMENT1 XBYTE[0x8001]	//LED显示阳极高位,段输出
#define BIT_LED XBYTE[0x8002]			//LED显示阴极,位输出
bit chgdis;					//显示位转换,=0时,显示个位数,=1时显示十位数
unsigned char data display0,display1;	//显示位0和1
unsigned char data counter;				//计数5毫秒的个数
unsigned char data time;				//秒计数
unsigned char code led_segment_code[]={0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,
							  	0x04,0x02};//共阳数码管段码

main()
{
	TMOD=0x00;							//定时器0为方式0
	IP=0x02;							//定时器中断0为高优先级
	TH0=0xCB;TL0=0x1D;					//定时器0的时间常数(5ms,4MHZ)
	counter=0;							//计数5毫秒的个数
	time=0;								//秒计数初始值0秒
	TR0=1;								//启动定时器0
	IE=0x82;							//开放显示中断
	while(1);
}

void time0_int(void) interrupt 1		//显示中断服务子程序,每五毫秒中断一次
{
	TH0=0xCB;TL0=0x1D;					//重装定时器0的时间常数(5ms,4MHZ)
	counter++;
	if (counter==200)					//一秒
		time++;							//秒计数
	display1=time/10;					//算出显示十位数
	display0=time-display1*10;			//算出显示个位数
	chgdis^=1;							//更换显示位
	if (chgdis==0)
		{
		P3_7=1;							//十位数不显示
		P1=led_segment_code[display0];	//送个位数显示段码
		}
	else
		{
		P1=led_segment_code[display1]^0x01;	//送十位数显示段码
		P3_7=0;							//显示十位数
		}	
}

⌨️ 快捷键说明

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