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

📄 keyboard.c

📁 基于H83664的手机模块TC35i短信收发系统 at_cmd01.c/LEDctrl.c/read_sms.c/rec_sms.c/send_sms.c/sms.c
💻 C
字号:
#include "init.h"

//unsigned int tab[]={0x77,0x7b,0x7d,0x7e,0x0b7,0x0bb,0x0bd,0x0be, 
//					0x0d7,0x0db,0x0dd,0x0de,0x0e7,0x0eb,0x0ed,0x0ee}; 	/*键码表*/ 
//unsigned char tab1[]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80, 
//						0x90,0x88,0x83,0x0c6,0x0a1,0x86,0x8e}; 	/*段码表*/ 


unsigned char tab[]={0x77,0x7b,0x7d,0x7e,
					0x0b7,0x0bb,0x0bd,0x0be, 
					0x0d7,0x0db,0x0dd,0x0de,
					0x0e7,0x0eb,0x0ed,0x0ee}; 	/*键码表*/ 

unsigned char tab1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D',0x0D,'F'};


//端口8的P80~P83与键盘的列Y4~Y1连,端口1的P14~P17与键盘的行X4~X0连

delay_key(unsigned long int i)
{	unsigned long int y;
	for (y=0;y<i;y++);
}

void keyboard(char key_num[], int len) 
{  
	unsigned char i,a,b;
	int k=0;

	for(;;) 
	{ 	
//列线输出低电平,并读入行线的值,判断是否有键按下
	a=0xf0;
	while( a==0xf0)
	{	IO.PCR8 = 0x0f;       	//端口8低4位输出
		IO.PDR8.BYTE=0;         //端口8输出列线低电平
		delay(1000);
        	IO.PCR1=0x0f;          	//端口1高4位输入,低4位输出 
		a=IO.PDR1.BYTE;		//读入行线值
		a=a&0xf0;               //保留高4位值
	};

		b=a; 			//如有键按下,则保存高4位

		a=a|0x0f; 		//高4位不变,低4位置1,准备从行线输出

        	IO.PCR1=0xff;          	//端口1高4位输出,低4位输出 		
		IO.PDR1.BYTE=a; 

		delay_key(1000);

		//读入列线的值
		IO.PCR8 = 0x00;        	//端口8低4位输入
//使用下面语句,读到的端口8的值与实际端口8的值不等
//	 	a=IO.PDR8.BYTE;
//		a=a&0x0f;                 //保留低4位的值
//		b=b|a; 			  //合并行线与列线的值

		delay_key(1000);
//改为:
		b=b|(IO.PDR8.BYTE&0x0f);   //合并行线与列线的值

		i=0; 			   //计数器清零
		a=tab[i]; 
		
//在键码表中查找相应的键码,并计算在段码中的位置
		a=tab[0];
		while (i<16&b!=a)
		{
			i++;
		 	a=tab[i];
		 }	
		
//		while(SCI3.SSR.BIT.TDRE != 1)
//		{       ; /*查询状态*/
//		
//		};
		
		a=tab1[i];
		if (i<16) {
//			TDR=a;           //向串口发送
			LCD(a);
 			key_num[k]=a;
			k++;
	    	if(k>=len || a == 0x0D) break;
		}

		delay_key(600000);			//延时,去抖动

//判断按键是否结束
	    a=0xd0;
		while( a!=0xf0)
	{	IO.PCR1=0x0f;           	//端口1高4位输入,低4位输出 
		a=IO.PDR1.BYTE;				//读入行线值
		a=a&0xf0;               	//保留高4位值
	};

		delay_key(600000);				//延时
	} 
}

⌨️ 快捷键说明

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