亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f320_usb0_mouse.c

?? usb鼠標源程序
?? C
字號:
//-----------------------------------------------------------------------------
// F320_USB0_Mouse.c
//-----------------------------------------------------------------------------
// Copyright 2005 Silicon Laboratories, Inc.
// http://www.silabs.com
//
// Program Description:
//
// Source file for routines that mouse data.
//
//
// How To Test:    See Readme.txt
//
//
// FID:            3XX000041
// Target:         C8051F320
// Tool chain:     Keil C51 7.50 / Keil EVAL C51
//                 Silicon Laboratories IDE version 2.6
// Command Line:   See Readme.txt
// Project Name:   F3xx_MouseExample
//
// Release 1.0
//    -Initial Revision (PD)
//    -07 DEC 2005
//


#include "c8051f3xx.h"
#include "F3xx_USB0_Mouse.h"
#include "F3xx_USB0_InterruptServiceRoutine.h"
#include "F3xx_USB0_Register.h"

//-----------------------------------------------------------------------------
// Definitions
//-----------------------------------------------------------------------------

#define SYSCLK             12000000    // SYSCLK frequency in Hz

// USB clock selections (SFR CLKSEL)
#define USB_4X_CLOCK       0x00        // Select 4x clock multiplier, for USB
#define USB_INT_OSC_DIV_2  0x10        // Full Speed
#define USB_EXT_OSC        0x20
#define USB_EXT_OSC_DIV_2  0x30
#define USB_EXT_OSC_DIV_3  0x40
#define USB_EXT_OSC_DIV_4  0x50

// System clock selections (SFR CLKSEL)
#define SYS_INT_OSC        0x00        // Select to use internal oscillator
#define SYS_EXT_OSC        0x01        // Select to use an external oscillator
#define SYS_4X_DIV_2       0x02

//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F32x
//-----------------------------------------------------------------------------

sfr16 TMR2RL   = 0xca;                 // Timer2 reload value
sfr16 TMR2     = 0xcc;                 // Timer2 counter


//-----------------------------------------------------------------------------
// Local Definitions
//-----------------------------------------------------------------------------

#define Sw1 0x01                       // These are the port2 bits for Sw1
#define Sw2 0x02                       // and Sw2 on the development board

//-----------------------------------------------------------------------------
// Global Variable Declarations
//-----------------------------------------------------------------------------
signed char MOUSE_VECTOR;
unsigned char MOUSE_AXIS;
unsigned char MOUSE_BUTTON;

unsigned char IN_PACKET[4];

//-----------------------------------------------------------------------------
// Local Variable Declarations
//-----------------------------------------------------------------------------

unsigned char SWITCH_1_STATE = 0;      // Indicate status of switch
unsigned char SWITCH_2_STATE = 0;      // starting at 0 == off

unsigned char TOGGLE1 = 0;             // Variable to make sure each button
unsigned char TOGGLE2 = 0;             // press and release toggles switch


//-----------------------------------------------------------------------------
// Local Function Prototypes
//-----------------------------------------------------------------------------

void Sysclk_Init (void);
void Port_Init (void);
void USB0_Init (void);
void Timer_Init (void);
void ADC0_Init (void);
void Delay (void);

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer2_ISR
//-----------------------------------------------------------------------------
//
// Called when Timer 2 overflows, check to see if switch is pressed,
// then watch for release.
//
//-----------------------------------------------------------------------------

void Timer2_ISR (void) interrupt 5
{
   if (!(P2 & Sw1))                    // Check for switch #1 pressed
   {
      if (TOGGLE1 == 0)                // Toggle is used to debounce switch
      {                                // so that one press and release will
      								   // toggle the state of the switch sent
         SWITCH_1_STATE = ~SWITCH_1_STATE;
         TOGGLE1 = 1;                  // to the host
      }
   }
   else TOGGLE1 = 0;                   // Reset toggle variable

   SWITCH_2_STATE = (P2 & Sw2);

   TF2H = 0;                           // Clear Timer2 interrupt flag
}

