打造自己的专属鼠标——鼠标DIY教程(五)
作者:论坛管理员|发布时间:2014-12-02 12:04:00
[摘要]首先说明一下,按照上次列出的连接图,我们是有RC1和RC2这两个接口空余的,原本我是将RC1做成了一个调节全彩LED的输出,但是考虑到教程的性质,到时还要将这个接口改成读取光学滚轮,那么我就把这个灯光效果的部分去 ...
六、18f14k50 RTOS鼠标固件
首先说明一下,按照上次列出的连接图,我们是有RC1和RC2这两个接口空余的,原本我是将RC1做成了一个调节全彩LED的输出,但是考虑到教程的性质,到时还要将这个接口改成读取光学滚轮,那么我就把这个灯光效果的部分去掉,留下基础的功能。整体如下图所示:
[img]http://public.blu.livefilestore.com/y1pO12l_Hs_1lXqIKKf0l1ZtdaTRak2BvfT9WVPfYhC5kOnGgJr6eUro9JbNDOpSudgIKdwgq6hQTz9YvTfquV--w/T43.jpg?psid=1[/img]
注意: 除GPL发布声明的代码外, 其余程序均涉及私有代码库,不能视为开源,这些代码包括以下的鼠标固件代码,只能用于个人学习用途,商业使用需经版权人的授权。
#include <18F14k50.h>
#fuses HS,NOFCMEN,NOBROWNOUT,NOWDT,BORV30,NOPUT,NOCPD,STVREN,NOXINST,NOWRT,NOWRTD,NOWRTC,WDT32768,NOIESO,NOEBTR,NOEBTRB,NOMCLR,NOPROTECT,NOCPB,NOWRTB,CPUDIV1,USBDIV1,PLLEN,NOHFOFST,NOLVP
#use delay(clock=48000000)
#define USB_CONFIG_HID_TX_SIZE 64 // HID每次接收发送多少字节
#define USB_CONFIG_HID_RX_SIZE 64
#use rtos(timer=0,minor_cycle=150us)
#include //Microchip PIC18Fxx5x hardware layer for usb.c
#include "usb_hid_mouse.h" //USB Configuration and Device descriptors for this UBS device
//将附件中的usb_hid_mouse.h和主程序文件放一起
#include //handles usb setup tokens and get descriptor reports
//#include // 我们暂时先不用bootloader,这行先注释掉
#include
#include
//Global Var
#define CNCS PIN_C6 //---------定义控制A3080的几个脚
#define NPD PIN_C5
#define RESET PIN_C4
signed int8 DeltaX; //----------------存放读取出来的A3080坐标数据
signed int8 DeltaY;
signed int8 SumX;
signed int8 SumY;
//------------------------------------------
//--------------------------------------polling rate var
int PollCount=1;
int PollingRate=1;
int Squal; //----------------------存放 Squal值
int16 Lcount;
int16 Lcount2;
int16 Rcount;
int16 Rcount2;
int16 Mcount;
int16 Mcount2;
int8 BLPressed;
int8 BRPressed;
int8 BMPressed;
int8 out_data2[4];
char out_data[64];
char in_data[64];
int8 ENStat;
#byte Portb=0xF81 //-----------------这个有点多余, P5=PIN_C5, P7=PIN_C7,直接引用
//可以了,当时是为了方便引用吧。
#bit P5=PortB.5
#bit P7=PortB.7
#task(rate=600us,max=150us) //定义RTOS各个任务
void ReadButton( );
#task(rate=300us,max=150us)
void ReadMotion();
#task(rate=1050us,max=150us)
void UsbTransit ( );
#task(rate=9750us,max=150us)
void HidCom();
[责任编辑:'']