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

📄 main.c

📁 基于PIC单片机的网络监控键盘控制 同时附加了一个本人制作的常用PIC单片机初始化头文件
💻 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 + -