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

📄 keyled.c

📁 2407例程.rar
💻 C
字号:
/************************************************************************/
/*        该程序用于键盘的识别,按键情况通过LED表示                     */
/*                                                                       */  
/*     修改日期:    2005.3.23                                           */
/*     修改人:      杨广龙                                              */
/*************************************************************************/
#include  "register.h" 
void initial()
{
  	asm(" setc SXM ");				// 抑制符号位扩展
	asm(" clrc OVM ");				// 累加器中结果正常溢出
	asm(" clrc CNF ");				// B0被配置为数据存储空间
	*SCSR1=0x81FE;				// CLKIN=6M,CLKOUT=4*CLKIN=24M
	*WDCR=0x6f;				// 不使能看门狗,因为SCSR2中的WDOVERRIDE
		    	 					// 即WD保护位复位后的缺省值为1,故可以用
		      					// 软件禁止看门狗
	*IMR=0x0000;					// 禁止所有中断
	*IFR=0x0FFFF;					// 清除全部中断标志,"写1清0"
	*MCRA=*MCRA&0x0FF;		// IOPB端口配置为一般的I/O功能
	*PBDATDIR=*PBDATDIR|0x0FF00;	// IOPB端口设置为输出方式
	*MCRC=*MCRC&0x03FF;			// IOPF2端口和IOPF3~6配置为一般的I/O功能
	*PFDATDIR=*PFDATDIR|0x0400;	// IOPF2端口为输出端口,IOPF3-IOPF6为输入端口  
	*PBDATDIR=*PBDATDIR&0x0FF00; // 熄灭全部的LED灯
	*PFDATDIR=*PFDATDIR|0x0404;	// IOPF2 设置为输出方式,且IOPF2=1
	*PFDATDIR=*PFDATDIR&0x0FFFB;	// IOPF2=0
	// 以上的操作产生一个脉冲,使LED全部熄灭	
}    
//  屏蔽中断子程序
void  inline  disable() 
{
	asm(" setc INTM ");
}
int  keyscan( )
{
	int k,j;						// 定义局部变量
	k=*PFDATDIR&0x0078;			// 读入键盘状态并屏蔽掉相应的位
	if(k==0x0078) k=0;
	else k=1;					// 有键按下,则k=1
	if(k == 1)						// 若无键按下,则直接返回
	{
		for(j=30000;j>0;j--)j=j;	// 若有键按下,则延时消抖动
		k=*PFDATDIR&0x0078;		// 读入键盘状态并屏蔽掉相应的位
		if(k==0x0078)k=0;
		else k=1;				// 有还有键按下,则k=1
	}
	return(k);						// 返回K值
}
int  keyserver( )						// 键服务子程序
{	
	int k;						// 定义局部变量
	k=*PFDATDIR&0x0078;			// 读入键盘状态并屏蔽掉相应的位
	switch(k)
	{
        case 0x0070: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0001; break;  // 若按下K1键,则显示"1"
		case 0x0068: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0002; break;  // 若按下K2键,则显示"2"
		case 0x0058: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0003; break;  // 若按下K3键,则显示"3"
		case 0x0038: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0004; break;  // 若按下K4键,则显示"4"
		default:*PBDATDIR=*PBDATDIR;
	}
	*PFDATDIR=*PFDATDIR|0x0404;	// IOPF2 设置为输出方式,且IOPF2=1
	*PFDATDIR=*PFDATDIR&0x0FFFB;	// IOPF2=0
	// 以上给一个脉冲,使B端口的值显示出来
}	
main( )
{	
	disable();						// 屏蔽所有中断
	initial();
	while(1)
   {
		int i;					// 定义局部变量
	i=0;	
		i=keyscan();				// 键盘扫描,若有键按下,则返回值为"1",否则返回值为"0"
		if(i==1)  keyserver();		// 如果有键按下,则进行键服务程序
   }
}
// 直接返回中断服务子程序         
void interrupt nothing()
{
	return;
}

⌨️ 快捷键说明

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