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

📄 keyboard_check.c

📁 一些用于电话管理的pc机下位机程序
💻 C
字号:
//本程序用于键盘的识别,通过编程,使按下K1键时第一个数码管显示1,按下K2键时第一
//个数码管上显示2,按下K3键时第一个数码管上显示3,按下K4键时第一个数码管上显示4,
//对键盘的扫描采用查询方式

#include	"p18f458.h"

static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
volatile unsigned char data; 
unsigned int i;
unsigned char j=0;

/*初始化子程序*/
void	initial()
{
	TRISA=0x00;					/*A口设置为输出*/
	TRISB=0XF0;					/*RB1输出,RB4输入*/
	TRISC=0x00;					/*SDO引脚为输出,SCK引脚为输出*/
	TRISE=0x00;					/*E口设置为输出*/
	INTCON=0x00;				/*关闭所有中断*/
	SSPCON1=0x30;				/*SSPEN=1;CKP=1,FOSC/4*/
	SSPSTAT=0xC0;				/*时钟下降沿发送数据*/
	PIR1=0;						/*清除SSPIF标志*/	
}

/*软件延时子程序*/
void	DELAY()
{
	for(i = 6553; --i ;)
	continue;
}

/*键扫描子程序*/
int		KEYSCAN()
{	
	PORTBbits.RB1=0;
	PORTAbits.RA3=0;
	PORTE=0;					/*将K1,K2,K3,K4四条列线置0*/
	while(1)
	{
		if (PORTBbits.RB4==0)
		break;
	}							/*等待有键按下,RB4为0表示有键按下*/
	DELAY();					/*软件延时*/
	if (PORTBbits.RB4==0)
		KEYSERVE();				/*如果仍有键按下,则调用键服务子程序*/
	else	j=0x00;					/*如果为干扰,则令返回值为0*/
	return(j);
}
	
/*键服务子程序*/
int		KEYSERVE()
{
	PORTBbits.RB1=0;				/*K1,K2置低电平,K3,K4置高电平*/
	PORTAbits.RA3=0;				/*RB4为0,表示按键为K1,K2中的一个*/
	PORTE=3;					/*RB4为1,表示按键为K3,K4中的一个*/
	if(PORTBbits.RB4==0)
	{
		PORTBbits.RB1=0;			/*K1置低电平,K2置高电平*/
		PORTAbits.RA3=1;			/*RB4为0,表示按键为K1;RB4为1,表示按键为K2*/
		if(PORTBbits.RB4==0)	j=0X01;
		else	{j=0X02;	PORTAbits.RA3=0;}
	}
	else
	{
		PORTEbits.RE0=0;			/*K3置低电平,K4置高电平*/
		PORTEbits.RE1=1;			/*RB4为0,表示按键为K3;RB4为1,表示按键为K4*/
		if(PORTBbits.RB4==0)	j=0X03;
		else	{j=0X04;	PORTEbits.RE1=0;}		
	}
	while(1)
	{
		if(PORTBbits.RB4==1) break;	/*为了防止一次按键多次识别,等键松开才返回*/
	}
	return(j);
}

/*显示子程序*/
void	SPILED(char data)
{
	PORTAbits.RA5=0;				/*LACK送低电平,为锁存做准备*/
	SSPBUF=data;					/*启动发送*/
	do
	{
	;
	}while(PIR1bits.SSPIF==0);		/*等待发送完毕*/
	PIR1bits.SSPIF=0;				/*清除SSPIF标志*/
	PORTAbits.RA5=1;				/*最后给锁存信号,代表显示任务完成*/
}

/*主程序*/
main()
{
	initial();						/*系统初始化*/		
	while(1)
	{
		KEYSCAN();
		if(j!=0)					/*如果j=0,证明先前的按键为干扰,则不予显示*/
		{
			data=table[j];
			SPILED(data);			/*发送显示段码显示*/
		}
  	} 
}

⌨️ 快捷键说明

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