📄 main._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 + -