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

📄 main._c

📁 AVR单片机解码普通PC键盘码值
💻 _C
字号:
/******************************************************************************
//程序功能解码PC键盘,然后把键盘码值通过串口发送到串口显示
//晶振频率:16 MHZ
//单片机类型:maget 16
//编写日期:2009年3月13日      谢巍
*******************************************************************************/

#include <iom16v.h>
#include <macros.h>

#define IRsignal    (PINA&BIT(0))            //检测一个端口电平输入情况就要这样定义了
#define DIR_I       DDRA&=~BIT(0)  
#define DIR_O       DDRA|=BIT(0)

//定义全局变量
unsigned char    KB_HitFlag = 0;		    //按键标志
unsigned char    KB_UpFlag = 0;		    //抬起标志
unsigned char    KB_Buf=0;	//键盘缓冲区

//外部中断初始化函数
void init_devices(void)
{
 MCUCR = 0x02;    //INT1 的下降沿产生异步中断请求
 GICR  = 0x40;    //INT1中断使能
 TIMSK = 0x00;    //timer interrupt sources
 SEI();           //打开外部所有中断    两种表达方式是相同的
}

//外部中断1中断服务函数
#pragma interrupt_handler int1_isr:2
void int1_isr(void)
{
	static unsigned char cnt = 0;
	static unsigned char k=0;
	if ( cnt == 0 )		    //起始位
	{;
	}
	else if ( cnt <= 8 )	//数据位
	{
		k >>= 1;
		if (IRsignal==BIT(0)) 
		      k|= 0x80;
	}
	else	//校验位和停止位
	{;
	}
	cnt++;
	if ( cnt >= 11 )	    //一帧数据接收完毕
	{
		cnt = 0;
		if ( k == 0xF0 )	//抬起标志
		{
			KB_UpFlag = 1;
		}
		else
		{
			if ( KB_UpFlag )
			{
				KB_UpFlag = 0;
			}
			else
			{
				KB_Buf = k;
				k=0;
				KB_HitFlag = 1;

                put_c(KB_Buf);
	    	}
		}
	}        
}

void main()
{
 	 init_devices();
	 init_USART(); 
	 KB_Buf=0;
	 while(1)
	 {
	    ;
	 }
	
}

⌨️ 快捷键说明

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