//-----------------------------------------------------------------------------
// Adc_ConvComplete_ISR
//-----------------------------------------------------------------------------
// Called after a conversion of the ADC has finished
// - Updates the appropriate variable for either potentiometer or temperature
//   sensor
// - Switches the Adc multiplexor value to switch between the potentiometer and
//   temp sensor
//
//-----------------------------------------------------------------------------
void Adc_ConvComplete_ISR (void) interrupt 10
{

   AD0INT = 0;                         // acknowledge interrupt

   MOUSE_VECTOR = ADC0H - 128;         // save potentiometer value, and add
                                       // offset

   MOUSE_VECTOR = MOUSE_VECTOR / 16;   // reduce magnitude of value

   // Switch 1 functions to toggle between movement along the
   // x axis and movement along the y axis
   if (SWITCH_1_STATE)
   {
      MOUSE_AXIS = Y_Axis;
   }
   else
   {
      MOUSE_AXIS = X_Axis;
   }

   // Switch 2 operates as the left mouse button
   if(SWITCH_2_STATE)
   {
      // button not pressed
      MOUSE_BUTTON = 0;
   }
   else
   {
      // button pressed
      MOUSE_BUTTON = 0x01;
   }

}


//-----------------------------------------------------------------------------
// Initialization Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// System_Init(void)
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// This top-level initialization routine calls all support routine.
//
// ----------------------------------------------------------------------------
void System_Init (void)
{
   PCA0MD &= ~0x40;                    // Disable Watchdog timer
   Sysclk_Init ();                     // initialize system clock
   Port_Init ();	                     // configure cross bar
   Timer_Init ();                      // configure timer
   ADC0_Init ();
}

//-----------------------------------------------------------------------------
// USB0_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Initialize USB0
// - Enable USB0 interrupts
// - Enable USB0 transceiver
// - Enable USB0 with suspend detection
//
// ----------------------------------------------------------------------------

void USB0_Init (void)
{

   POLL_WRITE_BYTE (POWER, 0x08);      // Force Asynchronous USB Reset
   POLL_WRITE_BYTE (IN1IE, 0x07);      // Enable Endpoint 0-1 in interrupts
   POLL_WRITE_BYTE (OUT1IE,0x07);      // Enable Endpoint 0-1 out interrupts
   POLL_WRITE_BYTE (CMIE, 0x07);       // Enable Reset, Resume, and Suspend
                                       // interrupts
   USB0XCN = 0xE0;                     // Enable transceiver; select full speed
   POLL_WRITE_BYTE (CLKREC,0x80);      // Enable clock recovery, single-step
                                       // mode disabled

   EIE1 |= 0x02;                       // Enable USB0 Interrupts

                                       // Enable USB0 by clearing the USB
   POLL_WRITE_BYTE (POWER, 0x01);      // Inhibit Bit and enable suspend
                                       // detection

}


//-----------------------------------------------------------------------------
// Sysclk_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Initialize system clock to maximum frequency.
//
// ----------------------------------------------------------------------------
void Sysclk_Init (void)
{
#ifdef _USB_LOW_SPEED_

   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector

   CLKSEL  = SYS_EXT_OSC;              // Select System clock
   CLKSEL |= USB_INT_OSC_DIV_2;        // Select USB clock
#else
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector

   CLKMUL  = 0x00;                     // Select internal oscillator as
                                       // input to clock multiplier

   CLKMUL |= 0x80;                     // Enable clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   CLKMUL |= 0xC0;                     // Initialize the clock multiplier
   Delay();                            // Delay for clock multiplier to begin

   while(!(CLKMUL & 0x20));            // Wait for multiplier to lock
   CLKSEL  = SYS_INT_OSC;              // Select system clock
   CLKSEL |= USB_4X_CLOCK;             // Select USB clock
#endif  /* _USB_LOW_SPEED_ */
}

//-----------------------------------------------------------------------------
// Port_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Configure the Crossbar and GPIO ports.
//
// ----------------------------------------------------------------------------
void Port_Init (void)
{
   P1MDIN   = 0x7F;                    // Port 1 pin 7 set as analog input
   P0MDOUT |= 0x0F;                    // Port 0 pins 0-3 set high impedence
   P1MDOUT |= 0x0F;                    // Port 1 pins 0-3 set high impedence
   P2MDOUT |= 0x0C;                    // Port 2 pins 0,1 set high impedence
   P1SKIP   = 0x80;                    // Port 1 pin 7 skipped by crossbar
   XBR0     = 0x00;
   XBR1     = 0x40;                    // Enable Crossbar
}

