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

📄 sh202.c

📁 初学者开始学单片机不知从何入手
💻 C
字号:
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
void delays(void);
uchar kbscan(void);
main()
{

	bit CRT; 						/*密码正确标志,=1密码正确*/
	bit PRT; 						/*密码部分输入标志,=1密码部分输入*/
	uchar COUNT; 					/*计数单元,存放密码正确的位数*/
	uchar KEY; 					/*被按下的键的编码*/

	CRT=0;
	PRT=0;
	COUNT=0;
KEY=kbscan();					/*键扫描函数*/
delays();						/*键消抖的延时函数*/
	switch (KEY)
	{
		case 0xb7: 				/*0键*/
		{
			if (CRT) 
			{
				
			}
			else								/*密码不正确时*/
			{
				if (PRT) 						/*部分密码正确时*/
				{
					COUNT=COUNT+1; 			/*密码正确的位数加1*/
					if (COUNT==3)				/*密码所有位都正确*/
					{
						CRT=1;
						PRT=0;
						COUNT=0;
					}					
				}
			}
		}; break;				
		case 0x7e: 								/*1键*/
		{
			if (CRT) 
			{
									/*密码正确时的操作内容*/
			}
			else 								/*密码不正确时*/
			{
				PRT=0;
				COUNT=0;
			}
		}; break;
		case 0xbe: 							/*2键*/
		{
			if (CRT) 
			{
								/*密码正确时的操作内容*/
			}
			else 							/*密码不正确时*/
			{
				if (PRT) 					/*部分密码正确时,说明密码错误*/ 
				{
					PRT=0;
					COUNT=0;
				}
				else 						/*密码正确位数为0时,说明密码第一位正确*/
				{
					PRT=1;
					COUNT=1;
				}
			}
		}; break;				
		case 0xd7: 						/*#键*/
		{
			if (CRT) 						/*密码正确时,锁定键盘*/
			{
				CRT=0;
				PRT=0;
				COUNT=0;
			}
		}; break;
					
		
	}
}

// 键消抖的延时函数
void delays(void)
{
uchar i;
for(i=300;i>0;i--);
}

//  kbscan(void) 键扫描函数
uchar kbscan(void)  
{
uchar sccode,recode;
P1=0xf0;								/*发全"0"行扫描码,列线输入*/
if((P1&0xf0)!=0xf0)						/*若有键按下*/
{
delays();    						/*延时去抖动*/
if((P1&0xf0)!=0xf0)
{
sccode=0xfe;					/*逐行扫描初值*/
while((sccode&0x10)!=0)
{
P1=sccode;					/*输出行扫描码*/
if((P1&0xf0)!=0xf0)    		/*本行有键按下*/
{
recode=(P1&0xf0)|0x0f;
return((~sccode)+(~recode)); /*返回特征字节码*/
}
else sccode=(sccode<<1)|0x01;	/*行扫描码左移一位*/
}
}
}
return(0);								/*无键按下,返回值为0*/
} 


⌨️ 快捷键说明

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