我的觸摸屏驅(qū)動(dòng)源代碼_第1頁(yè)
我的觸摸屏驅(qū)動(dòng)源代碼_第2頁(yè)
我的觸摸屏驅(qū)動(dòng)源代碼_第3頁(yè)
我的觸摸屏驅(qū)動(dòng)源代碼_第4頁(yè)
我的觸摸屏驅(qū)動(dòng)源代碼_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、我的觸摸屏驅(qū)動(dòng)源代碼 /*C頭文件*/#include "au_types.h"#define  DEVICE_NAME         "tpanel"#define    IRQ_1              7#define    GPIO_1_PORT 

2、;       GPIO_1#define    GPIO_1_PORT_ADDR   GPIO_1_BASE/ 觸摸屏返回值結(jié)構(gòu)體typedef struct  uint32 pressure; uint32 x; uint32 y;TS_RET;/ 校準(zhǔn)值結(jié)構(gòu)體typedef struct int32 x; int32 y;TS_POINT;static   TS_POINT   T

3、sPoint10;#define  TS_IOC_MAGIC  0xd9#define  CALIBRATE   _IOW(TS_IOC_MAGIC, 1, sizeof(TsPoint)#define  CALIBRATE_START  _IOW(TS_IOC_MAGIC, 2, sizeof(uint8)/ 以下為觸摸屏控制器管腳設(shè)置#define   ADS7843_CSS()  writew(0xff, (GPIO_1

4、_PORT_ADDR + 0x200) / cs = 1 (p1.7)#define   ADS7843_CSC()  writew(0x00, (GPIO_1_PORT_ADDR + 0x200) / cs = 0#define   ADS7843_DCLKS()  writew(0xff, (GPIO_1_PORT_ADDR + 0x40)  / dclk = 1(p1.4)#define   ADS7843_DCLKC()  wr

5、itew(0x00, (GPIO_1_PORT_ADDR + 0x40)  / dclk = 0#define   ADS7843_DINS()  writew(0xff, (GPIO_1_PORT_ADDR + 0x20)  / din = 1(p.3)#define   ADS7843_DINC()  writew(0x00, (GPIO_1_PORT_ADDR + 0x20)  / din = 0#define   ADS7843

6、_DOUTR()  readw(GPIO_1_PORT_ADDR + 0x10)    / dout p1.2/ ADS7843控制字  #define   AIN_X              0xD4#define   AIN_Y          

7、60;   0x94/ ADS7846控制字/#define   AIN_X              0xD0  /#define   AIN_Y              0x90 /#define   DELAY_200NS 

8、0; 200           / 操作時(shí)序控制宏(即延時(shí)控制值)#define   DELAY_200NS   400           / 操作時(shí)序控制宏(即延時(shí)控制值)#define  PEN_DOWN   1    &

9、#160;      / 筆按下#define  PEN_UP    2           / 筆抬起#define  PEN_FLEETING  4           / 筆拖拽#define  

10、;MAX_TS_BUF   16           / 最大緩沖區(qū)數(shù)#define  BUF_HEAD   (TsDev.bufTsDev.head)      / 取隊(duì)列頭值#define  BUF_TAIL   (TsDev.bufTsDev.tail)   &#

11、160;  / 取隊(duì)列尾值#define  INCBUF(x, mod)  (+(x) & (mod)-1)      / 位移加一#define  TS_TIMER_DELAY  (HZ/28)          / 定時(shí)時(shí)長(zhǎng)為36ms/#define  TS_TIMER_DELAY  (HZ/15

12、)#define  TS_TIMER_DELAY1  (HZ/10)          / 定時(shí)時(shí)長(zhǎng)為100ms/*C源代碼*/#include <linux/config.h>#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/types.h>#include <linux/kernel.h> &

13、#160;     / printk#include <linux/fs.h>        / file結(jié)構(gòu)#include <linux/init.h>#include <linux/sched.h>#include <linux/delay.h>#include <linux/string.h>#include <linux/poll.h>#include <linux/interr

14、upt.h>#include <linux/devfs_fs_kernel.h>#include <linux/timer.h>#include <asm/hardware.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/ioctl.h>#include "hi_gpio.h"#include "touch_screen.h"#define _CA