//-----------------------------------------------------------------------------
// Timer_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Timer 2 reload, used to check if switch pressed on overflow and
// used for ADC continuous conversion
//
// ----------------------------------------------------------------------------
void Timer_Init (void)
{
   TMR2CN  = 0x00;                     // Stop Timer2; Clear TF2;

   CKCON  &= ~0xF0;                    // Timer2 clocked based on T2XCLK;
   TMR2RL  = 0;                        // Initialize reload value
   TMR2    = 0xffff;                   // Set to reload immediately

   ET2     = 1;                        // Enable Timer2 interrupts
   TR2     = 1;                        // Start Timer2
}

//-----------------------------------------------------------------------------
// ADC0_Init
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// - Configures ADC for single ended continuous conversion or Timer2
//
// ----------------------------------------------------------------------------
void ADC0_Init (void)
{
   REF0CN = 0x0E;                      // Enable voltage reference VREF
   AMX0P = 0x07;                       // switch to potentiometer
   ADC0CF = 0xFC;                      // place ADC0 in left-adjusted mode
   AMX0N = 0x1F;                       // Single ended mode(negative input=gnd)

   ADC0CF = 0xFC;                      // SAR Period 0x1F, Left adjusted output

   ADC0CN = 0xC2;                      // Continuous converion on timer 2
                                       // overflow with low power tracking
                                       // mode on

   EIE1 |= 0x08;                       // Enable conversion complete interrupt
}


