📄 main.c
字号:
//********************************************/
// 2009.03.06
// MCU PIC16F73 f=5.068MHz
// 网络键盘
//
//********************************************/
#include <pic.h>
#include <stdio.h>
#include "Main.h"
#include "MyPIC16F73.h"
#define S_HEAD 0x80
#define S_ADDR 0x08
#define SCREENNUM 0x01 //屏幕数量
//******************************************
// 键值表
#define S_KEY_LEFT 0x0c //键值为:上
#define S_KEY_RIGHT 0x0d //键值为:下
//#define S_SCREEN_ONE 0x1b //单画面
//#define S_SCREEN_FOUR 0x1c //4画面
//#define S_SCREEN_EIGHT 0x1d //8画面
//#define S_SCREEN_SIXTEEN 0x1e //16画面
#define S_KEY_MULT 0X11
//*******************************************
//按键位置
#define KEY_LEFT 0b11000000
#define KEY_RIGHT 0b10100000
#define KEY_MULT 0b01100000
#define KEY_NOTHING 0b11100000
//**********************************************
//按键状态
#define DOWN 1
#define UP 0
main(void)
{ //uchar i,j;
Delay(0xFa); //延时1009us
Initial();
//Send232(0xcc);
KeyValue=KEY_NOTHING;
while(1)
{
CLRWDT();
}
}
//**************************************/
// 中断分类
//**************************************/
void interrupt INTER(void)
{
//TXREG=0xee;
if(TMR1IF==1)
{
TMR1IF=0;
TMR1ON=false;
bKey=0;
if(KeyOldState==(PORTB&0xe0)) //判断当前是否为干扰
{
switch(KeyOldState)
{
case KEY_LEFT:
if(KeyValue==KEY_NOTHING)
{
SendMsg(S_KEY_LEFT,DOWN);
KeyValue=KeyOldState; //存储键值
}
break;
case KEY_RIGHT:
if(KeyValue==KEY_NOTHING)
{
SendMsg(S_KEY_RIGHT,DOWN);
KeyValue=KeyOldState; //存储键值
}
break;
case KEY_MULT:
if(KeyValue==KEY_NOTHING)
{
SendMsg(S_KEY_MULT,DOWN);
KeyValue=KeyOldState; //存储键值
}
break;
case KEY_NOTHING:
switch(KeyValue)
{
case KEY_LEFT:
SendMsg(S_KEY_LEFT,UP);
KeyValue=KeyOldState; //存储键值
break;
case KEY_RIGHT:
SendMsg(S_KEY_RIGHT,UP);
KeyValue=KeyOldState; //存储键值
break;
case KEY_MULT:
SendMsg(S_KEY_MULT,UP);
KeyValue=KeyOldState; //存储键值
break;
default:
KeyValue=KEY_NOTHING;
break;
}
}
}
}
if(RBIF)
{
RBIF=0;
if(!bKey) //在200ms内不能有按键重复按下,即防止信号干扰
{
bKey=1;
KeyOldState=PORTB&0xe0; //取出3个按键的状态
TMR1H=0x9e; //延时等待200ms
TMR1L=0x58;
TMR1ON=true; //启动定时器1
}
}
}
void SendMsg(uchar KeyValue,uchar KeyState)
{
Send232(S_HEAD);
Send232(S_ADDR);
Send232(KeyValue);
Send232(KeyState);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -