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

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

?? ps2.lst

?? 在cypress晶片上實驗讀取ps2 keyboard按鍵後顯示在lcd上,同時利用I2C寫入EEPROM
?? LST
字號:
     1: #include        <pic.h>

     2: #include        "..\delay.h"

     3: #include        "i2c.h"

     4: 

     5: /*

     6:  *      I2C functions for HI-TECH PIC C - master mode only

     7:  */

     8: 

     9: /*

    10:  *      TIMING - see Philips document: THE I2C-BUS SPECIFICATION

    11:  */

    12: 

    13: 

    14: /*

    15:  *      Send stop condition

    16:  *        - data low-high while clock high

    17:  */

    18: 

    19: void

    20: i2c_Stop(void)

    21: {

    22:         /* don't assume SCL is high on entry */

    23: 

    24:         SDA_LOW();                                      /* ensure data is low first */

    25:         SCL_HIGH();

    26:         

    27:         DelayUs(I2C_TM_DATA_SU);

    28:         SCL_DIR = I2C_INPUT;            /* float clock high */

    29:         DelayUs(I2C_TM_STOP_SU);

    30:         SDA_HIGH();                                     /* the low->high data transistion */

    31:         DelayUs(I2C_TM_BUS_FREE);       /* bus free time before next start */

    32:         SDA_DIR = I2C_INPUT;            /* float data high */

    33: 

    34:         return;

    35: }

    36: 

    37: /*

    38:  *      Send (re)start condition

    39:  *        - ensure data is high then issue a start condition

    40:  *        - see also i2c_Start() macro

    41:  */

    42: 

    43: void

    44: i2c_Restart(void)

    45: {

    46:         SCL_LOW();                                      /* ensure clock is low */

    47:         SDA_HIGH();                                     /* ensure data is high */

    48: 

    49:         DelayUs(I2C_TM_DATA_SU);

    50: 

    51:         SCL_DIR = I2C_INPUT;            /* clock pulse high */

    52:         DelayUs(I2C_TM_SCL_HIGH);

    53: 

    54:         SDA_LOW();                                      /* the high->low transition */

    55:         DelayUs(I2C_TM_START_HD);

    56:         return;

    57: }

    58: 

    59: /*

    60:  *      Send a byte to the slave

    61:  *        - returns true on error

    62:  */

    63: unsigned char

    64: i2c_SendByte(unsigned char byte)

    65: {

    66:         signed char i;

    67: 

    68:         for(i=7; i>=0; i--)

    69:         {

    70:                 SCL_LOW();                                      /* drive clock low */

    71:                 

    72:                 /* data hold time = 0, send data now */

    73:         SDA_DIR = ((byte>>i)&0x01);

    74:         if ((byte>>i)&0x01) {           /* bit to send */

    75:                         SDA_HIGH();

    76:         }else {

    77:                         SDA_LOW();

    78:         }

    79:                 DelayUs(I2C_TM_DATA_SU);

    80:                 SCL_DIR = I2C_INPUT;            /* float clock high */

    81: 

    82:                 if(i2c_WaitForSCL())            /* wait for clock release */

    83:                         return TRUE;                    /* bus error */

    84: 

    85:                 DelayUs(I2C_TM_SCL_HIGH);       /* clock high time */

    86:         }

    87:         

    88:         return FALSE;

    89: }

    90: 

    91: /*

    92:  *      send an address and data direction to the slave

    93:  *        - 7-bit address (lsb ignored)

    94:  *        - direction (FALSE = write )

    95:  */

    96: unsigned char

    97: i2c_SendAddress(unsigned char address, unsigned char rw)

    98: {

    99:         return i2c_SendByte(address | (rw?1:0));

   100: }

   101: 

   102: /*

   103:  *      Check for an acknowledge

   104:  *        - returns ack or ~ack, or ERROR if a bus error

   105:  */

   106: signed char

   107: i2c_ReadAcknowledge(void)

   108: {

   109:         unsigned char ack;

   110: 

   111:         SCL_LOW();                                              /* make clock is low */

   112:         SDA_DIR = I2C_INPUT;                    /* disable data line - listen for ack */

   113:         DelayUs(I2C_TM_SCL_TO_DATA);    /* SCL low to data out valid */

   114:         SCL_DIR = I2C_INPUT;                    /* float clock high */

   115:         DelayUs(I2C_TM_DATA_SU);

   116:         ack = SDA;                                              /* read the acknowledge */

   117: 

   118:         /* wait for slave to release clock line after processing byte */

   119:         if(i2c_WaitForSCL())

   120:                 return I2C_ERROR;

   121:         return ack;

   122: }

   123: 

   124: /*

   125:  *      Read a byte from the slave

   126:  *        - returns the byte, or I2C_ERROR if a bus error

   127:  */

   128: int

   129: i2c_ReadByte(void)

   130: {

   131:         unsigned char i;

   132:         unsigned char byte = 0;

   133: 

   134:         for(i=0; i<8; i++)

   135:         {

   136:                 SCL_LOW();                                      /* drive clock low */

   137:                 DelayUs(I2C_TM_SCL_LOW);        /* min clock low  period */

   138:                 SDA_DIR = I2C_INPUT;            /* release data line */

   139: 

   140:                 SCL_DIR = I2C_INPUT;            /* float clock high */

   141:                 if(i2c_WaitForSCL())

   142:                         return I2C_ERROR;

   143:                 DelayUs(I2C_TM_SCL_HIGH);

   144:                 byte = byte << 1;               /* read the next bit */

   145:                 byte |= SDA;

   146:         }

   147:         return (int)byte;

   148: }

   149: 

   150: /*

   151:  *      Send an (~)acknowledge to the slave

   152:  *        - status of I2C_LAST implies this is the last byte to be sent

   153:  */

   154: void

   155: i2c_SendAcknowledge(unsigned char status)

   156: {

   157:         SCL_LOW();

   158:         if ( status & 0x01) {

   159:                 SDA_LOW();                              /* drive line low -> more to come */

   160:         }else { 

   161:                 SDA_HIGH();

   162:         }

   163:         DelayUs(I2C_TM_DATA_SU);

   164:         SCL_DIR = I2C_INPUT;            /* float clock high */

   165:         DelayUs(I2C_TM_SCL_HIGH);

   166:         return;

   167: }

   168: 

   169: /*

   170:  *      Send a byte to the slave and acknowledges the transfer

   171:  *        - returns I2C_ERROR, ack or ~ack

   172:  */

   173: signed char

   174: i2c_PutByte(unsigned char data)

   175: {

   176:         if(i2c_SendByte(data))

   177:                 return I2C_ERROR;

   178:         return i2c_ReadAcknowledge();   /* returns ack, ~ack */

   179: }

   180: 

   181: /*

   182:  *      Get a byte from the slave and acknowledges the transfer

   183:  *        - returns true on I2C_ERROR or byte

   184:  */

   185: int

   186: i2c_GetByte(unsigned char more)

   187: {

   188:         int byte;

   189: 

   190:         if((byte = i2c_ReadByte()) == I2C_ERROR)

   191:                 return I2C_ERROR;

   192: 

   193:         i2c_SendAcknowledge(more);

   194: 

   195:         return byte;

   196: }

   197: 

   198: /*

   199:  *      Send an array of bytes to the slave and acknowledges the transfer

   200:  *        - returns number of bytes not successfully transmitted

   201:  */

   202: int

   203: i2c_PutString(const unsigned char *str, unsigned char length)

   204: {

   205:         signed char error;

   206: 

   207:         while(length)

   208:         {

   209:                 if((error = i2c_PutByte(*str)) == I2C_ERROR)

   210:                         return -(int)length;                                    /* bus error */

   211:                 else

   212:                         if(error)

   213:                                 return (int)length;                                     /* non acknowledge */

   214:                 str++;

   215:                 length--;

   216:         }

   217: 

   218:         return FALSE;                                                                   /* everything OK */

   219: }

   220: 

   221: /*

   222:  *      Reads number bytes from the slave, stores them at str and acknowledges the transfer

   223:  *        - returns number of bytes not successfully read in

   224:  */

   225: unsigned char

   226: i2c_GetString(unsigned char *str, unsigned char number)

   227: {

   228:         int byte;

   229: 

   230:         while(number)

   231:         {

   232:                 if((byte = i2c_GetByte(number-1)) == I2C_ERROR)

   233:                         return number;                                                          /* bus error */

   234:                 else

   235:                         *str = (unsigned char)byte;

   236:                 str++;

   237:                 number--;

   238:         }

   239: 

   240:         return FALSE;                                                                           /* everything OK */

   241: }

   242: 

   243: /*

   244:  *      Opens communication with a device at address. mode

   245:  *      indicates I2C_READ or I2C_WRITE.

   246:  *        - returns TRUE if address is not acknowledged

   247:  */

   248: unsigned char

   249: i2c_Open(unsigned char address, unsigned char mode)

   250: {

   251:         i2c_Start();

   252:         i2c_SendAddress(address, mode);

   253:         if(i2c_ReadAcknowledge()) 

   254:                 return TRUE;

   255: 

   256:         return FALSE;

   257: }

   258: 

   259: /*

   260:  *      wait for the clock line to be released by slow slaves

   261:  *        - returns TRUE if SCL was not released after the

   262:  *          time out period.

   263:  *        - returns FALSE if and when SCL released

   264:  */

   265: unsigned char

   266: i2c_WaitForSCL(void)

   267: {

   268:         /* SCL_DIR should be input here */

   269:         if(!SCL)

   270:         {

   271:                 DelayUs(I2C_TM_SCL_TMO);

   272:                 /* if the clock is still low -> bus error */

   273:                 if(!SCL)

   274:                         return TRUE;

   275:         }

   276:         return FALSE;

   277: }

   278: 

   279: void

   280: i2c_Free()

   281: {

   282:         unsigned char ucI;

   283: 

   284:         SDA_DIR=I2C_INPUT;

   285:         for(ucI=0;ucI!=9;ucI++)

   286:         {

   287:                 SCL_HIGH();

   288:                 DelayUs(5);

   289:                 SCL_LOW();

   290:                 DelayUs(5);

   291:         }

   292: }

   293: 

   294: unsigned char i2c_read(unsigned char ucAdr)

   295: {

   296:         unsigned char ucDat;

   297: 

   298:         if (i2c_ReadFrom(ucAdr)==0)

   299:         {

   300:                 ucDat=i2c_GetByte(I2C_MORE);

   301:                 i2c_Stop();

   302: 

   303:         }

   304: 

   305:         return(ucDat);

   306: }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女网站在线免费欧美精品| 色婷婷综合久久久| 国产精品免费免费| 99久久伊人网影院| 亚洲一区二区三区不卡国产欧美| 欧美日韩精品一区二区天天拍小说 | 精品国产人成亚洲区| 国产在线精品一区在线观看麻豆| 久久精品一区二区三区不卡牛牛 | 午夜电影一区二区| 欧美一级夜夜爽| 国产精品 日产精品 欧美精品| 99国产精品久久久久久久久久久 | 一本大道久久a久久精二百| 亚洲综合在线电影| 日韩一区二区在线播放| 国产激情偷乱视频一区二区三区| 亚洲欧洲国产专区| 欧美精品一级二级三级| 国产乱理伦片在线观看夜一区| 1024精品合集| 欧美一三区三区四区免费在线看| 国产高清精品网站| 亚洲精品自拍动漫在线| 日韩一区二区三区三四区视频在线观看| 国产在线精品国自产拍免费| 综合激情成人伊人| 日韩一级成人av| 国产91清纯白嫩初高中在线观看| 伊人婷婷欧美激情| 六月丁香婷婷久久| 国产精品色眯眯| 欧美美女一区二区在线观看| 国产精品1024| 婷婷激情综合网| 国产精品欧美一级免费| 欧美人与z0zoxxxx视频| 国产福利91精品一区| 性欧美疯狂xxxxbbbb| 国产欧美一区二区精品秋霞影院 | 经典三级在线一区| 亚洲精品乱码久久久久久日本蜜臀| 欧美一级电影网站| 91蜜桃免费观看视频| 久久精品国产第一区二区三区| 亚洲欧美视频在线观看视频| 精品日韩99亚洲| 色久优优欧美色久优优| 国产伦精品一区二区三区免费| 欧美丝袜丝nylons| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 另类人妖一区二区av| 最新国产成人在线观看| 精品av久久707| 欧美日韩在线观看一区二区 | 91免费视频网址| 精品一区二区av| 亚洲国产精品尤物yw在线观看| 久久精品视频免费| 91精品国产黑色紧身裤美女| 91九色最新地址| 国产不卡免费视频| 麻豆极品一区二区三区| 欧美午夜理伦三级在线观看| 国产精品亚洲人在线观看| 午夜精品久久一牛影视| 亚洲视频一区在线观看| 久久久九九九九| 欧美一级免费大片| 欧美性xxxxxxxx| 97成人超碰视| 成人妖精视频yjsp地址| 精品影院一区二区久久久| 天天影视网天天综合色在线播放| 亚洲色图19p| 欧美极品少妇xxxxⅹ高跟鞋| 精品国产一区二区三区av性色| 欧美老肥妇做.爰bbww视频| 一本大道久久a久久精二百| 成年人国产精品| 国产一区二区三区在线观看免费 | 在线不卡一区二区| 色噜噜狠狠色综合中国| 99热这里都是精品| 亚洲视频一区二区免费在线观看| 久久久久久久综合色一本| 日韩精品一区二区三区中文精品 | 欧美视频一二三区| 一本一本大道香蕉久在线精品| 成人18视频日本| 岛国精品在线播放| 国产成人免费视频一区| 国产精品资源网| 国产在线精品一区二区| 国精品**一区二区三区在线蜜桃| 青草av.久久免费一区| 天堂蜜桃91精品| 五月天婷婷综合| 亚洲成人免费av| 亚洲成人在线网站| 亚洲高清视频在线| 亚洲成人av一区| 性久久久久久久久久久久| 亚洲福利一区二区| 午夜欧美电影在线观看| 天天综合天天综合色| 三级欧美在线一区| 91精品国产91综合久久蜜臀| 欧美一区日韩一区| 日韩精品自拍偷拍| 亚洲精品在线免费播放| 久久尤物电影视频在线观看| 久久亚区不卡日本| 国产三级精品三级在线专区| 中文一区二区完整视频在线观看| 国产精品素人一区二区| 最新久久zyz资源站| 亚洲综合视频在线| 亚洲 欧美综合在线网络| 青娱乐精品视频在线| 麻豆精品视频在线| 国产成人aaaa| 91丝袜呻吟高潮美腿白嫩在线观看| 色94色欧美sute亚洲线路一ni | 色菇凉天天综合网| 欧美色综合影院| 51精品国自产在线| 日韩精品中文字幕在线一区| 欧美精品一区二区三| 中文字幕免费一区| 一区二区三区四区不卡在线| 日一区二区三区| 国产日韩高清在线| 中文字幕视频一区| 亚洲成av人片www| 精品一二线国产| proumb性欧美在线观看| 欧美色涩在线第一页| 日韩欧美激情在线| 国产精品视频一区二区三区不卡| 亚洲精品自拍动漫在线| 日韩电影一二三区| 国产美女主播视频一区| 91丝袜美女网| 欧美一区二区三区免费视频| 久久久精品tv| 亚洲精品免费播放| 麻豆91精品91久久久的内涵| 粉嫩aⅴ一区二区三区四区| 色婷婷av一区二区三区软件 | 亚洲精品在线观| 国产精品青草综合久久久久99| 亚洲午夜久久久久久久久电影院| 久久99精品国产麻豆婷婷| av电影天堂一区二区在线 | 国产一区二区三区不卡在线观看 | 日韩精品三区四区| 国产成人免费视频网站高清观看视频| 色综合久久六月婷婷中文字幕| 717成人午夜免费福利电影| 国产亚洲午夜高清国产拍精品| 亚洲精品精品亚洲| 久久99国产精品尤物| 色婷婷久久一区二区三区麻豆| 日韩午夜电影av| 亚洲私人黄色宅男| 美女视频免费一区| 色婷婷亚洲综合| 久久久无码精品亚洲日韩按摩| 亚洲综合一区在线| 国产成人综合在线| 欧美绝品在线观看成人午夜影视 | 国产欧美日产一区| 日韩精品一区第一页| 成年人网站91| 欧美zozozo| 亚洲风情在线资源站| 国产成人综合自拍| 免费观看在线色综合| 91啪九色porn原创视频在线观看| 精品国产一区二区三区不卡 | 欧美高清dvd| 国产精品久久久久久久裸模| 蜜臀av在线播放一区二区三区| 色香蕉成人二区免费| 久久久久久久综合狠狠综合| 午夜欧美在线一二页| 91一区二区三区在线观看| 久久亚洲捆绑美女| 亚洲chinese男男1069| a4yy欧美一区二区三区| 精品美女在线观看| 亚洲va欧美va人人爽| 95精品视频在线| 国产色综合久久| 毛片不卡一区二区| 欧美日韩日日摸| 亚洲乱码国产乱码精品精可以看| 国产美女视频91| 日韩精品最新网址|