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

📄 new66.c

📁 此题目是通过键盘来实现密码输入是否正确
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
//以下8个字节存放8位数码管的段码
int LED_BIT_1;
int LED_BIT_2;
int LED_BIT_3;
int LED_BIT_4;
int LED_BIT_5;
int LED_BIT_6;
int LED_BIT_7;
int LED_BIT_8;
//以下6个字节存放初始密码
int WORD[6] = {1,2,3,4,5,6};
//以下6个字节存放用户输入的6位密码
int KEY[6] = {0};

int CNT_A;
int CNT_B;
int KEY_CNT;	//已输出的密码位数
int LINE;		//按键行号
int ROW;		//按键列号
int VAL;		//键值

int FLAG = 1;
sbit P1_0 = P1^0;
sbit P1_7 = P1^7;

sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;

sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;

void FINI()
{	
	;//Nothing
}

void DLY_S()
{
	int i = 0;
	for (i=0; i<950; i++)
	{
		;
	}
}

void DLY_L()
{
	int i = 0;
	int k = 0;
	for (i=0; i<1000; i++)
	{
		for (k=0; k<940; k++)
		{
			;
		}
	}
}

//段码,输入密码左移子程序
void SHIFTL()
{
	LED_BIT_6 = LED_BIT_5;
	LED_BIT_5 = LED_BIT_4;
	LED_BIT_4 = LED_BIT_3;
	LED_BIT_3 = LED_BIT_2;
	LED_BIT_2 = LED_BIT_1;
	LED_BIT_1 = 0x40;
	KEY[5] = KEY[4];
	KEY[4] = KEY[3];
	KEY[3] = KEY[2];
	KEY[2] = KEY[1];
	KEY[1] = KEY[0];
	KEY[0] = VAL;	
}

//段码,输入密码右移子程序
void SHIFTR()
{
	LED_BIT_1 = LED_BIT_2;
	LED_BIT_2 = LED_BIT_3;
	LED_BIT_3 = LED_BIT_4;
	LED_BIT_4 = LED_BIT_5;
	LED_BIT_5 = LED_BIT_6;
	LED_BIT_6 = 0;
	KEY[0] = KEY[1];
	KEY[1] = KEY[2];
	KEY[2] = KEY[3];
	KEY[3] = KEY[4];
	KEY[4] = KEY[5];
	KEY[5] = 0;
}

void ALARM_1()
{	
	TR0 = 1;
	while (1 == TR0)
	{	
		;
	}
}

void ALARM_2()
{	
	TR0 = 1;
	while (1 == TR0)
	{	
		;
	}
	DLY_L();
}
//以下为数码显示子程序
void DISP()
{
	P2_7 = 0;
	P0 =  LED_BIT_8;
	DLY_S();
	P2_7 = 1;
	P2_6 = 0;
	P0 = LED_BIT_7;
	DLY_S();
	P2_6 = 1;
	P2_5 = 0;
	P0 = LED_BIT_6;
	DLY_S();
	P2_5 = 1;
	P2_4 = 0;
	P0 = LED_BIT_5;
	DLY_S();
	P2_4 = 1;
	P2_3 = 0;
	P0 = LED_BIT_4;
	DLY_S();
	P2_3 = 1;
	P2_2 = 0;
	P0 = LED_BIT_3;
	DLY_S();
	P2_2 = 1;
	P2_1 = 0;
	P0 = LED_BIT_2;
	DLY_S();
	P2_1 = 1;
	P2_0 = 0;
	P0 = LED_BIT_1;
	DLY_S();
	P2_0 = 1;
}

//定时器中断服务程序,用于声音报警
void clk()interrupt 1  
{
	P1_7 = 0;
	TH0 = (65536-700) / 256;
	TL0 = (65536-700) % 256;
	CNT_A++;
	if (30 == CNT_A)
	{
		CNT_A = 0;
		CNT_B++;
		if (20 == CNT_B)
		{
			CNT_A = 0;
			CNT_B = 0;
			TR0 = 0;
		}
	}
}

void CALCU()
{
	int i;
	VAL = LINE * 3 + ROW;
	if (0X0A == VAL)
	{
		if (0 == KEY_CNT)
		{
			ALARM_1();
			FLAG = 0;
			return;
		}
		SHIFTR();
		KEY_CNT--;
		
		while (1)
		{
			DISP();
			
			if ((0X0F==P3) || (0XF0==P3))
			{
				return;
			}

		}
	}
	if (0X0B == VAL)
	{
		if (6 == KEY_CNT)
		{
			for (i=0; i<6; i++)
			{
			   if (KEY[i]!=WORD[i])
			   {
			   		ALARM_2();
					FLAG = 0;
					return;
			   }
			}
			P1_0 = 0;
			DLY_L();
			FINI();
			FLAG = 0;
			return;
		}
		ALARM_1();
		FLAG = 0;
		return;
	}
	KEY_CNT++;

	if (7 == KEY_CNT)
	{	
		ALARM_1();
		while(1)
		{
			DISP();
			if ((0X0F==P3) || (0XF0==P3))
			{
				FLAG = 0;
				return;	
			}
		}
		FLAG = 0;
		return;	
	}
	SHIFTL();
	while(1)
	{
		DISP();
		if ((0X0F==P3) || (0XF0==P3))
		{
			return;	
		}
	}
	return;
}

void RSCAN()
{
	P3 = 0X0F;
	if (1 == P3_4)
	{
		ROW = 0;
		CALCU();
	}

	if (1 == P3_5)
	{
		ROW = 1;
		CALCU();
	}

	if (1 == P3_6)
	{
		ROW = 2;
		CALCU();
	}
}

void LSCAN()
{
	P3 = 0XF0;
	if (1 == P3_0)
	{
		DLY_S();
		if (1 == P3_0)
		{
			LINE = 0;
			RSCAN();
		}
	}

	if (1 == P3_1)
	{
		DLY_S();
		if (1 == P3_1)
		{
			LINE = 1;
			RSCAN();
		}
	}

	if (1 == P3_2)
	{
		DLY_S();
		if (1 == P3_2)
		{
			LINE = 2;
			RSCAN();
		}
	}

	if (1 == P3_3)
	{
		DLY_S();
		if (1 == P3_3)
		{
			LINE = 3;
			RSCAN();
		}
	}
}

void main()
{
	while (1)
	{
		FLAG = 1;
		CNT_A = 0;
		CNT_B = 0;
		KEY_CNT = 0;
		LINE = 0;
		ROW = 0;
		VAL = 0;
		P1_0 = 1;
		LED_BIT_1 = 0;
		LED_BIT_2 = 0;
		LED_BIT_3 = 0;
		LED_BIT_4 = 0;
		LED_BIT_5 = 0;
		LED_BIT_6 = 0;
		LED_BIT_7 = 0X79;
		LED_BIT_8 = 0X73;
	
		KEY[0] = 0;
		KEY[1] = 0;
		KEY[2] = 0;
		KEY[3] = 0;
		KEY[4] = 0;
		KEY[5] = 0;
	
		WORD[0] = 6;
		WORD[1] = 5;
		WORD[2] = 4;
		WORD[3] = 3;
		WORD[4] = 2;
		WORD[5] = 1;
	
		TMOD = 1;
		TH0 = (65536-700) / 256;
		TL0 = (65536-700) % 256;	
		IE = 0X82;
	
		do
		{
			DISP();
	
			LSCAN();
		}while(1 == FLAG);
	}
}

⌨️ 快捷键说明

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