//-----------------------------------------------------------------------------
// Delay
//-----------------------------------------------------------------------------
//
// Return Value - None
// Parameters - None
//
// Used for a small pause, approximately 80 us in Full Speed,
// and 1 ms when clock is configured for Low Speed
//
// ----------------------------------------------------------------------------
void Delay (void)
{
   int x;
   for (x = 0; x < 500; x)
      x++;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品国产精品毛片| 欧美一区二区三区日韩| 日韩一区二区三区电影在线观看 | 中文字幕一区二区三区在线不卡| 国产精品久久久久影院| 青青草国产精品亚洲专区无| 国产在线观看免费一区| 欧美巨大另类极品videosbest | 中文字幕亚洲精品在线观看| 日产欧产美韩系列久久99| 成人性色生活片免费看爆迷你毛片| 欧美电影一区二区三区| 国产精品伦理在线| 国产老肥熟一区二区三区| 欧美日韩国产综合视频在线观看 | 91精品国产手机| **网站欧美大片在线观看| 国产在线国偷精品免费看| 91精品国产高清一区二区三区| 自拍偷拍国产亚洲| 大胆欧美人体老妇| 久久久精品国产免大香伊| 蜜臀久久99精品久久久久久9 | 激情小说亚洲一区| 91精品啪在线观看国产60岁| 亚洲国产成人av网| 在线亚洲人成电影网站色www| 国产精品午夜春色av| 国产黑丝在线一区二区三区| 欧美xxxxxxxxx| 琪琪一区二区三区| 777午夜精品免费视频| 亚洲成人激情综合网| 在线亚洲免费视频| 美女国产一区二区| 欧美精品高清视频| 调教+趴+乳夹+国产+精品| 欧美日韩在线综合| 三级不卡在线观看| 精品剧情在线观看| 国产在线视视频有精品| 久久婷婷成人综合色| 韩国av一区二区三区在线观看| 日韩欧美一级二级| 国产一区二区免费视频| 中文字幕高清不卡| 91一区在线观看| 亚洲综合区在线| 欧美精选午夜久久久乱码6080| 日韩精品一卡二卡三卡四卡无卡 | 92精品国产成人观看免费| 1024成人网| 欧美另类变人与禽xxxxx| 日韩在线一区二区三区| 欧美精品一区二区蜜臀亚洲| 国产精品亚洲午夜一区二区三区| 国产欧美一区二区精品忘忧草 | 欧美唯美清纯偷拍| 日日摸夜夜添夜夜添精品视频| 日韩一区二区电影在线| 国产精品一级片在线观看| 国产精品欧美经典| 一本到不卡免费一区二区| 亚欧色一区w666天堂| 精品国产伦一区二区三区观看方式 | 国产久卡久卡久卡久卡视频精品| 国产女主播一区| 日本电影欧美片| 久久精品二区亚洲w码| 亚洲国产高清不卡| 欧美日免费三级在线| 久久99精品国产麻豆婷婷洗澡| 中文字幕欧美日韩一区| 欧美日韩精品免费| 国精产品一区一区三区mba桃花| 亚洲欧美乱综合| 精品免费国产二区三区| 在线观看网站黄不卡| 精品伊人久久久久7777人| 亚洲国产精品传媒在线观看| 在线播放欧美女士性生活| 国产高清在线精品| 日本女优在线视频一区二区| 中文字幕一区二区三区在线观看 | 欧美成人精品二区三区99精品| 91天堂素人约啪| 国产真实乱偷精品视频免| 亚洲免费观看高清完整版在线观看 | 夜夜精品视频一区二区| 久久久久久久久久久久久夜| 欧美视频日韩视频| kk眼镜猥琐国模调教系列一区二区| 日韩精品欧美成人高清一区二区| 国产精品素人一区二区| 欧美成人精品1314www| 欧美亚洲动漫精品| 成人福利电影精品一区二区在线观看 | 久久一夜天堂av一区二区三区| 在线视频你懂得一区| 成人综合在线观看| 免费高清在线一区| 亚洲va欧美va天堂v国产综合| 国产精品久久福利| 日本一区免费视频| 精品国产91亚洲一区二区三区婷婷| 欧美三级日韩三级| 欧美性感一类影片在线播放| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 成人动漫在线一区| 夜夜嗨av一区二区三区网页 | 99久久99久久精品免费看蜜桃| 国产一区二三区| 久久99久久精品| 青青草国产成人99久久| 丝袜美腿高跟呻吟高潮一区| 一区二区三区四区国产精品| **欧美大码日韩| 亚洲你懂的在线视频| 一区二区视频在线看| 亚洲欧洲在线观看av| 国产精品不卡在线观看| 国产精品美女久久久久高潮| 亚洲欧洲成人自拍| 亚洲精品中文字幕在线观看| 亚洲日本电影在线| 亚洲尤物在线视频观看| 亚洲国产va精品久久久不卡综合| 一区二区在线观看视频| 一区二区三区精密机械公司| 亚洲一区二区三区国产| 无吗不卡中文字幕| 久99久精品视频免费观看| 激情国产一区二区| 东方aⅴ免费观看久久av| thepron国产精品| 在线一区二区三区四区| 欧洲精品一区二区| 欧美在线视频全部完| 911国产精品| 久久你懂得1024| 中文字幕一区二区三区视频| 亚洲黄色av一区| 日本午夜精品视频在线观看| 国产精品一区二区三区99| 成人毛片视频在线观看| 在线观看国产精品网站| 欧美精品在线观看一区二区| 精品国产成人在线影院| 国产精品女同一区二区三区| 一区二区三区四区不卡在线| 丝袜诱惑制服诱惑色一区在线观看| 麻豆一区二区三区| 高清国产一区二区三区| 欧洲人成人精品| 国产午夜三级一区二区三| 亚洲美女偷拍久久| 麻豆91在线观看| 91影视在线播放| 日韩欧美视频一区| 一区二区三区鲁丝不卡| 韩国中文字幕2020精品| 欧美性猛交xxxxxxxx| 国产欧美日韩精品a在线观看| 亚洲国产综合色| 久久不见久久见中文字幕免费| 91麻豆高清视频| 欧美精品一区二区三区视频| 尤物在线观看一区| 国产成人av一区二区三区在线观看| 在线观看不卡一区| 国产欧美一区二区精品性色| 丝袜诱惑亚洲看片| 色老汉av一区二区三区| 久久免费视频色| 亚洲va欧美va人人爽| 92精品国产成人观看免费| 久久久久久日产精品| 日韩制服丝袜先锋影音| 色综合欧美在线视频区| 久久久久久亚洲综合影院红桃| 日韩av成人高清| 欧美视频一区二区三区在线观看| 欧美激情综合五月色丁香 | 色综合久久99| 久久久欧美精品sm网站| 日本中文字幕一区二区视频| 欧洲精品一区二区三区在线观看| 国产精品国产三级国产三级人妇| 免费成人av在线| 欧美精品少妇一区二区三区| 亚洲九九爱视频| 99久久综合精品| 国产精品美女一区二区在线观看| 麻豆成人久久精品二区三区红| 欧美日韩国产高清一区二区三区| 国产精品国产三级国产专播品爱网 | 国产精品自在在线| 亚洲精品一区二区三区蜜桃下载 | 1024成人网| 91免费看`日韩一区二区|