15、LIBRATE_  1       / 使用校準(zhǔn)參數(shù),否則使用固定的校準(zhǔn)值/ 以下為觸摸屏較正用#define SCREEN_WIDTH 800#define SCREEN_HEIGHT 460#define NR_EQUATIONS 6#define LSHIFT(x)       (x)<<10)#define RSHIFT(x)      

16、 (x)>>12)static int VarsNR_EQUATIONS*4;static int CalibrateOk = FALSE;       / 是否校準(zhǔn)過(guò)#define Vars1 Vars#define Vars2 (Vars + NR_EQUATIONS)#define Vars3 (Vars + NR_EQUATIONS * 2)#define Vars4 (Vars + NR_EQUATIONS * 3)/ 觸摸屏設(shè)備結(jié)構(gòu)體typedef struct 

17、0;uint32    penStatus; TS_RET    bufMAX_TS_BUF; uint32    head, tail; wait_queue_head_t wq; spinlock_t   lock;TS_DEV;static TS_DEV TsDev;static  struct  timer_list ts_timer; &

18、#160;  / 定義定時(shí)器變量static uint32 touch_screen_major = 0;    / 觸摸屏設(shè)備號(hào)static  uint8   Ready = 1;/* 名稱:DelayNo()* 功能:短軟件延時(shí)。* 入口參數(shù):i 延時(shí)參數(shù),值越大,延時(shí)越久* 出口參數(shù):無(wú)*/void  DelayNo(uint32 i)   for(; i>0; i-);/* 名稱:TestDelayNo()* 功能:測(cè)試短軟件延時(shí),以便于產(chǎn)生

19、正確的時(shí)序。* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)*/void  TestDelayNo(void)    while(1)            ADS7843_DCLKS();        DelayNo(DELAY_200NS);        ADS7843_DCLKC();    &

20、#160;   DelayNo(DELAY_200NS);    /* 名稱:ADS7843_IOInit()* 功能:初始化ADS7843的控制I/O,CS=1,DCLK=0,DIN=0。* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)*/void  ADS7843_IOInit(void)    ADS7843_CSS();          / CS = 1    ADS7843_DCLKC();

21、           / DCLK = 0    ADS7843_DINC();         / DIN = 0    DelayNo(DELAY_200NS);/* 名稱:ADS7843_IRQR()* 功能:ADS7843的PENIRQ引腳測(cè)量,返回當(dāng)前此引腳的電平值。* 入口參數(shù):無(wú)* 出口參數(shù):返回為0表示PENIRQ為低電平狀態(tài),否則

22、為高電平。*/uint8  ADS7843_IRQR(void) uint8   dat3; uint8 val; DelayNo(1); val = readw(GPIO_1_PORT_ADDR + 0x80);    if(val) dat0 = 1;      else dat0 = 0; /DelayNo(1); val = readw(GPIO_1_PORT_ADDR + 0x80);  

23、;  if(val) dat1 = 1;      else dat1 = 0; /DelayNo(1); val = readw(GPIO_1_PORT_ADDR + 0x80);    if(val) dat2 = 1;      else dat2 = 0; /DelayNo(1);    if(dat0 + dat1 + dat2) > 1) return(1); 

24、0;    else  return(0); /* 名稱:ADS7843_WriteRead()* 功能:對(duì)ADS7843進(jìn)行讀寫操作。操作按照ADS7843的規(guī)定,*  24Clocks,先寫8位控制數(shù)據(jù),然后讀取12位的轉(zhuǎn)換結(jié)果。* 入口參數(shù):data  控制數(shù)據(jù)* 出口參數(shù):返回值為讀出的數(shù)據(jù)*/ void  ADS7843_WriteRead(uint8 data, uint16 *ret)   uint8   i;   

25、60;uint16  ret_dat;  data = data | 0x80;     / 設(shè)置S位 ADS7843_IOInit(); ADS7843_CSC();      / CS = 0 for(i=0; i<8; i+)     if( (data&0x80) != 0 )      ADS7843_DINS()

26、;    / DIN = 1       else       ADS7843_DINC();    / DIN = 0    DelayNo(DELAY_200NS);  ADS7843_DCLKS();    / DCLK = 1  DelayNo(DELAY_200NS);

