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

📄 main.c

📁 自制方波发生器及频率计 材料: AT89S52 + AT89C2051 1个8位共阳七段显示器 8个NPN三极管 11.0592Mhz晶振x2
💻 C
字号:
#include <reg51.h>
unsigned long count = 0;
unsigned long show_count = 0;

unsigned char digest[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x98,0xC6};
unsigned char scancode[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};

sbit P1_0 = P1^0;

#define HIGH_BIT 0xFB
#define LOW_BIT 0x80

void Disp(int id)
{
	P2 = 0;
	P2 = scancode[id];
	P0 = 0xff;
	switch (id)
	{
		case 0: P0 = digest[(show_count / 10000000) % 10]; break;
		case 1: P0 = digest[(show_count / 1000000) % 10]; break;
		case 2: P0 = digest[(show_count / 100000) % 10]; break;
		case 3: P0 = digest[(show_count / 10000) % 10]; break;
		case 4: P0 = digest[(show_count / 1000) % 10]; break;
		case 5: P0 = digest[(show_count / 100) % 10]; break;
		case 6: P0 = digest[(show_count /10) % 10]; break;
		case 7: P0 = digest[show_count % 10]; break;
	}
}

void Timer0() interrupt 1
{
	static unsigned int scount = 0;
	static unsigned char rcount = 0;
	TH0 = HIGH_BIT;
	TL0 = LOW_BIT + 34;
	scount++;

	if (scount == 800) //1 second
	{
		scount = 0;
		show_count = count;
		count = 0;
	}else if (scount % 2 == 0)
	{
		rcount++;
		if (rcount == 8) rcount = 0;
		Disp(rcount);
	}

	count += (TH1 << 8) | TL1;
	TH1 = TL1 = 0;
}

void main()
{
	TMOD = 0x51;
	// 11.0592 Mhz  1.152 ms
	TH0 = HIGH_BIT;
	TL0 = LOW_BIT;
	//initalize output counter
	TH1 = 0;
	TL1 = 0;
	
	EA=1;
	ET0=1;
	TR0=1;
	TR1=1;

	for (;;);
}

⌨️ 快捷键说明

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