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

📄 net test.c

📁 一个用数码管显示的测试仪代码. 硬件加入了一个双向对话功能.
💻 C
字号:

#include <Reg51.h>

#define  Master_LED P2
#define	 Slaver_LED P3
#define  D_LED  P2^7

sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;

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

//--------------------------
//  共阴数码管,交叉线, 1-3,3-1,2-6,6-2? 的   1~9,0显示表
unsigned char code across [] = {0x21, 0x7c, 0x6d, 0x63, 0x4f,
	 							0x5f, 0x25, 0x7f, 0x6f, 0x3f};

unsigned char key_val = 0;
unsigned char counter = 0;
unsigned char key_counter = 0;
unsigned char step_counter = 0;

void timer0_int(void);
void delay(unsigned int i);
void direct_test(unsigned int j);
void across_test(unsigned int k);
void lin_dot(unsigned int a);

main()
{
	counter = 4;
	key_val = 0xfb;
	TH0=0x3B;				//给计数寄存器高8位赋初值
	TL0=0xC0;				//给计数寄存器低8位赋初值
	ET0 = 1;
	EA = 1;
	TR0=1;
	while (1)
	{
		while (key_val == 0xfe)
		{
			step_counter = 0;
			direct_test (key_counter++);
			if (key_counter == 10)
			{
				key_counter = 0;
			}
		}

		while (key_val == 0xfd)
		{
			step_counter = 0;
			across_test (key_counter++);
			if (key_counter == 10)
			{
				key_counter = 0;
			}
		}

		while (key_val == 0xfb)
		{
			lin_dot (0);
			step_counter = 0;
		}

		while (key_val == 0xf7)
		{

			Master_LED = 1<<(step_counter-1);
			Slaver_LED = 1<<(step_counter-1);
		}
	}
	
}

void	delay(unsigned int i )
{		

		signed int	j,k;
		for(k=0;k<i;k++)
		for(j=0;j<1000;j++);
	//	Master_LED = 0x00;    //直通线的标记
}

//直线测试函数Slaver_LED,Master_LED,由1~9,0显示
void direct_test(unsigned int j)
{
		Master_LED = 0x81;    //直通线的标记
		Slaver_LED = 0x81;
		delay(50);
		Master_LED = direct[j];
		Slaver_LED = direct[j];
		delay(50);
}
//交叉线测试函数Master_LED直显示,Slaver_LED,1-3,2-6,数值互换
void across_test(unsigned int k)
{
		Master_LED = 0xC0;		//0x40;		//交叉线的标记
		Slaver_LED = 0xC0;		//0x40;
		delay(50);
		Master_LED = direct[k];
		Slaver_LED = across[k];
		delay(50);
}
//---------------------------------
//两边按顺序单点显示由a~g,.共8段,
//
void lin_dot(unsigned int a)
{

	unsigned char x = 1;
	//unsigned int h = a;
		while(a!=8)
		{
			a++;
		
			if(x == 0x00)
	  			x = 1;
			
			//Slaver_LED = direct[a]; 
			//Master_LED = direct[a];
			delay(50);
			Slaver_LED = x;
			Master_LED = x;
			x = x<<1;
			delay(50);
		}
		
}

void	timer0_int(void)	interrupt	1
{
	TR0=0;					//停止计数
	TH0=0x3B;				//给计数寄存器高8位赋初值
	TL0=0xC0;				//给计数寄存器低8位赋初值
	if(!(counter--))		//当计完2次后=0,取反为1,之后在改变回初值,重新计数。
	{
		counter=0x01;
		if (P1 != 0xff)
		{
			key_val = P1;
			if (key_val == 0xf7)
			{
				if (step_counter == 8)
				{
					step_counter = 0;
				}
				step_counter++;
			}
 		    while (P1 != 0xff);
		}
	}
	TR0=1;
}

⌨️ 快捷键说明

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