27、  ADS7843_DCLKC();    / DCLK = 0    data = data<<1;  ADS7843_DINC();      / DIN = 0 DelayNo(DELAY_200NS * 3); ADS7843_DCLKS();     / DCLK = 1 DelayNo(DELAY_200NS); 

28、ADS7843_DCLKC();        / DCLK = 0 ret_dat = 0; for(i=0; i<12; i+)     ret_dat = ret_dat<<1;          DelayNo(DELAY_200NS);    ADS7843_DCLKS();    / DC

29、LK = 1    if( ADS7843_DOUTR() != 0 )      ret_dat = ret_dat | 1;         DelayNo(DELAY_200NS);  ADS7843_DCLKC();       / DCLK = 0    if(i = 6)     

30、60;DelayNo(DELAY_200NS * 2);     for(i=0; i<3; i+)     DelayNo(DELAY_200NS);    ADS7843_DCLKS();    / DCLK = 1    DelayNo(DELAY_200NS);  ADS7843_DCLKC();    / DCLK = 0 

31、0;      DelayNo(DELAY_200NS); ADS7843_CSS();      / CS = 1 *ret = ret_dat;/* 名稱: DoGaussianElimination* 功能:*  * 入口參數(shù):* 出口參數(shù):*/ static uint8 DoGaussianElimination(int* x, const TS_POINT* src_pts, const TS_POINT* dst_pts) 

32、   int x12, x23, y12, y23, nx12, nx23, ny12, ny23;    int numerator, denominator1, denominator2;    x12 = (src_pts0.x - src_pts1.x);    x23 = (src_pts1.x - src_pts2.x);    y12 = (src_pts0.y - src_pts1.y);    y23 = (

33、src_pts1.y - src_pts2.y);    nx12 = (dst_pts0.x - dst_pts1.x);    nx23 = (dst_pts1.x - dst_pts2.x);    ny12 = (dst_pts0.y - dst_pts1.y);    ny23 = (dst_pts1.y - dst_pts2.y);    denominator1 = x12*y23 - x23*y12;  

34、60; if (denominator1 = 0)            return FALSE;        denominator2 = y12*x23 - y23*x12;    if (denominator2 = 0)            return FALSE;  &#

35、160;     numerator = nx12*y23 - nx23*y12;    x 0 = LSHIFT (numerator) / denominator1;    numerator = nx12*x23 - nx23*x12;    x 1 = LSHIFT (numerator) / denominator2;    x 2 = LSHIFT (dst_pts 0.x) - x 0 * src_pts 0.x - x 1 * s

36、rc_pts 0.y;        numerator = ny12*y23 - ny23*y12;    x 3 = LSHIFT (numerator) / denominator1;    numerator = ny12*x23 - ny23*x12;    x 4 = LSHIFT (numerator) / denominator2;    x 5 = LSHIFT (dst_pts 0.y) - x

37、3 * src_pts 0.x - x 4 * src_pts 0.y;    return TRUE;/* 名稱: SetMouseCalibrationParameters* 功能:*  * 入口參數(shù):* 出口參數(shù):*/ static uint8 SetMouseCalibrationParameters(const TS_POINT* src_pts, const TS_POINT* dst_pts)    TS_POINT my_src_pts 3;    TS_PO

