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

📄 keyboard1.c

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 C
字号:
#include <e:\app\door\soft0814\main.h>
#include <e:\app\door\soft0814\keyboard.h>
#include <e:\app\door\soft0814\MfRc500.h>
#include <iom128v.h>
#include <macros.h>
#include <eeprom.h>
extern unsigned char key_pw[6];
extern unsigned char oldkey_pw[6];
extern unsigned int keycount;
extern unsigned char T2IR;

unsigned char scankey(void)
{
 	 unsigned char keyc;
	 DDRC=0xff;
 	 SET_KEY0();
	 SET_KEY1();
	 SET_KEY2();
	 SET_KEY3();
	 CLEAR_KEY4();
	 CLEAR_KEY5();
	 CLEAR_KEY6();
	 DDRA=PORTA=0x0;
	 delay_us(100);
	 keyc=PINC;
	 keyc=keyc<<1;
	 if(keyc==0x1E)
	 return 1;
	 else
	 return 0;
}
unsigned char keyvalue1(void)
{
 	unsigned char key1,value;
	DDRC=0xFF;
	CLEAR_KEY0();
	SET_KEY1();
	SET_KEY2();
	SET_KEY3();
	
	SET_KEY4();
	SET_KEY5();
	SET_KEY6();
	DDRC=PORTC=0;
	delay_us(100);
	key1=PINC;
	key1=key1<<1;
	if(key1!=0xfc)
	{
	 	delay_ms(18);
		key1=PINC;
		key1=key1<<1;
		if(key1!=0xfc)
		{
		 	switch(key1)
			{
//	    	 	case 0xfc:
//				value=0xff;
//				break;
				case 0xdc:       //  * keyvalue
				value=0x0a;      //  * key
				break;
				case 0xbc:      //   0 keyvalue       
				value=0x0;      //   0 key
				break;
				case 0x7c:      //   # keyvalue
				value=0x0b;     //   # key
				break;
				default:
				value=0xff;
				break;
			}
			return value;
		}
		else return 0xFF;
	}
	else return 0xFF;
}
unsigned char keyvalue2(void)
{
 	unsigned char key1,value;
	DDRC=0xFF;
	SET_KEY0();
	CLEAR_KEY1();
	SET_KEY2();
	SET_KEY3();
	
	SET_KEY4();
	SET_KEY5();
	SET_KEY6();
	DDRC=PORTC=0;
	delay_us(100);
	key1=PINC;
	key1=key1<<1;
	if(key1!=0xfa)
	{
	 	delay_ms(20);
		key1=PINC;
		key1=key1<<1;
		if(key1!=0xfa)
		{	
			switch(key1)
			{
//	    	 	case 0xfa:
//				value=0xff;
//				break;
				case 0xda:         // 7 keyvalue
				value=0x07;        // 7 key
				break;
				case 0xba:         //  8 keyvalue
				value=0x08;        //  8 key
				break;
				case 0x7a:         // 9 keyvalue
				value=0x09;        // 9 key
				break;
				default:
				value=0xff;
				break;
			}
			return value;
		}
		else return 0xFF;
	}
	else return 0xFF;
}
unsigned char keyvalue3(void)
{
 	unsigned char key1,value;
	DDRC=0xFF;
	SET_KEY0();
	SET_KEY1();
	CLEAR_KEY2();
	SET_KEY3();
	
	SET_KEY4();
	SET_KEY5();
	SET_KEY6();
	DDRC=PORTC=0;
	delay_us(100);
	key1=PINC;
	key1=key1<<1;
	if(key1!=0xf6)
	{
	 	delay_ms(20);
		key1=PINC;
		key1=key1<<1;
		if(key1!=0xf6)
		{
		 	switch(key1)
			{
//	    	 	case 0xf6:
//				value=0xff;
//				break;
				case 0xD6:         // 4 keyvalue
				value=0x04;        // 4 key
				break;
				case 0xb6:         // 5 keyvalue
				value=0x05;        // 5 key
				break;
				case 0x76:         // 6 keyvalue
				value=0x06;        // 6 key
				break;
				default:
				value=0xff;
				break;
			}
			return value;
		}
		else return 0xFF;
	}
	else return 0xFF;
}
unsigned char keyvalue4(void)
{
 	unsigned char key1,value;
	DDRC=0xFF;
	SET_KEY0();
	SET_KEY1();
	SET_KEY2();
	CLEAR_KEY3();
	
	SET_KEY4();
	SET_KEY5();
	SET_KEY6();
	DDRC=PORTC=0;
	delay_us(100);
	key1=PINC;
	key1=key1<<1;
	if(key1!=0xee)
	{
	 	delay_ms(20);
		key1=PINC;
		key1=key1<<1;
		if(key1!=0xee)
		{
		 	switch(key1)
			{
//	    	 	case 0xee:
//				value=0xff;
//				break;
				case 0xce:        // 1 keyvalue
				value=0x01;       // 1 key
				break;
				case 0xae:        // 2 keyvalue
				value=0x02;       // 2 key
				break;
				case 0x6e:        // 3 keyvalue
				value=0x03;       // 3 key
				break;
				default:
				value=0xff;
				break;
			}
			return value;
		}
		else return 0xFF;
	}
	else return 0xFF;
}
unsigned char keyvalue(void)
{
 		 unsigned char cc1,cc2,cc3,cc4;
		 cc1=keyvalue1();
		 cc2=keyvalue2();
		 cc3=keyvalue3();
		 cc4=keyvalue4();
		 if(cc4!=0xff)
		 return cc4;
		 if(cc3!=0xff)
		 return cc3;
		 if(cc2!=0xff)
		 return cc2;
		 if(cc1!=0xff)
		 return cc1;
		 return 0xff;
}

unsigned char get_pw(void)
{
 		unsigned char i=0,st,y;
		unsigned int j;
//		unsigned long ll=0;
		ll:
		while(i<6)
		  {
//		   if(ll>6500)
//		   goto ll0;
		   st=scankey();
		   if(st==0)
		   {
//		   for(j=0;j<20000;j++);
		   y=keyvalue();
		   if(y==0xff)
		   goto ll;
		   if(y>=0x0a)
		   goto ll;
//		   break;
		   key_pw[i]=y;
		   while(!scankey())
		   	{;}
//		   for(j=0;j<80000;j++);
//		   ll++;
		   i++;
		   }
		  } 
		  return 1;	
//		  ll0:
//		  return 0;
//		beep();
}
void delay1(unsigned char second)
{
 	 unsigned char i;
	 unsigned int j;
	 for(i=0;i<second;i++)
	 	for(j=0;j<65000;j++);
}		
unsigned char CMP_STRING(unsigned char *pt1,
                         unsigned char *pt2,unsigned char len)
{
     unsigned char ct;         // fixed lenth 4.
     for (ct=0;ct<len;ct++)
     {
         if (*pt1++ != *pt2++)
         return 1;
     }
     return 0;                 // equal return 0. 	
}
unsigned char CMP_PW(unsigned char password)
{
     unsigned char i;
	 for(i=0;i<6;i++)
	 oldkey_pw[i]=EEPROMread(password+i);
	 if(CMP_STRING(oldkey_pw,key_pw,6)==1)
	 return 1;
	 return 0;
}
void delay_us(int time)
{
 	 do
	 time--;
	 while(time>1);
}
void delay_ms(unsigned int time)
{
 	 while(time!=0)
	 	{
		 		delay_us(1000);
				time--;
		}
}	

⌨️ 快捷键说明

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