38、INT my_dst_pts 3;    my_src_pts0 = src_pts0;    my_src_pts1 = src_pts1;    my_src_pts2 = src_pts4;    my_dst_pts0 = dst_pts0;    my_dst_pts1 = dst_pts1;    my_dst_pts2 = dst_pts4;    if (!DoGauss

39、ianElimination(Vars1, my_src_pts, my_dst_pts)            return FALSE;        my_src_pts0 = src_pts1;    my_src_pts1 = src_pts2;    my_src_pts2 = src_pts4;    my_dst_pts0 = ds

40、t_pts1;    my_dst_pts1 = dst_pts2;    my_dst_pts2 = dst_pts4;    if (!DoGaussianElimination(Vars2, my_src_pts, my_dst_pts)            return FALSE;        my_src_pts0 = src_pt

41、s2;    my_src_pts1 = src_pts3;    my_src_pts2 = src_pts4;    my_dst_pts0 = dst_pts2;    my_dst_pts1 = dst_pts3;    my_dst_pts2 = dst_pts4;    if (!DoGaussianElimination(Vars3, my_src_pts, my_dst_pts)  

42、;          return FALSE;        my_src_pts0 = src_pts0;    my_src_pts1 = src_pts3;    my_src_pts2 = src_pts4;    my_dst_pts0 = dst_pts0;    my_dst_pts1 = dst_pts3; &

43、#160;  my_dst_pts2 = dst_pts4;    if (!DoGaussianElimination(Vars4, my_src_pts, my_dst_pts)            return FALSE;     #if 0  printf("Vars:"); int i; for (i=0; i<4*NR_EQUATION

44、S; i+)   if (i>0 && !(i%4)   printf("n");  printf("%dt", Varsi);    printf("n");#endif    return TRUE;/* 名稱: DoMouseCalibrate* 功能: 校準(zhǔn)*  * 入口參數(shù):* 出口參數(shù):*/ int32 DoMou

45、seCalibrate(uint16 * x0, uint16 * y0) #ifdef _CALIBRATE_  / 使用校準(zhǔn)參數(shù),否則使用固定的校準(zhǔn)值    int x = *x0; int y = *y0;    int x1, y1, x2, y2, x3, y3, x4, y4;  printk("src: x:%4d  y:%4dn", x, y);    x1 = Vars10 * x + Vars11

46、 * y + Vars12;    y1 = Vars13 * x + Vars14 * y + Vars15;    x2 = Vars20 * x + Vars21 * y + Vars22;    y2 = Vars23 * x + Vars24 * y + Vars25;    x3 = Vars30 * x + Vars31 * y + Vars32;    y3 = Vars33 * x + Vars34 * y + Vars35;&

47、#160;   x4 = Vars40 * x + Vars41 * y + Vars42;    y4 = Vars43 * x + Vars44 * y + Vars45; x = RSHIFT(x1 + x2 + x3 + x4); y = RSHIFT(y1 + y2 + y3 + y4);  if (x < 0)   x = 0;  else if (x > SCREEN_WIDTH)   x = SCR

48、EEN_WIDTH;  if (y < 0)   y = 0;  else if (y > SCREEN_HEIGHT)   y = SCREEN_HEIGHT;     *x0 = x; *y0 = y; printk("des: x:%4d  y:%4dn", x, y);#else #define TOUCH_LEFT   (709) /1

49、00 #define TOUCH_TOP   (1093) /400 #define TOUCH_RIGHT   (3369) /100  #define TOUCH_BOTTOM  (3215) /700 int32 ScaleX = (TOUCH_RIGHT - TOUCH_LEFT) * 10 / 600; /10倍 int32 ScaleY = (TOUCH_BOTTOM - TOUCH_TOP) * 10

50、/ 300; /10倍 int32 x, y;  x = *x0; y = *y0;    x = (x-TOUCH_LEFT)*10 / ScaleX + 100; y = (y-TOUCH_TOP)*10 / ScaleY + 100; if (x<0)  x = 0;  if (x>SCREEN_WIDTH)  x = SCREEN_WIDTH;  if (y<0)  y

51、= 0;  if (y>SCREEN_HEIGHT)  y = SCREEN_HEIGHT;  *x0 = x; *y0 = y; printk("*x:%dt y%dn", x, y);#endif return TRUE;/* 名    稱:get_lcd_xy* 功    能:讀取觸摸屏上觸摸點(diǎn)的坐標(biāo)。*         &#

52、160; 程序會(huì)一直等待,直到有觸摸輸入。* 入口參數(shù):x       用于保存觸摸點(diǎn)x坐標(biāo)(LCD)的變量指針*           y       用于保存觸摸點(diǎn)y坐標(biāo)(LCD)的變量指針* 出口參數(shù):無(wú)* 說(shuō)    明:先通測(cè)量y軸的觸摸輸入,判斷是否有觸摸動(dòng)作。如果有,則進(jìn)行數(shù)據(jù)采集,*   并進(jìn)行去極值平均濾

53、波處理。最后還要判斷觸摸輸入是否合法,只有*           當(dāng)觸摸輸入合法時(shí)才返回。*/int32  get_lcd_xy(uint16 *vx, uint16 *vy)    static  uint8 i, temp; static  uint16  vx_dat = 0;  static  uint16 vy_dat = 0; static  u

54、int16 x_max_data = 0; static  uint16 x_min_data = 0; static  uint16 y_max_data = 0; static  uint16 y_min_data = 0; static uint32 x_sum = 0; static uint32 y_sum = 0; / 屏校準(zhǔn)后不讀取拖動(dòng)狀態(tài)的數(shù)據(jù),只有按下和抬起有發(fā)送給GUI  if (TsD

55、ev.penStatus = PEN_FLEETING) && (CalibrateOk = TRUE)   return -1;    while(1)               / 進(jìn)行數(shù)據(jù)采集        ADS7843_WriteRead(AIN_X, &vx_dat);  x_ma

56、x_data = vx_dat;  x_min_data = vx_dat;  x_sum = vx_dat;          ADS7843_WriteRead(AIN_Y, &vy_dat);  y_max_data = vy_dat;  y_min_data = vy_dat;  y_sum = vy_dat;    for (i = 1; i <

57、; 21; i+)     udelay(100);   temp = ADS7843_IRQR();   if (temp != 0)       break;      ADS7843_WriteRead(AIN_X, &vx_dat);   if (vx_dat > x_max_data) 

58、0;     x_max_data = vx_dat;      if (vx_dat < x_min_data)       x_min_data = vx_dat;      x_sum += vx_dat;      ADS7843_WriteRead(AIN_Y, &vy_da

59、t);   if (vy_dat > y_max_data)       y_max_data = vy_dat;      if (vy_dat < y_min_data)       y_min_data = vy_dat;      y_sum += vy_dat;  &

60、#160;#if 1  / 去極值求平均值  /*  if (x_max_data - x_min_data) > 200)     return -1;    if (y_max_data - y_min_data) > 200)     return -1;    */  if (i < 3)  

61、   return -1;    *vx = (x_sum - x_max_data - x_min_data) / (i-2);    *vy = 4096 - (y_sum - y_max_data - y_min_data) / (i-2);  /printk("1.x:%d  y:%d   i = %dn", *vx, *vy, i);  printk("1.x:%d  y:%d

62、n", *vx, *vy); #else  / 取極值求平均值  *vx = (x_max_data + x_min_data) / 2;  *vy = 4096 - (y_max_data + y_min_data) / 2;  printk("2.x:%d  y:%dn", *vx, *vy); #endif #ifdef _CALIBRATE_       / 使用校準(zhǔn)參

63、數(shù)校準(zhǔn),否則使用固定參數(shù)校準(zhǔn)  if (CalibrateOk = TRUE)           DoMouseCalibrate(vx, vy);   / 觸摸屏校準(zhǔn)      #else  DoMouseCalibrate(vx, vy); #endif         return 0;&#

64、160; /*  Function:  ts_put_value  Description:  將采樣到的數(shù)據(jù)填充到隊(duì)列中并喚醒進(jìn)程來(lái)讀取  Input:  1.   x 橫坐標(biāo) 2.   y 縱坐標(biāo)  Output:  無(wú)  Return:  無(wú)  Others:*/static void ts_put_value(uint16 x, uint16 y) BUF_H

65、EAD.x = x; BUF_HEAD.y = y; BUF_HEAD.pressure = TsDev.penStatus; TsDev.head = INCBUF(TsDev.head, MAX_TS_BUF); Ready = 1; wake_up_interruptible(&(TsDev.wq);/*  Function:  ts_get_value  Description:  從隊(duì)列中讀取采樣到的數(shù)據(jù)  Input:   無(wú)  Out

66、put: 1.   采樣到的值  Return:  成功-采樣到值的字節(jié)數(shù),失敗= -1  Others:*/static uint32 ts_get_value(TS_RET *ts_ret) /printk("touchscreenko ts_get_value_1n"); if (TsDev.head != TsDev.tail)   ts_ret->x = BUF_TAIL.x;  ts_ret->y =

67、BUF_TAIL.y;  ts_ret->pressure = BUF_TAIL.pressure;  TsDev.tail = INCBUF(TsDev.tail, MAX_TS_BUF);  /printk("touchscreenko ts_get_value_2n");    return sizeof(TS_RET);  else      Ready = 0;  ret

68、urn -1; /*  Function:  gpio_init  Description:  GPIO初始化  Input:   無(wú)  Output:  無(wú)  Return:  無(wú)  Others:*/void gpio_init(void) int32 tmp;  / 設(shè)置GPIO1方向 gpio_dirgetbyte(GPIO_1_PORT, &tmp); printk(&

69、quot;gpio_init-:0x%xn",GPIO_1_PORT);   tmp |= 0x98;         / 設(shè)置gpio1的3,4,7為輸出 tmp &= 0xDB;         / 設(shè)置gpio1的2,5為輸入 gpio_dirsetbyte(GPIO_1_PORT, tmp); / 設(shè)置GPIO1中的5為中斷口

70、60;gpio_interruptset_byte(        GPIO_1_PORT,        0x20,0,0,1        / SENSE_BOTH,        / SENSE_LEVEL,     

71、60;  / EVENT_FALLING_EDGE       ); / 屏蔽GPIO1.5中斷 tmp = 0x20; gpio_interruptdisable_byte(GPIO_1_PORT, tmp);  / 清除GPIO1.5中斷標(biāo)志 gpio_interruptclear_byte(GPIO_1_PORT,tmp); / 使能GPIO1.5中斷 gpio_interruptenable_byte(GPIO_1_P

72、ORT,tmp);/*  Function:  ts_interrupt  Description:  觸摸屏中斷處理  Input:   無(wú)  Output:  無(wú)  Return:  無(wú)  Others:*/static irqreturn_t  ts_interrupt(int32 irq, void *dev_id, struct pt_regs *reg)  int32 handled = 0; uint8

73、 current_irq; int32 tmp;  printk(KERN_NOTICE "ENTER INTE"); tmp = 0x20;    gpio_interruptdisable_byte(GPIO_1_PORT, tmp); / 查詢?cè)摴苣_中斷是否匹配上    current_irq = readw(GPIO_1_PORT_ADDR + GPIO_RIS);    current_irq = current_irq &a

74、mp; tmp; / 讀取中斷管腳上的電平 tmp = ADS7843_IRQR(); if (current_irq = 0 | tmp != 0)    / 中斷沒(méi)匹配上或中斷管腳上的電平不為低則不處理   tmp = 0x20;  gpio_interruptclear_byte(GPIO_1_PORT, tmp);  gpio_interruptenable_byte(GPIO_1_PORT, tmp);  else 

75、  /printk("pen_downn");  TsDev.penStatus = PEN_DOWN;     / 筆狀態(tài)置為按下  ts_timer.expires = jiffies + TS_TIMER_DELAY;  add_timer(&ts_timer);      / 啟動(dòng)定時(shí)器  /printk("ts_interruptn&quo

76、t;); handled = 1;    return IRQ_RETVAL(handled);/*  Function:  ts_timer_handler  Description:  定時(shí)器處理  Input:   無(wú)  Output:  無(wú)  Return:  無(wú)  Others:*/static void ts_timer_handler(unsigned long data) int3

77、2 temp; static uint16 x = 0; static uint16 y = 0; / 讀取中斷管腳上的電平 temp = ADS7843_IRQR(); if (temp = 0)         / 去抖處理   /printk("PEN_FLEETINGn");  temp = get_lcd_xy(&x, &y);   

78、;  / 讀取觸摸屏的值  if (temp = 0)     ts_put_value(x, y);      / 把筆狀態(tài)與觸摸屏的值加入到隊(duì)列中   TsDev.penStatus = PEN_FLEETING;   / 下一個(gè)狀態(tài)改為拖拽      ts_timer.expires = jiffies + TS_TIME

79、R_DELAY1;  add_timer(&ts_timer);  else if (TsDev.penStatus != PEN_UP)   del_timer(&ts_timer);  if (TsDev.penStatus = PEN_FLEETING)     TsDev.penStatus = PEN_UP;   ts_put_value(x, y);      / 把抬筆狀態(tài)加入到隊(duì)列中    TsDev.penStatus = PEN_UP;  temp = 0x20;  gpio_interruptclear_byte(GPIO_1_PORT, temp);  gpio_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論